Skip to content

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

Open
leeovery wants to merge 1 commit into
fix/investigation-symptom-guardfrom
feat/prose-conduct
Open

feat(prose-tests): conduct — playing a person where a script cannot reach#576
leeovery wants to merge 1 commit into
fix/investigation-symptom-guardfrom
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 39f9f9b to 3bd3dad Compare July 27, 2026 14:33
@leeovery
leeovery force-pushed the fix/investigation-symptom-guard branch from b21db1d to 6672e48 Compare July 27, 2026 14:35
@leeovery
leeovery force-pushed the feat/prose-conduct branch from 3bd3dad to 47f09fd Compare July 27, 2026 14:35
@leeovery
leeovery force-pushed the fix/investigation-symptom-guard branch from 6672e48 to 2ff5504 Compare July 27, 2026 14:37
@leeovery
leeovery force-pushed the feat/prose-conduct branch from 47f09fd to 67902ee Compare July 27, 2026 14:37
@leeovery
leeovery force-pushed the fix/investigation-symptom-guard branch from 2ff5504 to ffc3b16 Compare July 27, 2026 14:40
@leeovery
leeovery force-pushed the feat/prose-conduct branch from 67902ee to 63c4330 Compare July 27, 2026 14:40
@leeovery
leeovery force-pushed the fix/investigation-symptom-guard branch from ffc3b16 to e13466a Compare July 27, 2026 14:42
@leeovery
leeovery force-pushed the feat/prose-conduct branch from 63c4330 to 054e015 Compare July 27, 2026 14:42
@leeovery
leeovery force-pushed the fix/investigation-symptom-guard branch from e13466a to 8e8fc12 Compare July 27, 2026 14:44
@leeovery
leeovery force-pushed the feat/prose-conduct branch from 054e015 to 7cf7a7d Compare July 27, 2026 14:44
@leeovery
leeovery force-pushed the fix/investigation-symptom-guard branch from 8e8fc12 to d137a88 Compare July 27, 2026 14:46
@leeovery
leeovery force-pushed the feat/prose-conduct branch from 7cf7a7d to 8e9b00b Compare July 27, 2026 14:46
@leeovery
leeovery force-pushed the fix/investigation-symptom-guard branch from d137a88 to 3a72413 Compare July 27, 2026 14:48
@leeovery
leeovery force-pushed the feat/prose-conduct branch from 8e9b00b to f19921b Compare July 27, 2026 14:48
@leeovery
leeovery force-pushed the fix/investigation-symptom-guard branch from 3a72413 to 51289d6 Compare July 27, 2026 14:50
@leeovery
leeovery force-pushed the feat/prose-conduct branch from f19921b to dd831e7 Compare July 27, 2026 14:50
@leeovery
leeovery force-pushed the fix/investigation-symptom-guard branch from 51289d6 to 840a957 Compare July 27, 2026 14:51
@leeovery
leeovery force-pushed the feat/prose-conduct branch from dd831e7 to 54c188a Compare July 27, 2026 14:51
@leeovery
leeovery force-pushed the fix/investigation-symptom-guard branch from 840a957 to efa86fb Compare July 27, 2026 15:43
@leeovery
leeovery force-pushed the feat/prose-conduct branch from 54c188a to 5b8b106 Compare July 27, 2026 15:43
@leeovery
leeovery force-pushed the fix/investigation-symptom-guard branch from efa86fb to 0299954 Compare July 27, 2026 15:44
@leeovery
leeovery force-pushed the feat/prose-conduct branch from 5b8b106 to 86be032 Compare July 27, 2026 15:44
@leeovery
leeovery force-pushed the fix/investigation-symptom-guard branch from 0299954 to d4ba2c2 Compare July 27, 2026 15:46
@leeovery
leeovery force-pushed the feat/prose-conduct branch from 86be032 to 6cf217b Compare July 27, 2026 15:46
@leeovery
leeovery force-pushed the fix/investigation-symptom-guard branch from d4ba2c2 to 492bab7 Compare July 27, 2026 15:47
@leeovery
leeovery force-pushed the feat/prose-conduct branch from 6cf217b to b2d60d2 Compare July 27, 2026 15:47
…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 fix/investigation-symptom-guard branch from 492bab7 to 232ea8a Compare July 27, 2026 15:49
@leeovery
leeovery force-pushed the feat/prose-conduct branch from b2d60d2 to ec703d3 Compare July 27, 2026 15:49
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