Artifacts
Every V-Model phase produces artifacts that feed the next phase. All user-project artifacts split across four locations by purpose:
src/ARCHITECTURE.mapand module READMEs insrc/{module}/README.mdfor the wayfinder layer (concept-to-file lookup)_devprocess/rules/for the rule sets (stable truths)_devprocess/context/BACKLOG.mdfor state (single source of truth)- everything else under
_devprocess/for detail artifacts (audit trail of decisions and process)
This split is the structural fix for the most common drift class: status fields stuck at "Planned" while the code shipped. See the Three-layer documentation model.
Directory tree
{project}/
src/
ARCHITECTURE.map Wayfinder root: concept | entry-point | adr | how-to-extend
{module}/README.md Module wayfinder (one per substantive module)
_devprocess/
analysis/ Flat. BA layers (Project-BA + Item-BA), EXPLORE, AUDIT, RESEARCH.
BA-{PROJECT}.md Phase 1: Project-BA singleton (product layer)
BA-EPIC-{nn}-{slug}.md Phase 1: Item-BA per new epic (mandatory before EPIC)
BA-FEAT-{ee}-{ff}-{slug}.md Phase 1: Item-BA per new feature (mandatory before FEAT)
BA-IMP-{ee}-{ff}-{nn}-{slug}.md Phase 1: Item-BA per improvement (optional)
BA-FIX-{ee}-{ff}-{nn}-{slug}.md Phase 1: Item-BA per fix (optional)
EXPLORE-{PROJECT}.md Phase 1: Exploration Board (PoC/MVP)
RESEARCH-{TOPIC}.md Phase 1: Discovery research notes
AUDIT-{PROJECT}-{YYYY-MM-DD}.md Phase 6: Security audit report (flat, no subfolder)
sources/ User-supplied source files (only subfolder under analysis)
SOURCE-{name}.{ext}
requirements/
epics/
EPIC-{nn}-{slug}.md Phase 2: Epic spec
features/
FEAT-{ee}-{ff}-{slug}.md Phase 2: Feature spec (epic-local numbering)
fixes/
FIX-{ee}-{ff}-{nn}-{slug}.md Phase 4 / bug-capture: Fix detail
improvements/
IMP-{ee}-{ff}-{nn}-{slug}.md Phase 4: Improvement detail
handoff/
architect-handoff.md Phase 2 -> 3: aggregated ASRs + NFRs
plan-context.md Phase 3 -> 4: tech stack + integrations
architecture/
ADR-{nn}-{slug}.md Phase 3: Architecture Decision Record (MADR)
arc42.md Phase 3: arc42 documentation
rules/ Stable rule sets, hard cap 500 lines TOTAL
technical.md Stack, conventions, library choices
design.md UI rules (only if project has UI)
domain.md Domain glossary, business invariants
implementation/
plans/
PLAN-{nn}-{slug}.md Phase 4: persisted implementation plan
context/
BACKLOG.md Single source of truth for project state
(per BACKLOG-TEMPLATE.md). Status, phase,
last-change, and claim live HERE.
HANDOFFS.md Append-only phase handoffs log (all phases)
METRICS.md Signal layer (per METRICS-TEMPLATE.md):
cycle time, drift count, hypothesis status,
phase transitions, cross-phase triggersThere is no analysis/security/ subfolder. Audit reports are flat under analysis/.
There is no 20_bugs.md file. Bugs live as FIX-{ee}-{ff}-{nn} rows in BACKLOG.md plus a detail file at _devprocess/requirements/fixes/FIX-{ee}-{ff}-{nn}-{slug}.md.
Wayfinder layer
The wayfinder is the canonical answer to "where does X live in the code?". A model can grep one file and get a single, current, machine-readable answer. The wayfinder updates with every code edit that creates or renames an entry-point. Detail artifacts (ADRs, features) reference concepts by name, not by file path.
src/ARCHITECTURE.map
A pipe-delimited table:
concept | entry-point | adr | how-to-extend
---------------------|--------------------------------------|----------|----------------
semantic-search | src/search/semantic.ts:export class | ADR-03 | Add a new SearchProvider in src/search/providers/
embedding-provider | src/embed/provider.ts:export factory | ADR-07 | Implement EmbeddingProvider interface
backlog-parser | src/backlog/parser.ts:export class | ADR-12 | Extend ParserRule registryModule READMEs
Each substantive module under src/{module}/ carries a 5- to 30-line README.md describing what the module owns, the entry points, the ADRs it implements, and how to extend it. Module READMEs do not duplicate detail artifacts; they point to them.
JSDoc / docstring headers
Every exported entry-point that ARCHITECTURE.map references carries a header comment with: one-line purpose, the ADRs it implements, and a link to the feature id it serves.
Rule sets
Stable truths that change rarely. Hard cap 500 lines total across the three files. If you cross the cap, condense or move detail to an ADR.
_devprocess/rules/technical.md
Stack, libraries, conventions, language version, build tool, deployment target. The technical bedrock that every coding decision stands on.
_devprocess/rules/design.md (only if UI)
UI design system, component library, accessibility rules, typography, spacing, colour tokens.
_devprocess/rules/domain.md
Glossary of domain terms, business invariants, regulated language. What an Order is, what a Member is, what counts as revenue.
Detail artifacts
Detail artifacts hold the substance that does not age fast: problem, decision, rejected alternatives, success criteria, reasoning. They do not list current code paths in core sections.
- ADRs are allowed an optional
## Implementation Notesappendix that may go stale. - FEATUREs are allowed an optional
## Code Pointerappendix that references an ARCHITECTURE.map concept name, not a file path. - FEATUREs (since v3.2.0) carry
subtype: user-facing | libraryin frontmatter and a mandatory## Activation Pathsection in the Definition of Done. The Activation Path is a Type/Identifier pair that names how a user or caller reaches the FEATURE. See Conventions: required frontmatter and the requirements engineering guide for the full contract.
Living documents
Artifacts are not one-off specifications. They are continuously updated during and after implementation. At the end of a V-Model cycle, every detail artifact reflects the actually-implemented state, not the originally-planned state. State lives in the backlog row, not in the artifact frontmatter, so a status change touches one place.
See Living Documents.
The three context files
BACKLOG.md, HANDOFFS.md, and METRICS.md serve different purposes:
BACKLOG.mdis the single source of truth for project state. Follows the binding format inskills/requirements-engineering/templates/BACKLOG-TEMPLATE.md: dashboard on top, entries grouped by Epic (FEAT-EE-FF,FIX-EE-FF-NN,IMP-EE-FF-NN,PLAN-NN,ADR-NNrows with status, phase, priority, Claim ({pair-id} @ YYYY-MM-DD), Refs, source, commit), standalone items for epic-free findings, deferred items. Every phase skill that changes project state updates this file BEFORE touching the artifact body. The Claim column lets multiple human-agent pairs work the backlog concurrently without a central lock service. The pair-id convention is{human-handle}-{model}, for exampleseb-opus-4-7.HANDOFFS.mdis an append-only phase handoffs log. Each phase skill appends one entry at the end of its run with artifacts produced, handoff context (open questions, assumptions, risks), and the next phase. the Closing Handoff also appends arelease-to-baentry that queues the BA Post-Release Review.METRICS.mdis the signal layer. Five append-additive tables seeded fromskills/dia-guide/templates/METRICS-TEMPLATE.md: cycle time per FEAT, drift count (wayfinder vs. real code), BA hypothesis validation status, phase transition counts, cross-phase trigger counts. Writes happen inside existing phase actions, no separate metrics-collection ceremony. Rows are never deleted.
Traceability chain
Project-BA + Item-BA in analysis/ (Why?)
-> Epic / Feature spec with `ba-ref:` (What?)
-> Feature spec (What, concrete?)
-> ASR (What is architecture-relevant?)
-> ADR (How do we solve it?)
-> Wayfinder + plan-context.md (Where does it live?)
-> PLAN-NN (Concrete tasks)
-> Code (Implementation)
-> Tests (Does it work?)
-> Security Audit (Is it safe?)
-> Closing Handoff (consistency-check mode B + optional release)
-> BA Post-Release Review (Did the hypothesis hold?)Every step writes back into the source artifacts (substance) and into the backlog (state). Status changes always go through the backlog row first, so the chain is never silently broken.
Project initialization
When starting a new project, initialize the structure:
mkdir -p _devprocess/{analysis/sources,requirements/{epics,features,fixes,improvements,handoff},architecture,rules,implementation/plans,context}
touch _devprocess/context/HANDOFFS.md
cp skills/requirements-engineering/templates/BACKLOG-TEMPLATE.md \
_devprocess/context/BACKLOG.md
cp skills/dia-guide/templates/METRICS-TEMPLATE.md \
_devprocess/context/METRICS.md
cp skills/project-conventions/templates/technical.md \
_devprocess/rules/technical.md
cp skills/project-conventions/templates/domain.md \
_devprocess/rules/domain.md
# only if the project has UI surface:
cp skills/project-conventions/templates/design.md \
_devprocess/rules/design.md
touch src/ARCHITECTURE.mapBACKLOG.md, METRICS.md, and the rule files are seeded from the templates (not created empty) so the first write already follows the binding format. Replace {PROJECT} in the header with the actual project name.
The /project-conventions skill runs this for you if you invoke it.
.dia/config.toml (activation surface)
Separate from the V-Model artifact tree, every DIA-aware project carries one configuration file at the repo root:
{project}/
.dia/
config.toml Mode, anchor files, source branch, GitHub projectThis file is written by /dia-setup and committed to the repo so the team shares the active mode. Schema:
mode = "git-only" # "off" | "git-only" | "github-sync"
anchor_files = [ # files that carry a managed
"CLAUDE.md", # anchor block; managed by
"AGENTS.md", # tools/dia-setup/anchor.py
"GEMINI.md",
".cursorrules",
]
source_branch = "develop" # base for new feature branches
# and the draft-PR target
[github] # only honored in github-sync
project_number = 7 # GitHub Projects v2 number
status_field = "Status" # single-select field nameSee Three modes for what each value means and dia-setup guide for how the file is created.
BACKLOG status vocabulary
The Status column in BACKLOG.md and the GitHub Project Status field share one vocabulary:
| Status | Meaning |
|---|---|
Backlog | Captured but not yet prioritized; also where blocked or deferred items rest |
Ready | Prioritized, scheduled for an iteration, free to claim |
In Progress | Someone is actively working on this item |
In Review | PR open, awaiting review or quality gates |
Done | Merged, finished. Row stays under its Epic. |
Projects that predate the stage-3 migration may still carry the legacy values (Planned, Active, Review, Waiting, Deferred). Run tools/migration/migrate_status_vocabulary.py (or /dia-migration, which calls it as Phase 5b) to migrate. flow.py sync-status includes a legacy translation table that resolves the old values until the migration runs.
The independent Phase column (Released, Building, Planned, Candidates) describes the epic-level temporal stage of an item and is orthogonal to Status. The phase tags (<id>/ba-done, ..., <id>/sec-done) are git tags, not column values; they record which V-Model phases are complete for the item.
See also
- Conventions: naming rules, frontmatter, language conventions
- V-Model concept: why this structure
- Living Documents concept
- Three-layer documentation model: the rationale behind the wayfinder / rules / backlog / detail split