Record F38 and F39

The agent guessed an undocumented schema and was never told it guessed wrong.
The operator noticed the stall before the system reported anything.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011xsXyr5J1RACo71YeKG3Pu
This commit is contained in:
2026-08-28 01:59:12 +04:00
parent 0bd86e28c6
commit cd1675a90c
+29
View File
@@ -1607,3 +1607,32 @@ implement launch -> correction above accepted plan above accepted research
The correction is held until the plan successor is definitely live. Posting
earlier still exercises F20 and F23, but it cannot prove a mid-plan correction
outranks accepted research and the current trajectory.
### F38 and F39: the agent guessed a schema, and was never told it guessed wrong
Run 5 sealed `research.json` at 01:47:52 and wrote
`{"from": "research", "to": "plan"}`. Nothing moved for five minutes. The
operator noticed before the system reported anything.
```text
research artifact: json: cannot unmarshal string into Go struct
field Research.dead_ends of type workphase.DeadEnd
```
F38: the brief said `Seal .orchestra/research.json before you ask` and
described the contents in prose. It never stated the schema. The agent wrote
`dead_ends` as strings where the decoder wants `{tried, why_failed}` objects.
Everything else in the artifact was correct.
F39: `requestPhase` refused through `recordError` alone. `answerRefusedPhase`
ran only on a coordinator 409, so a local decode failure reached nobody. The
session parked at a boundary with no feedback, and worker health holds one
error slot (F18), so even that trace was overwritable.
F39 is the serious half. F38 alone costs one corrected file. F39 turns any
local refusal into a silent stall.
Fixed in `0bd86e2`. The brief carries the shape, and every local refusal now
reaches the agent. `TestPhaseSealSchemasDecode` decodes each documented shape
with the function the worker uses: flipping `dead_ends` back to strings
reproduces run 5's exact error at build time.