Hardening pass
No new surface in this patch — it closes the ways the engine could quietly stall, lie, or break outside a POSIX shell.
Nothing hangs forever. Every subprocess wait is now bounded (#2239), transient classifier contexts are capped (#2256), and retries got precise transient matching with default jitter and logging (#2240). File locks release independently of ContextVar reset (#2235), so a lock no longer outlives the task that took it.
Guards fail closed. is_on_protected_branch now refuses rather than guesses (#2236). The Seed schema closed four validation gaps (#2238) and rejects empty reference-aware contracts (#2226). Constant verification reads every occurrence before declaring a constant verified (#2220). The orchestrator stopped emitting drift measurements it already knew were wrong (#2233).
Windows and non-ASCII paths. Git output in the worktree layer (#2248) and the CI module-size source (#2251) decode as UTF-8; test evidence wrapped by PowerShell is accepted (#2245).
Interactive bridge. /ooo argument completion (#2204) and native system-prompt + tool allow-list delivery (#2203) landed, plus reusable fanout provenance for interviews (#2260).
What's Changed
- test(ci): stabilize runtime-sensitive checks by @Q00 in #2221
- docs(auto): fix broken link to removed operational_task module by @c020627 in #2227
- fix(ci): decode module-size Git source as UTF-8 by @zittenyetten in #2251
- fix(codex): ignore app-managed system skill refreshes by @zittenyetten in #2249
- fix(worktree): decode Git output as UTF-8 by @zittenyetten in #2248
- fix(orchestrator): accept PowerShell-wrapped test evidence by @zittenyetten in #2245
- docs: fix references to deleted ouroboros packages by @Q00 in #2242
- fix(session-signal): make to_event_data/from_event_data round trip by default by @Q00 in #2241
- chore(deps): bump astral-sh/setup-uv from 9.0.0 to 10.0.1 by @dependabot[bot] in #2262
- fix(retry): precise transient matching, default jitter, retry logging by @Q00 in #2240
- fix: bound every subprocess wait that could hang indefinitely by @Q00 in #2239
- fix(seed): close four validation gaps in the Seed schema by @Q00 in #2238
- fix(core): make is_on_protected_branch fail closed by @Q00 in #2236
- fix(core): release file locks independently of ContextVar reset by @Q00 in #2235
- fix(orchestrator): stop emitting known-wrong drift measurements by @Q00 in #2233
- docs: align documentation with actual code state by @Q00 in #2230
- fix(seed): reject empty reference-aware Seed contracts by @CommitTheKermit in #2226
- fix(mcp): offer recent findings to contracted lanes by @cohemm in #2224
- chore(deps): bump the python-minor-patch group across 1 directory with 7 updates by @dependabot[bot] in #2264
- feat(interview): persist reusable fanout provenance by @Q00 in #2260
- fix(verification): read every occurrence before calling a constant verified by @MyoungSoo7 in #2220
- feat(pi): deliver system prompt and tool allow-list natively by @ruttybob in #2203
- feat(pi): complete /ooo arguments in the interactive bridge by @ruttybob in #2204
- test(orchestrator): guard against fabricated message drift by @Q00 in #2254
- fix(mcp): preserve typed interview reopen errors by @Q00 in #2257
- fix(core): preserve directory close exception precedence by @Q00 in #2259
- fix(retry): bound transient classifier contexts by @Q00 in #2256
- test(setup): lock launcher ownership boundaries by @Q00 in #2263
- docs(mcp): remove invalid scoped IPv6 workaround by @Q00 in #2253
- chore: release v0.51.15 by @Q00 in #2268
New Contributors
- @c020627 made their first contribution in #2227
- @zittenyetten made their first contribution in #2251
- @ruttybob made their first contribution in #2203
Full Changelog: v0.51.14...v0.51.15