create-issflow 1.11.1 → 1.12.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/bin/cli.js +23 -21
- package/package.json +1 -1
- package/template/.issflow/README.md +4 -1
- package/template/.issflow/agents/planner.md +7 -2
- package/template/.issflow/agents/synthesizer.md +12 -5
- package/template/.issflow/commands/feature.md +30 -15
- package/template/.issflow/commands/goal.md +17 -8
- package/template/.issflow/commands/phase.md +62 -32
- package/template/.issflow/commands/quick.md +14 -4
- package/template/.issflow/commands/sprint.md +21 -12
- package/template/.issflow/commands/synthesize.md +10 -6
- package/template/.issflow/hooks/pre-compact.js +4 -0
- package/template/.issflow/hooks/session-start.js +29 -4
- package/template/.issflow/istartsoft-flow/METHODOLOGY.md +135 -35
- package/template/.issflow/models/MODEL-MATRIX.md +6 -6
- package/template/.issflow/routing/package.json +1 -0
- package/template/.issflow/runtime/HOSTS.md +41 -0
- package/template/.issflow/runtime/README.md +150 -0
- package/template/.issflow/runtime/package.json +1 -0
- package/template/.issflow/runtime/workflow.js +187 -0
- package/template/.issflow/scripts/package.json +1 -0
- package/template/.issflow/skills/ux-design/SKILL.md +3 -2
package/bin/cli.js
CHANGED
|
@@ -22,7 +22,7 @@ const toolArg = (argv.find(a => a.startsWith('--tool=')) || '').split('=')[1];
|
|
|
22
22
|
|
|
23
23
|
const TOOLS = {
|
|
24
24
|
claude: 'Claude Code (Anthropic) — full: subagents, lifecycle hooks, skills',
|
|
25
|
-
codex: 'OpenAI Codex
|
|
25
|
+
codex: 'OpenAI Codex — AGENTS.md; use native tools only when available',
|
|
26
26
|
cursor: 'Cursor — .cursor/rules + commands + hooks; kit stays in .issflow/ (no .claude/)',
|
|
27
27
|
gemini: 'Google Gemini CLI — GEMINI.md pointer; commands/skills as readable files',
|
|
28
28
|
aider: 'Aider — .aider.conf.yml loads the methodology as conventions',
|
|
@@ -124,7 +124,7 @@ function adapterClaude() {
|
|
|
124
124
|
if (conflicts > c0) warnings.push('claude: you already keep a CLAUDE.md — ours was written as CLAUDE.md.issflow-new. Add a line `@AGENTS.md` to your CLAUDE.md so the methodology auto-loads.');
|
|
125
125
|
materializeClaudeMirror();
|
|
126
126
|
const HOOKS = {
|
|
127
|
-
SessionStart: [{ matcher: 'startup|clear|compact', hooks: [{ type: 'command', command: 'node .issflow/hooks/session-start.js' }] }],
|
|
127
|
+
SessionStart: [{ matcher: 'startup|resume|clear|compact', hooks: [{ type: 'command', command: 'node .issflow/hooks/session-start.js' }] }],
|
|
128
128
|
PreToolUse: [{ matcher: '*', hooks: [{ type: 'command', command: 'node .issflow/hooks/context-guard.js' }] },
|
|
129
129
|
{ matcher: 'Edit|Write|MultiEdit|NotebookEdit', hooks: [{ type: 'command', command: 'node .issflow/hooks/plan-gate.js' }] }],
|
|
130
130
|
PreCompact: [{ matcher: 'auto|manual', hooks: [{ type: 'command', command: 'node .issflow/hooks/pre-compact.js' }] }],
|
|
@@ -144,7 +144,7 @@ function adapterClaude() {
|
|
|
144
144
|
}
|
|
145
145
|
|
|
146
146
|
function adapterCodex() {
|
|
147
|
-
warnings.push('codex: AGENTS.md
|
|
147
|
+
warnings.push('codex: this installer configures AGENTS.md, not lifecycle hooks or subagent registration. Detect native delegation in the current host; otherwise run roles serially. Run checkpoint and verification commands explicitly.');
|
|
148
148
|
}
|
|
149
149
|
|
|
150
150
|
function adapterCursor() {
|
|
@@ -152,7 +152,7 @@ function adapterCursor() {
|
|
|
152
152
|
'---', 'description: iStartSoftFlow workflow — always apply', 'alwaysApply: true', '---', '',
|
|
153
153
|
'Run the **iStartSoftFlow** workflow. The full, single-source methodology is',
|
|
154
154
|
'`.issflow/istartsoft-flow/METHODOLOGY.md` — read it before acting. Roles live in',
|
|
155
|
-
'`.issflow/agents/` (
|
|
155
|
+
'`.issflow/agents/` (role references, not registered native agents); procedures in `.cursor/commands/`',
|
|
156
156
|
'(mirror of `.issflow/commands/`). Caveman ULTRA mode; apply the `karpathy-guidelines`',
|
|
157
157
|
'and `ux-design` skills. See `AGENTS.md` for the role/command/skill map.', '',
|
|
158
158
|
].join('\n'));
|
|
@@ -164,7 +164,7 @@ function adapterCursor() {
|
|
|
164
164
|
'3. Past `agent_eta` while AGENT_ACTIVE → report SLIP; do not silent-continue.',
|
|
165
165
|
'4. WAITING_ON_HUMAN / WAITING_STALE → do not pretend the agent is still building.',
|
|
166
166
|
'5. UI work: locked `design-direction` / `docs/design/tokens.css` — no freehand palette.',
|
|
167
|
-
'6. Near context gate → `/synthesize` (keep delivery:)
|
|
167
|
+
'6. Near context gate → checkpoint with `/synthesize` (keep delivery:); use only reset capabilities the host exposes.',
|
|
168
168
|
'',
|
|
169
169
|
'Talk to the human as PM/SA. Subagents never address the user.',
|
|
170
170
|
'',
|
|
@@ -177,7 +177,7 @@ function adapterCursor() {
|
|
|
177
177
|
subagentStop: [{ command: 'node .issflow/hooks/subagent-stop.js' }],
|
|
178
178
|
},
|
|
179
179
|
}, null, 2) + '\n');
|
|
180
|
-
warnings.push('cursor:
|
|
180
|
+
warnings.push('cursor: only sessionStart and subagentStop hooks are configured here; no edit/stop approval enforcement. Verify host hook support. Run checkpoint and verification commands explicitly; role files do not register subagents.');
|
|
181
181
|
}
|
|
182
182
|
|
|
183
183
|
function adapterGemini() {
|
|
@@ -243,28 +243,25 @@ function agentsMd() {
|
|
|
243
243
|
'caveman · grill-me · karpathy-guidelines · ux-design · ui-ux-pro-max · security ·',
|
|
244
244
|
'code-standards · support-triage', '',
|
|
245
245
|
'## Autonomy', '',
|
|
246
|
-
'
|
|
246
|
+
'Use existing approval for the same scope; ask only for missing approval or material changes.',
|
|
247
247
|
'**AUTO (default)** governs the DEV loop: follow the plan, decide + log + continue,',
|
|
248
248
|
'do NOT stop to ask. Hard-stops only: security · irreversible/outbound actions · a',
|
|
249
249
|
'contradictory spec. Blockers are parked + reported at the phase boundary, not',
|
|
250
250
|
'mid-flow. **GUIDED** asks at each fork in dev too. Declare the mode in',
|
|
251
|
-
'`docs/OVERVIEW.md`. See METHODOLOGY → Autonomy.',
|
|
251
|
+
'`docs/OVERVIEW.md`. See METHODOLOGY → Autonomy.',
|
|
252
|
+
'Optional durable task state: `.issflow/runtime/workflow.js` (see `.issflow/runtime/README.md`).',
|
|
253
|
+
'This local state helper does not execute agents or schedule future sessions.', '',
|
|
252
254
|
'## Hard-rule index (full text in METHODOLOGY.md)', '',
|
|
253
255
|
'1–12 as in METHODOLOGY · 13 PLAN-APPROVAL · 14 UNDERSTAND-FIRST ·',
|
|
254
256
|
'15 DESIGN + ARCHITECTURE gates (after proposal, before `/phase`; internal may n/a).', '',
|
|
257
|
+
'## Host capability', '',
|
|
258
|
+
'See `.issflow/runtime/HOSTS.md` for actual adapter enforcement and fallbacks.',
|
|
259
|
+
'Cursor gate rules are model-run guidance, not lifecycle enforcement.',
|
|
260
|
+
'Model guidance: `.issflow/models/MODEL-MATRIX.md`; delivery ETA: `docs/STATE.md`.', '',
|
|
255
261
|
'## Your stack', '',
|
|
256
262
|
'Declare your stack (language, framework, infra, auth, test + E2E runner,',
|
|
257
263
|
'planning source) once in `docs/OVERVIEW.md`. Every rule references *your declared',
|
|
258
264
|
'stack* and hardcodes none.', '',
|
|
259
|
-
'## Host capability (enforcement)', '',
|
|
260
|
-
'| Host | Hooks | Notes |',
|
|
261
|
-
'|------|-------|-------|',
|
|
262
|
-
'| Claude Code | Full (SessionStart · PreToolUse · PreCompact · Stop) | Strongest plan-gate + context-guard |',
|
|
263
|
-
'| Cursor | sessionStart + subagentStop + `.cursor/rules` | Partial — model-run gates via `issflow-gates.mdc` |',
|
|
264
|
-
'| Codex / Gemini / Aider | model-run rituals | Run SESSION-OPEN Tier A by hand |',
|
|
265
|
-
'',
|
|
266
|
-
'You talk as **PM/SA**. Subagents never chat with you. Delivery ETA lives in',
|
|
267
|
-
'`docs/STATE.md` (`delivery:`). See `.issflow/models/MODEL-MATRIX.md` for model tips.', '',
|
|
268
265
|
].join('\n');
|
|
269
266
|
}
|
|
270
267
|
|
|
@@ -356,10 +353,15 @@ function main() {
|
|
|
356
353
|
const gi = path.join(CWD, '.gitignore');
|
|
357
354
|
if (fs.existsSync(gi)) {
|
|
358
355
|
const txt = fs.readFileSync(gi, 'utf8');
|
|
359
|
-
if (/^\.issflow\/\*\s*$/m.test(txt)
|
|
360
|
-
const
|
|
361
|
-
|
|
362
|
-
|
|
356
|
+
if (/^\.issflow\/\*\s*$/m.test(txt)) {
|
|
357
|
+
const tracked = ['agents', 'commands', 'skills', 'hooks', 'runtime', 'routing', 'models', 'scripts', 'templates', 'istartsoft-flow'];
|
|
358
|
+
const lines = new Set(txt.split(/\r?\n/).map(line => line.trim()));
|
|
359
|
+
const missing = tracked.map(dir => `!.issflow/${dir}/`).filter(line => !lines.has(line));
|
|
360
|
+
if (missing.length) {
|
|
361
|
+
const block = '\n# iStartSoftFlow workflow — track as project config\n' + missing.join('\n') + '\n';
|
|
362
|
+
log(' + .gitignore: un-ignore missing .issflow workflow dirs');
|
|
363
|
+
if (!DRY) fs.appendFileSync(gi, block);
|
|
364
|
+
}
|
|
363
365
|
}
|
|
364
366
|
}
|
|
365
367
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-issflow",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.12.0",
|
|
4
4
|
"description": "Scaffold the iStartSoftFlow AI-coding workflow into a project. Stack-agnostic, tool-agnostic (Claude Code, Codex, Cursor, Gemini, Aider), non-destructive.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"create-issflow": "bin/cli.js"
|
|
@@ -12,7 +12,7 @@ This directory is the **portable workflow kit** (tool-agnostic). Every
|
|
|
12
12
|
|
|
13
13
|
| Path | What |
|
|
14
14
|
|------|------|
|
|
15
|
-
| `agents/` |
|
|
15
|
+
| `agents/` | Role definitions (isolated workers only where the host supports them) |
|
|
16
16
|
| `commands/` | Procedures — Default: `/overview` `/feature` `/quick`; Advanced: `/propose` `/design` `/support` … |
|
|
17
17
|
| `skills/` | On-demand cookbooks (ux-design, ui-ux-pro-max, security, support-triage, …) |
|
|
18
18
|
| `hooks/` | Lifecycle enforcement scripts |
|
|
@@ -37,3 +37,6 @@ Do **not** duplicate METHODOLOGY rules into other files (anti-drift).
|
|
|
37
37
|
Do **not** put personal rate cards in this kit.
|
|
38
38
|
|
|
39
39
|
Installer: `npx create-issflow` (omit `--tool` = all adapters).
|
|
40
|
+
|
|
41
|
+
Local task checkpoints: [runtime/README.md](runtime/README.md).
|
|
42
|
+
Host capabilities and smoke checks: [runtime/HOSTS.md](runtime/HOSTS.md).
|
|
@@ -7,7 +7,10 @@ model: inherit
|
|
|
7
7
|
|
|
8
8
|
You are the PLANNER. Caveman ULTRA mode.
|
|
9
9
|
|
|
10
|
-
Job: convert FINDINGS + OVERVIEW.md into an ordered phase plan.
|
|
10
|
+
Job: convert FINDINGS + OVERVIEW.md into an ordered phase plan. Write only the
|
|
11
|
+
assigned plan artifact: `docs/plans/PLAN-<id>.md` for new scoped work, or
|
|
12
|
+
`docs/PLAN.md` for a deliberate legacy workflow. Follow Plan-scoped approvals;
|
|
13
|
+
never mutate an approved revision for execution progress or self-approve it.
|
|
11
14
|
|
|
12
15
|
Hard rules:
|
|
13
16
|
- PHASE 0 = INFRA, and it is CONDITIONAL on the infra declared in OVERVIEW.md:
|
|
@@ -60,7 +63,9 @@ MUST contain a deployment task block:
|
|
|
60
63
|
|
|
61
64
|
```
|
|
62
65
|
This is non-negotiable. Deployment is always in the last phase, never a separate
|
|
63
|
-
phase of its own, and never omitted.
|
|
66
|
+
phase of its own, and never omitted. This plans deployment; it does not authorize
|
|
67
|
+
execution. Explicit release authorization and required checks must precede deploy.
|
|
68
|
+
Until then, record deployment pending in execution state, never invent success.
|
|
64
69
|
|
|
65
70
|
docs/PLAN.md format:
|
|
66
71
|
```
|
|
@@ -26,7 +26,10 @@ Do NOT touch docs/ENDPOINTS.md — owned by implementer.
|
|
|
26
26
|
`delivery:` block** (agent_eta / status / waiting_* / slip) — load-bearing for
|
|
27
27
|
finish-date honesty. Also preserve `design-direction:`, `design:`, `architecture:`,
|
|
28
28
|
`surfaces:`, `timezone:` when present.
|
|
29
|
-
|
|
29
|
+
Preserve all active and parked lane checkpoints, approval digests, branch/base,
|
|
30
|
+
evidence paths/results, attempt counts and remaining budgets, or verified links
|
|
31
|
+
to their durable execution records. Never reset counters or erase blocked lanes.
|
|
32
|
+
Target: under ~30 lines including delivery; correctness beats this size target.
|
|
30
33
|
|
|
31
34
|
2. ISSUES.md — dedup + compress:
|
|
32
35
|
- merge duplicate / near-duplicate issues.
|
|
@@ -37,14 +40,17 @@ Do NOT touch docs/ENDPOINTS.md — owned by implementer.
|
|
|
37
40
|
3. docs/.snapshots/ — delete precompact snapshots older than the newest 3.
|
|
38
41
|
|
|
39
42
|
4. Append a single dated line to docs/HISTORY.md:
|
|
40
|
-
`YYYY-MM-DD phase <n>
|
|
43
|
+
`YYYY-MM-DD phase <n> <verified status> - <one line>`
|
|
44
|
+
Use done only when all required gates and deployment obligations are verified.
|
|
41
45
|
|
|
42
46
|
---
|
|
43
47
|
|
|
44
48
|
## Final-phase extended pass
|
|
45
49
|
|
|
46
50
|
The orchestrator will tell you when this is the final phase (no further pending
|
|
47
|
-
phases remain in
|
|
51
|
+
phases remain in the reconciled execution state). When told, ALSO do:
|
|
52
|
+
Never infer completion from being the last phase. If required gates or deployment
|
|
53
|
+
remain pending/blocked, describe that actual status instead of the done template.
|
|
48
54
|
|
|
49
55
|
5. Update docs/OVERVIEW.md — append a "## Final state" section:
|
|
50
56
|
```
|
|
@@ -64,7 +70,8 @@ vs the original estimate (PROPOSAL.md v1 total → final total after approved CR
|
|
|
64
70
|
This is the client closeout — the one-page record of the whole engagement.
|
|
65
71
|
6. Update README.md (the project-level README, not the iStartSoftFlow README) — if a
|
|
66
72
|
project README exists at the repo root, update or append:
|
|
67
|
-
- Current status: "Production — deployed
|
|
73
|
+
- Current status: verified implementation/release status. Use "Production — deployed
|
|
74
|
+
at <URL>" only with observed successful deployment evidence; never invent a URL.
|
|
68
75
|
- Brief description of what was built (from OVERVIEW.md summary)
|
|
69
76
|
- Link to docs/ENDPOINTS.md for the API surface
|
|
70
77
|
If no project README exists, note this in the return and skip.
|
|
@@ -78,6 +85,6 @@ SYNTHESIZED
|
|
|
78
85
|
- ISSUES.md: <old> -> <new>, merged <k>, archived <m>
|
|
79
86
|
- snapshots pruned: <count>
|
|
80
87
|
- final pass: <yes — OVERVIEW.md + README.md updated | no>
|
|
81
|
-
- safe to
|
|
88
|
+
- safe to reset context: <yes only if all checkpoints are durable | no — reason>
|
|
82
89
|
|
|
83
90
|
```
|
|
@@ -4,10 +4,11 @@ argument-hint: [path to Feature doc, e.g. docs/features/<slug>/FEATURE.md · "dr
|
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
Caveman ULTRA mode. You are the ORCHESTRATOR. Route work to subagents —
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
use native isolated workers when available; otherwise use sequential role passes
|
|
8
|
+
per METHODOLOGY → Host capabilities and continuity. Only YOU report to the user.
|
|
9
|
+
Speak PM-style (ETA / stage / WAITING / DONE).
|
|
9
10
|
|
|
10
|
-
Before build slices: set STATE `delivery:` agent_eta from phase sizes;
|
|
11
|
+
Before build slices: set STATE `delivery:` agent_eta from phase sizes; update
|
|
11
12
|
stage lines; on human gates set WAITING_ON_HUMAN + waiting_since + stale_after.
|
|
12
13
|
UI work must respect `docs/design/tokens.css` + inventory when present.
|
|
13
14
|
|
|
@@ -33,7 +34,8 @@ Target doc: $ARGUMENTS (default: the single `docs/features/*/FEATURE.md` whose
|
|
|
33
34
|
HEADLESS DETECT: env `ISSFLOW_HEADLESS=1` (set by the CI workflow / Docker runner)
|
|
34
35
|
means NO human is available this run. Every hard-stop below then degrades to:
|
|
35
36
|
write the blocker to `docs/features/<slug>/BLOCKED.md` + mark the gate `parked`
|
|
36
|
-
+
|
|
37
|
+
+ return this lane as blocked with a report. A goal driver may continue independent
|
|
38
|
+
approved units; a standalone feature run exits. Never guess through a hard-stop.
|
|
37
39
|
|
|
38
40
|
---
|
|
39
41
|
|
|
@@ -56,12 +58,16 @@ b. APPROVAL GATE (the ONE human gate at entry): the Feature doc must carry a hea
|
|
|
56
58
|
```
|
|
57
59
|
Missing/PENDING -> HARD-STOP: a human approves the DOC, not the run (need a doc?
|
|
58
60
|
`/feature new <name>` scaffolds `.issflow/templates/FEATURE-template.md`). Doc approval
|
|
59
|
-
|
|
60
|
-
|
|
61
|
+
confirms intake *scoped to this doc only*. Also apply METHODOLOGY → Plan-scoped
|
|
62
|
+
approvals: verify the active plan revision/digest and file boundaries before
|
|
63
|
+
implementation. A feature header does not override a missing or invalid plan
|
|
64
|
+
approval. Routine breakdown within the approved plan needs no new confirmation.
|
|
61
65
|
|
|
62
66
|
c. WORKSPACE: slug = kebab-case of the doc's title. Ensure
|
|
63
67
|
`docs/features/<slug>/FEATURE.md` (move the doc there if given elsewhere).
|
|
64
|
-
|
|
68
|
+
On a new run, write `docs/features/<slug>/GATES.md`, all unchecked. On resume,
|
|
69
|
+
reconcile the existing checklist with actual diff/test evidence, approval,
|
|
70
|
+
and saved attempts; do not erase progress or trust stale checkmarks:
|
|
65
71
|
```
|
|
66
72
|
# GATES — <slug>
|
|
67
73
|
- [ ] spec-complete
|
|
@@ -91,9 +97,10 @@ d. STATE + BRANCH: `docs/STATE.md` gets `feature: <slug> (active)`. Work on
|
|
|
91
97
|
|
|
92
98
|
Dispatch `researcher` (IMPL mode) scoped to the doc: which modules/files the
|
|
93
99
|
feature touches, which dependencies + versions are involved, what the doc leaves
|
|
94
|
-
unstated.
|
|
95
|
-
|
|
96
|
-
|
|
100
|
+
unstated. Resolve routine details within approved scope and record assumptions
|
|
101
|
+
in execution notes (not an approval-hashed artifact). Material requirement gaps
|
|
102
|
+
require approval. Continue without re-confirming routine choices. Check gate
|
|
103
|
+
`spec-complete` only when the specification is sufficient.
|
|
97
104
|
|
|
98
105
|
## 2. ADVERSARIAL DOC-REVIEW (before planning)
|
|
99
106
|
|
|
@@ -104,7 +111,8 @@ Dispatch TWO reviewers in parallel, each told to ATTACK the doc, not summarize i
|
|
|
104
111
|
data store, money, PII)? If yes, threat-model it now (`security` skill) and fold
|
|
105
112
|
abuse cases into the acceptance criteria as negative cases.
|
|
106
113
|
|
|
107
|
-
|
|
114
|
+
Record findings and derived test cases in execution notes. Do not silently
|
|
115
|
+
rewrite approved acceptance criteria; material changes require renewed approval.
|
|
108
116
|
Internally CONTRADICTORY spec -> HARD-STOP (methodology hard-stop 3). Merely
|
|
109
117
|
incomplete -> fill + log. Check gate `adversarial-doc-review`.
|
|
110
118
|
|
|
@@ -135,13 +143,16 @@ For each slice in `docs/features/<slug>/PLAN.md`, in order:
|
|
|
135
143
|
implementation) -> GREEN (`implementer`) -> e2e (`e2e-runner`) when the slice has
|
|
136
144
|
a user-facing flow. Non-TDD slice: IMPLEMENT -> TEST.
|
|
137
145
|
- Debug circuit breaker: WARN at 2, cap 3, `/unstuck` once per slice; still stuck
|
|
138
|
-
-> park the slice (BLOCKED in
|
|
146
|
+
-> park the slice (BLOCKED in execution state) + continue to the next
|
|
139
147
|
independent slice. Blockers batch-report at the end, never mid-flow.
|
|
140
148
|
- Rule 11 (secure coding + SAST/SCA/secrets) and rule 12 (lint/format/naming/
|
|
141
149
|
architecture) apply per slice as in `/phase`.
|
|
142
150
|
- `implementer` updates `docs/ENDPOINTS.md` as surfaces land.
|
|
143
151
|
|
|
144
152
|
All slices done + full feature suite green -> check gate `build-green`.
|
|
153
|
+
If required slices remain blocked, keep this gate unchecked. Independent review,
|
|
154
|
+
documentation, and test-plan preparation may continue, but delivery and done status
|
|
155
|
+
remain blocked. Checkpoint evidence, attempts, and next actions after each step.
|
|
145
156
|
|
|
146
157
|
## 6. REVIEW & HARDEN (adversarial + self-review)
|
|
147
158
|
|
|
@@ -174,7 +185,7 @@ a. Documentation update: `docs/ENDPOINTS.md` final pass; README/docs deltas the
|
|
|
174
185
|
b. Token stamp — append to FEATURE.md:
|
|
175
186
|
```
|
|
176
187
|
## Token stamp
|
|
177
|
-
context:
|
|
188
|
+
context: <observed value or unavailable> · subagents: <actual n> · slices: <n> · debug rounds: <n>
|
|
178
189
|
```
|
|
179
190
|
Check gate `token-stamp`.
|
|
180
191
|
c. Summary — append to FEATURE.md `## Summary`: what shipped, assumptions made,
|
|
@@ -184,11 +195,15 @@ d. Memory update — append wisdom candidates (resolved issues, reusable finding
|
|
|
184
195
|
to `docs/WISDOM-QUEUE.md`. The QUEUE is local + automatic; pushing to the
|
|
185
196
|
shared KB stays human (`/store-wisdom` reads the queue). Check gate `memory-queued`.
|
|
186
197
|
|
|
187
|
-
|
|
198
|
+
Only when every required gate is verified: STATE.md -> `feature: <slug> (done)`.
|
|
199
|
+
Otherwise preserve parked/pending status and report exactly what remains unverified.
|
|
188
200
|
|
|
189
201
|
## 9. DELIVERY
|
|
190
202
|
|
|
191
|
-
|
|
203
|
+
Only deliver after required gates pass. Commit the feature branch only when
|
|
204
|
+
allowed by the user's scope (clear message per slice or one squashed commit).
|
|
205
|
+
A no-commit/no-push instruction overrides delivery defaults. An Automation header
|
|
206
|
+
must reflect actual human consent, never an agent-authored permission upgrade.
|
|
192
207
|
Then by the doc's `> Automation:` header:
|
|
193
208
|
- `none` (default) -> STOP here. Show the human: branch name, summary, TEST-PLAN
|
|
194
209
|
path. Push is theirs (methodology hard-stop 1).
|
|
@@ -38,25 +38,34 @@ and STOPS. `/goal set` always stops at the confirmation gate anyway.
|
|
|
38
38
|
|
|
39
39
|
LOOP — repeat until a stop condition:
|
|
40
40
|
1. PICK the next actionable unit, in this order:
|
|
41
|
-
a. an in-progress unit in STATE (finish what is started)
|
|
41
|
+
a. an in-progress, unblocked unit in STATE (finish what is started)
|
|
42
42
|
b. an APPROVED, pending `docs/features/*/FEATURE.md` that advances the goal
|
|
43
43
|
c. the next pending PLAN phase that advances the goal (plan must be approved — rule 13)
|
|
44
44
|
d. an open ISSUES.md item inside the goal's scope (route `/quick` or `/feature`)
|
|
45
|
-
|
|
45
|
+
Select only units with verified dependencies and applicable plan approval.
|
|
46
|
+
Skip parked units and their dependents; do not re-pick them without new evidence.
|
|
47
|
+
Nothing actionable -> report + checkpoint + stop.
|
|
46
48
|
2. ROUTE it through the lane-routing table (`/feature` · `/phase` · `/quick`).
|
|
47
49
|
The lane runs with ALL its own gates — the goal layer never bypasses one.
|
|
48
|
-
3. TICK:
|
|
49
|
-
|
|
50
|
+
3. TICK: record status + evidence under the goal. Use `[x]` only for verified done;
|
|
51
|
+
record blocked/pending/not-run explicitly. Each attempted unit consumes budget,
|
|
52
|
+
including a parked unit. Persist remaining budget and retry counts; resuming
|
|
53
|
+
the same run does not reset them. Update STATE with the exact next action.
|
|
50
54
|
4. CHECK "Done when". Met -> mark `[done]`, STATE `goal: G<n> (done)`, final
|
|
51
55
|
report (units shipped · parked blockers · budget used). Not met -> loop.
|
|
52
56
|
|
|
53
|
-
STOP conditions (whichever first): Done-when met · budget spent ·
|
|
54
|
-
|
|
57
|
+
STOP conditions (whichever first): verified Done-when met · budget spent ·
|
|
58
|
+
no independent approved unit actionable · a run-wide safety/approval blocker.
|
|
59
|
+
A lane hard-stop parks that unit and its dependents; record its blocker (headless:
|
|
60
|
+
`BLOCKED.md`), then continue independent authorized units within budget.
|
|
61
|
+
On resume, reconcile checkpoints, approvals, and the worktree per the methodology.
|
|
62
|
+
A blocked required unit prevents claiming the goal complete.
|
|
55
63
|
Every stop produces ONE consolidated report — never a silent end.
|
|
56
64
|
|
|
57
65
|
## /goal status · /goal done <id> · /goal drop <id>
|
|
58
66
|
|
|
59
|
-
Show goals + progress ticks ·
|
|
67
|
+
Show goals + progress ticks · administratively close (record the human request,
|
|
68
|
+
not fabricated passing evidence) · abandon
|
|
60
69
|
(log why). Both edits keep the history lines — GOALS.md is append-style memory.
|
|
61
70
|
|
|
62
71
|
---
|
|
@@ -65,7 +74,7 @@ Show goals + progress ticks · force-close (human says it's done) · abandon
|
|
|
65
74
|
|
|
66
75
|
`/goal run` is one pass: it works until done/blocked/budget. To keep pressure on
|
|
67
76
|
a long goal, re-fire the pass on a schedule — host-level, not kit-level:
|
|
68
|
-
- **Claude
|
|
77
|
+
- **Claude hosts with a verified `/loop` capability**: `/loop 30m /goal run` — the host's interval loop
|
|
69
78
|
re-invokes the pass; the goal layer supplies the state + finish line that a
|
|
70
79
|
bare interval loop lacks (it stops itself when Done-when is met).
|
|
71
80
|
- **CI (headless)**: `create-issflow --ci` also installs
|
|
@@ -5,12 +5,14 @@ argument-hint: [phase number · "lite" · "dry-run"]
|
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
Caveman ULTRA mode. You are the ORCHESTRATOR. Route work to subagents —
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
use native isolated workers when available; otherwise use sequential role passes
|
|
9
|
+
per METHODOLOGY → Host capabilities and continuity.
|
|
10
|
+
Speak to the human as **PM** (status / ETA / blockers).
|
|
10
11
|
|
|
11
12
|
Note: subagents cannot talk to the user. Only YOU can.
|
|
12
13
|
|
|
13
|
-
Target phase: $ARGUMENTS
|
|
14
|
+
Target phase: $ARGUMENTS (default: next ready phase in the approved plan,
|
|
15
|
+
reconciled with execution state; do not rely on stale status in a hashed plan).
|
|
14
16
|
LANE: if args contain `lite` OR PLAN phase has `lane: lite` → LITE mode.
|
|
15
17
|
LITE forbidden when: final phase · new primary UI flow · auth/money/PII surface.
|
|
16
18
|
LITE still requires ETA + DoD + (if any UI touch) task check happy path.
|
|
@@ -28,7 +30,9 @@ run, commit, deploy nothing. (METHODOLOGY → Dry-run.)
|
|
|
28
30
|
|
|
29
31
|
## 0. PRE-FLIGHT
|
|
30
32
|
|
|
31
|
-
a. PLAN-APPROVAL CHECK
|
|
33
|
+
a. PLAN-APPROVAL CHECK: apply METHODOLOGY → Plan-scoped approvals first: verify
|
|
34
|
+
ACTIVE-PLAN, exact revision/digest and allowed paths when present. A legacy
|
|
35
|
+
docs/PLAN.md `> Approval:` header is fallback only, never an override.
|
|
32
36
|
Still `PENDING` (or no header) -> STOP. The plan is not signed off; no phase may
|
|
33
37
|
start. Route me to the `/overview` PLAN-APPROVAL gate (or `/replan` then re-approve).
|
|
34
38
|
Approved -> continue.
|
|
@@ -46,35 +50,45 @@ a2. DESIGN + ARCHITECTURE GATES (hard rule 15): Read `docs/STATE.md` for `design
|
|
|
46
50
|
b. INFRA CHECK (phases > 0): Read the declared infra in docs/OVERVIEW.md.
|
|
47
51
|
- Managed infra -> confirm it is reachable; no provisioning step is needed.
|
|
48
52
|
- Self-managed infra -> confirm Phase 0 (infra) ran and is healthy.
|
|
49
|
-
Surface infra + auth status before any work.
|
|
53
|
+
Surface infra + auth status before any work. After bounded readiness retries,
|
|
54
|
+
blocked infra parks this phase; return control to a goal/sprint driver for
|
|
55
|
+
independent approved work. Never treat an unavailable service as tested.
|
|
50
56
|
|
|
51
57
|
c. PHASE STATE CHECK: Read docs/STATE.md and docs/PLAN.md.
|
|
52
58
|
- No phase in progress, requested is next pending -> START at step 1.
|
|
53
|
-
- Same phase in-progress ->
|
|
54
|
-
|
|
59
|
+
- Same phase in-progress -> reconcile worktree, approval, and checkpoint
|
|
60
|
+
evidence before resuming STATE.md "next action"; retain retry counters.
|
|
61
|
+
- Different phase in-progress -> finish it first unless parked and the driver
|
|
62
|
+
selected this independently approved phase; preserve both checkpoints.
|
|
55
63
|
- Out of dependency order -> AUTO: ignore the request and run the next pending
|
|
56
64
|
phase in PLAN order. GUIDED: STOP, warn, proceed only if I confirm.
|
|
57
65
|
- Phase not in PLAN.md -> STOP. Suggest /overview or /replan.
|
|
58
66
|
|
|
59
|
-
d. FINAL PHASE CHECK:
|
|
60
|
-
|
|
67
|
+
d. FINAL PHASE CHECK: Reconcile the approved plan with execution state. Is this
|
|
68
|
+
the last planned phase? Record IS_FINAL_PHASE=true/false; earlier parked units
|
|
69
|
+
still block package completion even when this is the final phase.
|
|
61
70
|
|
|
62
71
|
e. DELIVERY / ETA BOARD (required before RESEARCH):
|
|
63
72
|
Update `docs/STATE.md` `delivery:` block:
|
|
64
|
-
-
|
|
73
|
+
- First inspect any existing wait: while its gate remains unresolved, retain
|
|
74
|
+
WAITING_ON_HUMAN (or WAITING_STALE after `stale_after`), surface the next
|
|
75
|
+
human action, and park this unit. Resume AGENT_ACTIVE only when the gate is
|
|
76
|
+
resolved and execution actually starts; then clear resolved waiting fields.
|
|
65
77
|
- Set `agent_eta` and `phase_etas` using `flow-config.json` → `delivery.phaseHours`
|
|
66
|
-
by phase size (S/M/L/XL) and project timezone.
|
|
78
|
+
by phase size (S/M/L/XL) and project timezone. Preserve the previous ETA
|
|
79
|
+
before recalculating so an overdue estimate is reported as SLIP, not hidden.
|
|
67
80
|
- Stage line: `stage: RESEARCH | next: … | blocker: none`
|
|
68
|
-
- Assumption budget: max `assumptionBudgetPerPhase` (default 3). Exceed →
|
|
69
|
-
for `/replan` or human
|
|
81
|
+
- Assumption budget: max `assumptionBudgetPerPhase` (default 3). Exceed → park
|
|
82
|
+
this unit for `/replan` or human; independent approved driver work may continue.
|
|
70
83
|
- If status was WAITING_ON_HUMAN and `stale_after` passed → set `WAITING_STALE`,
|
|
71
84
|
tell the human `next_human_action`, do not pretend AI is still building.
|
|
72
85
|
- If wall-clock past `agent_eta` while AGENT_ACTIVE → **SLIP**: report reason +
|
|
73
86
|
new ETA or BLOCKED. Never silently continue past ETA.
|
|
74
87
|
|
|
75
88
|
f. LITE shortcuts (when LITE): skip dedicated researcher if unknowns are none;
|
|
76
|
-
skip browser E2E if no UI
|
|
77
|
-
|
|
89
|
+
skip browser E2E if no UI. Keep every applicable CLOSE gate, including regression,
|
|
90
|
+
endpoint coverage, lint, secrets, and UI task checks. LITE never waives approval,
|
|
91
|
+
evidence, retry, or security requirements. Full path otherwise.
|
|
78
92
|
|
|
79
93
|
|
|
80
94
|
---
|
|
@@ -84,8 +98,9 @@ f. LITE shortcuts (when LITE): skip dedicated researcher if unknowns are none;
|
|
|
84
98
|
If LITE and no open unknowns: skip researcher; note "lite: research skipped" in STATE.
|
|
85
99
|
Else dispatch `researcher` in IMPL mode scoped to this phase.
|
|
86
100
|
Returns terse summary + path. Read the file only if needed.
|
|
87
|
-
Unknowns block the phase -> re-dispatch narrowed
|
|
88
|
-
|
|
101
|
+
Unknowns block the phase -> re-dispatch narrowed within the methodology retry
|
|
102
|
+
budget, then park if unresolved. No guessing or unbounded research.
|
|
103
|
+
After each major stage change, rewrite STATE `stage:` + one-line progress.
|
|
89
104
|
|
|
90
105
|
SECURE SDLC (design): if this phase touches a TRUST BOUNDARY (auth, untrusted input,
|
|
91
106
|
data store, money, PII), threat-model it now (`security` skill) and fold the abuse
|
|
@@ -156,8 +171,9 @@ PHASE GATE (rule 5) -> go to §4/§5/§6 (see GATE below).
|
|
|
156
171
|
|
|
157
172
|
Dispatch `implementer` (legacy mode) with phase spec + research summary.
|
|
158
173
|
Returns STUCK -> go to ESCALATE.
|
|
159
|
-
If IS_FINAL_PHASE:
|
|
160
|
-
|
|
174
|
+
If IS_FINAL_PHASE: prepare the deploy task, but do not deploy without explicit
|
|
175
|
+
release authorization. Record deployment as pending approval when not authorized;
|
|
176
|
+
never require a fabricated deployed URL to advance local verification.
|
|
161
177
|
|
|
162
178
|
## 3N. TEST (blind)
|
|
163
179
|
|
|
@@ -168,7 +184,8 @@ spec — never reads the logic. (e2e-runner only if frontend.)
|
|
|
168
184
|
|
|
169
185
|
## GATE (both paths)
|
|
170
186
|
|
|
171
|
-
PHASE GATE = current-phase REAL API suite passes AND (if frontend
|
|
187
|
+
PHASE GATE = current-phase REAL API suite passes AND (if frontend: E2E passes
|
|
188
|
+
OR the permitted LITE task check has recorded passing evidence) AND
|
|
172
189
|
(if frontend) the `ux-design` cookbook + wireframe check passes AND the
|
|
173
190
|
accumulated mock regression corpus stays green AND every docs/ENDPOINTS.md
|
|
174
191
|
entry has a regression test (checked at CLOSE).
|
|
@@ -193,10 +210,11 @@ Dispatch `debugger` (isolated context) on the specific failure.
|
|
|
193
210
|
(it is token-expensive); re-dispatch `debugger` with the findings, budget 3.
|
|
194
211
|
STILL STUCK (or already spent this phase's unstuck): log the issue (root cause +
|
|
195
212
|
every failed hypothesis) to ISSUES.md,
|
|
196
|
-
mark the slice `BLOCKED` in
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
213
|
+
mark the slice `BLOCKED` in execution state without rewriting the approved plan,
|
|
214
|
+
then return to the goal/sprint driver for the next INDEPENDENT approved unit.
|
|
215
|
+
A standalone phase reports the blocker rather than starting unrelated work.
|
|
216
|
+
Hard stops park affected work and dependents; do not bypass them or halt safe
|
|
217
|
+
independent driver work. Retain attempt counts across resume.
|
|
200
218
|
|
|
201
219
|
**GUIDED:**
|
|
202
220
|
FIRST STUCK: STOP. Present the problem, 3 failed hypotheses, the debugger's
|
|
@@ -219,7 +237,8 @@ REGRESSION GATE (before closing — Feature 3):
|
|
|
219
237
|
UI TASK CHECK (if this phase touched UI — required even in LITE):
|
|
220
238
|
- Happy path: primary user can complete the phase's user-visible job without guessing.
|
|
221
239
|
- Viewport: primary breakpoint (≥MD) + <SM if mobile is primary.
|
|
222
|
-
- Tokens:
|
|
240
|
+
- Tokens: run `node .issflow/scripts/token-lint.js` to check unlisted hex/RGB colors.
|
|
241
|
+
Review semantic token usage and spacing separately; the script does not verify those.
|
|
223
242
|
- Fail → FIX; do not close.
|
|
224
243
|
|
|
225
244
|
CODE-STANDARDS GATE (rule 12): the formatter + linter are clean (the language's
|
|
@@ -235,9 +254,13 @@ SECURITY GATE (rule 11 — Secure SDLC build stage):
|
|
|
235
254
|
- Open HIGH/CRITICAL findings BLOCK the close -> route to FIX. Deploying to prod
|
|
236
255
|
with open high/critical findings is a hard-stop (human sign-off).
|
|
237
256
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
257
|
+
Record phase `done` in execution state only if all required gates passed. Do not
|
|
258
|
+
edit approval-hashed plan content for progress; pending deployment remains pending
|
|
259
|
+
and prevents declaring a deployment-inclusive phase complete.
|
|
260
|
+
DELIVERY UPDATE: only after all required gates pass, set this phase's
|
|
261
|
+
`phase_etas` entry done; refresh the next ready phase's `agent_eta`. Set
|
|
262
|
+
`delivery.status: DONE` only if the package is complete. Otherwise preserve
|
|
263
|
+
WAITING/BLOCKED and its next action; clear only resolved waiting fields.
|
|
241
264
|
|
|
242
265
|
SPRINT STANDUP (if a sprint is active — STATE.md shows `sprint: <n> (active)`):
|
|
243
266
|
fire the `/sprint standup` tick — append the one-line standup to
|
|
@@ -270,18 +293,25 @@ IF IS_FINAL_PHASE — FINAL CLOSE sequence:
|
|
|
270
293
|
- Full endpoint catalogue: docs/ENDPOINTS.md
|
|
271
294
|
- Project history: docs/HISTORY.md
|
|
272
295
|
```
|
|
273
|
-
|
|
296
|
+
Use the PROJECT COMPLETE / READY TO USE wording only if every required unit,
|
|
297
|
+
check, and authorized deployment is actually complete. Otherwise report local
|
|
298
|
+
implementation verified, pending release/approval, blocked, or not run, with
|
|
299
|
+
evidence. Include only observed URLs and never include secret auth values.
|
|
274
300
|
|
|
275
301
|
ELSE (not final phase):
|
|
276
302
|
|
|
277
303
|
Run `/synthesize`.
|
|
278
|
-
|
|
304
|
+
Report phase result + next approved phase. Under `/goal run` or `/sprint run`,
|
|
305
|
+
checkpoint and return to the driver to continue without routine confirmation.
|
|
306
|
+
A standalone `/phase` ends here; use a context reset only if the host supports it.
|
|
279
307
|
|
|
280
308
|
---
|
|
281
309
|
|
|
282
310
|
## STATE CHECKPOINTING
|
|
283
311
|
|
|
284
|
-
After each step,
|
|
312
|
+
After each step, checkpoint per METHODOLOGY → Execution contract (including
|
|
313
|
+
approval digest, branch/base, evidence, attempts and remaining budget). Update
|
|
314
|
+
docs/STATE.md without losing other lanes:
|
|
285
315
|
```
|
|
286
316
|
|
|
287
317
|
phase: <n> (in progress)
|
|
@@ -299,4 +329,4 @@ delivery: ← preserve + update; never drop
|
|
|
299
329
|
```
|
|
300
330
|
Keep STATE.md small — overwrite, do not append. Preserve `plan:` and `delivery:`
|
|
301
331
|
on every overwrite. When entering WAITING_ON_HUMAN: set waiting_for, waiting_since,
|
|
302
|
-
stale_after (
|
|
332
|
+
stale_after (configured `delivery.staleAfterHours`, default 24h), eta_paused: true, next_human_action (one sentence).
|
|
@@ -25,17 +25,27 @@ Steps:
|
|
|
25
25
|
understand it · file(s) you'll touch · blast radius — and WAIT for my confirm.
|
|
26
26
|
One cheap turn beats redoing a misunderstood edit. (Already confirmed in this
|
|
27
27
|
conversation? say so and proceed — don't re-ask the same understanding.)
|
|
28
|
-
1.
|
|
28
|
+
1. Verify applicable plan revision/digest and allowed paths per METHODOLOGY →
|
|
29
|
+
Plan-scoped approvals; intake confirmation alone cannot override that gate.
|
|
30
|
+
grep docs/ISSUES.md for anything related.
|
|
29
31
|
1b. If the change touches UI: read `docs/design/tokens.css` + inventory when present.
|
|
30
32
|
Use semantic tokens only — no raw hex/spacing literals in components.
|
|
31
33
|
2. Make the change. Smallest diff that works.
|
|
32
34
|
3. Run it — lint/typecheck/smoke. Show me result.
|
|
33
35
|
4. REGRESSION GUARD: run `scripts/regression.sh` (mock corpus). No corpus in this
|
|
34
36
|
repo? run the project's own test suite instead (or the touched area's tests).
|
|
35
|
-
A break
|
|
36
|
-
|
|
37
|
+
A break blocks completion, not the first repair attempt: fix within the approved
|
|
38
|
+
scope and rerun the failed check plus regression, using the two-try budget below.
|
|
39
|
+
No agent chain is added.
|
|
40
|
+
5. Error you cannot fix in 2 tries -> park this unit with failed hypotheses,
|
|
41
|
+
evidence, and the next action. Recommend `/phase`; do not expand scope or
|
|
42
|
+
reset the budget automatically. Under an approved goal, return the blocker
|
|
43
|
+
to its driver so independent units can continue.
|
|
37
44
|
6. Change revealed a bug -> `/log-issue`.
|
|
38
45
|
7. ARCHITECTURE SELF-CHECK: touched an agent, hook, command, or workflow rule?
|
|
39
46
|
YES -> `/log-decision`.
|
|
40
47
|
|
|
41
|
-
No STATE.md rewrite,
|
|
48
|
+
No full STATE.md rewrite, synthesize, or /clear needed. If interrupted or blocked,
|
|
49
|
+
leave a minimal checkpoint (scope, diff, tests, attempts, next action) per the
|
|
50
|
+
methodology Execution contract; preserve existing state. Report done only after
|
|
51
|
+
required checks pass, otherwise blocked/not run with evidence.
|