Skip to content

feat(prose-tests): the mid-flow substitution, and a world only prose can describe#555

Open
leeovery wants to merge 1 commit into
prose-tests/asserter-knows-stubsfrom
prose-tests/discussion-conversation-stub
Open

feat(prose-tests): the mid-flow substitution, and a world only prose can describe#555
leeovery wants to merge 1 commit into
prose-tests/asserter-knows-stubsfrom
prose-tests/discussion-conversation-stub

Conversation

@leeovery

Copy link
Copy Markdown
Owner

Summary

  • Exercises the conversation stub — designed at length, never used. Writing the case proved the mechanism needed no change: a stub is named content, the case owns the trigger, and "once the discussion file has been created from the template, the map seeded, and the initialisation commit made" is as observable a moment as an engine dispatch. The stub writes the worked discussion and settles the map, then the walk resumes.
  • Adds a third shape of end state, which the case forced. A discussion's subtopics are derived by the model from available context — "Derive initial subtopics from whatever context is available" — so their names and number differ run to run and no recipe can pin the resulting world. Such cases now set "world": "claims" in case.json: the delta is taken against the fixture, expected non-empty, and judged against the case's stated claims.
  • It is deliberately the weakest of the three shapes and documented as a last resort — validation refuses claims alongside an assertion-state.cjs, because a world a recipe can build must be built.

The case itself walks initialisation for real: resume detection on a missing file, topic start before any map command (the map requires the item to exist), the file from the template with Triage seeded (none), subtopics recorded pending, the commit — then substitutes the session and stops at the review boundary without dispatching anything.

Test plan

  • npm test green: 1699 tests, 0 fail. Corpus: 13 cases, 2 stubs, valid.
  • Fixture snapshot built and byte-deterministic.
  • Not yet walked by an agent — that's the next run, and it's the first real test of the mid-flow substitution.

🤖 Generated with Claude Code

@leeovery
leeovery force-pushed the prose-tests/asserter-knows-stubs branch from db46617 to e81714b Compare July 26, 2026 13:37
@leeovery
leeovery force-pushed the prose-tests/discussion-conversation-stub branch from c9f9f1a to f83df8e Compare July 26, 2026 13:37
…can describe

The conversation stub was designed at length and never exercised. Writing
the case proved the mechanism needed no change — a stub is named content,
the case owns the trigger, and "once the file is created from the
template, the map seeded, and the initialisation commit made" is as
observable a moment as an engine dispatch. What the case did need was a
third shape of end state.

A discussion's subtopics are derived by the model from whatever context
it has, so their names and number differ run to run and no recipe can
pin the resulting world. Cases like that now set `world: "claims"`: the
delta is taken against the fixture, expected to be non-empty, and judged
against the case's stated claims. It is the weakest of the three shapes
and reached for last — a world a recipe can build must be built, and
validation refuses claims mode alongside an assertion state.

The case walks discussion initialisation for real — resume detection,
topic start before any map command, the file from the template, subtopics
recorded pending, the commit — then substitutes the session it cannot
simulate and resumes to the review boundary.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@leeovery
leeovery force-pushed the prose-tests/asserter-knows-stubs branch from e81714b to f4cfb5a Compare July 26, 2026 13:43
@leeovery
leeovery force-pushed the prose-tests/discussion-conversation-stub branch from f83df8e to 9d3d1b3 Compare July 26, 2026 13:43
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