build-epic
story: e20s05
Section titled “story: e20s05”Build Epic
Section titled “Build Epic”Scope: one story. Called by orchestrate-project Phase 4. Not a replacement for orchestrate-project.
Orchestrates the build flow for a single epic: survey → plan tasks → kickoff → TDD → verify → audit → commit → release.
HARD GATE — Set
specs/state.yamlactive_flow: build_epicandactive_epic: eNNbefore starting.HARD GATE — Not on
main/masterbefore step 3 (kickoff-branch).
Nine steps (epic_cycle in state.yaml)
Section titled “Nine steps (epic_cycle in state.yaml)”| Step | Skill / action |
|---|---|
| 0 | security-review — threat-model epic scope → specs/security/epics/<id>/THREAT_MODEL.md |
| 1 | survey-context — confirm epic + story |
| 2 | plan-work — flesh out story tasks[] in specs/epics/eNN-slug/epic.yaml |
| 3 | kickoff-branch — feature branch + clean baseline |
| 4 | develop-tdd — red-green per task |
| 5 | verify-work — UAT + mechanical gates |
| 6 | audit-code — non-optional gate (pass/fail; fail → loop back to step 4) |
| 7 | commit-message — Conventional Commits draft |
| 8 | release-branch — PR or solo land (supports --squash-state) |
Process
Section titled “Process”- Read
specs/state.yaml,specs/execution-status.yaml,specs/release-plan.yaml, activespecs/epics/eNN-slug/epic.yaml. - Step 0 — Threat Model: Run
security-reviewagainst the epic’s scope (read from the epic capsule). Outputspecs/security/epics/<epic-id>/THREAT_MODEL.mdwith surface area, vulnerability categories, risk level, and mitigation guidance. - Assess Impact (Step 2): Before writing tasks, run
assess-impact --lightweighton the proposed change. If the risk score exceeds 7, gate — require agrill-mesession. Write the impact report tospecs/IMPACT-<epic>-<story>.md. For net-new code with no existing dependents, skip. - BCP Tracking (Step 2): After
plan-workcompletes, read thebcps:count (Business Complexity Points story size) from the epic capsule and carry it intostate.yamlasepic_cycle.story_bcps = N. - BCP Plus (Step 2, optional): When the epic capsule carries a
bcp_plus_breakdown(13-dimension sizing), also carry it intostate.yamlasepic_cycle.bcp_plus. The breakdown maps each of the 13 dimensions to an integer count. NFR dimensions (11–13) that are N/A per the NFR Gate may be set to 0. - If
epic_cycle.stepmissing, set to1. - Run only the current step (resume mode) unless user asked for full auto-run.
- After step verify passes, increment
epic_cycle.stepinstate.yaml(orbash scripts/bp-yaml-set.shif available). - On story complete, set
execution-status.yamlstory key todone; runbash scripts/sync-status-from-epics.sh. - Traceability refresh: Before step 8 (release-branch), run
bash scripts/trace-stories.shto regeneratespecs/traceability-matrix.json,specs/TRACEABILITY_LATEST.md, and thespecs/codebase-wiki/OKF bundle. Surface dark/orphan/stale findings for the just-built epic in your verify summary. Ifscripts/trace-stories.shis missing or fails, note “trace skipped” and continue — trace failure must be visible, not silent (blocking is gate-trace’s job, e38s06).
9b. OKF wiki refresh (e39s08): Before step 8, run maintain-wiki INGEST to refresh the OKF wiki bundle:
bash scripts/decompose-conventions.shbash scripts/generate-agent-guide.shIf any script is missing or fails, note “OKF wiki refresh skipped” and continue. This is non-blocking — stale concepts are caught by LINT in verify-work Phase 3.
Step 6 — audit-code gate (non-optional)
Section titled “Step 6 — audit-code gate (non-optional)”After step 5 (verify-work) completes successfully, step 6 runs audit-code automatically in --gate mode:
- Run audit: Invoke
audit-code --gateon the complete diff for this story. - Pass (exit 0): All checklist sections pass → advance to step 7 (commit-message). Record
epic_cycle.audit_result: passinstate.yaml. - Fail (exit 1): One or more checklist sections fail → reset
epic_cycle.current_stepto4(develop-tdd) and add the failing section IDs tocompleted_stepsas"1,2,3,4,5,6(fail: ...)". Recordepic_cycle.audit_result: failinstate.yaml. Do NOT advance past step 6 until audit passes. - Audit artifact: Full audit report saved to
specs/verifications/AUDIT-<epic>-<story>.mdregardless of pass/fail, for reviewer traceability. - Enforce F.I.R.S.T: After audit-code passes, run
enforce-first --quickon new/modified tests. Append F.I.R.S.T violations (if any) to the audit report. Failing F.I.R.S.T criteria trigger the same loop-back to step 4.
–fast mode
Section titled “–fast mode”Coalesces read-and-report steps to reduce token overhead. Activate with build-epic --fast.
| Normal | –fast | Change |
|---|---|---|
| Step 1 (survey-context) | 1+2 together | survey + plan in one invocation |
| Step 2 (plan-work) | (absorbed into 1) | — |
| Step 3 (kickoff-branch) | Step 2 | unchanged, sequential |
| Step 4 (develop-tdd) | Step 3 | unchanged, sequential |
| Step 5 (verify-work) | Step 4 | unchanged, sequential |
| Step 6 (audit-code) | 5+6 together | audit + commit-message in one invocation |
| Step 7 (commit-message) | (absorbed into 6) | — |
| Step 8 (release-branch) | Step 7 | unchanged, sequential |
Total invocations: 8 → 6 per story.
Rules:
- Steps 3/4/5/8 (kickoff, develop, verify, release) still run sequentially — they require user interaction or branch state.
--fastdoes NOT skip any checklist items; it only coalesces steps that are pure read-and-report.- Record
epic_cycle.fast_mode: trueinstate.yamlwhen this flag is active.
Handoff
Section titled “Handoff”Write handoff.next_skill and handoff.context in state.yaml when pausing mid-epic.
Verify
Section titled “Verify”→ verify: test -f specs/state.yaml && test -f specs/execution-status.yaml && test -f specs/release-plan.yaml && test -d skills/assess-impact && test -d skills/audit-code && test -d skills/security-review && echo "OK: build-epic dependencies present" || echo "FAIL"
<!– story: e38s02 –>