diff --git a/BURNIN.md b/BURNIN.md index 2775a44..508573a 100644 --- a/BURNIN.md +++ b/BURNIN.md @@ -1187,12 +1187,11 @@ failed send, which is the correct branch. Not proven: the receipt itself, because F28 had already destroyed the pane. -## F28 proof and two defects it uncovered, 2026-08-28 +## F28 closed, and three defects it uncovered, 2026-08-28 -The unit split is installed on workpc. F28's worker-restart direction is -proven live. The runtime-death direction is in progress at the time of -writing, and its result is appended below. Two new defects, F29 and F30, were found while setting the proof -up. Neither was visible in tests. +The unit split is installed on workpc and F28 is proven live in both +directions. Three new defects, F29, F30 and F31, were found while setting +the proof up. None was visible in tests. ### The tmux unit, as installed @@ -1313,9 +1312,10 @@ F24 open correctness, dormant on current topology F25 fixed, live-proven F26 fixed, live-proven F27 fixed, live-proven -F28 worker-restart direction live-proven; runtime-death direction pending +F28 CLOSED, live-proven in both directions F29 fixed in efd0a5e, needs a coordinator rebuild F30 fixed in 2dc90bd, needs a worker rebuild +F31 fixed in 6523002, needs a worker rebuild, BLOCKS every rotation ``` ### Deployment state @@ -1324,3 +1324,47 @@ Both fixes are committed and unbuilt. The running coordinator and worker are still `fbaaf79`. Run 5 should start from a deployment carrying `efd0a5e` and `2dc90bd`, or it will hit F30 again the first time a handoff artifact is rejected. + +### F28 runtime-death direction, live + +`systemctl stop orchestra-tmux` at 00:39, restarted at 00:39:37 as MainPID +`3073848`. Every pane died with the old server. + +```text +20:45:07Z renewal window opens, no TaskLeaseRenewed appended F16 refused +20:55:07Z lease deadline +20:55:50Z state queued v8, lifecycle reclaimed, failure_class lease_expired +``` + +Runtime death is now distinct from worker deployment. F16's missing-pane branch +fires on real execution loss, which is what it was written for. + +The same window reproduced F30 a second time, on the deployed `fbaaf79` worker +that lacks `2dc90bd`: session still pinned, release transaction stuck at +`prepared`, same rejected handoff artifact. + +### F31: every rotation failed on a length check that named the wrong cause + +Two different tasks, two different agents, one error: + +``` +adapter: invalid handoff answer: invalid handoff authored field: prose smuggled into list +``` + +`parseHandoffAnswer` builds `Action` by joining the agent's `NEXT` and `WHY` +answers with `" — "`. `Validate` then held that join to `maxAuthoredLine`, 200 +characters. The prompt asks for a sentence each and names no budget, so two +ordinary sentences do not fit. + +The message named a branch the answer cannot reach. `parseHandoffAnswer` splits +on newlines and trims every field, so no authored field ever contains `"\n#"`. +Length was the only reachable cause, and the agent was never told what to +shorten. It could not self-correct, so the same text failed on every retry. + +This is why run 4 and the F28 disposable task both died at rotation, and why +each left the stuck transaction behind that pinned the worker slot. + +Fixed in `6523002`: `Action` carries the budget of both lines, the error names +the actual length and limit, and the prompt states the limit. + +F31 blocks run 5 outright. Run 5's chain is four rotations.