Summary
In the v0.20 vBRIEF-centric model, the project "spec" is defined as the union of vbrief/specification.vbrief.json (intent/architecture narratives) plus the scope vBRIEFs in lifecycle folders (vbrief/proposed/, pending/, active/, completed/, cancelled/). But task spec:render (scripts/spec_render.py) reads only the single file passed as argv[1] -- it never walks the lifecycle folders. The rendered SPECIFICATION.md is therefore incomplete for any project using the post-cutover model: it shows project intent but not the actual scopes / work units that constitute the implementation plan.
The data model from the v0.20 cutover is in place (lifecycle folders, planRef, references[], PROJECT-DEFINITION.vbrief.json items registry). The rendering layer is not. This is a half-shipped piece of #338 / Phase 2.
Reproduction
- Greenfield or migrated project on v0.20+.
vbrief/specification.vbrief.json exists with status approved. One or more scope vBRIEFs in vbrief/pending/ and/or vbrief/active/.
- Run
task spec:render.
- Observe:
SPECIFICATION.md contains only the contents of specification.vbrief.json. None of the scope vBRIEFs in the lifecycle folders are mentioned. A reader of SPECIFICATION.md cannot see what work has been scoped, accepted, or is in progress.
task roadmap:render walks pending/ and produces ROADMAP.md correctly. task project:render walks lifecycle folders to refresh PROJECT-DEFINITION items registry. No renderer in deft today aggregates lifecycle folders into SPECIFICATION.md.
Why this is its own issue (vs. #434)
#434 is a renderer bug specific to speckit narrative shape -- spec_render drops 9 of 10 narratives. That fix is local to one script and one model.
This issue is broader and applies to every vBRIEF-centric project, not just speckit. Even a perfectly-shaped Model-1-style spec with full Overview + items would still produce an incomplete SPECIFICATION.md once scopes are split out into lifecycle folders, because nothing pulls them back in.
Fixing #434 alone leaves this gap. Fixing this alone leaves #434.
Proposed fix (sketch)
Two reasonable paths -- pick one, or do both:
Option 1: Aggregator inside task spec:render
Extend scripts/spec_render.py to optionally walk vbrief/pending/ and vbrief/active/ (and optionally completed/ with status pins) and render each scope vBRIEF as a section under "Implementation Plan / Scopes" in the output. Sketch:
# {project title}
## {narrative keys, in order}
...
## Implementation Plan
### Pending
- [scope-slug] -- title -- summary narrative
- items / acceptance criteria
### Active
- [scope-slug] -- title -- ...
### Completed (last N)
- [scope-slug] -- title (completed YYYY-MM-DD)
Trigger via a flag (e.g. --include-scopes default on for v0.20+) so legacy Model-1 projects still get the existing behavior.
Option 2: Hub document, multiple thin renderers
Keep task spec:render thin (just specification.vbrief.json). Keep task roadmap:render for pending/. Add task plan:render (per-scope or aggregated). Add a top-level "spec hub" markdown that links to all of them with status counts. Multiple small files, not one fat one.
Either way: the v0.20 cutover is incomplete without one of these. Today users on v0.20 see thinner SPECIFICATION.md exports than they did pre-cutover for the same amount of project content.
Severity
Architectural gap. Affects all v0.20+ projects, not just speckit. The data exists and is correct; only the rendering layer is missing. Fix is medium-sized but well-scoped.
Related
Discovered
During RC2 walkthrough; investigated why SPECIFICATION.md was empty after speckit and traced the issue back to the broader pattern that no renderer aggregates lifecycle folders.
Summary
In the v0.20 vBRIEF-centric model, the project "spec" is defined as the union of
vbrief/specification.vbrief.json(intent/architecture narratives) plus the scope vBRIEFs in lifecycle folders (vbrief/proposed/,pending/,active/,completed/,cancelled/). Buttask spec:render(scripts/spec_render.py) reads only the single file passed asargv[1]-- it never walks the lifecycle folders. The renderedSPECIFICATION.mdis therefore incomplete for any project using the post-cutover model: it shows project intent but not the actual scopes / work units that constitute the implementation plan.The data model from the v0.20 cutover is in place (lifecycle folders,
planRef,references[],PROJECT-DEFINITION.vbrief.jsonitems registry). The rendering layer is not. This is a half-shipped piece of #338 / Phase 2.Reproduction
vbrief/specification.vbrief.jsonexists with statusapproved. One or more scope vBRIEFs invbrief/pending/and/orvbrief/active/.task spec:render.SPECIFICATION.mdcontains only the contents ofspecification.vbrief.json. None of the scope vBRIEFs in the lifecycle folders are mentioned. A reader ofSPECIFICATION.mdcannot see what work has been scoped, accepted, or is in progress.task roadmap:renderwalkspending/and produces ROADMAP.md correctly.task project:renderwalks lifecycle folders to refresh PROJECT-DEFINITION items registry. No renderer in deft today aggregates lifecycle folders into SPECIFICATION.md.Why this is its own issue (vs. #434)
#434 is a renderer bug specific to speckit narrative shape -- spec_render drops 9 of 10 narratives. That fix is local to one script and one model.
This issue is broader and applies to every vBRIEF-centric project, not just speckit. Even a perfectly-shaped Model-1-style spec with full Overview + items would still produce an incomplete SPECIFICATION.md once scopes are split out into lifecycle folders, because nothing pulls them back in.
Fixing #434 alone leaves this gap. Fixing this alone leaves #434.
Proposed fix (sketch)
Two reasonable paths -- pick one, or do both:
Option 1: Aggregator inside
task spec:renderExtend
scripts/spec_render.pyto optionally walkvbrief/pending/andvbrief/active/(and optionallycompleted/with status pins) and render each scope vBRIEF as a section under "Implementation Plan / Scopes" in the output. Sketch:Trigger via a flag (e.g.
--include-scopesdefault on for v0.20+) so legacy Model-1 projects still get the existing behavior.Option 2: Hub document, multiple thin renderers
Keep
task spec:renderthin (justspecification.vbrief.json). Keeptask roadmap:renderforpending/. Addtask plan:render(per-scope or aggregated). Add a top-level "spec hub" markdown that links to all of them with status counts. Multiple small files, not one fat one.Either way: the v0.20 cutover is incomplete without one of these. Today users on v0.20 see thinner SPECIFICATION.md exports than they did pre-cutover for the same amount of project content.
Severity
Architectural gap. Affects all v0.20+ projects, not just speckit. The data exists and is correct; only the rendering layer is missing. Fix is medium-sized but well-scoped.
Related
task spec:render.task prd:render.Discovered
During RC2 walkthrough; investigated why
SPECIFICATION.mdwas empty after speckit and traced the issue back to the broader pattern that no renderer aggregates lifecycle folders.