mirror of
https://github.com/rowboatlabs/rowboat.git
synced 2026-07-12 21:02:17 +02:00
advance() resolved the context chain, agent snapshot, live model, and every snapshotted tool before applying ANY input — including cancel, which uses none of them. A permanently broken environment (provider removed from models.json, builtin renamed by an update, context predecessor unreadable) therefore rejected every advance forever: the turn could not be cancelled, stopTurn's fallback failed, and the session rejected sendMessage with TurnNotSettledError permanently — a bricked session with valid bytes on disk. Materialization is now a thunk the invocation awaits only for work that continues the turn: run() short-circuits a cancel input straight to the cancel path (same commit ritual, same synthetic results, byte-identical events for healthy turns), while every other input still materializes first, preserving §15.3's reject-before-touching-the-file ordering. applyInput narrows to non-cancel inputs. Tests: cancel succeeds against a broken tool registry (with the non-cancel input asserted to reject file-unchanged), a broken model registry, and an unreadable context chain; plus a healthy-cancel regression pinning the exact event sequence and outcome. All three broken-environment tests fail against the old code. Design doc §15.3, §18, §22, and §26.5 updated. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| .pnpm-store/v11 | ||
| apps | ||
| docs | ||
| packages | ||
| .gitignore | ||
| ANALYTICS.md | ||
| CODE_MODE_ENGINES_PLAN.md | ||
| demo.gif | ||
| eslint.config.mts | ||
| LIVE_NOTE.md | ||
| MINI_APPS_PLAN.md | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| tsconfig.base.json | ||
| VIDEO_MODE.md | ||