Skip to content

fix(prose-tests): the world log is the walker's record - #580

Merged
leeovery merged 1 commit into
mainfrom
fix/prose-world-log-is-the-walkers
Jul 27, 2026
Merged

fix(prose-tests): the world log is the walker's record#580
leeovery merged 1 commit into
mainfrom
fix/prose-world-log-is-the-walkers

Conversation

@leeovery

@leeovery leeovery commented Jul 27, 2026

Copy link
Copy Markdown
Owner

Summary

The first two rows of the quick-fix walk's action log weren't the walk's — they were the orchestrator's own commands (the world it had just built, the prompt it had just emitted), landing in the walker's log because their payloads carry the world path and the recorder scopes by finding one.

Noise today, a hazard tomorrow: the checks match substrings against those rows, so an orchestrator command could satisfy a calls_include or trip a calls_exclude on a walk that did neither.

  • The recorder now gates world-scoped writes on the walker — nothing else writes into a world's action log or walk transcript.
  • The asserter's violation path is untouched: its tool calls still land in the repo-local log, since a breach of the no-tools contract must be visible wherever it happens.
  • The orchestrator's own recording hook is removed — everything it recorded in a world was someone else's record.

Test plan

  • test-prose-record-action.cjs 26/26, with a new case: an orchestrator run.cjs world call whose payload names the world leaves no row

🤖 Generated with Claude Code

Stack

  1. docs(design): prose-tests programme design log #544
  2. feat(prose-tests): the framework — cases, worlds, runner, skill #545
  3. test(prose): feature happy-path corpus — five worlds, seven cases #546
  4. test(prose): bugfix corpus — the investigation-centric surfaces #548
  5. test: retry recursive teardown removals — kill a class of phantom failures #549
  6. fix(entry-skills): close the handoff fences — six files render their arms wrong #550
  7. docs: a contributing page for working on the system #551
  8. fix(entry-skills): every handoff arm says to invoke the skill #552
  9. fix(implementation): environment setup belongs to the setup reference alone #553
  10. fix(prose-tests): the asserter is told which substitutions were armed #554
  11. feat(prose-tests): the mid-flow substitution, and a world only prose can describe #555
  12. test(prose): claims assert consequences, not what was displayed #556
  13. feat(prose-tests): record everything the agents do, results included #557
  14. fix(discussion-entry): the handoff reports the source it actually had #558
  15. fix(prose-tests): the stop hook records, and names the model that walked #559
  16. fix(prose-tests): command output was never actually recorded #560
  17. feat(prose-tests): judge the walk as told, not the summary returned #561
  18. feat(prose-tests): decide in code what an agent should not be deciding #562
  19. test(prose): a case starts where a session starts #563
  20. feat(prose-tests): walk on Sonnet, judge on Opus, escalate a failure #564
  21. test(prose): give the eight read-only cases something that can fail #565
  22. test(prose): only walks that can be observed, and checks that survive the trip #566
  23. fix(prose-tests): the verdict names only the model the record names #567
  24. test(prose): discovery, walked to the point where work first exists #568
  25. fix(prose-tests): the asserter judges which of prose or walker was at fault #569
  26. docs(conventions): a step whose reference routes every exit still signposts #570
  27. test(prose): discovery's epic arm, to the same durability boundary #571
  28. fix(prose-tests): keep the walk's closing turn, and name the one live difference #572
  29. fix(prose-tests): prescribe the cross-check, drop a check that cannot fire, lint the scope #573
  30. test(prose): declare the prose each case actually walks #574
  31. fix(investigation): the symptom interview never ran for work shaped in discovery #575
  32. feat(prose-tests): conduct — playing a person where a script cannot reach #576
  33. fix(prose-tests): what a write put in a file is evidence, not incident #577
  34. fix(investigation): the interview starts from the carrier, not over it #578
  35. test(prose): quick-fix scoping, the whole definition stage in one walk #579
  36. fix(prose-tests): the world log is the walker's record #580 👈 current
  37. fix(prose-tests): a confirmed failure reports both runs' checks #581
  38. fix(prose-tests): each prescribed command runs as written #582
  39. fix(scoping): context gathering reads the whole carrier, asks only the gaps #583

This was referenced Jul 27, 2026
@leeovery
leeovery force-pushed the fix/prose-world-log-is-the-walkers branch from 7734dc0 to 9412e52 Compare July 27, 2026 15:57
@leeovery
leeovery force-pushed the test/prose-quickfix-scoping branch from 4a35923 to f81e281 Compare July 27, 2026 15:58
@leeovery
leeovery force-pushed the fix/prose-world-log-is-the-walkers branch from 9412e52 to 10e4b3f Compare July 27, 2026 15:58
@leeovery
leeovery force-pushed the test/prose-quickfix-scoping branch from f81e281 to 1281307 Compare July 27, 2026 15:59
@leeovery
leeovery force-pushed the fix/prose-world-log-is-the-walkers branch from 10e4b3f to 2b28fbf Compare July 27, 2026 15:59
@leeovery
leeovery force-pushed the test/prose-quickfix-scoping branch from 1281307 to 07eac5d Compare July 27, 2026 16:00
@leeovery
leeovery force-pushed the fix/prose-world-log-is-the-walkers branch from 2b28fbf to d4cb1fa Compare July 27, 2026 16:00
@leeovery
leeovery force-pushed the test/prose-quickfix-scoping branch from 07eac5d to 1e4ce9d Compare July 27, 2026 16:01
@leeovery
leeovery force-pushed the fix/prose-world-log-is-the-walkers branch from d4cb1fa to d922066 Compare July 27, 2026 16:01
@leeovery
leeovery force-pushed the test/prose-quickfix-scoping branch from 1e4ce9d to 3de9e49 Compare July 27, 2026 16:02
@leeovery
leeovery force-pushed the fix/prose-world-log-is-the-walkers branch from d922066 to 63505b3 Compare July 27, 2026 16:02
@leeovery
leeovery force-pushed the test/prose-quickfix-scoping branch from 3de9e49 to 325361b Compare July 27, 2026 17:05
@leeovery
leeovery force-pushed the fix/prose-world-log-is-the-walkers branch from 63505b3 to d369706 Compare July 27, 2026 17:05
@leeovery
leeovery force-pushed the test/prose-quickfix-scoping branch from 325361b to f0abbad Compare July 27, 2026 17:06
@leeovery
leeovery force-pushed the fix/prose-world-log-is-the-walkers branch from d369706 to f6d5a76 Compare July 27, 2026 17:06
@leeovery
leeovery force-pushed the test/prose-quickfix-scoping branch from f0abbad to c693277 Compare July 27, 2026 17:06
@leeovery
leeovery force-pushed the fix/prose-world-log-is-the-walkers branch from f6d5a76 to 8395c31 Compare July 27, 2026 17:06
@leeovery
leeovery force-pushed the test/prose-quickfix-scoping branch from c693277 to eee7e13 Compare July 27, 2026 17:07
@leeovery
leeovery force-pushed the fix/prose-world-log-is-the-walkers branch from 8395c31 to eeac038 Compare July 27, 2026 17:07
@leeovery
leeovery force-pushed the test/prose-quickfix-scoping branch from eee7e13 to fda06a8 Compare July 27, 2026 17:08
@leeovery
leeovery force-pushed the fix/prose-world-log-is-the-walkers branch from eeac038 to b10ee75 Compare July 27, 2026 17:08
@leeovery
leeovery force-pushed the test/prose-quickfix-scoping branch from fda06a8 to 03e0c60 Compare July 27, 2026 17:08
@leeovery
leeovery force-pushed the fix/prose-world-log-is-the-walkers branch from b10ee75 to 57763a4 Compare July 27, 2026 17:08
@leeovery
leeovery force-pushed the test/prose-quickfix-scoping branch from 03e0c60 to e19e6a8 Compare July 27, 2026 17:08
@leeovery
leeovery force-pushed the fix/prose-world-log-is-the-walkers branch from 57763a4 to 650158a Compare July 27, 2026 17:09
@leeovery
leeovery force-pushed the test/prose-quickfix-scoping branch from e19e6a8 to 7973ae5 Compare July 27, 2026 17:09
@leeovery
leeovery force-pushed the fix/prose-world-log-is-the-walkers branch from 650158a to 12159bd Compare July 27, 2026 17:09
@leeovery
leeovery changed the base branch from test/prose-quickfix-scoping to main July 27, 2026 17:09
The first two rows of the quick-fix walk's action log were not the
walk's. They were the orchestrator's own commands — the world it had
just built, the prompt it had just emitted — landing in the walker's log
because their payloads carry the world path and the recorder scopes by
finding one. The record of the walk opened with actions no walk ran.

Noise today, a hazard tomorrow: the checks match substrings against
those rows, so an orchestrator command could satisfy a calls_include or
trip a calls_exclude on a walk that did neither.

The recorder now gates world-scoped writes on the walker: nothing else
writes into a world's action log or walk transcript. The asserter's
violation path is untouched — its tool calls still land in the repo-local
log, since a breach of the no-tools contract must be visible wherever it
happens. The orchestrator's own recording hook goes with it; it existed
to record everything, and everything it recorded in a world was someone
else's record.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@leeovery
leeovery force-pushed the fix/prose-world-log-is-the-walkers branch from 12159bd to 5864743 Compare July 27, 2026 17:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant