Bug Description
/speckit.converge already requires one stable intent-inventory key per FR-###, buildable SC-###, and user-story acceptance scenario such as US1/AC2. However, its output contract exposes only a single undenominated line, Requirements / acceptance criteria checked.
An agent can therefore assess user stories in bulk, report a plausible aggregate (for example, 16 FR + 12 SC + 4 user stories), and still emit converged without exposing that only 4 user-story rows were checked instead of the 16 acceptance scenarios required by the inventory rule.
This is an observability/closure-contract defect rather than a missing inventory instruction: the prompt tells the agent what to assess, but the report cannot demonstrate whether it did so.
Steps to Reproduce
- Run
/speckit.converge after an implementation pass on a feature whose spec.md has multiple user-story acceptance scenarios.
- Have the assessment aggregate user stories instead of evaluating each scenario key.
- Observe that the report can satisfy the current summary-metrics text while omitting the number of scenarios assessed.
- In the observed case, a second pass changed only the granularity from user stories to individual acceptance scenarios and surfaced a missing HIGH finding at
US3/AC4; a third pass at the same granularity found no remaining gaps.
Expected Behavior
The convergence report should make completion independently auditable:
- report
checked/total separately for buildable FRs, buildable SCs, user-story acceptance scenarios, plan decisions, and applicable Constitution MUST principles;
- derive each denominator from the artifacts loaded during the run, not from model memory;
- expose the stable inventory keys with a compact checked/gap/unassessed status;
- allow
converged only when every applicable category is fully assessed and no findings remain;
- fail closed with a distinct
incomplete_assessment result when any inventory key is unassessed, without appending a partial Convergence phase to tasks.md.
Actual Behavior
The current template requires the fine-grained inventory internally but only asks for aggregate summary labels. As a result, a report can look complete while concealing a mismatch such as 4 assessed user stories versus 16 required acceptance scenarios. A false converged would end the implementation/convergence loop with an unassessed HIGH requirement.
Specify CLI Version
0.14.3.dev0 (main at time of report)
AI Agent
Not applicable — this is a core command-template contract affecting all agent integrations.
Operating System
Linux 5.15.147-sun60iw2
Python Version
Python 3.13.5
Error Logs
No process error: the defect is a false-completeness reporting path.
Additional Context
Proposed focused change:
- Update
templates/commands/converge.md with denominated per-category coverage, an auditable key ledger, and the fail-closed outcome precedence incomplete_assessment → tasks_appended → converged.
- Document the third outcome in the Agentic SDD reference.
- Add a deterministic template-contract regression test plus manual command validation.
Searches of existing upstream Issues/PRs found no duplicate for converge coverage denominators or incomplete assessment.
AI disclosure: This report was prepared by Hermes Agent (OpenAI gpt-5.6-terra) on behalf of @cadugevaerd, using Carlos's observed three-pass evidence and current upstream source inspection.
Bug Description
/speckit.convergealready requires one stable intent-inventory key perFR-###, buildableSC-###, and user-story acceptance scenario such asUS1/AC2. However, its output contract exposes only a single undenominated line,Requirements / acceptance criteria checked.An agent can therefore assess user stories in bulk, report a plausible aggregate (for example,
16 FR + 12 SC + 4 user stories), and still emitconvergedwithout exposing that only 4 user-story rows were checked instead of the 16 acceptance scenarios required by the inventory rule.This is an observability/closure-contract defect rather than a missing inventory instruction: the prompt tells the agent what to assess, but the report cannot demonstrate whether it did so.
Steps to Reproduce
/speckit.convergeafter an implementation pass on a feature whosespec.mdhas multiple user-story acceptance scenarios.US3/AC4; a third pass at the same granularity found no remaining gaps.Expected Behavior
The convergence report should make completion independently auditable:
checked/totalseparately for buildable FRs, buildable SCs, user-story acceptance scenarios, plan decisions, and applicable Constitution MUST principles;convergedonly when every applicable category is fully assessed and no findings remain;incomplete_assessmentresult when any inventory key is unassessed, without appending a partial Convergence phase totasks.md.Actual Behavior
The current template requires the fine-grained inventory internally but only asks for aggregate summary labels. As a result, a report can look complete while concealing a mismatch such as 4 assessed user stories versus 16 required acceptance scenarios. A false
convergedwould end the implementation/convergence loop with an unassessed HIGH requirement.Specify CLI Version
0.14.3.dev0 (
mainat time of report)AI Agent
Not applicable — this is a core command-template contract affecting all agent integrations.
Operating System
Linux 5.15.147-sun60iw2
Python Version
Python 3.13.5
Error Logs
Additional Context
Proposed focused change:
templates/commands/converge.mdwith denominated per-category coverage, an auditable key ledger, and the fail-closed outcome precedenceincomplete_assessment→tasks_appended→converged.Searches of existing upstream Issues/PRs found no duplicate for
convergecoverage denominators or incomplete assessment.AI disclosure: This report was prepared by Hermes Agent (OpenAI gpt-5.6-terra) on behalf of @cadugevaerd, using Carlos's observed three-pass evidence and current upstream source inspection.