Skip to content

feat(prose-tests): conduct — playing a person where a script cannot reach#576

Merged
leeovery merged 1 commit into
mainfrom
feat/prose-conduct
Jul 27, 2026
Merged

feat(prose-tests): conduct — playing a person where a script cannot reach#576
leeovery merged 1 commit into
mainfrom
feat/prose-conduct

Conversation

@leeovery

@leeovery leeovery commented Jul 27, 2026

Copy link
Copy Markdown
Owner

Summary

  • conduct is the third per-case input, beside answers and stubs: a description of the person on the other side, not a queue of replies. A scripted answer covers a question with one right response; symptom gathering explores until it judges it has enough, so there's no fixed number of turns to script. The walker answers as the described person would, in their words, for as long as the prose keeps asking. A case may carry both — the script covers discrete gates, the description covers open stretches.
  • Two guards keep it from becoming a back door through P4. The template states it describes the user and never the walk — it cannot name an arm, end a step, or say what the prose ought to do. And the walker's standing instruction now says playing the user is not steering the walk: a described user who would happily stop talking is still not permission to cut a loop the prose has not ended.
  • First case to demand it ships with it: investigation-gathers-symptoms walks investigation through its symptom interview. Its claim 3 — the interview runs despite the carrier having populated Symptoms — is the claim that fails on the prose before fix(investigation): the symptom interview never ran for work shaped in discovery #575's guard fix, so the finding lands twice as CLAUDE.md requires. Its user relays the bug rather than living it: concrete about what they saw, plain about what they don't know, volunteering nothing.
  • Corpus at 12 cases; validation covers the new field (present-but-empty rejected).

First run results

The case ran and did its job — 6/6 path steps including claim 3, all four deterministic checks, world PASS. It FAILed on one further claim whose evidence the harness truncates (an Edit response cut at 400 chars) — that's the next PR up the stack. It also surfaced the re-asking prose gap — the PR above that.

Test plan

  • Prose gate 90/90; conventions lint 29/29; corpus valid
  • Full verification is the re-run after the two fixes above land (needs a plugin reload for the walker-definition change)

🤖 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 👈 current
  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
  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 feat/prose-conduct branch from 3a2a3a8 to 478540d Compare July 27, 2026 15:53
@leeovery
leeovery force-pushed the fix/investigation-symptom-guard branch from f290f6c to a5fc301 Compare July 27, 2026 15:54
@leeovery
leeovery force-pushed the feat/prose-conduct branch from 478540d to 78d87b0 Compare July 27, 2026 15:54
@leeovery
leeovery force-pushed the fix/investigation-symptom-guard branch from a5fc301 to 399540b Compare July 27, 2026 15:56
@leeovery
leeovery force-pushed the feat/prose-conduct branch from 78d87b0 to ac14bca Compare July 27, 2026 15:56
@leeovery
leeovery force-pushed the fix/investigation-symptom-guard branch from 399540b to 1518746 Compare July 27, 2026 15:57
@leeovery
leeovery force-pushed the feat/prose-conduct branch from ac14bca to 3a13c80 Compare July 27, 2026 15:57
@leeovery
leeovery force-pushed the fix/investigation-symptom-guard branch from 1518746 to 0c550a2 Compare July 27, 2026 15:58
@leeovery
leeovery force-pushed the feat/prose-conduct branch from 3a13c80 to 99409d7 Compare July 27, 2026 15:58
@leeovery
leeovery force-pushed the fix/investigation-symptom-guard branch from 0c550a2 to 8070b75 Compare July 27, 2026 15:59
@leeovery
leeovery force-pushed the feat/prose-conduct branch from 99409d7 to 9ec1b03 Compare July 27, 2026 15:59
@leeovery
leeovery force-pushed the fix/investigation-symptom-guard branch from 8070b75 to dfb167e Compare July 27, 2026 16:00
@leeovery
leeovery force-pushed the feat/prose-conduct branch from 9ec1b03 to 534c255 Compare July 27, 2026 16:00
@leeovery
leeovery force-pushed the fix/investigation-symptom-guard branch from dfb167e to f20123d Compare July 27, 2026 16:01
@leeovery
leeovery force-pushed the feat/prose-conduct branch from 534c255 to 0ae49af Compare July 27, 2026 16:01
@leeovery
leeovery force-pushed the fix/investigation-symptom-guard branch from f20123d to 88b3b1a Compare July 27, 2026 16:02
@leeovery
leeovery force-pushed the feat/prose-conduct branch from 0ae49af to bbf15cb Compare July 27, 2026 16:02
@leeovery
leeovery force-pushed the fix/investigation-symptom-guard branch from 88b3b1a to 9c170b6 Compare July 27, 2026 17:05
@leeovery
leeovery force-pushed the feat/prose-conduct branch from bbf15cb to 79f2273 Compare July 27, 2026 17:05
@leeovery
leeovery force-pushed the fix/investigation-symptom-guard branch from 9c170b6 to 4e15219 Compare July 27, 2026 17:06
@leeovery
leeovery force-pushed the feat/prose-conduct branch from 79f2273 to dc96a58 Compare July 27, 2026 17:06
@leeovery
leeovery force-pushed the fix/investigation-symptom-guard branch from 4e15219 to 60eb29f Compare July 27, 2026 17:06
@leeovery
leeovery force-pushed the feat/prose-conduct branch from dc96a58 to bf3ebe0 Compare July 27, 2026 17:06
@leeovery
leeovery force-pushed the fix/investigation-symptom-guard branch from 60eb29f to 7144641 Compare July 27, 2026 17:07
@leeovery
leeovery force-pushed the feat/prose-conduct branch from bf3ebe0 to 53ee32a Compare July 27, 2026 17:07
@leeovery
leeovery changed the base branch from fix/investigation-symptom-guard to main July 27, 2026 17:07
…each

A scripted answer covers a question with one right response. Some prose
does not work that way: symptom gathering explores, and keeps exploring
until it judges it has enough, so there is no fixed number of turns to
script. Every case so far has stopped at the edge of such a stretch,
which is why seven processing skills had no coverage past their gates.

conduct is the third per-case input, beside answers and stubs: a
description of the person on the other side, not a queue of replies. The
walker answers as that person would, in their words, for as long as the
prose keeps asking. A case may carry both — the script covers the
discrete gates, the description covers the open stretches.

Two guards keep it from becoming a back door through the P4 boundary.
The template states it describes the user and never the walk: it cannot
name an arm, end a step, or say what the prose ought to do. And the
walker's standing instruction now says that playing the user is not
steering the walk — a described user who would happily stop talking is
still not permission to cut a loop the prose has not ended.

The first case to need it walks investigation through its symptom
interview: the fix in the commit below this one made the interview run,
and this case is the one that fails on the prose before that fix — the
finding landing twice, as the project requires. Its user is relaying the
bug rather than living it: concrete about what they saw, plain about
what they do not know, volunteering nothing past the question asked.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@leeovery
leeovery force-pushed the feat/prose-conduct branch from 53ee32a to 9f4c13c Compare July 27, 2026 17:07
@leeovery
leeovery merged commit b7b34ff into main Jul 27, 2026
@leeovery
leeovery deleted the feat/prose-conduct branch July 27, 2026 17:24
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