Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,13 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).

## [Unreleased]

## [fw-v1.3.5] - 2026-10-29

Firmware only (`BrettKinny/StackChan@dotty`, submodule `c074907`). Source-only: the server address is compiled in, so build it yourself with your own `CONFIG_OTA_URL` (SETUP.md §2). Drafted with AI assistance (Claude Opus 5.5) and smoke-tested on a physical StackChan.

### Fixed
- **No reboot when the audio codec fails to open** (#196): one failed I2C read from the speaker amp while it powered up made opening the codec fail, and an `ESP_ERROR_CHECK` rebooted the robot mid-reply. Opening the speaker or microphone now tries three times, 20 ms apart. If all three fail, that audio is dropped and the next attempt to use it retries after 500 ms. While the microphone is off it reads silence, not the last buffer, and volume, gain and close errors are logged instead of rebooting. Bench (2026-10-29): the robot booted, rejoined WiFi, connected with all 15 tools, woke to the wake word and played a full spoken reply. This was one smoke test, not a soak; the I2C error is rare and did not happen during it.

## [server-v0.2.0] - 2026-10-29

`server-v0.2.0-rc.1` promoted to a final release with no server code changes; the full list of changes is under `[server-v0.2.0-rc.1]` below. Pair it with `fw-v1.3.4`. Drafted with AI assistance (Claude Opus 5.5).
Expand Down
8 changes: 4 additions & 4 deletions COMPATIBILITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,14 @@ For protocol wire formats see `docs/protocols.md`.

| Component | Current Version | Protocol / Interface | Breaking Change Policy |
|---|---|---|---|
| StackChan firmware (`BrettKinny/StackChan@dotty`) | `fw-v1.3.4` release; submodule `5b361e5` | Xiaozhi WebSocket protocol, MCP over WS (JSON-RPC 2.0), StateManager event contract | Build the pinned submodule; do not substitute the official upstream tree or OTA-update without coordinated verification |
| StackChan firmware (`BrettKinny/StackChan@dotty`) | `fw-v1.3.5` release; submodule `c074907` | Xiaozhi WebSocket protocol, MCP over WS (JSON-RPC 2.0), StateManager event contract | Build the pinned submodule; do not substitute the official upstream tree or OTA-update without coordinated verification |
| xiaozhi-esp32-server (local build) | `xiaozhi-esp32-server-piper:local` | Custom LLM provider API, `.config.yaml` schema, Xiaozhi WS server | Rebuild image only after checking upstream changelog for provider API or config schema changes |
| dotty-pi (pi agent) | `dotty-pi:0.1.0` | pi RPC (JSONL over stdio), the seven `dotty-pi-ext` voice tools | Pin the image tag; pi-version or model changes need end-to-end cutover testing |
| dotty-behaviour | `dotty-behaviour:0.1.0` | HTTP API (`/api/perception/*`, `/api/vision/*`, `/api/audio/*`, `/health`) | Endpoint signatures stable; perception event-schema changes require firmware + xiaozhi review |
| bridge.py (dashboard) | `dotty-bridge:0.1.0` image from repo HEAD | `/ui` dashboard, `/admin/*`, `/health` | Dashboard/admin service only post-#36; admin route changes require updating dashboard callers |

The public `fw-v1.3.4` superproject tag (2026-10-28) is the current
coordinated release pointer. It pins firmware submodule `5b361e5` and the
The public `fw-v1.3.5` superproject tag (2026-10-29) is the current
coordinated release pointer. It pins firmware submodule `c074907` and the
matching server-side patches. It is source-only: build it with your own
`CONFIG_OTA_URL` (SETUP.md §2). Draft PRs and a dirty submodule are not a
released compatibility set.
Expand Down Expand Up @@ -117,4 +117,4 @@ versions work with which firmware versions.

---

Last verified against the repository and `fw-v1.3.4` pin: 2026-10-28.
Last verified against the repository and `fw-v1.3.5` pin: 2026-10-29.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ Full policy: [`AI_TRANSPARENCY.md`](./AI_TRANSPARENCY.md).

Behaviour is **one of six states** (`idle / talk / story_time / security / sleep / dance`) plus two independent toggles (`kid_mode`, `smart_mode`), all owned by the firmware StateManager. Voice phrases, camera events and dashboard controls all go through it. Bench checks are tracked in [#38](https://github.com/BrettKinny/dotty-stackchan/issues/38).

> Note: `firmware/` is a release pointer, not the active development checkout. The pinned build (`fw-v1.3.4`, `5b361e5`) includes the StateManager, but later fixes may only be on the active fork, so check your actual revision. See "Firmware iteration" in [`CLAUDE.md`](./CLAUDE.md) and the submodule note in [`docs/modes.md`](./docs/modes.md).
> Note: `firmware/` is a release pointer, not the active development checkout. The pinned build (`fw-v1.3.5`, `c074907`) includes the StateManager, but later fixes may only be on the active fork, so check your actual revision. See "Firmware iteration" in [`CLAUDE.md`](./CLAUDE.md) and the submodule note in [`docs/modes.md`](./docs/modes.md).

The 12-pixel LED ring shows the current state at a glance. **Left ring pixels 0-5 are the state arc.** All six show the state colour, matching the dashboard's state buttons:

Expand Down
2 changes: 1 addition & 1 deletion tests/test_docs_onboarding.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ def test_current_docs_do_not_claim_the_firmware_submodule_lacks_state_manager()

def test_compatibility_doc_matches_the_current_public_contract() -> None:
compatibility = (ROOT / "COMPATIBILITY.md").read_text(encoding="utf-8")
assert "`fw-v1.3.4`" in compatibility
assert "`fw-v1.3.5`" in compatibility
assert "the seven `dotty-pi-ext` voice tools" in compatibility
assert "No formal versioning is adopted yet" not in compatibility
assert "scripts/backup.sh" not in compatibility
Loading