Skip to content

feat(strategies): convert speckit and enterprise to vBRIEF-centric outputs (#361, #362, #364)#376

Merged
MScottAdams merged 2 commits intophase2/vbrief-cutoverfrom
agent1/feat/361-362-364-speckit-enterprise
Apr 14, 2026
Merged

feat(strategies): convert speckit and enterprise to vBRIEF-centric outputs (#361, #362, #364)#376
MScottAdams merged 2 commits intophase2/vbrief-cutoverfrom
agent1/feat/361-362-364-speckit-enterprise

Conversation

@MScottAdams
Copy link
Copy Markdown
Collaborator

Summary

Convert speckit and enterprise strategies to vBRIEF-centric outputs, replacing hand-authored markdown artifacts with vBRIEF narratives and render commands.

speckit.md (#361, #362)

  • Phase 1: Output changed from project.md to Principles narrative in �brief/PROJECT-DEFINITION.vbrief.json
  • Phase 2: Output changed from specs/[feature]/spec.md to WHAT/WHY narratives in �brief/specification.vbrief.json
  • Phase 3: Output changed from specs/[feature]/plan.md to HOW narratives enriching �brief/specification.vbrief.json; added ask spec:render instruction for human review
  • Removed all specs/ directory references; updated Artifacts Summary and Directory Structure

enterprise.md (#364)

  • Stage 1: PRD narratives written to �brief/specification.vbrief.json; ask prd:render produces PRD.md for Gate 1 review
  • Stage 3: Specification narratives enrich �brief/specification.vbrief.json; ask spec:render produces SPECIFICATION.md for Gate 3 review
  • Output Artifacts updated: specification.vbrief.json is primary, rendered .md files are read-only exports
  • Approval gates and ADRs in docs/adr/ preserved

Tests

  • 9 new tests in ests/content/test_strategy_vbrief.py covering vBRIEF references, no-specs-dir assertion, render command references, gate preservation, and ADR independence

Checklist

  • ask check passes (1423 passed, 2 xfailed)
  • CHANGELOG.md updated
  • New test file for new content
  • Conventional commit message
  • Feature branch (not master)
  • Scope vBRIEFs exist in �brief/active/

Closes #361
Closes #362
Closes #364
Parent: #338

…tputs (#361, #362, #364)

- speckit Phase 1: output changed from project.md to Principles narrative
  in vbrief/PROJECT-DEFINITION.vbrief.json
- speckit Phase 2: output changed from specs/[feature]/spec.md to WHAT/WHY
  narratives in vbrief/specification.vbrief.json (ProblemStatement, Goals,
  UserStories, Requirements, SuccessMetrics, EdgeCases)
- speckit Phase 3: output changed from specs/[feature]/plan.md to HOW
  narratives enriching vbrief/specification.vbrief.json (Architecture,
  TechDecisions, ImplementationPhases, PreImplementationGates)
- speckit Phase 3: added post-phase task spec:render instruction for
  human review of rendered SPECIFICATION.md
- speckit: removed all specs/ directory references and directory structure
- speckit: updated Artifacts Summary and Directory Structure sections
- speckit: updated mermaid diagram labels to reference vBRIEF files
- enterprise Stage 1: PRD narratives now written to
  vbrief/specification.vbrief.json; task prd:render produces PRD.md
  as read-only export for Gate 1 approval
- enterprise Stage 3: specification narratives enriched in
  vbrief/specification.vbrief.json; task spec:render produces
  SPECIFICATION.md as read-only export for Gate 3 approval
- enterprise: updated Output Artifacts section -- specification.vbrief.json
  is primary, rendered .md files are read-only exports
- enterprise: approval gates and ADRs in docs/adr/ preserved
- Added 9 tests in tests/content/test_strategy_vbrief.py covering vBRIEF
  references, no-specs-dir assertion, render command references, gate
  preservation, and ADR independence
- Added CHANGELOG.md entry under [Unreleased]
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented Apr 14, 2026

Greptile Summary

This PR converts strategies/speckit.md and strategies/enterprise.md from hand-authored markdown outputs (specs/, project.md, spec.md, plan.md) to vBRIEF-centric outputs (vbrief/specification.vbrief.json, vbrief/PROJECT-DEFINITION.vbrief.json) with task spec:render / task prd:render for read-only stakeholder exports. All internal path references, directory structures, and artifacts summaries are internally consistent; approval gates and ADR references in enterprise.md are preserved. The 9 new tests follow the established _text = _read(...) class-level pattern from test_strategy_chaining.py and cover the key vBRIEF references and render commands.

Confidence Score: 5/5

Safe to merge — documentation-only conversion with no logic changes and passing test suite

All strategy file content is internally consistent, path references match across all sections, and no old specs/ or standalone .md artifacts remain. The sole finding is a P2 observation about absence-only test assertions, which does not block merge.

No files require special attention

Important Files Changed

Filename Overview
strategies/speckit.md Phase outputs converted from specs/ markdown files to vBRIEF JSON narratives; render commands and directory structure updated consistently throughout
strategies/enterprise.md Stage 1 and Stage 3 outputs converted to vbrief/specification.vbrief.json with prd:render / spec:render commands; approval gates and ADR references preserved
tests/content/test_strategy_vbrief.py 9 new tests using the established class-level _text read pattern; absence-only assertions in a few tests provide weaker regression protection than paired presence checks
CHANGELOG.md Unreleased section updated with accurate description of speckit and enterprise changes; no issues found

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    subgraph speckit["SpecKit Strategy (vBRIEF-centric)"]
        SK1["Phase 1: Principles\nvbrief/PROJECT-DEFINITION.vbrief.json"]
        SK2["Phase 2: Specify WHAT/WHY\nvbrief/specification.vbrief.json"]
        SK3["Phase 3: Plan HOW\nvbrief/specification.vbrief.json\n+ task spec:render → SPECIFICATION.md"]
        SK4["Phase 4: Tasks\nvbrief/plan.vbrief.json"]
        SK5["Phase 5: Implement\nCode + tests"]
        SK1 --> SK2 --> SK3 --> SK4 --> SK5
    end

    subgraph enterprise["Enterprise Strategy (vBRIEF-centric)"]
        EN1["Stage 1: PRD Narratives\nvbrief/specification.vbrief.json\n+ task prd:render → PRD.md"]
        G1{"Gate 1:\nPRD Approval"}
        EN2["Stage 2: ADRs\ndocs/adr/adr-NNN-*.md"]
        G2{"Gate 2:\nADR Approval"}
        EN3["Stage 3: Specification\nvbrief/specification.vbrief.json\n+ task spec:render → SPECIFICATION.md"]
        G3{"Gate 3:\nSpec Approval"}
        EN4["Stage 4: Build\nCode + tests"]
        EN1 --> G1 --> EN2 --> G2 --> EN3 --> G3 --> EN4
    end

    style SK1 fill:#c4b5fd,stroke:#7c3aed
    style SK2 fill:#fef08a,stroke:#ca8a04
    style SK3 fill:#6ee7b7,stroke:#059669
    style EN1 fill:#fef08a,stroke:#ca8a04
    style EN3 fill:#6ee7b7,stroke:#059669
    style G1 fill:#fca5a5,stroke:#dc2626
    style G2 fill:#fca5a5,stroke:#dc2626
    style G3 fill:#fca5a5,stroke:#dc2626
Loading
Prompt To Fix All With AI
This is a comment left during a code review.
Path: tests/content/test_strategy_vbrief.py
Line: 76-88

Comment:
**Absence-only assertions miss the positive regression guard**

`test_speckit_no_standalone_plan_md_input` and `test_speckit_no_project_md_principles_reference` each check that a very specific legacy string is absent, but neither asserts that the replacement content is present. If someone accidentally removed the Phase 4 input or Phase 5 Principles reference entirely, both tests would still pass.

Pairing each absence check with a presence check on the new vBRIEF path would give stronger regression protection:

```python
def test_speckit_no_standalone_plan_md_input(self) -> None:
    assert "Approved `plan.md`" not in self._text
    # Also verify the replacement content exists
    assert "vbrief/specification.vbrief.json" in self._text  # already covered by test_speckit_references_specification_vbrief

def test_speckit_no_project_md_principles_reference(self) -> None:
    assert "project.md Principles" not in self._text
    # Phase 5 must positively reference the vBRIEF path
    assert "vbrief/PROJECT-DEFINITION.vbrief.json" in self._text  # already covered by test_speckit_references_project_definition_vbrief
```

The existing `test_speckit_references_*` tests already provide the positive side, so the absence-only tests are not wrong — just worth noting that coverage of the positive assertion comes from a different test method.

How can I resolve this? If you propose a fix, please make it concise.

Reviews (2): Last reviewed commit: "fix: address Greptile review findings (b..." | Re-trigger Greptile

- speckit Phase 4 input: changed stale 'Approved plan.md' reference to
  'Approved HOW narratives in vbrief/specification.vbrief.json' (P1)
- speckit Phase 5 guideline: changed stale 'Follow project.md Principles'
  to 'Follow the Principles narrative in
  vbrief/PROJECT-DEFINITION.vbrief.json' (P1)
- Added 2 regression tests: test_speckit_no_standalone_plan_md_input and
  test_speckit_no_project_md_principles_reference to guard against stale
  pre-vBRIEF artifact references
- MCP unavailable in this session -- used gh api fallback for review
  comments
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