Skip to content

speckit Phase 3 -> Phase 4 advances without enforcing ! task spec:render #432

@MScottAdams

Description

@MScottAdams

Summary

In deft/strategies/speckit.md, Phase 3 ("Plan / HOW") declares a ! MUST step:

Post-Phase 3: Render for Review

  • ! Run task spec:render to produce SPECIFICATION.md as a read-only rendered export
  • ! SPECIFICATION.md is for human review only -- vbrief/specification.vbrief.json remains the source of truth

But nothing in the workflow contract prevents the agent from advancing directly to Phase 4 (Tasks) without invoking task spec:render. There is no transition criterion that gates Phase 3 -> Phase 4 on the render having occurred.

In auto-pilot / yolo mode this gap is invisible to the user: the agent silently writes vbrief/specification.vbrief.json, writes vbrief/plan.vbrief.json, and reports "documents complete" -- with no SPECIFICATION.md ever produced.

Reproduction

  1. Greenfield project with vbrief/PROJECT-DEFINITION.vbrief.json declaring Strategy: speckit.
  2. Run an agent through speckit Phases 1-4 in yolo mode.
  3. Observe: vbrief/specification.vbrief.json and vbrief/plan.vbrief.json are written, but SPECIFICATION.md does not exist anywhere.
  4. The agent reports completion with no warning.

Why #398 does not catch this

PR #400 / issue #398 added auto-render hooks (task check staleness warning, deft-directive-pre-pr quality-loop render). Both have explicit "skip silently if absent" semantics:

"Warn if present, ignore if absent." -- the files don't exist, the user hasn't opted into them, no nag.

That was a deliberate design choice for solo-iteration ergonomics (#398 Recommendation), not an oversight. But it means the first render is always a manual step, and speckit.md puts that step on the agent, and nothing enforces the agent doing it.

Proposed fix (sketch)

Pick one or combine:

  1. Phase 3 transition criterion (cheapest): add to speckit.md Phase 3 Transition Criteria a ! clause: "SPECIFICATION.md exists and its hash matches the current vbrief/specification.vbrief.json narratives". The deft-directive-build / Phase 4 entry would refuse to proceed otherwise.

  2. Skill enforcement: have deft-directive-setup (or whatever skill drives speckit) call task spec:render itself at the Phase 3 -> Phase 4 boundary instead of asking the agent to remember.

  3. Workflow doc clarification: change the "Post-Phase 3: Render for Review" section from agent-instruction prose into a numbered transition gate, mirroring how Phase 2's approval gate is structured.

Related

Severity

Workflow-correctness bug in the speckit strategy. Doesn't corrupt data (vBRIEF is source of truth) but defeats Phase 3's stated review intent. Reproducible 100% on greenfield + yolo.

Discovered

During greenfield walkthrough of speckit Phase 1-4 in agentic mode.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions