create-issflow 1.4.0 → 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/bin/cli.js CHANGED
@@ -266,9 +266,15 @@ function flowConfig() {
266
266
  + 'Some 1M-context models report their id WITHOUT a [1m] tag, so auto-detect '
267
267
  + 'assumes 200000 and may false-gate around 156k — if you run a 1M model, set '
268
268
  + 'window:1000000 here by hand. warnPct = soft non-blocking nudge; gatePct = hard '
269
- + 'block on NEW build work (Edit/Write-to-source/feature Task). Checkpoint paths '
270
- + '(docs/**, STATE/ISSUES/snapshots), the synthesizer subagent, and all Bash are '
271
- + 'never blocked.',
269
+ + 'block on NEW build work (Edit/Write to SOURCE files). Checkpoint paths '
270
+ + '(docs/**, STATE/ISSUES/snapshots) and all Bash are never blocked; Task '
271
+ + 'delegation is never gated (a subagent isolates noise and shrinks context).',
272
+ },
273
+ sprint: {
274
+ defaultCapacity: 8,
275
+ _note: 'Sprint layer (/sprint). defaultCapacity = points committed to the FIRST '
276
+ + 'sprint before any velocity history exists; later sprints size to the rolling '
277
+ + 'completed-velocity average. Optional — /sprint falls back to 8 if absent.',
272
278
  },
273
279
  }, null, 2) + '\n';
274
280
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-issflow",
3
- "version": "1.4.0",
3
+ "version": "1.5.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"
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: e2e-runner
3
- description: Writes and runs functional browser E2E (your declared E2E runner, e.g. Playwright) BLIND — reads only the acceptance spec + docs/ENDPOINTS.md, never the implementation. Writes a trace to docs/research/e2e-<phase-slug>.md; returns a terse summary.
3
+ description: Writes and runs functional browser E2E (your declared E2E runner, e.g. Playwright) BLIND — reads the acceptance spec, OVERVIEW (stack), docs/ENDPOINTS.md, and the E2E runner config, never the implementation. Writes a trace to docs/research/e2e-<phase-slug>.md; returns a terse summary.
4
4
  tools: Read, Grep, Glob, Write, Bash
5
5
  model: opus
6
6
  ---
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  description: Handle a mid-project requirement change — assess impact, re-estimate effort + cost, log the change order, then update the plan + proposal. Run whenever scope changes after the proposal is approved.
3
- argument-hint: [the requested change]
3
+ argument-hint: [the requested change · "dry-run" to preview impact without logging]
4
4
  ---
5
5
 
6
6
  Caveman ULTRA mode. You are the ORCHESTRATOR.
@@ -8,6 +8,11 @@ Caveman ULTRA mode. You are the ORCHESTRATOR.
8
8
  A change request is a COMMERCIAL event, not just a re-plan: changing scope changes
9
9
  cost and timeline. Handle it transparently and fairly. Change: $ARGUMENTS
10
10
 
11
+ DRY-RUN: if `$ARGUMENTS` contains `dry-run`/`--dry-run`, do the impact analysis +
12
+ re-estimate but EXECUTE NOTHING — print the ACTION PLAN (cost/scope/timeline delta,
13
+ files you'd touch) and STOP. No change order is logged, no plan/proposal is edited.
14
+ (METHODOLOGY → Dry-run.)
15
+
11
16
  ## PRE-FLIGHT
12
17
  Read `docs/PROPOSAL.md` (the approved baseline), `docs/PLAN.md`, `docs/STATE.md`,
13
18
  and `docs/CHANGES.md` (create if missing). No approved proposal yet -> you're still
@@ -12,7 +12,7 @@ Canonical format:
12
12
 
13
13
  ### <short error title — searchable, literal error keywords>
14
14
 
15
- - [x] open (or “- [x] resolved”)
15
+ - [ ] open (or “- [x] resolved” once fixed)
16
16
  - symptom: <what was observed>
17
17
  - root cause: <the REAL underlying cause>
18
18
  - solution: <exact fix, or “pending”>
@@ -23,6 +23,8 @@ Rules:
23
23
  - title must contain literal error keywords -> grep finds it.
24
24
  - root cause is the real cause, not "the line threw an error".
25
25
  - always fill "failed attempts" — stops repeated dead ends.
26
+ - open issues use the empty box `- [ ]`; resolved are checked `- [x] resolved`
27
+ (the SessionStart hook surfaces every `- [ ]` as open — keep the box empty until fixed).
26
28
  - open issues go at the TOP; resolved below; archived oldest at bottom.
27
29
 
28
30
  Confirm the entry back in 2 lines.
@@ -1,8 +1,9 @@
1
1
  ---
2
2
  description: Run one phase end-to-end. TDD phases run SCAFFOLD -> RED -> GREEN; non-TDD phases run IMPLEMENT -> TEST. Both with the debug circuit breaker and the regression guard at CLOSE.
3
- argument-hint: [phase number]
3
+ argument-hint: [phase number · "dry-run" to preview what the phase would do]
4
4
  ---
5
5
 
6
+
6
7
  Caveman ULTRA mode. You are the ORCHESTRATOR. Route work to subagents —
7
8
  you do NOT implement or debug yourself.
8
9
 
@@ -12,6 +13,15 @@ Target phase: $ARGUMENTS (default: the phase marked pending in docs/PLAN.md)
12
13
 
13
14
  ---
14
15
 
16
+ ## DRY-RUN CHECK (first — before PRE-FLIGHT)
17
+
18
+ If `$ARGUMENTS` contains `dry-run` or `--dry-run`: do the full analysis but EXECUTE
19
+ NOTHING. Print the ACTION PLAN — files you'd create/change · agents you'd dispatch ·
20
+ tests/gates you'd run · deploy target · cost/scope/risk impact — then STOP. Write,
21
+ run, commit, deploy nothing. (METHODOLOGY → Dry-run.)
22
+
23
+ ---
24
+
15
25
  ## 0. PRE-FLIGHT
16
26
 
17
27
  a. PLAN-APPROVAL CHECK (hard rule 13): Read the docs/PLAN.md `> Approval:` header.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  description: Turn approved requirements + tech stack into a client proposal — scope, phase breakdown, effort + cost estimate, timeline, assumptions, and a sign-off gate. Run after /overview, before building.
3
- argument-hint: [optional: rate / budget / constraints]
3
+ argument-hint: [optional: rate / budget / constraints · "dry-run" to preview]
4
4
  ---
5
5
 
6
6
  Caveman ULTRA mode. You are the ORCHESTRATOR.
@@ -9,6 +9,10 @@ Purpose: produce `docs/PROPOSAL.md` — WHAT we build, in what phases, how long,
9
9
  much, and on what assumptions — for the client to approve BEFORE any build starts.
10
10
  A proposal is a commercial gate: always interactive (both AUTO and GUIDED).
11
11
 
12
+ DRY-RUN: if `$ARGUMENTS` contains `dry-run`/`--dry-run`, do the full analysis but
13
+ EXECUTE NOTHING — print the ACTION PLAN (scope, phase breakdown, rough estimate)
14
+ and STOP. No PROPOSAL.md / proposal.html is written. (METHODOLOGY → Dry-run.)
15
+
12
16
  ## PRE-FLIGHT
13
17
  Read `docs/OVERVIEW.md` (scope, stack, success criteria) and `docs/PRD.md` if
14
18
  present (else the PRD in your BMAD/iSSM). No OVERVIEW -> run `/overview` first.
@@ -1,12 +1,16 @@
1
1
  ---
2
2
  description: Make a small, obvious change directly — no agent chain, no phase overhead.
3
- argument-hint: [what to change]
3
+ argument-hint: [what to change · "dry-run" to preview the edit]
4
4
  ---
5
5
 
6
6
  Caveman ULTRA mode. Apply `karpathy-guidelines` skill.
7
7
 
8
8
  Purpose: skip the orchestration tax for a 5-line fix.
9
9
 
10
+ DRY-RUN: if `$ARGUMENTS` contains `dry-run`/`--dry-run`, describe the exact edit
11
+ you'd make (file · lines · the change) and the regression you'd run, then STOP —
12
+ change nothing. (METHODOLOGY → Dry-run.)
13
+
10
14
  Use `/quick` when ALL hold:
11
15
  - change is small (under 30 lines) and obvious
12
16
  - no new vertical slice
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  description: Pre-production release pipeline — after all build phases, run the full automated gauntlet (full regression: functional / integration / e2e · all audits: UI / QA / security / code · smoke test), then hand off to manual UAT, drive the defect loop to green, produce a sign-off document, and promote to production. The automated SDLC backbone; production deploy is a human-signed hard-stop.
3
- argument-hint: [optional: target env]
3
+ argument-hint: [optional: target env · "dry-run" to preview the pipeline without running it]
4
4
  ---
5
5
 
6
6
  Caveman ULTRA mode. You are the ORCHESTRATOR.
@@ -10,6 +10,10 @@ AUTO runs all AUTOMATED stages without stopping; it STOPS only at the human gate
10
10
  UAT execution, sign-off, and the production promote (security/irreversible hard-stops).
11
11
  Record progress in STATE.md so a resumed session continues mid-pipeline.
12
12
 
13
+ DRY-RUN: if `$ARGUMENTS` contains `dry-run`/`--dry-run`, do the full analysis but
14
+ EXECUTE NOTHING — print the ACTION PLAN (stages, audits, deploy target, risk impact)
15
+ and STOP. Nothing is run, signed, or promoted. (METHODOLOGY → Dry-run.)
16
+
13
17
  ## STAGE 1 — FULL REGRESSION (auto)
14
18
  Run the whole REAL corpus end-to-end: **functional + integration + e2e**
15
19
  (`scripts/regression.sh --real`, then the declared E2E runner via `e2e-runner`).
@@ -54,9 +54,10 @@ commercial impact (split/merge/reorder, a discovered technical re-slice).
54
54
  - A MERGE -> consolidate the merged phases' regression tests.
55
55
  - A REORDER -> keep the tests as-is (contracts are phase-independent).
56
56
  Do NOT touch phase-local `tests/phase-<n>/` here beyond renumbering dirs.
57
- After reconciling, run `scripts/regression.sh --real` to confirm the
58
- reconciled corpus still passes against live services. A failure -> surface it
59
- and stop before approval.
57
+ After reconciling, re-run the regression corpus to confirm it still passes:
58
+ `--real` ONLY if at least one phase is done (live services exist); on a pre-build
59
+ replan (no done phase, managed infra not yet wired) run the mock corpus instead,
60
+ or skip with a noted reason. A failure -> surface it and stop before approval.
60
61
 
61
62
  6. PLAN-APPROVAL gate (hard rule 13). A re-plan reshapes UNBUILT scope, so it reverts
62
63
  the plan to unapproved: set the PLAN.md `> Approval:` header back to `PENDING`, SHOW
@@ -1,6 +1,6 @@
1
1
  ---
2
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]
3
+ argument-hint: [run|plan|standup|review|retro|close|status] [sprint number · "dry-run"]
4
4
  ---
5
5
 
6
6
  Caveman ULTRA mode. You are the ORCHESTRATOR / SCRUM MASTER. You FACILITATE the
@@ -8,6 +8,11 @@ ceremonies and ROUTE build work to subagents — you do NOT implement or debug y
8
8
 
9
9
  Subcommand: $ARGUMENTS (default: `status`)
10
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
+
11
16
  Hierarchy: **PLAN (product backlog) → SPRINT (committed slice of phases) → PHASE
12
17
  (the build loop)**. A sprint groups consecutive PLAN phases behind ONE sprint goal
13
18
  and ships ONE deployable increment. Phases still run via `/phase` exactly as before
@@ -15,7 +15,7 @@ Steps:
15
15
 
16
16
  - [ ] open - stuck after 3 attempts
17
17
  - symptom: <…>
18
- - attempts that FAILED: <hypothesis 1>, <2>, <3>
18
+ - failed attempts: <hypothesis 1>, <2>, <3>
19
19
 
20
20
  ```
21
21
  Reference the existing debug-<slug>.md.
@@ -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-to-source/feature Task)
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', 'Task']);
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 + the synthesizer ritual are never blocked, so the
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
- if (tool === 'Edit' || tool === 'Write' || tool === 'MultiEdit' || tool === 'NotebookEdit') {
74
- const fp = ti.file_path || ti.path || ti.notebook_path || '';
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));
@@ -80,7 +80,7 @@ if (issues !== null) {
80
80
  // 3b. research index
81
81
  const idx = read('docs/research/INDEX.md');
82
82
  if (idx !== null) {
83
- const rows = idx.split('\n').filter((l) => /^[0-9]/.test(l));
83
+ const rows = idx.split('\n').filter((l) => /^\|\s*\d{4}-\d{2}-\d{2}/.test(l));
84
84
  emit(`## research/INDEX.md (${rows.length} prior investigations)`);
85
85
  emit('grep this before any new research or debugging.');
86
86
  for (const l of rows.slice(-15)) emit(' ' + l);
@@ -191,9 +191,9 @@ can. Escalation is at most two hops.
191
191
  phases it is dispatched BEFORE logic exists (RED-first), so blindness is
192
192
  structural, not honor-system. Writes a MOCK suite + a REAL API suite.
193
193
  - **e2e-runner** — writes/runs functional browser E2E (your declared E2E runner,
194
- e.g. Playwright) BLIND. Reads only the acceptance spec + `docs/ENDPOINTS.md`,
195
- never the implementation. Writes a trace to `docs/research/e2e-<phase-slug>.md`;
196
- returns a terse summary.
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.
197
197
  - **debugger** — debugs in an ISOLATED context. Writes a trace to
198
198
  `docs/research/debug-<slug>.md`; returns a summary.
199
199
  - **synthesizer** — compresses `docs/STATE.md` / `docs/ISSUES.md`, prunes
@@ -351,6 +351,18 @@ development run that follows the spec and logs every problem so it never recurs.
351
351
 
352
352
  -----
353
353
 
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
+
354
366
  ## Hard rules (1–13)
355
367
 
356
368
  1. Before debugging ANY error: grep `docs/ISSUES.md` AND `docs/research/INDEX.md`.