create-issflow 1.2.1 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/bin/cli.js +21 -7
- package/package.json +1 -1
- package/template/.claude/agents/e2e-runner.md +1 -0
- package/template/.claude/agents/planner.md +17 -2
- package/template/.claude/agents/synthesizer.md +3 -0
- package/template/.claude/agents/test-author.md +6 -2
- package/template/.claude/commands/change-request.md +10 -2
- package/template/.claude/commands/log-issue.md +3 -1
- package/template/.claude/commands/overview.md +34 -5
- package/template/.claude/commands/phase.md +28 -5
- package/template/.claude/commands/propose.md +18 -7
- package/template/.claude/commands/quick.md +6 -2
- package/template/.claude/commands/release.md +55 -0
- package/template/.claude/commands/replan.md +12 -6
- package/template/.claude/commands/sprint.md +238 -0
- package/template/.claude/commands/uat.md +36 -0
- package/template/.claude/commands/unstuck.md +1 -1
- package/template/.claude/hooks/context-guard.js +11 -10
- package/template/.claude/hooks/session-start.js +18 -1
- package/template/.claude/istartsoft-flow/METHODOLOGY.md +127 -21
- package/template/.claude/templates/proposal.html +87 -101
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: The Scrum sprint layer — group PLAN phases into time-/scope-boxed sprints and run the full ceremony set (planning → standups → review/demo → retrospective → close) with burndown + velocity. AUTO-facilitated: the orchestrator runs every ceremony itself and drives the sprint end-to-end without stopping, pausing only at the real hard-stops. The layer between PLAN (backlog) and PHASE (build loop).
|
|
3
|
+
argument-hint: [run|plan|standup|review|retro|close|status] [sprint number · "dry-run"]
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Caveman ULTRA mode. You are the ORCHESTRATOR / SCRUM MASTER. You FACILITATE the
|
|
7
|
+
ceremonies and ROUTE build work to subagents — you do NOT implement or debug yourself.
|
|
8
|
+
|
|
9
|
+
Subcommand: $ARGUMENTS (default: `status`)
|
|
10
|
+
|
|
11
|
+
DRY-RUN: if `$ARGUMENTS` contains `dry-run`/`--dry-run`, do the full analysis but
|
|
12
|
+
EXECUTE NOTHING — print the ACTION PLAN (which phases the sprint would commit,
|
|
13
|
+
ceremonies it would run, points/capacity) and STOP. No sprint file is written, no
|
|
14
|
+
phase runs. (METHODOLOGY → Dry-run.)
|
|
15
|
+
|
|
16
|
+
Hierarchy: **PLAN (product backlog) → SPRINT (committed slice of phases) → PHASE
|
|
17
|
+
(the build loop)**. A sprint groups consecutive PLAN phases behind ONE sprint goal
|
|
18
|
+
and ships ONE deployable increment. Phases still run via `/phase` exactly as before
|
|
19
|
+
— the sprint layer wraps them with planning, standups, a review, and a retro.
|
|
20
|
+
|
|
21
|
+
**AUTONOMY (read first).** Sprint planning only SLICES the already-approved
|
|
22
|
+
`docs/PLAN.md` — the requirements gate already happened at `/overview` plan approval —
|
|
23
|
+
so the ceremonies are AUTO-safe and the orchestrator runs them WITHOUT stopping.
|
|
24
|
+
- **AUTO (default):** `/sprint run` drives the whole sprint hands-off — plan → loop
|
|
25
|
+
`/phase` → standup tick after each phase → review → retro → close → roll forward →
|
|
26
|
+
start the next sprint. Decisions (points, scope-fit, accept/carry) are made from the
|
|
27
|
+
PLAN + velocity, logged, and the run continues. Pause ONLY for a methodology
|
|
28
|
+
hard-stop (deploy/irreversible/outbound, security-sensitive change, contradictory
|
|
29
|
+
spec, or debug budget spent with no independent slice left).
|
|
30
|
+
- **GUIDED:** each ceremony presents its result and waits for you before the next.
|
|
31
|
+
The PLAN-approval, commercial (`/propose`, `/change-request`), and release
|
|
32
|
+
(`/release`, `/uat`, prod promote) gates are SEPARATE and stay interactive in both
|
|
33
|
+
modes — the sprint layer never auto-passes them.
|
|
34
|
+
|
|
35
|
+
Artifacts: `docs/sprints/sprint-<n>.md` (one per sprint — goal, committed phases,
|
|
36
|
+
burndown, standups, review, retro) and `docs/sprints/VELOCITY.md` (the rolling
|
|
37
|
+
velocity table). Create `docs/sprints/` if absent. STATE.md carries the active sprint.
|
|
38
|
+
|
|
39
|
+
=====================================================================
|
|
40
|
+
## ROUTER
|
|
41
|
+
|
|
42
|
+
- `run` → §RUN (AUTO end-to-end driver — the default way to use this)
|
|
43
|
+
- `plan` → §1 PLANNING
|
|
44
|
+
- `standup` → §2 STANDUP
|
|
45
|
+
- `review` → §3 REVIEW
|
|
46
|
+
- `retro` → §4 RETRO
|
|
47
|
+
- `close` → §5 CLOSE
|
|
48
|
+
- `status` → §STATUS (default when no subcommand)
|
|
49
|
+
|
|
50
|
+
=====================================================================
|
|
51
|
+
## §1 — SPRINT PLANNING (ceremony)
|
|
52
|
+
|
|
53
|
+
Pre: `docs/PLAN.md` exists AND its `> Approval:` header reads `approved …` (the
|
|
54
|
+
PLAN-APPROVAL gate, hard rule 13). Still `PENDING` / missing → STOP, route to the
|
|
55
|
+
`/overview` plan-approval gate. A sprint only SLICES an already-signed-off plan.
|
|
56
|
+
|
|
57
|
+
a. **Estimate (one-time, lazy).** Every pending PLAN phase needs a points estimate
|
|
58
|
+
(Fibonacci `1 2 3 5 8`, relative effort from the phase `slice` + `acceptance`
|
|
59
|
+
size; a phase that feels `>8` is too big — note it for `/replan` to split). If the
|
|
60
|
+
planner already wrote `[N pts]` tags, reuse them; otherwise assign now and write
|
|
61
|
+
them back into PLAN.md next to each phase header.
|
|
62
|
+
|
|
63
|
+
b. **Capacity.** Read `docs/sprints/VELOCITY.md`.
|
|
64
|
+
- Have history → capacity = rolling-average completed velocity (last ≤3 sprints).
|
|
65
|
+
- First sprint (no history) → capacity = `flow-config.json` `sprint.defaultCapacity`
|
|
66
|
+
(fallback 8 pts).
|
|
67
|
+
|
|
68
|
+
c. **Commit.** Walk the PLAN in dependency order, pull pending phases into this sprint
|
|
69
|
+
until the next phase would exceed capacity. Don't split a phase across a sprint
|
|
70
|
+
boundary; respect dependencies (never commit a phase whose dependency is in a later
|
|
71
|
+
sprint). Keep one coherent theme → that becomes the **sprint goal** (one line: the
|
|
72
|
+
user-visible increment this sprint ships). Optionally mark 1 phase `stretch`.
|
|
73
|
+
|
|
74
|
+
d. **Write** `docs/sprints/sprint-<n>.md` from the template below; set
|
|
75
|
+
`status: active`; seed the burndown tick 0 = total committed points. Group the
|
|
76
|
+
committed phases under a `## Sprint <n>` header in PLAN.md if not already grouped.
|
|
77
|
+
Update STATE.md: `sprint: <n> (active)`.
|
|
78
|
+
|
|
79
|
+
AUTO: auto-commit the computed backlog, log the goal + points + capacity, continue.
|
|
80
|
+
GUIDED: present goal + committed phases + points, wait for confirm.
|
|
81
|
+
|
|
82
|
+
=====================================================================
|
|
83
|
+
## §2 — STANDUP (auto-tick — fires once per phase close inside an active sprint)
|
|
84
|
+
|
|
85
|
+
The AI dev loop has no calendar days, so the "daily" standup is rebound to a
|
|
86
|
+
**per-phase-close tick** — the natural cadence of progress. After each `/phase` CLOSE
|
|
87
|
+
while a sprint is active (the `/phase` command fires this; `/sprint run` fires it
|
|
88
|
+
inline; or run `/sprint standup` by hand):
|
|
89
|
+
|
|
90
|
+
1. Append a standup line to the active sprint doc:
|
|
91
|
+
`- tick <k> (Phase <p> <done|blocked>): done <what>; next <phase/none>; blockers <none|ref>`
|
|
92
|
+
2. Update the **burndown**: append a row `tick <k> | Phase <p> <state> | <remaining pts>`
|
|
93
|
+
where remaining = committed points minus points of phases now `done`. Re-render the
|
|
94
|
+
ASCII sparkline.
|
|
95
|
+
3. Surface blockers immediately if any (a blocked phase is the standup's whole point).
|
|
96
|
+
AUTO: the blocker is already parked per the circuit breaker — just record it here
|
|
97
|
+
and keep the burndown honest. GUIDED: relay it.
|
|
98
|
+
|
|
99
|
+
Keep it ONE line per tick. No prose. The burndown is the signal.
|
|
100
|
+
|
|
101
|
+
=====================================================================
|
|
102
|
+
## §3 — SPRINT REVIEW / DEMO (ceremony — at sprint boundary)
|
|
103
|
+
|
|
104
|
+
Run when every committed phase is `done` or `blocked` (sprint timebox reached).
|
|
105
|
+
|
|
106
|
+
a. **Demo.** Summarise the shipped increment: for each accepted phase, the
|
|
107
|
+
user-visible behaviour now working (pull from the phase `slice` + `docs/ENDPOINTS.md`).
|
|
108
|
+
This is the "done = demoable" check — a phase that can't be demoed isn't done.
|
|
109
|
+
|
|
110
|
+
b. **Boundary audits.** Run the whole-product audits ONCE for the increment (cheaper
|
|
111
|
+
here than per-phase, broader than the inline gates):
|
|
112
|
+
`/ui-audit` (if UI shipped) · `/qa-audit` · `/security-audit`. Fold the scores in.
|
|
113
|
+
Open BLOCKER/HIGH/CRITICAL → route to FIX (`debugger`/`implementer`), re-audit.
|
|
114
|
+
(Security findings remain an autonomy hard-stop.)
|
|
115
|
+
|
|
116
|
+
c. **Accept / carry.** Mark each phase `accepted` (demoed + audits clean) or
|
|
117
|
+
`carried` (not done / failed audit → rolls to the next sprint at §5).
|
|
118
|
+
|
|
119
|
+
d. Write the `## Review` block into the sprint doc (demo bullets, audit scores,
|
|
120
|
+
accepted vs carried).
|
|
121
|
+
|
|
122
|
+
=====================================================================
|
|
123
|
+
## §4 — RETROSPECTIVE (ceremony — after review)
|
|
124
|
+
|
|
125
|
+
Inspect-and-adapt on the PROCESS, not the product. Write the `## Retro` block:
|
|
126
|
+
|
|
127
|
+
- **went well** — what to keep (2–4 bullets).
|
|
128
|
+
- **didn't** — friction, repeated debugging, churned tests, estimate misses.
|
|
129
|
+
- **actions** — each a CONCRETE, routed change, not a wish. Route every action to a
|
|
130
|
+
durable home so it actually happens:
|
|
131
|
+
- a recurring bug/root-cause pattern → it's already in `docs/ISSUES.md`; note the ref.
|
|
132
|
+
- a workflow/structure change → `/log-decision` (`docs/DESIGN_LOG.md`).
|
|
133
|
+
- an ops/incident lesson → `/runbook`.
|
|
134
|
+
- a plan correction (re-estimate, split, reorder) → `/replan`.
|
|
135
|
+
- a durable, cross-project lesson → flag for `/store-wisdom`.
|
|
136
|
+
- **estimate accuracy** — committed vs completed points; note phases that blew their
|
|
137
|
+
estimate so the next sprint's poker is calibrated.
|
|
138
|
+
|
|
139
|
+
AUTO: auto-apply the routed actions (log/replan) and continue. GUIDED: list actions,
|
|
140
|
+
confirm before applying.
|
|
141
|
+
|
|
142
|
+
=====================================================================
|
|
143
|
+
## §5 — SPRINT CLOSE
|
|
144
|
+
|
|
145
|
+
a. **Velocity.** completed = sum of `accepted` phase points. Append a row to
|
|
146
|
+
`docs/sprints/VELOCITY.md`:
|
|
147
|
+
`| <n> | <committed> | <completed> | <goal met? yes/no> |` and recompute the rolling
|
|
148
|
+
average (last ≤3 sprints).
|
|
149
|
+
b. **Carry forward.** Each `carried`/`blocked` phase stays pending in PLAN.md — the
|
|
150
|
+
next `/sprint plan` re-commits it first (carried work has priority). Don't lose it.
|
|
151
|
+
c. Set the sprint doc `status: done`; stamp the close date. HISTORY line:
|
|
152
|
+
`sprint <n> closed — <completed>/<committed> pts, goal <met|missed> (<date>)`.
|
|
153
|
+
d. Update STATE.md: clear the active sprint (or set the next one if `/sprint run`
|
|
154
|
+
continues).
|
|
155
|
+
|
|
156
|
+
=====================================================================
|
|
157
|
+
## §RUN — AUTO END-TO-END DRIVER (the headline: "do all the process automatically")
|
|
158
|
+
|
|
159
|
+
`/sprint run [n]` drives one full sprint — or, if you keep going, every remaining
|
|
160
|
+
sprint until the PLAN is exhausted — with NO human stop except a hard-stop:
|
|
161
|
+
|
|
162
|
+
```
|
|
163
|
+
loop while pending phases remain in PLAN.md:
|
|
164
|
+
1. §1 PLANNING → commit the next sprint from PLAN + velocity
|
|
165
|
+
2. for each committed phase, in dependency order:
|
|
166
|
+
run /phase <p> → the full build loop (its own gates + circuit breaker)
|
|
167
|
+
§2 STANDUP tick → append standup + update burndown
|
|
168
|
+
phase BLOCKED (circuit breaker parked it) → record, keep going to the next
|
|
169
|
+
INDEPENDENT phase; if none remain, end the sprint early (timebox)
|
|
170
|
+
3. §3 REVIEW → demo + boundary audits (fix blockers, re-audit)
|
|
171
|
+
4. §4 RETRO → routed actions, applied
|
|
172
|
+
5. §5 CLOSE → velocity + carry-forward + HISTORY
|
|
173
|
+
6. /synthesize → suggest /clear (token reset at the sprint boundary, like a phase)
|
|
174
|
+
AUTO: start the next sprint automatically. GUIDED: stop, report, wait.
|
|
175
|
+
HARD-STOP at any point: deploy/irreversible/outbound action, security-sensitive
|
|
176
|
+
change, contradictory spec, or debug budget spent with no independent slice left →
|
|
177
|
+
pause, surface the consolidated report, hand to the human.
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
When the last PLAN phase is `accepted`, the build is sprint-complete → recommend
|
|
181
|
+
`/release` (the pre-production pipeline) as the next step. Do NOT auto-promote to prod
|
|
182
|
+
— that is a separate, human-signed hard-stop.
|
|
183
|
+
|
|
184
|
+
=====================================================================
|
|
185
|
+
## §STATUS
|
|
186
|
+
|
|
187
|
+
Read STATE.md + the active `docs/sprints/sprint-<n>.md` + VELOCITY.md and print:
|
|
188
|
+
sprint number + goal, status, the burndown sparkline, committed vs done points,
|
|
189
|
+
the current/next phase, any open blockers, and rolling velocity. One screen. No edits.
|
|
190
|
+
|
|
191
|
+
=====================================================================
|
|
192
|
+
## SPRINT DOC TEMPLATE (`docs/sprints/sprint-<n>.md`)
|
|
193
|
+
|
|
194
|
+
```
|
|
195
|
+
# Sprint <n> — <short name>
|
|
196
|
+
goal: <one line — the user-visible increment this sprint ships>
|
|
197
|
+
status: active # planning | active | review | done
|
|
198
|
+
capacity: <cap> pts (basis: velocity avg | default)
|
|
199
|
+
|
|
200
|
+
## Committed
|
|
201
|
+
- Phase <p>: <name> [<pts> pts] [status: pending|done|blocked|accepted|carried]
|
|
202
|
+
- ...
|
|
203
|
+
## Stretch
|
|
204
|
+
- Phase <q>: <name> [<pts> pts] # optional, pulled in only if capacity frees up
|
|
205
|
+
|
|
206
|
+
## Burndown
|
|
207
|
+
tick | event | remaining pts
|
|
208
|
+
0 | sprint start | <total>
|
|
209
|
+
1 | Phase <p> done | <rem>
|
|
210
|
+
...
|
|
211
|
+
<ascii sparkline of remaining pts, e.g. 8 ▆▅▃▂ 0>
|
|
212
|
+
|
|
213
|
+
## Standups
|
|
214
|
+
- tick 1 (Phase <p> done): done <what>; next Phase <q>; blockers none
|
|
215
|
+
- ...
|
|
216
|
+
|
|
217
|
+
## Review (<date>)
|
|
218
|
+
- demo: <increment shipped — user-visible behaviour now working>
|
|
219
|
+
- audits: ui <score|n/a> · qa <score> · security <score> · code <clean|issues>
|
|
220
|
+
- accepted: <phases> carried: <phases or —>
|
|
221
|
+
|
|
222
|
+
## Retro (<date>)
|
|
223
|
+
- went well: ...
|
|
224
|
+
- didn't: ...
|
|
225
|
+
- actions: <each routed → ISSUES | DESIGN_LOG | RUNBOOK | replan | store-wisdom>
|
|
226
|
+
- estimates: committed <c> pts / completed <d> pts — <misses noted>
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
## VELOCITY TEMPLATE (`docs/sprints/VELOCITY.md`)
|
|
230
|
+
|
|
231
|
+
```
|
|
232
|
+
# Velocity
|
|
233
|
+
| sprint | committed | completed | goal met? |
|
|
234
|
+
|--------|-----------|-----------|-----------|
|
|
235
|
+
| 1 | <c> | <d> | yes/no |
|
|
236
|
+
|
|
237
|
+
rolling avg (last ≤3): <v> pts/sprint
|
|
238
|
+
```
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Manual UAT cycle — generate an all-case test-scenario document for human testers, hand it off, capture their pasted results, and drive the defect loop until every scenario passes. Used inside /release; the human-in-the-loop acceptance gate.
|
|
3
|
+
argument-hint: [optional: feature scope, or "failed" to re-issue only failures]
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Caveman ULTRA mode. You are the ORCHESTRATOR.
|
|
7
|
+
|
|
8
|
+
UAT is a HUMAN gate: real testers run the product and report results. Your job is to
|
|
9
|
+
make that easy — produce a clear scenario sheet, capture results, and loop on defects.
|
|
10
|
+
|
|
11
|
+
## STEP 1 — BUILD SCENARIOS
|
|
12
|
+
From `docs/OVERVIEW.md` (flows) + `docs/PLAN.md` (acceptance) + `docs/ENDPOINTS.md`,
|
|
13
|
+
write `docs/UAT-<date>.md` covering ALL cases a tester should run:
|
|
14
|
+
```
|
|
15
|
+
## UAT — <project> (<date>, build <ref>)
|
|
16
|
+
| # | scenario | preconditions | steps | expected | Result (PASS/FAIL) | Notes |
|
|
17
|
+
|---|----------|---------------|-------|----------|--------------------|-------|
|
|
18
|
+
| 1 | … | … | … | … | | |
|
|
19
|
+
```
|
|
20
|
+
Cover: every happy path, every acceptance criterion, edge / negative cases, each user
|
|
21
|
+
role, and each critical flow. Group by feature, number them, leave Result + Notes
|
|
22
|
+
blank for the tester. Keep steps concrete enough to follow without you.
|
|
23
|
+
|
|
24
|
+
## STEP 2 — HAND OFF
|
|
25
|
+
Show me the scenario sheet, ready to run. Tell me to execute it (or pass it to QA /
|
|
26
|
+
the client), then **paste the results back** here. WAIT — do not assume results.
|
|
27
|
+
|
|
28
|
+
## STEP 3 — CAPTURE RESULTS
|
|
29
|
+
Take the pasted results, fill PASS/FAIL + notes into `docs/UAT-<date>.md`, and
|
|
30
|
+
summarise: **X / Y passed**, list the failures with their scenario IDs.
|
|
31
|
+
|
|
32
|
+
## STEP 4 — DEFECT LOOP
|
|
33
|
+
For each FAIL: log to `docs/ISSUES.md` (repro = the scenario steps), fix
|
|
34
|
+
(`implementer` / `debugger`, debug cap 3), re-run the automated tests for that area,
|
|
35
|
+
then re-issue **only the failed scenarios** to me for re-test. Loop until 100% PASS.
|
|
36
|
+
On all-green, hand back to `/release` for sign-off.
|
|
@@ -2,7 +2,11 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
// PreToolUse context watchdog (iStartSoftFlow). Two tiers, one hook:
|
|
4
4
|
// warnPct -> non-blocking nudge (additionalContext) once per climb into the band
|
|
5
|
-
// gatePct -> HARD block of NEW build work (Edit/Write
|
|
5
|
+
// gatePct -> HARD block of NEW build work (Edit/Write to SOURCE files)
|
|
6
|
+
// Delegation (Task) is the prescribed escape — a subagent runs in its OWN context
|
|
7
|
+
// and returns a terse summary, so it SHRINKS orchestrator context, never grows it.
|
|
8
|
+
// Blocking it would force the orchestrator to build inline (worse). So Task is
|
|
9
|
+
// never gated; only direct source mutations by the orchestrator are.
|
|
6
10
|
// Reads REAL token usage from the transcript. Fail-OPEN: any error -> allow,
|
|
7
11
|
// never wedge the tool loop on a hook bug.
|
|
8
12
|
const path = require('path');
|
|
@@ -34,7 +38,7 @@ function run(evt) {
|
|
|
34
38
|
const tool = evt.tool_name || '';
|
|
35
39
|
const ti = evt.tool_input || {};
|
|
36
40
|
const band = u.pct >= gate ? 'gate' : u.pct >= warn ? 'warn' : 'ok';
|
|
37
|
-
const BLOCKABLE = new Set(['Edit', 'Write', 'MultiEdit', 'NotebookEdit'
|
|
41
|
+
const BLOCKABLE = new Set(['Edit', 'Write', 'MultiEdit', 'NotebookEdit']);
|
|
38
42
|
|
|
39
43
|
// HARD GATE — block new build mutations; reason is fed to the model.
|
|
40
44
|
if (band === 'gate' && BLOCKABLE.has(tool) && !isEscape(tool, ti)) {
|
|
@@ -67,15 +71,12 @@ function run(evt) {
|
|
|
67
71
|
return silent();
|
|
68
72
|
}
|
|
69
73
|
|
|
70
|
-
// Checkpoint/logging writes
|
|
71
|
-
// model always has an escape path out of the gate.
|
|
74
|
+
// Checkpoint/logging writes (docs/**, STATE/ISSUES/snapshots) are never blocked,
|
|
75
|
+
// so the model always has an escape path out of the gate. (Task delegation is not
|
|
76
|
+
// in BLOCKABLE at all — see the header note — so it needs no escape carve-out.)
|
|
72
77
|
function isEscape(tool, ti) {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
return /(^|\/)docs\//.test(fp) || /STATE\.md|ISSUES\.md|\.snapshots\//.test(fp);
|
|
76
|
-
}
|
|
77
|
-
if (tool === 'Task') return (ti.subagent_type || '').toLowerCase() === 'synthesizer';
|
|
78
|
-
return false;
|
|
78
|
+
const fp = ti.file_path || ti.path || ti.notebook_path || '';
|
|
79
|
+
return /(^|\/)docs\//.test(fp) || /STATE\.md|ISSUES\.md|\.snapshots\//.test(fp);
|
|
79
80
|
}
|
|
80
81
|
|
|
81
82
|
const fmt = (n) => (n >= 1000 ? Math.round(n / 1000) + 'k' : String(n));
|
|
@@ -39,6 +39,21 @@ if (state !== null) {
|
|
|
39
39
|
emit('');
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
+
// 2b. active sprint (sprint layer) — surface goal + burndown if one is active
|
|
43
|
+
const sprintMatch = (state || '').match(/^\s*sprint:\s*(\d+)\s*\(active\)/m);
|
|
44
|
+
if (sprintMatch) {
|
|
45
|
+
const sf = read(`docs/sprints/sprint-${sprintMatch[1]}.md`);
|
|
46
|
+
if (sf !== null) {
|
|
47
|
+
emit(`## Sprint ${sprintMatch[1]} (active)`);
|
|
48
|
+
const goal = (sf.match(/goal:\s*(.+)/i) || [])[1];
|
|
49
|
+
if (goal) emit('goal: ' + goal.trim());
|
|
50
|
+
const burn = sf.split('\n').find((l) => /burndown|remaining|pts? left|[▁▂▃▄▅▆▇█]/i.test(l));
|
|
51
|
+
if (burn) emit('burndown: ' + burn.trim());
|
|
52
|
+
emit(`see docs/sprints/sprint-${sprintMatch[1]}.md for the full sprint.`);
|
|
53
|
+
emit('');
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
42
57
|
// 3. issue log — inject only OPEN issues (resolved ones stay in the file for
|
|
43
58
|
// grep, but are NOT re-paid in tokens every session). Capped.
|
|
44
59
|
const issues = read('docs/ISSUES.md');
|
|
@@ -65,7 +80,7 @@ if (issues !== null) {
|
|
|
65
80
|
// 3b. research index
|
|
66
81
|
const idx = read('docs/research/INDEX.md');
|
|
67
82
|
if (idx !== null) {
|
|
68
|
-
const rows = idx.split('\n').filter((l) =>
|
|
83
|
+
const rows = idx.split('\n').filter((l) => /^\|\s*\d{4}-\d{2}-\d{2}/.test(l));
|
|
69
84
|
emit(`## research/INDEX.md (${rows.length} prior investigations)`);
|
|
70
85
|
emit('grep this before any new research or debugging.');
|
|
71
86
|
for (const l of rows.slice(-15)) emit(' ' + l);
|
|
@@ -120,6 +135,8 @@ emit('- AUTO mode (default) governs the DEV loop: follow the plan — decide + l
|
|
|
120
135
|
emit(' continue, do NOT stop to ask. (Planning / grill still asks — that part is fine.)');
|
|
121
136
|
emit(' Hard-stops only: security / irreversible-or-outbound actions / contradictory spec.');
|
|
122
137
|
emit('- caveman ULTRA mode is active.');
|
|
138
|
+
emit('- PLAN-APPROVAL gate (rule 13): no /phase or /sprint while STATE `plan:` reads');
|
|
139
|
+
emit(' PENDING — the plan needs a human sign-off via /overview first.');
|
|
123
140
|
emit('- before debugging ANY error: grep ISSUES.md AND research/INDEX.md first.');
|
|
124
141
|
emit('- debug attempts: WARN at 2; cap 3. AUTO: log + park the slice + continue (batched');
|
|
125
142
|
emit(' report at the phase boundary). GUIDED: stop and ask you.');
|
|
@@ -59,6 +59,37 @@ non-TDD before SCAFFOLD fires.
|
|
|
59
59
|
|
|
60
60
|
-----
|
|
61
61
|
|
|
62
|
+
## Sprint layer (the Scrum wrapper — optional)
|
|
63
|
+
|
|
64
|
+
Between the PLAN (the product backlog) and the PHASE (the build loop) sits an
|
|
65
|
+
optional **sprint layer** (`/sprint`): consecutive PLAN phases are grouped behind ONE
|
|
66
|
+
sprint goal and ship ONE deployable increment, wrapped in the full Scrum ceremony set.
|
|
67
|
+
The hierarchy is **PLAN (backlog) → SPRINT (committed slice) → PHASE (loop)**. Phases
|
|
68
|
+
run unchanged inside a sprint; the layer only adds cadence + inspect-and-adapt around them.
|
|
69
|
+
|
|
70
|
+
Scrum maps onto the kit with no new vocabulary to learn:
|
|
71
|
+
|
|
72
|
+
| Scrum | iStartSoftFlow |
|
|
73
|
+
|-------|----------------|
|
|
74
|
+
| Product Backlog | `docs/PLAN.md` (all phases) |
|
|
75
|
+
| Sprint Backlog | `docs/sprints/sprint-<n>.md` (committed phases + goal) |
|
|
76
|
+
| Scrum Master / Dev Team | the orchestrator (facilitates) / the subagent fleet (builds) |
|
|
77
|
+
| Sprint Planning | `/sprint plan` — slice the approved PLAN into a capacity-bounded sprint |
|
|
78
|
+
| Daily Scrum | `/sprint standup` — rebound to a **per-phase-close tick** (the AI loop has no calendar days) |
|
|
79
|
+
| Sprint Review / demo | `/sprint review` — demo the increment + run the boundary audits |
|
|
80
|
+
| Retrospective | `/sprint retro` — routed, concrete process actions |
|
|
81
|
+
| Increment · Burndown · Velocity | the deployable slice · remaining-points table · completed pts/sprint |
|
|
82
|
+
|
|
83
|
+
**AUTO-facilitated.** Sprint planning only SLICES an ALREADY-APPROVED plan (the
|
|
84
|
+
requirements gate happened at `/overview` plan approval), so the ceremonies are
|
|
85
|
+
AUTO-safe: `/sprint run` drives a whole sprint — or every remaining sprint — hands-off
|
|
86
|
+
(plan → loop `/phase` → standup tick → review → retro → close → next sprint), pausing
|
|
87
|
+
only at a methodology hard-stop. The PLAN-approval, commercial, and release gates are
|
|
88
|
+
SEPARATE and stay interactive (see Autonomy). The layer is opt-in: skip it and drive
|
|
89
|
+
phases directly off the PLAN exactly as before.
|
|
90
|
+
|
|
91
|
+
-----
|
|
92
|
+
|
|
62
93
|
## Project lifecycle (real-world delivery)
|
|
63
94
|
|
|
64
95
|
The loop above is the BUILD engine. Around it runs a full client-delivery lifecycle
|
|
@@ -68,20 +99,31 @@ from idea to closeout:
|
|
|
68
99
|
1. **Discover** — idea → requirements, captured by `/overview` (the double-grill).
|
|
69
100
|
2. **PRD** — crystallised requirements in `docs/PRD.md` (or your BMAD/iSSM stories).
|
|
70
101
|
3. **Stack & architecture** — decided in `/overview` design-research → `OVERVIEW.md`.
|
|
71
|
-
4. **Plan** — `/overview`'s `planner` → `docs/PLAN.md` (the vertical-slice phases)
|
|
72
|
-
|
|
102
|
+
4. **Plan** — `/overview`'s `planner` → `docs/PLAN.md` (the vertical-slice phases),
|
|
103
|
+
then the **PLAN-APPROVAL gate** (rule 13): build cannot start until a human signs the
|
|
104
|
+
plan off and the approval is recorded. The plan exists before the proposal, because
|
|
105
|
+
the proposal estimates *these* phases.
|
|
73
106
|
5. **Proposal & estimate (OPTIONAL — depends on the job)** — for client / quoted
|
|
74
107
|
work, `/propose` reads OVERVIEW + PLAN → `docs/PROPOSAL.md` + a rendered
|
|
75
108
|
`docs/proposal.html`: scope, phase breakdown, effort + cost estimate, timeline,
|
|
76
109
|
assumptions, with a **client sign-off gate** before build. Internal / personal
|
|
77
110
|
projects skip straight from plan to build.
|
|
78
|
-
6. **Build** — the loop, one phase at a time (`/phase`, AUTO dev loop).
|
|
111
|
+
6. **Build** — the loop, one phase at a time (`/phase`, AUTO dev loop). Each phase's
|
|
112
|
+
tests (unit + integration + e2e) are automated and MUST pass before the next phase.
|
|
113
|
+
Optionally wrap the phases in the **sprint layer** (`/sprint`): group them into
|
|
114
|
+
capacity-bounded sprints, each shipping one demoable increment with planning →
|
|
115
|
+
standups → review → retro. `/sprint run` drives this end-to-end (see Sprint layer).
|
|
79
116
|
7. **Change mid-flight** — `/change-request`: impact analysis + re-estimate + a logged
|
|
80
117
|
change order (`docs/CHANGES.md`) + sign-off, then `/replan`. Scope and cost never
|
|
81
118
|
change silently.
|
|
82
|
-
8. **
|
|
83
|
-
|
|
84
|
-
|
|
119
|
+
8. **Release** — `/release`: full regression (functional/integration/e2e) → auto
|
|
120
|
+
audits (UI / QA / security / code) → smoke → **manual UAT** (`/uat`, scenario sheet
|
|
121
|
+
+ captured results) → defect loop → **sign-off** (`docs/SIGNOFF-…`) → promote to
|
|
122
|
+
production (a human-signed hard-stop).
|
|
123
|
+
9. **Go-live & support** — after-go-live hypercare; new scope routes through
|
|
124
|
+
`/change-request`. The project is live; the loop continues.
|
|
125
|
+
10. **Closeout** — `/synthesize` → a project summary: what was built, key decisions,
|
|
126
|
+
every change order, and the final cost vs the original estimate.
|
|
85
127
|
|
|
86
128
|
**Logging is continuous and total.** Every stage writes to a durable artifact:
|
|
87
129
|
requirements (PRD / OVERVIEW), commercial (PROPOSAL / CHANGES), execution
|
|
@@ -89,9 +131,9 @@ requirements (PRD / OVERVIEW), commercial (PROPOSAL / CHANGES), execution
|
|
|
89
131
|
Nothing important lives only in chat — it is on disk, so the project can always be
|
|
90
132
|
reconstructed and summarised.
|
|
91
133
|
|
|
92
|
-
**
|
|
93
|
-
every change-order approval pause for the human.
|
|
94
|
-
those gates, never the money decisions.
|
|
134
|
+
**Approval gates are always interactive** (both modes): the **PLAN-APPROVAL** gate
|
|
135
|
+
(rule 13), the proposal sign-off, and every change-order approval pause for the human.
|
|
136
|
+
AUTO governs the *dev loop between* those gates, never the plan or the money decisions.
|
|
95
137
|
|
|
96
138
|
-----
|
|
97
139
|
|
|
@@ -105,6 +147,7 @@ front-end. They compose — BMAD plans, iStartSoftFlow builds — with no duplic
|
|
|
105
147
|
| Analyst / PM / Architect / PO agents | → | `/overview` grill + `researcher` + `planner` |
|
|
106
148
|
| PRD + Architecture | → | `docs/OVERVIEW.md` (+ `docs/PRD.md`) |
|
|
107
149
|
| sharded epics / story files | → | `docs/PLAN.md` phases (1 story ≈ 1 phase) |
|
|
150
|
+
| epics / sprint grouping | → | the **sprint layer** (`/sprint`) — phases grouped behind one sprint goal |
|
|
108
151
|
| SM "story with embedded context" | → | the phase **context package** (rationale + architecture + impl notes + qa focus + sharp acceptance) |
|
|
109
152
|
| Dev → QA | → | `implementer` → `test-author` + the phase gates (TDD · UX · security · code-standards) |
|
|
110
153
|
|
|
@@ -148,8 +191,9 @@ can. Escalation is at most two hops.
|
|
|
148
191
|
phases it is dispatched BEFORE logic exists (RED-first), so blindness is
|
|
149
192
|
structural, not honor-system. Writes a MOCK suite + a REAL API suite.
|
|
150
193
|
- **e2e-runner** — writes/runs functional browser E2E (your declared E2E runner,
|
|
151
|
-
e.g. Playwright) BLIND. Reads
|
|
152
|
-
never the implementation.
|
|
194
|
+
e.g. Playwright) BLIND. Reads the acceptance spec, `docs/OVERVIEW.md` (stack),
|
|
195
|
+
`docs/ENDPOINTS.md`, and the E2E runner config — never the implementation. Writes
|
|
196
|
+
a trace to `docs/research/e2e-<phase-slug>.md`; returns a terse summary.
|
|
153
197
|
- **debugger** — debugs in an ISOLATED context. Writes a trace to
|
|
154
198
|
`docs/research/debug-<slug>.md`; returns a summary.
|
|
155
199
|
- **synthesizer** — compresses `docs/STATE.md` / `docs/ISSUES.md`, prunes
|
|
@@ -171,7 +215,12 @@ Named procedures, each with a canonical body in `.claude/commands/<name>.md`.
|
|
|
171
215
|
a logged change order (`CHANGES.md`) + sign-off, then `replan`.
|
|
172
216
|
- **phase [n]** — run one phase end-to-end with the circuit breaker. Chooses the
|
|
173
217
|
TDD or non-TDD order at RESEARCH. CLOSE runs the regression guard + ENDPOINTS
|
|
174
|
-
coverage gate.
|
|
218
|
+
coverage gate. When a sprint is active, CLOSE also fires a `/sprint standup` tick.
|
|
219
|
+
- **sprint [run|plan|standup|review|retro|close|status] [n]** — the Scrum wrapper
|
|
220
|
+
around the build loop: slice the approved PLAN into a capacity-bounded sprint, run
|
|
221
|
+
the ceremonies (planning → standups → review/demo + boundary audits → retro → close)
|
|
222
|
+
with burndown + velocity. `/sprint run` drives a whole sprint (or every remaining
|
|
223
|
+
one) AUTO end-to-end. Opt-in; phases run unchanged inside it.
|
|
175
224
|
- **quick [change]** — small, obvious, non-phase change; no agent chain. Stays
|
|
176
225
|
non-TDD. Runs the mock regression corpus after the change.
|
|
177
226
|
- **ui-audit** — whole-product UI audit against the `ux-design` cookbook (a11y /
|
|
@@ -183,12 +232,20 @@ Named procedures, each with a canonical body in `.claude/commands/<name>.md`.
|
|
|
183
232
|
- **security-audit** — whole-product SECURITY audit against the `security` cookbook
|
|
184
233
|
(OWASP/ASVS/WSTG/secrets/SCA/SAST/supply-chain); scored report. On-demand; a
|
|
185
234
|
precondition for the pre-deploy pentest. Distinct from the per-phase rule-11 gate.
|
|
235
|
+
- **release** — the pre-production pipeline (run after all build phases): full
|
|
236
|
+
regression → auto audits → smoke → UAT handoff → defect loop → sign-off → promote
|
|
237
|
+
to production → go-live support. The automated SDLC backbone.
|
|
238
|
+
- **uat** — manual UAT cycle: generate an all-case scenario sheet for human testers,
|
|
239
|
+
capture their results, drive the defect loop to 100% pass. Used inside `release`.
|
|
186
240
|
- **unstuck** — deep re-research after a circuit breaker (auto-run once in AUTO on
|
|
187
241
|
first stuck; human-triggered in GUIDED).
|
|
188
242
|
- **synthesize** — compress STATE.md, dedup ISSUES.md, prune snapshots. Run
|
|
189
243
|
before a context reset.
|
|
190
244
|
- **replan** — revise `PLAN.md` (add/cut/split/merge/reorder pending phases) and
|
|
191
|
-
reconcile the regression corpus in step.
|
|
245
|
+
reconcile the regression corpus in step. Reshaping unbuilt scope reverts the plan
|
|
246
|
+
to `PENDING` and re-runs the PLAN-APPROVAL gate (rule 13).
|
|
247
|
+
- **runbook** — capture an operational / incident scenario in `docs/RUNBOOK.md` so
|
|
248
|
+
prod-debug knowledge isn't re-derived under pressure.
|
|
192
249
|
- **log-issue** — append an error to `ISSUES.md` with root cause + failed attempts.
|
|
193
250
|
- **log-decision** — record an architectural change in `docs/DESIGN_LOG.md`.
|
|
194
251
|
- **store-wisdom** — promote resolved issues + research to the shared KB.
|
|
@@ -205,13 +262,22 @@ inject context, the model performs them itself.
|
|
|
205
262
|
|
|
206
263
|
At the start of every session, before any other work, surface:
|
|
207
264
|
1. git state (branch, uncommitted count, last 3 commits).
|
|
208
|
-
2. `docs/STATE.md` — the current position. READ THIS FIRST.
|
|
265
|
+
2. `docs/STATE.md` — the current position. READ THIS FIRST. If a sprint is active,
|
|
266
|
+
surface its goal + burndown from `docs/sprints/sprint-<n>.md`.
|
|
209
267
|
3. open items in `docs/ISSUES.md`.
|
|
210
268
|
4. `docs/research/INDEX.md` (research map) + infra/auth status.
|
|
211
269
|
5. shared KB: pull latest + load `docs/.kb-snapshot.md` if `.claude/kb-config.json`
|
|
212
270
|
exists.
|
|
213
271
|
6. a one-line reminder of the hard rules below.
|
|
214
272
|
|
|
273
|
+
### SPRINT-STANDUP (auto — at phase close inside an active sprint)
|
|
274
|
+
|
|
275
|
+
When a sprint is active, every `/phase` CLOSE fires one standup tick: append a
|
|
276
|
+
one-line entry to the active `docs/sprints/sprint-<n>.md` (done / next / blockers)
|
|
277
|
+
and update the burndown (remaining points + the sparkline). The "daily" Scrum is
|
|
278
|
+
rebound to per-phase-close because the AI dev loop has no calendar days — the phase
|
|
279
|
+
boundary is the real unit of progress. Blockers surface immediately. See `/sprint`.
|
|
280
|
+
|
|
215
281
|
### COMPRESS (before a context compaction)
|
|
216
282
|
|
|
217
283
|
Snapshot the live position to `docs/.snapshots/` so a post-compact session can
|
|
@@ -223,7 +289,8 @@ The cheapest token is the one never loaded. The kit is built to minimise context
|
|
|
223
289
|
|
|
224
290
|
- **Phase boundary is the primary reset.** `/synthesize -> /clear` ends every
|
|
225
291
|
phase so the next one starts with a small, fresh context instead of carrying
|
|
226
|
-
the whole history forward.
|
|
292
|
+
the whole history forward. The **sprint boundary** (`/sprint close`) is a second,
|
|
293
|
+
coarser reset — synthesize + clear there too before the next sprint plans.
|
|
227
294
|
- **Lazy, not always-on.** This methodology + the skills load on demand; only the
|
|
228
295
|
SessionStart hook output is paid every session, and it injects just the live
|
|
229
296
|
STATE + *open* issues (resolved ones stay on disk for grep, not re-paid in tokens).
|
|
@@ -243,8 +310,8 @@ The cheapest token is the one never loaded. The kit is built to minimise context
|
|
|
243
310
|
The kit runs in one of two modes, declared in `docs/OVERVIEW.md` (default: **AUTO**):
|
|
244
311
|
|
|
245
312
|
**Planning always asks; development doesn't.** Asking is cheap and decisive while
|
|
246
|
-
*planning* — so `/overview` (the double-grill) and
|
|
247
|
-
both modes. AUTO governs only the **development loop** (implement → test → debug →
|
|
313
|
+
*planning* — so `/overview` (the double-grill) and the **PLAN-APPROVAL gate** (rule 13,
|
|
314
|
+
a recorded sign-off) stay interactive in both modes. AUTO governs only the **development loop** (implement → test → debug →
|
|
248
315
|
close): there, interruptions are expensive, so it follows the plan instead of asking.
|
|
249
316
|
|
|
250
317
|
- **AUTO (default) — during DEVELOPMENT, follow the plan, don't interrupt.** Once a
|
|
@@ -284,7 +351,19 @@ development run that follows the spec and logs every problem so it never recurs.
|
|
|
284
351
|
|
|
285
352
|
-----
|
|
286
353
|
|
|
287
|
-
##
|
|
354
|
+
## Dry-run (preview — change nothing)
|
|
355
|
+
|
|
356
|
+
Pass `dry-run` (or `--dry-run`) to ANY command and it does the full analysis but
|
|
357
|
+
EXECUTES NOTHING: it prints the ACTION PLAN — files it would create/change · agents
|
|
358
|
+
it would dispatch · tests/gates it would run · the deploy target · cost / scope /
|
|
359
|
+
risk impact — then STOPS. Nothing is written, run, committed, or deployed. A safe
|
|
360
|
+
preview to see the blast radius first. Most useful before side-effecting commands:
|
|
361
|
+
`/phase` · `/release` · `/change-request` · `/sprint` · `/propose` · `/quick`.
|
|
362
|
+
Mirrors the installer's `--dry-run`. (In a dry-run, even AUTO never acts — it only reports.)
|
|
363
|
+
|
|
364
|
+
-----
|
|
365
|
+
|
|
366
|
+
## Hard rules (1–13)
|
|
288
367
|
|
|
289
368
|
1. Before debugging ANY error: grep `docs/ISSUES.md` AND `docs/research/INDEX.md`.
|
|
290
369
|
The SESSION-OPEN ritual surfaces ISSUES.md — there is no excuse to miss it.
|
|
@@ -338,6 +417,16 @@ development run that follows the spec and logs every problem so it never recurs.
|
|
|
338
417
|
(the language's standard tool), names follow the language's OWN idiom, and the
|
|
339
418
|
code conforms to the declared architecture (Feature-Based by default) — checked
|
|
340
419
|
at CLOSE. Lint/format errors or idiom violations BLOCK the close. (`code-standards`.)
|
|
420
|
+
13. **PLAN-APPROVAL gate.** No phase / sprint / build work starts until `docs/PLAN.md`
|
|
421
|
+
carries a human approval. `/overview` ends by presenting the plan and STOPPING for
|
|
422
|
+
sign-off; on approval the gate is RECORDED in three places — the PLAN.md
|
|
423
|
+
`> Approval:` header (`approved <date> v<n>`), `plan:` in `docs/STATE.md`, and a
|
|
424
|
+
`plan v<n> approved` line in `docs/HISTORY.md`. `/phase` and `/sprint` REFUSE to
|
|
425
|
+
start while that header still reads `PENDING`. Interactive in BOTH modes: AUTO
|
|
426
|
+
governs the dev loop that runs AFTER approval, never the approval itself — it is
|
|
427
|
+
the planning twin of the commercial sign-off gate (`/propose`). A `/replan` that
|
|
428
|
+
adds or reshapes UNBUILT scope reverts the affected plan to `PENDING` and
|
|
429
|
+
re-surfaces it for confirmation before those phases run.
|
|
341
430
|
|
|
342
431
|
-----
|
|
343
432
|
|
|
@@ -381,18 +470,35 @@ the KB. The kit works normally without a KB.
|
|
|
381
470
|
commands render into `docs/`.
|
|
382
471
|
- `docs/CHANGES.md` — change-order log (append-only): each scope change with its
|
|
383
472
|
impact, effort/cost delta, new total, and approval status. The commercial audit trail.
|
|
473
|
+
- `docs/UAT-<date>.md` — UAT scenario sheet (all cases) + captured tester results
|
|
474
|
+
(PASS/FAIL + notes). Drives the release defect loop.
|
|
475
|
+
- `docs/SIGNOFF-<date>.md` — release sign-off: scope delivered, test/audit/UAT
|
|
476
|
+
summary, known limitations, approver — the gate to promote to production.
|
|
477
|
+
- `docs/ui-audit-<date>.md` · `docs/qa-audit-<date>.md` · `docs/security-audit-<date>.md`
|
|
478
|
+
— scored whole-product audit reports (from the `*-audit` commands).
|
|
384
479
|
- `docs/STATE.md` — current position. Small. Rewritten, not appended.
|
|
385
480
|
- `docs/ISSUES.md` — error log. Deduped by synthesizer.
|
|
386
|
-
- `docs/PLAN.md` — the phase plan
|
|
387
|
-
|
|
481
|
+
- `docs/PLAN.md` — the phase plan (the product backlog). Carries an `> Approval:`
|
|
482
|
+
header — `PENDING` until the rule-13 PLAN-APPROVAL gate stamps `approved <date> v<n>`;
|
|
483
|
+
no phase runs while it reads `PENDING`. The last phase has the deploy task. Phases may
|
|
484
|
+
carry a `[N pts]` estimate and be grouped under `## Sprint` headers when the sprint
|
|
485
|
+
layer is used.
|
|
486
|
+
- `docs/sprints/sprint-<n>.md` — one per sprint (sprint layer): goal, committed phases
|
|
487
|
+
+ points, burndown, standup log, review (demo + audit scores), retro. Maintained by
|
|
488
|
+
`/sprint`.
|
|
489
|
+
- `docs/sprints/VELOCITY.md` — rolling velocity table (committed vs completed pts per
|
|
490
|
+
sprint). Drives the next sprint's capacity.
|
|
491
|
+
- `docs/HISTORY.md` — one line per finished phase (and per closed sprint).
|
|
388
492
|
- `docs/DESIGN_LOG.md` — kit architectural rationale (§5.x decision log).
|
|
389
493
|
- `docs/OVERVIEW.md` — project scope. Written after the double-grill in `overview`.
|
|
390
494
|
E2E target.
|
|
391
495
|
- `docs/ENDPOINTS.md` — API/service endpoint catalogue. Maintained by implementer
|
|
392
496
|
each phase. Drives the CLOSE coverage gate.
|
|
497
|
+
- `docs/RUNBOOK.md` — operational / incident runbook (grep-able): per-scenario
|
|
498
|
+
symptoms, diagnosis, and recovery steps. Maintained by `/runbook`.
|
|
393
499
|
- `docs/research/` — full research + debug files. `INDEX.md` is the searchable map.
|
|
394
500
|
`design-<slug>.md` (design research), `<slug>.md` (impl research),
|
|
395
|
-
`debug-<slug>.md` (debugger traces).
|
|
501
|
+
`debug-<slug>.md` (debugger traces), `e2e-<slug>.md` (e2e-runner traces).
|
|
396
502
|
- `docs/.snapshots/` — pre-compact recovery markers (auto-pruned, gitignored).
|
|
397
503
|
Holds no secrets.
|
|
398
504
|
- your E2E stack — runner config + any ephemeral test services (e.g. `e2e/`,
|