| name | dia-guide |
| description | Guides users through the V-Model workflow: takes stock of the project state, recommends the next phase skill, audits handoff state, and runs the Closing Handoff after a green security audit. Explicit user command for "where do I start", "what comes next", "wo bin ich gerade", "was kommt jetzt". Never for individual phase work.
|
| disable-model-invocation | true |
V-Model Workflow Guide
What this skill does (and does not do)
/dia-guide is the read-only orientation layer of DIA, invoked
explicitly by the user. It:
- Reads
BACKLOG.md, the latest DIA commit trailers
(git log --format='%(trailers:key=DIA-Handoff,valueonly)'), and
git state
- Recommends the next phase skill in plain text
- Audits whether the last phase-end commit carries the binding
trailers (
DIA-Phase, DIA-Handoff, and DIA-Triage where triage
happened)
- Runs the Closing Handoff after a green
/security-audit
- Owns two narrow CRUD moments at workflow boundaries: (a) the
post-
/dia-realign item promotion (below), and (b) the
item-start branch creation when the user enters at A/B/C from a
fresh repo
What the guide does NOT do:
- It does not perform artifact triage. Triage lives in every phase
skill's MANDATORY Phase 0 block (see
skills/project-conventions/references/graph-invariants.md).
- It does not enforce the plan gate;
/coding runs it, the guide
only reads the result.
- It does not run consistency checks per phase. The pre-commit hook
enforces the drift-critical invariants; the full check runs before
release (security-audit Step 7 / Closing Handoff).
- It does not call other skills. It recommends; the user invokes.
Item-start branch creation
When the user picks entry-point A, B, or C in the hybrid entry-point
detection (see "Start: Determine Phase" below), the guide creates a
fresh feature branch from the configured source branch before the
phase skill takes over. The phase skill itself does not own this
because the branch must exist before the first artifact is written.
Steps:
- Read
.dia/config.toml. Extract source_branch (default
develop), mode, and profile. If the file is missing, fall
back to develop, git-only, full.
- Slug input. Ask the user (single
AskUserQuestion, short
plain-text "Other" slot) for a short kebab-case slug describing
the item. The slug becomes the suffix of the feature branch name.
- Branch creation.
git fetch origin <source_branch> --quiet || true
git checkout <source_branch>
git pull --ff-only origin <source_branch> 2>/dev/null || true
git checkout -b feature/<slug>
If the branch already exists, switch to it and warn the user. Do
not overwrite work.
- Mode-aware GitHub side-effect. If
mode = "github-sync" and an
issue already tracks this item, remind the user to assign
themselves so flow.py sync-status can mirror the assignee into
the BACKLOG Claim column once the item has a real ID. The phase
skill that first writes a backlog row calls flow.py create-issue.
- Hand-off. Print the branch name, then recommend the phase
skill: A ->
/business-analysis, B ->
/requirements-engineering, C -> /architecture.
Branch rename after RE: once the EPIC ID is known, the user can run
python3 tools/github-integration/flow.py promote-to-epic --item EPIC-NN --rename-branch to retitle the parent issue, create
sub-issues, and rename the branch to feature/epic-NN-<slug>.
Post-realign item promotion (the only CRUD moment)
/dia-realign finishes with a backlog seed: many items at
Status: Backlog, Source: REV, Notes: anticipated on a single
realign branch. Per-item branches and issues kick in only after a
user-driven triage, which the realign skill defers to the guide.
Steps:
- Read
BACKLOG.md, list items with Status: Backlog, Source: REV
whose Notes column contains anticipated.
- AskUserQuestion: which items should be promoted now?
- For each promoted item:
python3 ${DIA_PLUGIN_ROOT:-.}/tools/github-integration/flow.py create-issue --item <ID>
git tag -a <id-lower>/realigned -m "Item promoted from /dia-realign"
(Legacy <id-lower>/reverse-engineered tags from earlier runs
stay valid.)
- Update the BACKLOG row:
Status -> Ready (or In Progress if
the item already ships). Remove the anticipated note.
- Recommend the next skill: typically
/business-analysis to
validate the BA draft, or /coding for items that already ship.
Handoff state audit (read-only, on user invocation)
When the user invokes /dia-guide after a phase skill has finished,
the guide reads the team-workflow surface and reports drift between
artifact state and collaboration state. It does NOT write, fix, or
tag. Audited surfaces (full reference:
skills/project-conventions/references/team-workflow.md):
- Branch. Current branch on an item-branch per schema? If not,
warn.
- Phase tag. Did the finished phase set
<item-id>/<phase>-done?
If missing, name the phase skill that should re-run its ritual.
- Backlog row. Does the row's status reflect the phase progress?
Discrepancies mean the ritual did not write the row before the
commit.
- GitHub issue. Read
flow.py status --item <ID> and report the
snapshot (labels, checklist).
- Commit trailers. Does the last phase-end commit carry
DIA-Phase and DIA-Handoff (plus DIA-Triage where triage
happened)? Read via
git log -n 5 --format='%h %(trailers:key=DIA-Phase,valueonly) %(trailers:key=DIA-Handoff,valueonly)'.
Missing trailers are flagged with the responsible phase skill
named.
Feature-complete read (before release)
When the user asks "is this item ready for release?", the guide reads
the phase tags and reports. No tagging, no PR transition, no skill
invocation.
- Verify required phase tags:
<id>/code-done (always),
<id>/test-done (always), <id>/sec-done (when the item touches
security-relevant surface; legacy <id>/audit-done accepted).
- Run
flow.py status --item <ID> and show the result.
- Report:
Item '<ID>' phase status:
- code-done: yes/no
- test-done: yes/no
- sec-done: yes/no/n-a
Verdict: feature-complete | missing tags: <list>
If a tag is missing, name the responsible phase skill. If
feature-complete, the user can mark the PR ready
(flow.py ready-for-review --item <ID>) and run their private
release skill. The guide does neither.
Workflow Overview
Phase 0 (brownfield only): /dia-realign REVERSE WALK
Input: existing codebase + documentation (backwards up the V)
Output: plan-context.md, ADRs (post-hoc), arc42 snapshot,
FEATURE inventory, BA draft, backlog seed
|
v (forward walk starts here)
Phase 1: /business-analysis DESIGN
Output: _devprocess/analysis/BA-{PROJECT}.md (left side of the V)
|
v
Phase 2: /requirements-engineering
Output: Epics, Features, architect-handoff.md
|
v
Phase 3: /architecture
Output: ADRs, rules, navigation, plan-context.md
|
v
Phase 4: /coding IMPLEMENTATION
Load context, critical review, TDD by default,
verification gate, writeback
|
v
Phase 5: /testing VERIFICATION
Unit + integration tests, fix-loop (right side of the V)
|
v
Phase 6: /security-audit
SAST, SCA, supply chain, fix-loop, pre-release check
|
v
Closing Handoff (not a phase)
/consistency-check mode B verdict; user runs their private
release skill; post-release review queued as a BACKLOG row
In the lean profile (profile = "lean" in .dia/config.toml)
only /architecture artifacts and backlog state are binding; the
guide recommends /architecture or /coding directly and skips
BA/RE recommendations unless the user asks for them.
Phase Transitions (read-only audit)
Between phases, the guide reads project state and surfaces the next
step. Phase skills are autonomous and own their handoff ritual; the
guide observes:
- Reads the latest DIA trailers
(
git log --format='%(trailers:key=DIA-Handoff,valueonly)' -5)
and the BACKLOG rows they reference
- Reports the recommended next step in plain text ("Recommended
next:
/coding")
- The user invokes the next skill themselves
The guide does not loop, does not auto-advance, and does not block.
The trailer format is binding and lives in
skills/project-conventions/references/canonical-specs.md (Backlog
vocabulary, "Phase-end commit trailers"). A skill that finds a
DIA-Triage trailer for its item skips its Phase-0 triage question.
Ensure project structure exists
Before a phase starts, check whether the directory structure exists.
If not, initialize per /project-conventions:
mkdir -p _devprocess/{analysis/sources,requirements/{epics,features,fixes,improvements,handoff},architecture,rules,implementation/plans,context}
mkdir -p src docs scripts memory
Seed BACKLOG.md from
skills/requirements-engineering/templates/BACKLOG-TEMPLATE.md (never
touch an empty file). Full profile: seed _devprocess/rules/ from
the RULES templates. Lean profile: rules go into AGENTS.md instead
(see /dia-setup). Seed src/ARCHITECTURE.map from
ARCHITECTURE-MAP-TEMPLATE.md with empty rows.
Start: Determine Phase
Before asking the user, the guide runs a hybrid entry-point
detection: scan the project, diagnose the graph state, formulate a
recommendation. The user keeps the override.
Step 1: Scan + recommend
- Detect the project root convention (
_devprocess/ or docs/).
- Optionally run
python3 tools/consistency-check.py --check
(resolve against $DIA_PLUGIN_ROOT) for a Graph-Health snapshot.
- Infer the likely entry point:
| Observation | Recommended entry |
|---|
| No V-Model artifacts at all, empty repo or pure greenfield | /business-analysis (Project-BA) |
Code exists, no _devprocess/analysis/BA-*.md, no FEATUREs | /dia-realign |
| Legacy DIA artifacts (old IDs, HANDOFFS.md, v1/v2 layout) | /dia-realign |
profile = "lean" in .dia/config.toml | /architecture or /coding directly |
| Project-BA exists as Draft, not yet validated | /business-analysis Validation Mode |
| Project-BA validated, user wants a new epic / feature | /business-analysis (Item-BA) |
| Project-BA validated and Item-BA exists, no EPIC/FEAT yet | /requirements-engineering |
| Features exist, no ADRs or plan-context.md | /architecture |
| plan-context.md exists, no recent code changes | /coding |
| Coding done, no test coverage / failing tests | /testing |
| Tests green, no security audit | /security-audit |
| Everything closed, release pending | Closing Handoff (/consistency-check mode B + /release if configured) |
| Graph-Health shows many orphans or dead links | /consistency-check + cleanup first |
Step 2: Present recommendation + alternatives
Show the user one AskUserQuestion with the recommendation as the
first option and the manual list as alternatives:
Graph-State (letzter Check {date}):
- Epics {n}, Features {n} (Released {a}, Building {b}, Planned {c}, Candidates {d}),
ADRs {n}, FIX/IMPs {n}, offene Luecken {n}.
Empfehlung basierend auf dem Graph-State: {recommended entry}
Oder du waehlst manuell aus:
A0 /dia-realign (brownfield oder Legacy-Upgrade)
A /business-analysis (BA von Beginn)
B /requirements-engineering
C /architecture
D /coding
E /testing
F /security-audit
G Closing Handoff (Audit ist gruen, Cycle abschliessen)
H /consistency-check (nur Graph-Pflege)
I Orientierungs-Interview (helfe beim Entscheiden)
If the user picks the recommended option or says "ok/go/next", start
that phase. If the user picks a different option, start that one. If
the user wants an interview, ask short follow-up questions.
Step 3: Phase entry with consistency hint
Beim Start der gewaehlten Phase zeigt der Guide eventuelle
Konsistenz-Luecken aus dem Snapshot, die fuer die Phase relevant sind.
Beispiel: vor /architecture "Du hast 3 Features ohne Epic-Parent,
das sollten wir vorher klaeren."
Recommended next step per phase
The guide prints the recommendation; the user types the slash
command. One line each; input paths are what the next skill loads.
| Phase complete | Recommend | Input for the next skill |
|---|
| /dia-realign | /business-analysis (always; the BA draft needs validation) | _devprocess/analysis/BA-{PROJECT}.md (Draft) |
| /business-analysis | /requirements-engineering | BA-{PROJECT}.md + Item-BA + last DIA trailers |
| /requirements-engineering | /architecture | _devprocess/requirements/handoff/architect-handoff.md |
| /architecture | /coding | _devprocess/requirements/handoff/plan-context.md |
| /coding | /testing | new code + updated FEATURE specs |
| /testing | /security-audit | codebase + coverage report |
| /security-audit | Closing Handoff | audit report verdict |
Closing Handoff
A short guide output, not a phase. Fires after /security-audit
returns a non-red verdict and the fix-loop is closed.
- Suggest
/consistency-check mode B (user command; the skill is
explicit-only). It confirms BA validation, final Feature/ADR
states, arc42 and plan-context coherence, and returns
Release-Ready: yes/no.
- On Release-Ready: yes, print the closing report: features
implemented/deferred/removed, bugs resolved/open, security P0/P1
state, test coverage, artifacts finalized. Then: "If you have a
private release skill configured, run it now. The cycle is
complete; iterate from
/business-analysis or
/requirements-engineering."
- Queue the post-release review as a BACKLOG row under
## Deferred / Ideas: type BL-Item, note
post-release BA review, revisit {date + scope window: Simple Test 1-3d, PoC 7-14d, MVP 14-30d}, refs to the hypotheses to
re-validate. No separate handoff file.
- On Release-Ready: no, name the responsible skill and the items
to fix. Cycle closure resumes after the fix.
Artifact Directory Structure
_devprocess/
analysis/ <- flat: BA-*, EXPLORE-*, AUDIT-*, RESEARCH-* (+ sources/)
requirements/
epics/EPIC-{nn}-{slug}.md
features/FEAT-{ee}-{ff}-{slug}.md
fixes/FIX-*.md improvements/IMP-*.md
handoff/architect-handoff.md plan-context.md
architecture/
ADR-{nn}-{slug}.md arc42.md
decisions/README.md <- router table (lean profile)
rules/ <- full profile; lean consolidates into AGENTS.md
implementation/plans/PLAN-*.md
context/
BACKLOG.md <- single source of truth for state and graph
BACKLOG-HISTORY.md <- append-only session history
METRICS.md <- signal layer
SYSTEM-MAP.md <- navigation map (lean profile)
src/
ARCHITECTURE.map <- wayfinder: concept -> entry-point -> ADR
{module}/README.md <- optional module wayfinder
Traceability Chain
BA document (Why?)
-> Epic -> Feature -> ASR -> ADR -> plan-context.md (ref index)
-> Critical Review -> PLAN (tasks, TDD gates)
-> Code (commits cite PLAN + DIA trailers)
-> Tests -> fix-loop -> Security Audit -> fix-loop
-> Backlog -> Closing Handoff (mode B + optional /release)
Backchannel: changes in every phase flow back into the source
artifacts. At the end, the documentation reflects the actual state.
Conventions
This workflow follows /project-conventions: file names with 2-digit
counters and kebab-case, English skill text with user-language
dialog, artifacts under _devprocess/, lifecycle BACKLOG -> SPEC ->
PLAN -> IMPL -> UPDATE.
V-Model as a decision graph, not a straight path
The overview shows phases linearly for readability. In practice the V
is a decision graph with three cross-phase feedback triggers:
- Mid-course bug discovery (in
/coding): pause, FIX triage,
root cause, backlog entry, then the fix. Commit cites both items.
- Mid-course design discovery (in
/coding): pause, amend or
supersede the ADR, update dependent artifacts, then continue.
- Mid-course requirements discovery (in
/architecture or
/coding): route the gap back to the FEATURE spec, re-run the
Plan Coverage Gate, then continue.
Each trigger: STOP, triage, minimal root-cause note, backlog entry
BEFORE any change, change with a citing commit, final sync. When a
phase returns to an earlier phase, downstream phases do NOT re-run
automatically; the user decides, the backlog entry carries the
decision.
Dialog handoff (RE -> Architecture)
architect-handoff.md carries a ## Dialog section as a
bidirectional channel between RE and architecture. Rules: not a
blocker (only the dependent item waits); try to self-answer from
artifacts first; surface ALL unresolved entries in ONE
AskUserQuestion per session; append-only, answered entries get
Status: Resolved. Questions from the coder to the architect do NOT
use a Dialog section (plan-context is a pure ref index); they go into
the BACKLOG row's Notes column or a PR comment.
Concurrent-agent coordination
When multiple human-agent pairs work in parallel, the backlog is the
single synchronization point. The Claim column encodes ownership:
{pair-id} @ {YYYY-MM-DD}; empty means free.
Claim protocol:
- Claim on phase start, BEFORE any other write.
- Release on phase end or Status: Done.
- Claim conflict: never overwrite. Surface via AskUserQuestion:
ask the other pair to release, take over with acknowledgement,
work on a different item, or split the row. Takeovers append a
dated note to the Notes column.
- Stale claims (older than the phase-expected duration, e.g. 14
days) get flagged in the next audit.
- Claim history is append-additive: current claim in the cell,
previous claims as dated notes.
Pair-id convention: {human-handle}-{model} (e.g.
sebastian-opus-4.7). No central lock service: the backlog is the
lock, and a merge conflict on the Claim column IS the collision
surfacing at the right moment.
Signal layer
Lightweight signals live in _devprocess/context/METRICS.md (seeded
from templates/METRICS-TEMPLATE.md): cycle time per FEATURE and
drift count (written by /coding), hypothesis validation
(/business-analysis), phase transition and trigger counts (the
firing skill). Append-additive, written inside existing phase
actions, no separate ceremony. Consumers read it to decide whether a
reconciliation run or post-release review is due.
User Interaction Protocol
Binding for this guide and every phase skill:
skills/project-conventions/references/user-interaction-protocol.md
(one question per turn, AskUserQuestion, Pro/Con per option,
recommended option first).
Keywords
V-Model, workflow, full cycle, new project, development cycle, from
analysis to implementation, full run, guide, phase transitions,
closing handoff, orientation