v0.51.21 — 3-PR batch (P0 hotfix + auto-compression UI + shell HTML fallback)
Single-commit release rolling up 3 PRs filed since v0.51.20 — including a P0 hotfix from @nesquena for v0.51.20 #1828's wire-protocol regression.
Constituent PRs
- #1843 by @nesquena — P0 hotfix: avoid double-404 response when Kanban bridge already sent error. Fixes
}{JSON concatenation on the wire from v0.51.20 #1828's_kanban_unknown_endpointwrapper double-firing onbad(...)returns. 4 call sites changed identically (GET/POST/PATCH/DELETE). - #1838 by @Michaelyklam — Show auto-compression running state (closes #1832). Three-layer bridge: agent lifecycle status → SSE
compressingevent → existing compression card withphase:'running'. - #1836 by @Michaelyklam — Keep shell route errors HTML (closes #1835). Defense-in-depth
try/excepton the/shell route returnstext/html; charset=utf-8503 instead of bubbling JSON during restart/update races.
In-stage absorb
api/kanban_bridge.py— Documentedhandle_kanban_*three-valued return contract withbool | Nonetype annotations + docstring onhandle_kanban_get(cross-references on the three siblings). After PR #1843 made theFalse-vs-Nonedistinction load-bearing for the caller's_kanban_unknown_endpointdecision, the entry points were declared-> boolwhile actually returningTrue | None | False. Per Opus pre-release verdict; production behavior unchanged.
Tests
- 4805 → 4810 collected (+5)
- 4799 passed, 8 skipped, 1 xfailed, 2 xpassed, 0 failed in 148.5s
- Browser API harness 11/11 endpoints green
- JS syntax check 1/1 modified file green (
node -c static/messages.js) - No file deletions, no merge-conflict markers
Pre-release verification
- All 3 PRs CI-green individually
- File overlap on
api/routes.pybetween #1843 (Kanban routes lines 2629/3429/4607/4621) and #1836 (shell route lines 2496-2535) resolved cleanly via stage-HEAD rebase — disjoint line ranges. - Pre-stamp re-fetch: all 3 PR heads still match local rebases (no mid-sweep force-pushes).
- Opus advisor: SHIP. 1 fix absorbed in-release (kanban_bridge type annotations + docstring contract). 1 deferred to follow-up issue: parametrize PR #1843's regression test across GET/POST/PATCH/DELETE for defense-in-depth (the fix at all 4 call sites is identical, so partial-regression risk is low; the test depth is a separate cleanup).
Closes #1832, #1835. Hotfix for v0.51.20 #1828 wire-protocol regression.