feat(vbrief): update vbrief.md with vBRIEF-centric document model (#310)#343
Conversation
- Rewrote File Taxonomy with lifecycle folder structure (proposed/, pending/, active/, completed/, cancelled/) and status-to-folder mapping - Added PROJECT-DEFINITION.vbrief.json as new document type using existing v0.5 schema (narratives for project identity, items as scope registry) - Documented scope vBRIEF filename convention: YYYY-MM-DD-descriptive-slug.vbrief.json (creation date, immutable) - Added status-driven moves: plan.status is source of truth, folder location is convenience view - Documented origin provenance requirement: every scope vBRIEF MUST carry references to origin (github-issue, jira-ticket, user-request) - Added bidirectional epic-story linking convention with examples (epic references lists children, story carries planRef back) - Documented plan.vbrief.json and continue.vbrief.json coexistence with scope vBRIEFs via planRef - Added scope splitting pattern as lifecycle convention (agent-driven, provenance stays on parent) - Updated plan.vbrief.json and continue.vbrief.json sections with planRef rules for scope vBRIEFs - Added 4 new anti-patterns for lifecycle folder moves, scope scratchpad misuse, missing provenance, missing planRef - Added CHANGELOG entry under [Unreleased] Part of #309. Closes #310. Tracking: #338.
Greptile SummaryThis documentation-only PR rewrites
Confidence Score: 4/5Safe to merge after fixing the two P1 documentation gaps; the structural model itself is sound. Two P1 findings: (1) scope vBRIEF JSON examples omit the required vbrief/vbrief.md — specifically the Epic-Story Linking examples (lines 94–118) and the Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A([Idea]) --> PROP["proposed/\nstatus: draft | proposed"]
PROP -->|"approved / pending"| PEND["pending/\nstatus: approved | pending"]
PEND -->|"running"| ACT["active/\nstatus: running | blocked"]
ACT -->|"blocked (stays in active/)"| ACT
ACT -->|"completed"| COMP["completed/\nstatus: completed ✔"]
ACT -->|"cancelled"| CANC["cancelled/\nstatus: cancelled"]
PROP -->|"cancelled"| CANC
PEND -->|"cancelled"| CANC
CANC -.->|"restorable"| PROP
subgraph "vbrief/ root (singular files)"
PD["PROJECT-DEFINITION.vbrief.json\nscope registry + identity"]
PL["plan.vbrief.json\nsession tactical plan (planRef →)"]
CONT["continue.vbrief.json\ninterruption checkpoint (planRef →)"]
end
ACT -- "planRef ←" --> PL
ACT -- "planRef ←" --> CONT
ACT -- "items[].references ←" --> PD
Prompt To Fix All With AIThis is a comment left during a code review.
Path: vbrief/vbrief.md
Line: 94-118
Comment:
**Scope vBRIEF examples missing required `items` field**
The File Format section marks `items` as MUST for every vBRIEF (`! title (non-empty string), status, items (array of PlanItems)`), but neither the Epic nor Story examples include it. An agent treating these as canonical templates will produce schema-invalid files that tools like vBRIEF-Studio will reject.
At minimum both examples need `"items": []` (or populated items for an epic), e.g.:
```json
{
"vBRIEFInfo": { "version": "0.5" },
"plan": {
"title": "Auth system overhaul",
"status": "running",
"items": [],
"references": [
{ "type": "x-vbrief/plan", "url": "./active/2026-04-12-oauth-flow.vbrief.json" },
{ "type": "x-vbrief/plan", "url": "./active/2026-04-12-session-mgmt.vbrief.json" }
]
}
}
```
Same fix applies to the Story → Epic example below (line 108–118).
How can I resolve this? If you propose a fix, please make it concise.
---
This is a comment left during a code review.
Path: vbrief/vbrief.md
Line: 128
Comment:
**`planRef` type undefined for multiple scope vBRIEFs**
Lines 128, 139, 359, and 418 all use the plural "scope vBRIEF(s)" implying `planRef` can reference more than one file. The Scope Splitting step 5 explicitly says `plan.vbrief.json` should reference **child scope vBRIEFs** (plural) via `planRef`. However, the only concrete example of `planRef` in the document (Story → Epic, line 115) shows it as a single string:
```json
"planRef": "./active/2026-04-10-auth-system-overhaul.vbrief.json"
```
Without a canonical declaration of whether `planRef` is `string | string[]`, agents working on a split scope will diverge — some will produce a string, others an array — causing parse failures when tools that expect a string receive an array, or silently drop all but the first reference when the reverse occurs.
Consider either:
- Declaring `planRef` as `string | string[]` with an example showing the array form, or
- Restricting it to a single string and directing multi-scope plans to list each scope as a separate item in `plan.vbrief.json`'s `references` array instead.
How can I resolve this? If you propose a fix, please make it concise.
---
This is a comment left during a code review.
Path: vbrief/vbrief.md
Line: 330-342
Comment:
**`references` placement inconsistency: item-level vs plan-level**
The File Format section lists `references` only as an optional field on the `plan` object (`? id, narratives, edges, tags, metadata, references, etc.`), and the Epic → Stories example places `references` at `plan` level. But this `PROJECT-DEFINITION` example places `references` inside individual `items[]` entries.
The document never states whether item-level `references` is valid in the vBRIEF v0.5 schema. If `PlanItem` does not support `references`, the example would produce schema-validation errors when scanned by vBRIEF-Studio or similar tooling.
Consider adding a note confirming that `references` is a supported `PlanItem` field in v0.5, or restructure the example to put the scope registry link at the plan level (consistent with the Epic → Stories pattern).
How can I resolve this? If you propose a fix, please make it concise.Reviews (6): Last reviewed commit: "fix: address Greptile review findings ro..." | Re-trigger Greptile |
- P1: Added explicit path-resolution convention -- all url and planRef paths are relative to vbrief/ directory, not containing file location
- P2: Added specification.vbrief.json and specification-{name}.vbrief.json to directory tree diagram
- P2: Renamed 'Singular Files' heading to 'Root-Level Files' (specification-{name} and playbook-{name} are multi-instance)
- P2: Removed duplicate origin-provenance rule from Scope Splitting (already stated in numbered step 6)
MCP unavailable in this session -- used gh api fallback for review comments.
- P1: Changed plan.vbrief.json lifecycle label from Ephemeral to Session-durable in Coexistence section (consistent with Root-Level Files table and anti-pattern) - P1: Added When scope vBRIEFs exist qualifier to planRef MUST rule in Coexistence section (consistent with plan.vbrief.json section, continue.vbrief.json section, and anti-patterns) MCP unavailable in this session -- used gh api fallback for review comments.
- P1: Added cross-reference update rule to Status-Driven Moves -- agents MUST update all planRef and references[].url values in other scope vBRIEFs when moving a file between lifecycle folders - P2: Added step 5 to Scope Splitting flow -- update plan.vbrief.json and continue.vbrief.json planRef to reference child scope vBRIEFs after splitting - P2: Added minimal JSON example to PROJECT-DEFINITION section showing items-as-scope-registry with references[].url linking to individual scope vBRIEFs MCP unavailable in this session -- used gh api fallback for review comments.
- P1: Added vBRIEFInfo envelope to all 3 complete-file JSON examples (Epic->Stories, Story->Epic, PROJECT-DEFINITION) to match the MUST rule in File Format section - P2: Changed 'active scopes' to 'project scopes across all lifecycle folders' in PROJECT-DEFINITION description to avoid collision with active/ folder semantics MCP unavailable in this session -- used gh api fallback for review comments.
- P1: Broadened cross-reference update rule in Status-Driven Moves to include PROJECT-DEFINITION.vbrief.json alongside other scope vBRIEFs -- prevents items registry staleness after folder moves MCP unavailable in this session -- used gh api fallback for review comments.
Summary
Updates vbrief/vbrief.md with the new vBRIEF-centric document model defined in RFC #309.
Part of #309. Closes #310. Tracking: #338.
Changes
Checklist