Skip to content

Keep requirement ownership with the user and the wording with the orchestrator - #182

Merged
shinpr merged 9 commits into
mainfrom
refactor/requirement-evidence-ownership
Sep 17, 2026
Merged

shinpr merged 9 commits into
mainfrom
refactor/requirement-evidence-ownership

Conversation

@shinpr

@shinpr shinpr commented Sep 17, 2026

Copy link
Copy Markdown
Owner

What changed

The user's wording stays in the orchestrator. requirement-analyzer received the full request and returned a six-category classification of that same wording. The orchestrator already holds it, and requirements_verbatim at the Design stop already comes from it. The analyzer is now invoked with a minimum evidence contract — the shortest verbatim outcome plus the shortest reason needed to interpret it — and returns repository evidence only. Evaluation requests, speculative ideas, and prescribed mechanisms are classified in requirement-convergence from the retained wording.

Scope evidence starts from the responsibility, not the paths. Discovery began at likely target paths, so an existing surface already owning the requested responsibility surfaced only if it happened to sit on one. Each retained boundary now records its current treatment alongside the consequence a user would observe. The depth gate and branch stop condition are unchanged.

The requirements stop has one output shape. Confirmed scope, Decision evidence, User decisions, and Workflow are defined once in requirement-convergence; the recipes add only what the shared shape cannot know. Separating settled boundaries from repository observations from open questions is what makes the decision informable. Only an explicit user answer moves an item into Confirmed scope.

Each stop selects its own confirmation form. The blanket directive routing every confirmation through a selectable-option prompt is removed. At the requirements stop the candidates would have to be authored by the orchestrator, which records the orchestrator's wording as the user's decision and contradicts the hearing's own pass condition. Stops keep their wait-for-confirmation rule; the sites whose candidate sets are enumerable outside the session keep their own directive.

Analysis-exposed product boundaries return to the requirements gate. Change detection fired only on a proposed change, so a user-facing responsibility surfaced by codebase or UI analysis entered design scope without reaching the user. It now returns only when leaving it or changing it would alter the confirmed outcome or an exclusion; technical choices continue to the design owners.

Ownership wording. The user owns product requirements and exclusions; the orchestrator owns convergence readiness, Structural Scale, and routing.

Reverse-engineering discovery is gated on a non-empty unit inventory. This reinstates the all-empty check, not the per-category one removed in #181: a unit with routes but no tests proceeds, a unit with no routes, tests, or public exports does not. unit_inventory is the completeness baseline for code-verifier, and three empty categories balance at inputCount: 0, so such a unit passed verification with no evidence examined and no limitation reported.

Handoff context is tested for consumption. llm-friendly-context now checks that every included item is consumed by the target action, alongside the existing sufficiency checks.

Version 0.27.0 to 0.27.1.

🤖 Generated with Claude Code

shinpr and others added 9 commits September 17, 2026 14:09
The orchestration guide directed every confirmation and question through a
selectable-option prompt. At the requirements stop the candidates would have to
be authored by the orchestrator, which records the orchestrator's wording as the
user's decision and contradicts the convergence hearing's own pass condition.

Remove the blanket directive and the equivalent per-stop mapping in
recipe-implement. Stops keep their existing wait-for-confirmation rule, and the
sites whose candidate sets are enumerable outside the session keep their own
directive.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Scope evidence began from likely target paths, so an existing surface that
already owns the requested responsibility surfaced only if it happened to sit on
one of those paths. Its `effect` recorded routing impact alone, which cannot
support a product decision about whether that surface should change.

Enter the scan from the implied product responsibility, and record each retained
boundary's current treatment alongside the consequence a user would observe. The
depth gate and the branch stop condition are unchanged, and a responsibility a
cost driver or question relies on is either source-backed or an unknown.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ough analysis

The orchestrator passed the user's full request to requirement-analyzer and read
back a six-category classification of that same wording. The orchestrator already
holds the wording, and `requirements_verbatim` at the Design stop already comes
from it, so the classification added no evidence while placing agent inference in
the same object as repository observation.

Invoke the analyzer with a minimum evidence contract: the shortest verbatim
outcome plus the shortest reason needed to interpret it. The analyzer returns
repository evidence only. Evaluation requests, speculative ideas, and prescribed
mechanisms are now classified in requirement-convergence from the retained user
wording, so they remain judgment-only candidates.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Each recipe enumerated its own confirmation contents, and every list mixed the
user's settled boundaries, repository observations, and still-open questions into
one flat presentation. A reader could not tell which line was already decided and
by whom.

Define Confirmed scope, Decision evidence, User decisions, and Workflow once in
requirement-convergence, where the hearing already runs, and have the recipes add
only the items the shared shape cannot know. Open decisions are posed as
questions so the recorded answer stays in the user's wording, which is the
hearing's existing pass condition.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Change detection fired only on a proposed change. When codebase or UI analysis
exposed an existing user-facing responsibility whose treatment nobody had
decided, it entered design scope without reaching the user.

Compare each such responsibility against the confirmed scope after an analysis
result returns, and route it back only when leaving it or changing it would alter
the confirmed outcome or an exclusion. Technical choices about how to satisfy the
confirmed scope keep going to the design owners.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…umption

The design recipes assigned requirement convergence wholesale to the orchestrator,
which reads as authority over what the user decided rather than over judging its
readiness.

Split that ownership in both recipes, and add the consumption test the minimum
requirement handoff relies on to llm-friendly-context, keeping the existing
sufficiency checks so the rule tests both directions.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
HC-01 carried codebase-analyzer's governing-source rule without naming its
destination, and that rule is already stated at each invocation site.

The hearing's first two steps described the same act as the Scope Confirmation
shape, and its per-message question cap contradicted the same row's completion
evidence once three fields were below `ready`. Fold both steps into rendering the
shape; the substantive bounds stay.

Restore the cost unknowns to the Scope Confirmation, which the shape dropped, and
remove the label vocabulary the analyzer depended on but nothing defined.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Reinstates the all-empty check, not the per-category one removed in #181: a unit
with routes but no tests proceeds, a unit with no routes, tests, or public
exports does not.

`unit_inventory` is the completeness baseline for code-verifier, and three empty
categories balance at `inputCount: 0`, so such a unit passed verification with no
evidence examined and no limitation reported.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@shinpr shinpr self-assigned this Sep 17, 2026
@shinpr
shinpr merged commit 0b1b960 into main Sep 17, 2026
1 check passed
@shinpr
shinpr deleted the refactor/requirement-evidence-ownership branch September 17, 2026 06:29
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