|
| 1 | +# Hestia Voice Gateway Release Checklist — 2026-05 |
| 2 | + |
| 3 | +Status: PRs opened, integration snapshot passing |
| 4 | +Created: 2026-05-06T23:46:54Z |
| 5 | + |
| 6 | +This release coordinates the P0 Hestia voice-first mobile gateway stabilization across the shell, bridge, voice client, backend, and `hestia-mobile` integration repo. |
| 7 | + |
| 8 | +## Component PRs |
| 9 | + |
| 10 | +| Component | Branch | PR | Latest SHA | Status | |
| 11 | +| --- | --- | --- | --- | --- | |
| 12 | +| `hestia-shell` | `feat/hestia-voice-gateway` | [Code4me2/hestia-shell#1](https://github.com/Code4me2/hestia-shell/pull/1) | `44e52aa0` | Open | |
| 13 | +| `hestia-ai-bridge` | `feat/hestia-voice-gateway` | [Code4me2/hestia-ai-bridge#1](https://github.com/Code4me2/hestia-ai-bridge/pull/1) | `986afda` | Open | |
| 14 | +| `unmute-streaming-client` | `feat/hestia-voice-gateway` | [Code4me2/unmute-streaming-client#9](https://github.com/Code4me2/unmute-streaming-client/pull/9) | `9023ebf` | Open | |
| 15 | +| `hestia-mobile` | `main` | N/A | `8364b3c` before this checklist | Landed | |
| 16 | + |
| 17 | +## Known-good integration snapshot |
| 18 | + |
| 19 | +Recorded in [`docs/compatibility-matrix.md`](../compatibility-matrix.md). |
| 20 | + |
| 21 | +| Component | SHA / state | |
| 22 | +| --- | --- | |
| 23 | +| `hestia-mobile` | `8364b3c` | |
| 24 | +| `hestia-shell` | `44e52aa0` | |
| 25 | +| `hestia-ai-bridge` | `986afda` | |
| 26 | +| `unmute-streaming-client` | `9023ebf` | |
| 27 | +| Backend node | `tiny-emerson` | |
| 28 | +| Probe result | `pass` | |
| 29 | + |
| 30 | +Final structured probe command: |
| 31 | + |
| 32 | +```bash |
| 33 | +cd /home/purism/projects/ai-phone-review/hestia-mobile |
| 34 | +python3 scripts/probe-hestia-mobile-json.py --config mobile-stack.json --pretty |
| 35 | +``` |
| 36 | + |
| 37 | +Final checks were all passing: |
| 38 | + |
| 39 | +```text |
| 40 | +ai_socket: pass |
| 41 | +assistant_socket: pass |
| 42 | +bridge: pass |
| 43 | +bridge_service: pass |
| 44 | +orchestrator: pass |
| 45 | +orchestrator_models: pass |
| 46 | +unmute: pass |
| 47 | +unmute_realtime: pass |
| 48 | +voice_service: pass |
| 49 | +overall: pass |
| 50 | +``` |
| 51 | + |
| 52 | +## Acceptance gates |
| 53 | + |
| 54 | +See [`docs/acceptance-gates.md`](../acceptance-gates.md) for canonical definitions. |
| 55 | + |
| 56 | +- [x] Gate A — manifest validity |
| 57 | + - `mobile-stack.json` parsed as JSON. |
| 58 | + - `scripts/validate-mobile-stack.py --config mobile-stack.json` passed. |
| 59 | +- [x] Gate B — local repo drift |
| 60 | + - component branches matched `mobile-stack.json` expectations. |
| 61 | + - worktrees were clean at final status check. |
| 62 | +- [x] Gate C — live health |
| 63 | + - final structured probe passed all live checks. |
| 64 | + - backend `tiny-emerson` was healthy after restarting the orchestrator service. |
| 65 | +- [x] Gate D — shell assistant event bus |
| 66 | + - assistant socket smoke test received normalized assistant events. |
| 67 | +- [x] Gate E — release snapshot |
| 68 | + - passing snapshot recorded in `docs/compatibility-matrix.md`. |
| 69 | + - component PRs opened and linked here. |
| 70 | + |
| 71 | +## Validation already completed |
| 72 | + |
| 73 | +### `hestia-shell` |
| 74 | + |
| 75 | +- Subagent spec review passed. |
| 76 | +- Subagent quality review approved. |
| 77 | +- Assistant event-bus Unix socket smoke test passed. |
| 78 | +- Validated normalized event sequence included: |
| 79 | + - `assistant.connected` |
| 80 | + - `assistant.state=listening` |
| 81 | + - `assistant.transcript.user_delta` |
| 82 | + - `assistant.tool_call` |
| 83 | + - `assistant.state=speaking` |
| 84 | + - call availability false/true frames |
| 85 | + - `assistant.state=idle` |
| 86 | + |
| 87 | +### `hestia-ai-bridge` |
| 88 | + |
| 89 | +- Subagent spec review passed after review fixes. |
| 90 | +- Subagent quality review approved after review fixes. |
| 91 | +- Local service was restarted and verified active. |
| 92 | +- `/health` returned backward-compatible fields plus sanitized nested orchestrator metadata. |
| 93 | +- `orchestrator_online=true` after backend recovery. |
| 94 | + |
| 95 | +### `unmute-streaming-client` |
| 96 | + |
| 97 | +- `python3 -m pytest -q` passed: `12 passed`. |
| 98 | +- Python compile checks passed. |
| 99 | +- Subagent spec review passed after review fixes. |
| 100 | +- Subagent quality review approved after review fixes. |
| 101 | +- Installed user unit verified: |
| 102 | + |
| 103 | +```text |
| 104 | +Restart=on-failure |
| 105 | +RestartPreventExitStatus=78 |
| 106 | +ActiveState=active |
| 107 | +``` |
| 108 | + |
| 109 | +### `hestia-mobile` |
| 110 | + |
| 111 | +- Manifest validation passed. |
| 112 | +- Dry-run probe passed. |
| 113 | +- Python compile passed for probe/validation scripts. |
| 114 | +- Shell syntax check passed for scripts. |
| 115 | +- Drift checker passed after cleanup. |
| 116 | +- Final live structured probe passed all checks. |
| 117 | + |
| 118 | +## Backend recovery note |
| 119 | + |
| 120 | +The first final live probe found the backend orchestrator unavailable: |
| 121 | + |
| 122 | +```text |
| 123 | +agentic-flow-orchestrator.service: failed |
| 124 | +Unmute llm_up=false |
| 125 | +bridge orchestrator_online=false |
| 126 | +``` |
| 127 | + |
| 128 | +Recovery performed on `tiny-emerson`: |
| 129 | + |
| 130 | +```bash |
| 131 | +systemctl --user reset-failed agentic-flow-orchestrator.service |
| 132 | +systemctl --user start agentic-flow-orchestrator.service |
| 133 | +``` |
| 134 | + |
| 135 | +After waiting for readiness: |
| 136 | + |
| 137 | +```text |
| 138 | +agentic-flow-orchestrator.service: active |
| 139 | +Unmute /v1/health: llm_up=true, ok=true |
| 140 | +``` |
| 141 | + |
| 142 | +The local bridge was then started/restarted so its health state reflected the recovered backend. |
| 143 | + |
| 144 | +## Rollback / recovery |
| 145 | + |
| 146 | +### If the shell PR causes UI/input-region issues |
| 147 | + |
| 148 | +1. Revert or roll back `hestia-shell` to the previous known branch/commit. |
| 149 | +2. Restart or reload the shell session as appropriate. |
| 150 | +3. Re-run the assistant event-bus smoke test and live `hestia-mobile` probe. |
| 151 | + |
| 152 | +### If bridge health regresses |
| 153 | + |
| 154 | +Use the runbook: |
| 155 | + |
| 156 | +```text |
| 157 | +docs/runbooks/recover-bridge-orchestrator-offline.md |
| 158 | +``` |
| 159 | + |
| 160 | +Quick checks: |
| 161 | + |
| 162 | +```bash |
| 163 | +systemctl --user status hestia-ai-bridge.service |
| 164 | +curl -fsS http://127.0.0.1:8765/health |
| 165 | +python3 scripts/probe-hestia-mobile-json.py --config mobile-stack.json --pretty |
| 166 | +``` |
| 167 | + |
| 168 | +### If voice service reconnect behavior regresses |
| 169 | + |
| 170 | +Use the runbook: |
| 171 | + |
| 172 | +```text |
| 173 | +docs/runbooks/recover-phone-voice-service.md |
| 174 | +``` |
| 175 | + |
| 176 | +Quick checks: |
| 177 | + |
| 178 | +```bash |
| 179 | +systemctl --user show hestia-unmute-voice.service -p ActiveState -p Restart -p RestartPreventExitStatus |
| 180 | +journalctl --user -u hestia-unmute-voice.service -n 100 --no-pager |
| 181 | +``` |
| 182 | + |
| 183 | +### If backend LLM readiness regresses |
| 184 | + |
| 185 | +Use the runbook: |
| 186 | + |
| 187 | +```text |
| 188 | +docs/runbooks/recover-unmute-llm-down.md |
| 189 | +``` |
| 190 | + |
| 191 | +Quick checks on `tiny-emerson`: |
| 192 | + |
| 193 | +```bash |
| 194 | +systemctl --user status agentic-flow-orchestrator.service |
| 195 | +curl -fsS http://127.0.0.1:8000/health |
| 196 | +curl -fsS http://127.0.0.1/v1/health |
| 197 | +``` |
| 198 | + |
| 199 | +## Manual validation still recommended before user-facing release |
| 200 | + |
| 201 | +The P0 probe and protocol path are passing. Before a user-facing release, run a visual phone validation pass and record notes/screenshots if possible: |
| 202 | + |
| 203 | +- [ ] Orb appears in expected centered position. |
| 204 | +- [ ] Tap/click opens the chat drawer. |
| 205 | +- [ ] Orb state visually changes for idle/listening/thinking/speaking/offline/error. |
| 206 | +- [ ] Transcript preview does not obscure core UI. |
| 207 | +- [ ] Input region matches visible orb bounds. |
| 208 | +- [ ] Phone-call paused state is clear. |
| 209 | +- [ ] Mic streaming and TTS pause during active calls. |
| 210 | + |
| 211 | +Suggested destination for evidence: |
| 212 | + |
| 213 | +```text |
| 214 | +docs/validation/2026-05-hestia-voice-gateway/ |
| 215 | +``` |
| 216 | + |
| 217 | +## Merge checklist |
| 218 | + |
| 219 | +- [ ] Confirm each component PR diff is expected. |
| 220 | +- [ ] Confirm component CI, if present, is green. |
| 221 | +- [ ] Merge `hestia-ai-bridge` PR. |
| 222 | +- [ ] Merge `unmute-streaming-client` PR. |
| 223 | +- [ ] Merge `hestia-shell` PR. |
| 224 | +- [ ] Update `mobile-stack.json` expected branches/SHAs if component branches are merged to `main`. |
| 225 | +- [ ] Re-run the final live structured probe. |
| 226 | +- [ ] Add a post-merge row to `docs/compatibility-matrix.md`. |
| 227 | +- [ ] Decide whether to tag a release in `hestia-mobile`. |
| 228 | + |
| 229 | +## Follow-up P1 work |
| 230 | + |
| 231 | +- Real visual/UI validation on device. |
| 232 | +- End-to-end phone-call suppression hardening. |
| 233 | +- Persistent local probe/history automation. |
| 234 | +- Backend orchestrator durability investigation for previous `status=143` exit. |
| 235 | +- Assistant UX polish: transcript preview, tool status, compact cards, constrained visual verbs. |
| 236 | +- Packaging/image work only after install/runtime flow stabilizes. |
0 commit comments