@gobing-ai/spur 0.3.94 → 0.3.96
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/.claude-plugin/marketplace.json +1 -1
- package/README.md +42 -0
- package/board/index.d.ts +38 -0
- package/config/plugin-scripts.json +3 -52
- package/config/rules/boundary/sp-script-placement.yaml +19 -0
- package/config/rules/strict/runtime-boundaries.yaml +5 -0
- package/config/rules/structure/test-location.yaml +2 -0
- package/config/rules/typescript/no-syscall-emulation-in-boundary-mock.yaml +1 -1
- package/config/rules/typescript/output-boundaries.yaml +15 -2
- package/config/script-placement-baseline.json +51 -0
- package/config/workflows/feature-verification.yaml +7 -4
- package/config/workflows/history-anatomy.yaml +23 -11
- package/config/workflows/idea-pipeline.yaml +87 -86
- package/config/workflows/pr-review.yaml +18 -9
- package/config/workflows/task-pipeline.yaml +84 -109
- package/config/workflows/wrapup-pipeline.yaml +173 -46
- package/package.json +15 -11
- package/plugins/sp/README.md +8 -10
- package/plugins/sp/agents/super-reviewer.md +43 -18
- package/plugins/sp/commands/dev-fixgha.md +83 -0
- package/plugins/sp/commands/dev-gitmsg.md +8 -6
- package/plugins/sp/commands/dev-gtd.md +2 -2
- package/plugins/sp/commands/dev-idea.md +22 -12
- package/plugins/sp/commands/dev-plan.md +8 -9
- package/plugins/sp/commands/dev-review.md +22 -13
- package/plugins/sp/commands/dev-verify.md +7 -4
- package/plugins/sp/commands/dev-verifyall.md +5 -4
- package/plugins/sp/commands/dev-wrap.md +1 -1
- package/plugins/sp/commands/spur-init.md +2 -2
- package/plugins/sp/hooks/context-post-tool.ts +2 -2
- package/plugins/sp/hooks/context-session-start.ts +2 -1
- package/plugins/sp/hooks/context-session-stop.ts +22 -14
- package/plugins/sp/hooks/pi/guard-extension.ts +109 -150
- package/plugins/sp/lib/history-anatomy.generated.d.mts +112 -0
- package/plugins/sp/lib/history-anatomy.generated.mjs +686 -0
- package/plugins/sp/lib/idea-handoff.generated.mjs +6 -5
- package/plugins/sp/lib/inline-run.generated.d.mts +13 -2
- package/plugins/sp/lib/inline-run.generated.mjs +33 -16
- package/plugins/sp/lib/quality-gate.generated.d.mts +104 -0
- package/plugins/sp/lib/quality-gate.generated.mjs +438 -0
- package/plugins/sp/lib/residual-scan.generated.d.mts +62 -0
- package/plugins/sp/lib/residual-scan.generated.mjs +210 -0
- package/plugins/sp/lib/spur-bin.ts +36 -0
- package/plugins/sp/lib/step-profile.generated.d.mts +71 -0
- package/plugins/sp/lib/step-profile.generated.mjs +174 -0
- package/plugins/sp/plugin.json +1 -1
- package/plugins/sp/references/roles.md +1 -1
- package/plugins/sp/scripts/daily-summary/daily-summary.mjs +3 -3
- package/plugins/sp/scripts/daily-summary/daily-summary.ts +3 -3
- package/plugins/sp/scripts/dogfood-testing/detect-pipeline-driving.mjs +2 -0
- package/plugins/sp/scripts/dogfood-testing/detect-pipeline-driving.ts +1 -0
- package/plugins/sp/scripts/dogfood-testing/validate-report.mjs +9 -7
- package/plugins/sp/scripts/dogfood-testing/validate-report.ts +8 -7
- package/plugins/sp/scripts/feature-verification-steps.ts +6 -6
- package/plugins/sp/scripts/history-anatomy-cache.mjs +23 -22
- package/plugins/sp/scripts/history-anatomy-cache.ts +23 -928
- package/plugins/sp/scripts/inline-run-setup.mjs +90 -315
- package/plugins/sp/scripts/inline-run-setup.ts +109 -639
- package/plugins/sp/scripts/pr-reviewing.mjs +2 -0
- package/plugins/sp/scripts/pr-reviewing.ts +1 -0
- package/plugins/sp/scripts/quality-gate.mjs +38 -21
- package/plugins/sp/scripts/quality-gate.ts +20 -660
- package/plugins/sp/scripts/residual-scan.mjs +138 -159
- package/plugins/sp/scripts/residual-scan.ts +102 -499
- package/plugins/sp/scripts/script-root.mjs +129 -0
- package/plugins/sp/scripts/script-root.ts +199 -0
- package/plugins/sp/scripts/workflow-step-profile.mjs +27 -16
- package/plugins/sp/scripts/workflow-step-profile.ts +22 -314
- package/plugins/sp/scripts/wrapup-drift-probe.mjs +12 -3
- package/plugins/sp/scripts/wrapup-drift-probe.ts +6 -3
- package/plugins/sp/scripts/wrapup-steps.mjs +42 -40
- package/plugins/sp/scripts/wrapup-steps.ts +64 -46
- package/plugins/sp/skills/code-improvement/SKILL.md +5 -4
- package/plugins/sp/skills/code-verification/SKILL.md +46 -16
- package/plugins/sp/skills/code-verification/references/verdict-schema.md +13 -2
- package/plugins/sp/skills/functional-review/SKILL.md +8 -5
- package/plugins/sp/skills/functional-review/references/verdict-schema.md +1 -1
- package/plugins/sp/skills/history-anatomy/references/modes.md +2 -1
- package/plugins/sp/skills/next-feature/references/handoff-routing.md +1 -1
- package/plugins/sp/skills/next-router/references/routing-table.md +2 -2
- package/plugins/sp/skills/spur-cli/SKILL.md +3 -3
- package/plugins/sp/skills/spur-cli/references/agent.md +10 -10
- package/plugins/sp/skills/spur-cli/references/features.md +17 -6
- package/plugins/sp/skills/spur-cli/references/init.md +17 -16
- package/plugins/sp/skills/spur-cli/references/self.md +3 -2
- package/plugins/sp/skills/spur-cli/references/serve.md +10 -10
- package/plugins/sp/skills/spur-cli/references/tasks/verbs.md +28 -5
- package/plugins/sp/skills/spur-cli/references/tasks.md +14 -8
- package/plugins/sp/skills/spur-dev/references/ac-style-guide.md +4 -3
- package/plugins/sp/skills/spur-dev/references/cross-cutting.md +11 -9
- package/plugins/sp/skills/spur-dev/references/decision-brief.md +1 -1
- package/plugins/sp/skills/spur-dev/references/dev-operations.md +86 -70
- package/plugins/sp/skills/spur-dev/references/done-housekeeping.md +3 -3
- package/plugins/sp/skills/spur-dev/references/execution-batch.md +107 -44
- package/plugins/sp/skills/spur-dev/references/execution-workflow.md +5 -9
- package/plugins/sp/skills/spur-dev/references/feature-link-helper.md +3 -3
- package/plugins/sp/skills/spur-dev/references/flag-glossary.md +31 -21
- package/plugins/sp/skills/spur-dev/references/gate-checklists.md +19 -19
- package/plugins/sp/skills/spur-dev/references/idea-evaluation.md +4 -3
- package/plugins/sp/skills/spur-dev/references/inline-pipeline-driver.md +35 -6
- package/plugins/sp/skills/spur-doctor/SKILL.md +1 -1
- package/plugins/sp/skills/sys-architecture/SKILL.md +3 -2
- package/plugins/sp/tsconfig.json +8 -0
- package/spur.js +6638 -4775
- package/web/_astro/BoardApp.BIjMatT1.js +1 -0
- package/web/_astro/{BoardApp.FTEs3-N8.js → BoardApp.GvjIe9Z6.js} +150 -153
- package/web/_astro/TaskDetail.BZM3EAFx.js +1 -0
- package/web/_astro/_commonjsHelpers.CqkleIqs.js +1 -0
- package/web/_astro/{arc.uuAf51IT.js → arc.HkRiZnoI.js} +1 -1
- package/web/_astro/architectureDiagram-3BPJPVTR.BDdK-tgZ.js +36 -0
- package/web/_astro/{blockDiagram-GPEHLZMM.D1mGCq3p.js → blockDiagram-GPEHLZMM.CZ9kOBxx.js} +1 -1
- package/web/_astro/board-facade-react-dom-client.B2U5wMvk.js +1 -0
- package/web/_astro/board-facade-react-dom.Cd2MuMhF.js +1 -0
- package/web/_astro/board-facade-react-jsx-dev-runtime.B_L3JzfC.js +1 -0
- package/web/_astro/board-facade-react-jsx-runtime.BY2yfHRi.js +1 -0
- package/web/_astro/board-facade-react-router-dom.Dy5pjzOw.js +1 -0
- package/web/_astro/board-facade-react-router.DjjqU27_.js +1 -0
- package/web/_astro/board-facade-react.Dgf4GRyj.js +1 -0
- package/web/_astro/{c4Diagram-AAUBKEIU.CMsolcde.js → c4Diagram-AAUBKEIU.DXK9qeRD.js} +1 -1
- package/web/_astro/channel.DlhX2MEt.js +1 -0
- package/web/_astro/{chunk-2J33WTMH.CrGA3fik.js → chunk-2J33WTMH.BTD2WeX5.js} +1 -1
- package/web/_astro/{chunk-4BX2VUAB.DsLVVla0.js → chunk-4BX2VUAB.Ci6Qbcvk.js} +1 -1
- package/web/_astro/{chunk-55IACEB6.Dxc59Tfi.js → chunk-55IACEB6.yl3zsj7p.js} +1 -1
- package/web/_astro/{chunk-727SXJPM.CaEVE2Wy.js → chunk-727SXJPM.ClXZsfyR.js} +1 -1
- package/web/_astro/{chunk-AQP2D5EJ.BiJ4HXeI.js → chunk-AQP2D5EJ.BmKWZBcP.js} +1 -1
- package/web/_astro/{chunk-FMBD7UC4.Mxf1fru5.js → chunk-FMBD7UC4.By30fcb7.js} +1 -1
- package/web/_astro/chunk-JMJ3UQ3L.BQJEJHu4.js +34 -0
- package/web/_astro/{chunk-ND2GUHAM.pyOWQixH.js → chunk-ND2GUHAM.24NmrD-k.js} +1 -1
- package/web/_astro/{chunk-QZHKN3VN.BmEsg4vr.js → chunk-QZHKN3VN.BN4sKdcS.js} +1 -1
- package/web/_astro/chunk-YNUBSHFH.CxeAygfi.js +7 -0
- package/web/_astro/{classDiagram-4FO5ZUOK.BHhhMFTO.js → classDiagram-4FO5ZUOK.CJpoMPb5.js} +1 -1
- package/web/_astro/{classDiagram-v2-Q7XG4LA2.BHhhMFTO.js → classDiagram-v2-Q7XG4LA2.CJpoMPb5.js} +1 -1
- package/web/_astro/client.BhluLQqe.js +1 -0
- package/web/_astro/client.DBpSRLnx.js +9 -0
- package/web/_astro/cose-bilkent-S5V4N54A.BraxQ2Nt.js +1 -0
- package/web/_astro/{cynefin-OW5HDTMX.C2j1_lKL.js → cynefin-OW5HDTMX.gzoU73oL.js} +1 -1
- package/web/_astro/{dagre-BM42HDAG.hZ2NCTdT.js → dagre-BM42HDAG.wyDfWySU.js} +1 -1
- package/web/_astro/{diagram-2AECGRRQ.Bfw5_EzK.js → diagram-2AECGRRQ.h2_EbMxV.js} +1 -1
- package/web/_astro/{diagram-5GNKFQAL.Bt1V_Tmk.js → diagram-5GNKFQAL.Db6dcs89.js} +1 -1
- package/web/_astro/{diagram-KO2AKTUF.DEk-YFwp.js → diagram-KO2AKTUF.NVwzxu_U.js} +1 -1
- package/web/_astro/{diagram-LMA3HP47.CDjndtQm.js → diagram-LMA3HP47.B-eNgDQk.js} +1 -1
- package/web/_astro/{diagram-OG6HWLK6.cFnUHScG.js → diagram-OG6HWLK6.Bsa8ZRbJ.js} +1 -1
- package/web/_astro/{erDiagram-TEJ5UH35.DlhYp7NV.js → erDiagram-TEJ5UH35.BospRE5Q.js} +1 -1
- package/web/_astro/{flowDiagram-I6XJVG4X.DNTpsxfx.js → flowDiagram-I6XJVG4X.DMzvHwAA.js} +1 -1
- package/web/_astro/ganttDiagram-6RSMTGT7.Dmdxgd-M.js +292 -0
- package/web/_astro/{gitGraphDiagram-PVQCEYII.DkEqNI0P.js → gitGraphDiagram-PVQCEYII.CaqdO0rL.js} +1 -1
- package/web/_astro/index.5dn-Zm-2.js +1 -0
- package/web/_astro/index.C-IqPpW2.js +1 -0
- package/web/_astro/index.Cyc_GA4f.js +1 -0
- package/web/_astro/index.EoZlzLK-.css +1 -0
- package/web/_astro/index.tZfqwSut.js +1 -0
- package/web/_astro/{infoDiagram-5YYISTIA.CrjioCTG.js → infoDiagram-5YYISTIA.DDVD9Wn7.js} +1 -1
- package/web/_astro/{ishikawaDiagram-YF4QCWOH.BcK0CN8n.js → ishikawaDiagram-YF4QCWOH.EKyCUFsL.js} +1 -1
- package/web/_astro/{journeyDiagram-JHISSGLW.p0CbBDX1.js → journeyDiagram-JHISSGLW.By2-RkYB.js} +1 -1
- package/web/_astro/jsx-runtime.DWOiEOII.js +1 -0
- package/web/_astro/{kanban-definition-UN3LZRKU.puHIFt6J.js → kanban-definition-UN3LZRKU.ar-WmlyR.js} +1 -1
- package/web/_astro/{linear.Bb-3a1d7.js → linear.BnzMBgo_.js} +1 -1
- package/web/_astro/{mermaid.core.CJDgXOJs.js → mermaid.core.DSqeFu2Y.js} +4 -4
- package/web/_astro/{mindmap-definition-RKZ34NQL.BoAZEI9t.js → mindmap-definition-RKZ34NQL.1XcF8Wh2.js} +1 -1
- package/web/_astro/{pieDiagram-4H26LBE5.CJNSdqY7.js → pieDiagram-4H26LBE5.DnItHOdK.js} +1 -1
- package/web/_astro/{quadrantDiagram-W4KKPZXB.DtTy7_0Z.js → quadrantDiagram-W4KKPZXB.BQQyrnBt.js} +1 -1
- package/web/_astro/{requirementDiagram-4Y6WPE33.BNYV98Xg.js → requirementDiagram-4Y6WPE33.Dmzxun82.js} +1 -1
- package/web/_astro/{sankeyDiagram-5OEKKPKP.DRq9DGHp.js → sankeyDiagram-5OEKKPKP.BBIeRKYB.js} +1 -1
- package/web/_astro/{sequenceDiagram-3UESZ5HK.B7KdBFCm.js → sequenceDiagram-3UESZ5HK.CUNVdBBf.js} +1 -1
- package/web/_astro/{stateDiagram-AJRCARHV.CD62ZJ2H.js → stateDiagram-AJRCARHV.DlFf2sJm.js} +1 -1
- package/web/_astro/{stateDiagram-v2-BHNVJYJU.CeVk1TAj.js → stateDiagram-v2-BHNVJYJU.DXR7I1H5.js} +1 -1
- package/web/_astro/{timeline-definition-PNZ67QCA.C_ZPA5tT.js → timeline-definition-PNZ67QCA.BcO-GyX2.js} +1 -1
- package/web/_astro/{vennDiagram-CIIHVFJN.CrThO_FQ.js → vennDiagram-CIIHVFJN.ChCECmmW.js} +1 -1
- package/web/_astro/{wardleyDiagram-YWT4CUSO.DSZCA5nl.js → wardleyDiagram-YWT4CUSO.CRaT12mD.js} +1 -1
- package/web/_astro/{xychartDiagram-2RQKCTM6.KI7baTuk.js → xychartDiagram-2RQKCTM6.B3lsHVpj.js} +1 -1
- package/web/board-runtime.json +69 -0
- package/web/index.html +2 -2
- package/plugins/sp/lib/artifact-digest.generated.d.mts +0 -7
- package/plugins/sp/lib/artifact-digest.generated.mjs +0 -48
- package/plugins/sp/scripts/feature-sync-bounded.mjs +0 -298
- package/plugins/sp/scripts/feature-sync-bounded.ts +0 -479
- package/plugins/sp/scripts/idea-coverage-check.ts +0 -168
- package/plugins/sp/scripts/inline-pipeline-parity-check.ts +0 -298
- package/plugins/sp/scripts/record-feature-sync.mjs +0 -63
- package/plugins/sp/scripts/record-feature-sync.ts +0 -84
- package/plugins/sp/scripts/script-contract-check.ts +0 -377
- package/plugins/sp/scripts/stage-registry-adapter.ts +0 -1533
- package/plugins/sp/scripts/surface-drift-inventory.ts +0 -989
- package/plugins/sp/scripts/task-evidence-precheck.ts +0 -187
- package/plugins/sp/scripts/task-size-precheck.ts +0 -210
- package/plugins/sp/scripts/transition-shim-check.ts +0 -238
- package/plugins/sp/scripts/validate-commands.ts +0 -689
- package/plugins/sp/scripts/validate-flag-contracts.ts +0 -878
- package/plugins/sp/scripts/verify-answer-lint.ts +0 -547
- package/web/_astro/BoardApp.C02hAHPO.js +0 -1
- package/web/_astro/TaskDetail.C-GdsS-t.js +0 -1
- package/web/_astro/architectureDiagram-3BPJPVTR.CGe629A1.js +0 -36
- package/web/_astro/channel.fsgl7o5j.js +0 -1
- package/web/_astro/client.yhYJvxCU.js +0 -9
- package/web/_astro/cose-bilkent-S5V4N54A.2fH4YOlp.js +0 -1
- package/web/_astro/ganttDiagram-6RSMTGT7.DC_p36PI.js +0 -292
- package/web/_astro/index.De90oHcH.js +0 -1
- package/web/_astro/index.Hjbr15fG.css +0 -1
|
@@ -47,7 +47,7 @@ one thing and yields, so the **pipeline (not the agent) owns the loop**.
|
|
|
47
47
|
| ------- | ----------- | ------------ |
|
|
48
48
|
| `implement` | `/sp:dev-run --mode implement <wbs>` — write the code that satisfies the task; author `## Solution`. | [dev-operations.md §4 run](dev-operations.md) → `sp:code-implementation` |
|
|
49
49
|
| `test` → (`test-fix` ↔ `test-recheck`) → `review` \| `failed` | **Project quality gate** (not `/sp:dev-unit`). Soft shell probe of `${vars.qualityGateCmd}` (default `bun run spur-check`) — green path pays **one** full gate run. On FAIL: bounded `/sp:dev-fixall` loop (`qualityGateMaxFixAttempts`, default 2) with soft recheck; exhausted attempts route to pipeline `failed`. `/sp:dev-unit` remains **coverage gap-fill** (router C3/C5 / standalone). | [dev-operations.md §10 fixall](dev-operations.md); unit op still §1 |
|
|
50
|
-
| `review` | `/sp:dev-review <wbs>` — SECUA-framework review of the diff. | [dev-operations.md §2 review](dev-operations.md) |
|
|
50
|
+
| `review` | `/sp:dev-review --tasks <wbs>` — SECUA-framework review of the diff. | [dev-operations.md §2 review](dev-operations.md) |
|
|
51
51
|
| `verify` | `sp:code-verification` — requirements traceability + verdict. | [dev-operations.md §3 verify](dev-operations.md) |
|
|
52
52
|
|
|
53
53
|
Interactive omit/`inline` executes these model stages through the
|
|
@@ -96,10 +96,7 @@ cache-conservation discipline (`plugins/sp/skills/dogfood-testing/references/mon
|
|
|
96
96
|
|
|
97
97
|
## Step 2: Pipeline run
|
|
98
98
|
|
|
99
|
-
> **Pre-launch size-gate pre-check (R1 / 0478).** Before launching `spur workflow run task-pipeline.yaml`,
|
|
100
|
-
>
|
|
101
|
-
> - Without `--auto`: warn the operator before calling `spur workflow run` and prompt for confirmation or a plan-item override via `--vars '{"maxImplementPlanItems":"<count>"}'`.
|
|
102
|
-
> - With `--auto`: automatically append `"maxImplementPlanItems": "<count>"` to `--vars` and log a single-line notice (e.g. `Notice: task <wbs> has N plan items (>8 default cap); injecting maxImplementPlanItems override`).
|
|
99
|
+
> **Pre-launch size-gate pre-check (R1 / 0478; task 1002).** Before launching `spur workflow run task-pipeline.yaml`, run `spur task check <wbs> --precheck --json` — the same command the pipeline's precheck guard runs. It fails with a `precheck-size` finding above 10 requirements or 16 Plan items. The limits are fixed (no `--vars` override): on a failure, split the task instead of launching.
|
|
103
100
|
|
|
104
101
|
**`--worktree [<name>]` wraps Step 2, on either surface.** When `/sp:dev-run --mode full` carries
|
|
105
102
|
[`--worktree`](flag-glossary.md#flag-worktree), create or adopt the worktree *before* launching the
|
|
@@ -336,10 +333,9 @@ task.** A `cheap`/`standard`-tier model handed a task that big does not fail fas
|
|
|
336
333
|
entire `implementTimeoutMs` and exits 3 with a partial tree (run `ca130182` — 7 reqs / 9 plan
|
|
337
334
|
items / 12+ files → 30 minutes, 6 of 12 files, no tests, no docs, no `## Solution`).
|
|
338
335
|
|
|
339
|
-
The precheck size gate is count-only: it
|
|
340
|
-
never consults the executor's capability tier.
|
|
341
|
-
|
|
342
|
-
make a flash model able to finish one.
|
|
336
|
+
The precheck size gate (`spur task check <wbs> --precheck`) is count-only: it fails above 10
|
|
337
|
+
requirements or 16 Plan items and never consults the executor's capability tier. The limits are
|
|
338
|
+
fixed — clear a failure by splitting the task.
|
|
343
339
|
|
|
344
340
|
The empty-implement guard (`requireDiff` on the task-pipeline `implement` step, R3) fails the
|
|
345
341
|
run fast when an implement exits 0 with zero non-corpus changes — a no-op never drifts into
|
|
@@ -11,13 +11,13 @@ see_also:
|
|
|
11
11
|
**Scope:** opt-in, strictness-triggered — never gate-time, never automatic.
|
|
12
12
|
|
|
13
13
|
This helper resolves a deferred `feature_id` edge when the operator explicitly invokes or intends
|
|
14
|
-
`--strict` rigor, or asks to "link this task to a feature." It is **NOT** part of the `--
|
|
14
|
+
`--strict` rigor, or asks to "link this task to a feature." It is **NOT** part of the `--as done`
|
|
15
15
|
done-gate, NOT in any `--next` chain, and NOT triggered automatically. Invoking it is always an
|
|
16
16
|
explicit operator choice.
|
|
17
17
|
|
|
18
18
|
**Design boundaries (enforced):**
|
|
19
19
|
|
|
20
|
-
- `feature_id: null` is a valid, supported state under the default done-gate (`--
|
|
20
|
+
- `feature_id: null` is a valid, supported state under the default done-gate (`--as done`). Deferral is legitimate.
|
|
21
21
|
- This helper fires only when the operator opts in — it does NOT change the L4 warning severity.
|
|
22
22
|
- It NEVER creates a new feature without operator confirmation.
|
|
23
23
|
- It ALWAYS prefers matching an **existing** feature before proposing creation.
|
|
@@ -30,7 +30,7 @@ explicit operator choice.
|
|
|
30
30
|
- A deliberate traceability audit: `spur task check --strict` across the corpus reveals N orphan tasks.
|
|
31
31
|
|
|
32
32
|
**Do NOT invoke from:**
|
|
33
|
-
- The `--
|
|
33
|
+
- The `--as done` done-gate (it must stay feature_id-agnostic)
|
|
34
34
|
- Any `--next` chain or automated pipeline step
|
|
35
35
|
- Any context where the operator has not explicitly requested strict rigor or linking
|
|
36
36
|
|
|
@@ -43,7 +43,7 @@ as a follow-up, not quietly left inconsistent.
|
|
|
43
43
|
`implementAgent` override, objective triggers, and surface-derivation logic — lives in
|
|
44
44
|
[cross-cutting.md](cross-cutting.md#inline-default-execution-surface).
|
|
45
45
|
The value table below is the C3a cross-file parity surface (kept in lockstep with the SSOT by
|
|
46
|
-
`validate-flag-contracts.ts`), not an independent restatement.
|
|
46
|
+
`scripts/commands/validate-flag-contracts.ts`), not an independent restatement.
|
|
47
47
|
|
|
48
48
|
| Value | Who does the work | Derived surface |
|
|
49
49
|
| ------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------- |
|
|
@@ -126,6 +126,10 @@ Skip objective HITL confirmations inside this command (feature-check, batch-crea
|
|
|
126
126
|
gate). Taste gates and irreversible HITL gates (e.g. `--merge`) still pause even under `--auto`.
|
|
127
127
|
Only declared where the command already has at least one HITL gate the flag can skip.
|
|
128
128
|
|
|
129
|
+
**Planning exception** (`dev-idea`, `dev-plan`): `--auto` also accepts the recommendation at the
|
|
130
|
+
taste gates (idea-eval, design-approval) — every gate there is reversible corpus writes. A gate
|
|
131
|
+
without an actionable recommendation (missing eval recommendation, FAIL design check) still pauses.
|
|
132
|
+
|
|
129
133
|
### `--keep-going` — batch failure policy: skip dependents, continue independents
|
|
130
134
|
|
|
131
135
|
**Anchor:** `#flag-keep-going`.
|
|
@@ -177,7 +181,8 @@ forced. Never bypasses lifecycle status transitions or irreversible HITL gates.
|
|
|
177
181
|
|
|
178
182
|
Scope the operation to all tasks under a feature id (`^[A-Z][1-9]*$`). On feature-advancing
|
|
179
183
|
commands (`dev-wrapall`) it also advances the feature through legal lifecycle edges with guards
|
|
180
|
-
honored.
|
|
184
|
+
honored. On `dev-review` it takes a comma list (`--feature <id>[,<id>]`) — sugar for the union of
|
|
185
|
+
the `feature:<id>` sets, resolved once and frozen.
|
|
181
186
|
|
|
182
187
|
### `--check <cmd>` — validation command for iterate-and-check loops
|
|
183
188
|
|
|
@@ -190,11 +195,13 @@ establishes a baseline with it before the first change and re-runs it after each
|
|
|
190
195
|
|
|
191
196
|
**Anchor:** `#flag-focus`.
|
|
192
197
|
|
|
193
|
-
Constrain the operation to a named subset of dimensions — review dimensions on `dev-review
|
|
194
|
-
|
|
195
|
-
|
|
198
|
+
Constrain the operation to a named subset of dimensions — review dimensions on `dev-review`
|
|
199
|
+
(vocabulary SSOT: [code-verification/SKILL.md](../../code-verification/SKILL.md) review mode —
|
|
200
|
+
`dev-verify`/`dev-verifyall` keep their SECUA-only lens set), a refactor lens set on
|
|
201
|
+
`dev-refactor` (`api|architect|tests|ui|auto`), a refine focus mode on
|
|
196
202
|
`dev-refine`/`dev-refineall` (`all|requirements|background|constraints|acceptance|quick` —
|
|
197
|
-
[dev-operations.md](dev-operations.md) § refine), or a reconstruction lens on `dev-reverse
|
|
203
|
+
[dev-operations.md](dev-operations.md) § refine), or a reconstruction lens on `dev-reverse`
|
|
204
|
+
(`all|stack|dependencies|data|flows|api|security|quality|performance`).
|
|
198
205
|
Narrowing reduces token cost; omitting runs
|
|
199
206
|
all dimensions.
|
|
200
207
|
|
|
@@ -203,7 +210,9 @@ all dimensions.
|
|
|
203
210
|
**Anchor:** `#flag-scope`.
|
|
204
211
|
|
|
205
212
|
Limit the operation to a file or directory path (`dev-arch`, `dev-debug`, `dev-fixall`,
|
|
206
|
-
`dev-gitmsg`, `dev-gtd`, `dev-refactor`, `dev-simplify`) to bound the working set.
|
|
213
|
+
`dev-gitmsg`, `dev-gtd`, `dev-refactor`, `dev-review`, `dev-simplify`) to bound the working set.
|
|
214
|
+
On `dev-review` it takes a comma list of paths — normalized, nested and duplicate paths merged,
|
|
215
|
+
one advisory sub-review per surviving path.
|
|
207
216
|
|
|
208
217
|
### `--all` — widen the operation to everything in its domain
|
|
209
218
|
|
|
@@ -226,11 +235,13 @@ is the contract; divergence between `--dry-run` and the real run is a bug.
|
|
|
226
235
|
|
|
227
236
|
**Anchor:** `#flag-tasks`.
|
|
228
237
|
|
|
229
|
-
Batch operation
|
|
230
|
-
list, status pseudo-list (`todo`, `wip`), `feature:<id>`, or `ready` —
|
|
231
|
-
batch runs over.
|
|
232
|
-
|
|
233
|
-
|
|
238
|
+
Batch operation (`dev-parallel`, `dev-refineall`, `dev-review`, `dev-runall`, `dev-verifyall`). An
|
|
239
|
+
explicit selector — WBS list, status pseudo-list (`todo`, `wip`), `feature:<id>`, or `ready` —
|
|
240
|
+
resolving to the set the batch runs over. On `dev-review` the selector is restricted to the
|
|
241
|
+
review-safe forms: comma WBS list and `feature:<id>` — status pseudo-lists and `ready` are
|
|
242
|
+
rejected (they select work to do, not work to review). Required on `dev-parallel`, `dev-runall`,
|
|
243
|
+
and `dev-verifyall`, where `--feature` is an optional restrictor. On `dev-refineall` it is instead
|
|
244
|
+
one of a required pair — supply exactly one of `--feature` or `--tasks`.
|
|
234
245
|
|
|
235
246
|
### `--mode <kind>` — select an execution mode
|
|
236
247
|
|
|
@@ -352,11 +363,18 @@ pauses, even under `--auto`.
|
|
|
352
363
|
|
|
353
364
|
**Anchor:** `#flag-max-retry`.
|
|
354
365
|
|
|
355
|
-
Bound the retry loop on fix-family commands (`dev-dogfood`, `dev-fixall`, `dev-gtd`). After `n` consecutive
|
|
366
|
+
Bound the retry loop on fix-family commands (`dev-dogfood`, `dev-fixall`, `dev-fixgha`, `dev-gtd`). After `n` consecutive
|
|
356
367
|
failed fix attempts, stop and ask the operator rather than looping indefinitely. On `dev-dogfood`
|
|
357
368
|
the default is `2` (fix mode) and `--max-retry 0` selects observe-only — matching the backing
|
|
358
369
|
`sp:dogfood-testing` skill; the command table and the skill must not drift on this default.
|
|
359
370
|
|
|
371
|
+
### `--no-push` — commit locally, stop before push
|
|
372
|
+
|
|
373
|
+
**Anchor:** `#flag-no-push`.
|
|
374
|
+
|
|
375
|
+
Commit the fixes locally but do not `git push` or run the post-push `gh` verification
|
|
376
|
+
(`dev-fixgha`, `dev-gtd`). The report lists the unpushed commits.
|
|
377
|
+
|
|
360
378
|
### `--full` — rewrite a `--next` run as full pipeline
|
|
361
379
|
|
|
362
380
|
**Anchor:** `#flag-full`.
|
|
@@ -421,14 +439,6 @@ remainder through `spur task` — never fix straight from the raw findings list.
|
|
|
421
439
|
features ([dev-operations.md § 2. review](dev-operations.md#2-review)); `dev-review-session` keeps
|
|
422
440
|
the stricter direct-fix bar (pure docs / one-to-two-line fixes).
|
|
423
441
|
|
|
424
|
-
### `--approve-taste` — pre-clear all taste gates this run
|
|
425
|
-
|
|
426
|
-
**Anchor:** `#flag-approve-taste`.
|
|
427
|
-
|
|
428
|
-
Planning commands (`dev-idea`, `dev-plan`): with `--auto`, skip all remaining taste pauses this
|
|
429
|
-
run (idea-eval + design-approval). Sets `idea_approved=true` and `design_approved=true`. One CLI
|
|
430
|
-
flag sets both.
|
|
431
|
-
|
|
432
442
|
### `--worktree [<name>]` — run the batch in an isolated git worktree (create or reuse)
|
|
433
443
|
|
|
434
444
|
**Anchor:** `#flag-worktree`.
|
|
@@ -72,16 +72,15 @@ Entered before `task-pipeline.yaml` `precheck` state runs `spur task check <wbs>
|
|
|
72
72
|
- [ ] The `## Plan` section is an ordered checklist (not prose).
|
|
73
73
|
- [ ] The `## Design` section, if present, does not contradict the parent feature's design.
|
|
74
74
|
- [ ] No `TODO`, `TBD`, or `???` placeholders in Requirements, AC, Design, or Plan.
|
|
75
|
-
- [ ] The evidence-channel precheck (0726 R2
|
|
76
|
-
|
|
77
|
-
content for an exact `evidence-channel: history_tool_call.args_raw[pi]`
|
|
75
|
+
- [ ] The evidence-channel precheck (0726 R2, folded into the pipeline guard by 1002) is
|
|
76
|
+
enforced by `spur task check <wbs> --precheck` — the guard command itself. It parses the
|
|
77
|
+
task content for an exact `evidence-channel: history_tool_call.args_raw[pi]`
|
|
78
78
|
declaration and, when present, counts live pi rows with `args_raw` on
|
|
79
|
-
`.spur/spur.db` via
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
implementation begins.
|
|
79
|
+
`.spur/spur.db` via the domain read (fail-closed: unknown declarations, a missing
|
|
80
|
+
database/table, and a zero count error). Tasks without a declaration pass without
|
|
81
|
+
opening the database; size limits (10 R-items / 16 plan items) are checked in the
|
|
82
|
+
same call. Tasks declaring a live-data evidence channel must import real history
|
|
83
|
+
(safe importer, non-dry-run) before implementation begins.
|
|
85
84
|
|
|
86
85
|
## review gate
|
|
87
86
|
|
|
@@ -102,12 +101,13 @@ Entered before `task-pipeline.yaml` `review` state dispatches `sp:code-verificat
|
|
|
102
101
|
Entered before `task-pipeline.yaml` `verify` state produces a task verdict.
|
|
103
102
|
|
|
104
103
|
- [ ] The verify answer file (`.spur/run/<wbs>-verify-answer.txt`) is lint-clean before
|
|
105
|
-
verdict derivation: `
|
|
106
|
-
rejects missing/duplicate/unknown R IDs, AC identities that are not an
|
|
107
|
-
checklist label or linked-feature scenario title, invalid status/evidence-type
|
|
108
|
-
values, and empty evidence on any row. A lint failure fails the
|
|
109
|
-
|
|
110
|
-
-
|
|
104
|
+
verdict derivation: `spur task verdict <wbs> --from-answer …` (0726 R3) lints the
|
|
105
|
+
file first and rejects missing/duplicate/unknown R IDs, AC identities that are not an
|
|
106
|
+
exact task checklist label or linked-feature scenario title, invalid status/evidence-type
|
|
107
|
+
values, and empty evidence on any row. A lint failure fails the verdict step
|
|
108
|
+
(fail-closed) before verdict derivation; an unresolvable task file fails open so
|
|
109
|
+
pre-lint historical runs (8001–8005) stay reproducible.
|
|
110
|
+
- [ ] `spur task check <wbs> --as done --json` returns PASS.
|
|
111
111
|
- [ ] Every AC scenario has a corresponding verify command that exited 0.
|
|
112
112
|
- [ ] The `## Solution` section is filled (not the placeholder comment).
|
|
113
113
|
- [ ] The `## Testing` evidence (commands run + outcomes) is present in the verdict artifact —
|
|
@@ -143,19 +143,19 @@ bounded retry does not.
|
|
|
143
143
|
### The three `testing → done` gate layers
|
|
144
144
|
|
|
145
145
|
The CLI verdict-artifact check runs first. The lifecycle adapter then checks provenance, Review L3,
|
|
146
|
-
and finally the workflow's
|
|
147
|
-
|
|
146
|
+
and finally the workflow's `task check --as done` shell guard. The table groups the two complementary
|
|
147
|
+
done-row/verdict checks as one defense-in-depth layer even though they bracket the adapter checks.
|
|
148
148
|
The first denial wins; each denial names its own remediation. In verify-0293, the artifact check
|
|
149
149
|
passed, so provenance denied first and Review L3 denied on the retry.
|
|
150
150
|
|
|
151
151
|
| # | Gate layer | Triggers denial when | Remediation |
|
|
152
152
|
|---|------------|----------------------|-------------|
|
|
153
|
-
| 1 | **
|
|
153
|
+
| 1 | **Done-row check + verdict artifact** (`spur task check <wbs> --as done` + `done-transition-guard.ts`) | The done-row check fails, or `.spur/run/<wbs>-verdict.json` is **missing** or has a non-PASS aggregate. **Missing artifact is a deny** (not a silent allow — closes the 0349 "done without verdict" class). The aggregate is recomputed from requirement/AC rows; the harsher of stored and computed wins. | Re-run `/sp:dev-verify <wbs>` until PASS (writes the artifact), or explicitly override with `spur task update <wbs> done --force-done --reason "<why>"`. Docs-only procedures meet the same layer: read-only measured verification
|
|
154
154
|
(answer file + `spur task verdict`) writes the standard `.spur/run/<wbs>-verdict.json` artifact
|
|
155
155
|
under proof-input digest bracketing; missing or non-PASS evidence is a refusal, never a synthetic
|
|
156
156
|
PASS stub. |
|
|
157
157
|
| 2 | **Provenance guard** (`lifecycle-adapter.ts`) | No pipeline-kind run link exists for `<wbs>`. | Run `/sp:dev-run <wbs>` through the full pipeline, use `/sp:dev-run <wbs> --mode implement --auto --next` for the explicit step chain, or record the audited bypass with `--provenance-bypass` on `spur task update`. |
|
|
158
|
-
| 3 | **Review L3** (`task-check.ts`) | `### Review` is empty, placeholder-only, or lacks a populated P1–P4 findings table. | Run `/sp:dev-review <wbs>`; verify cannot write Review because of the Step 10 prohibition above. |
|
|
158
|
+
| 3 | **Review L3** (`task-check.ts`) | `### Review` is empty, placeholder-only, or lacks a populated P1–P4 findings table. | Run `/sp:dev-review --tasks <wbs>`; verify cannot write Review because of the Step 10 prohibition above. |
|
|
159
159
|
|
|
160
160
|
When the verdict is **PARTIAL/FAIL**, or any gate layer fails: stop as review-pending — surface
|
|
161
161
|
the verdict (or the gate's blocking finding), leave the task at its current status, do NOT
|
|
@@ -33,7 +33,7 @@ before any processing); the `## Requirement inventory` items trace back to it.
|
|
|
33
33
|
<one-paragraph refined statement of what the idea actually requires — the "real requirement" after discovery sharpens the vague input>
|
|
34
34
|
|
|
35
35
|
## Requirement inventory
|
|
36
|
-
<mandatory — the coverage gate (
|
|
36
|
+
<mandatory — the coverage gate (`feature check --inventory`) parses this section, so keep the exact `- I<n> — ` item form>
|
|
37
37
|
- I1 — <requirement stated as an ask, quoting or paraphrasing the source line from the run's idea-input artifact> (source: "<quoted fragment from the operator's idea>")
|
|
38
38
|
- I2 — <next requirement>
|
|
39
39
|
- I<n> — <optional: a requirement explicitly out of scope> [deferred: <reason>]
|
|
@@ -68,6 +68,7 @@ Score guide:
|
|
|
68
68
|
|
|
69
69
|
## Recommendation
|
|
70
70
|
<proceed | reshape | drop> — <one-line rationale linking scores, premises, and pros/cons>
|
|
71
|
+
<!-- the first line under this heading MUST start with exactly one of proceed / reshape / drop — `--auto` routes on it -->
|
|
71
72
|
|
|
72
73
|
Stakes: <plain-English cost of proceeding vs not; reversibility; blast radius>
|
|
73
74
|
|
|
@@ -83,8 +84,8 @@ Stakes: <plain-English cost of proceeding vs not; reversibility; blast radius>
|
|
|
83
84
|
|------|--------|
|
|
84
85
|
| Filled instance path | `.spur/run/idea-eval-report.md` |
|
|
85
86
|
| Template home | this file |
|
|
86
|
-
| Requirement inventory | mandatory `## Requirement inventory` section (0887 R3); consumed by `
|
|
87
|
+
| Requirement inventory | mandatory `## Requirement inventory` section (0887 R3); consumed by the `feature check --inventory` coverage gate (R4) |
|
|
87
88
|
| HITL state | `idea-eval` in `idea-pipeline.yaml` |
|
|
88
89
|
| Approve | continue → `feature-create` |
|
|
89
90
|
| Reject / cancel | → `cancelled` (no feature) |
|
|
90
|
-
| `--auto` |
|
|
91
|
+
| `--auto` (`idea_approved=true`) | `proceed`/`reshape` → `feature-create`; `drop` → `cancelled`; missing/unparseable recommendation → pauses |
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: inline-pipeline-driver
|
|
3
3
|
description: "Interactive host-session interpreter for Spur state-machine pipelines: execute the existing FSM without a workflow agent subprocess while preserving actions, guards, artifacts, and provenance."
|
|
4
4
|
owner: spur-dev-maintainers
|
|
5
|
-
retirement-criterion: "The per-task interpreter retires once the engine covers per-task execution for /sp:dev-runall with real terminal runs and the parity check (
|
|
5
|
+
retirement-criterion: "The per-task interpreter retires once the engine covers per-task execution for /sp:dev-runall with real terminal runs and the parity check (scripts/commands/inline-pipeline-parity-check.ts) is green (D8 decision D7). Batch orchestration wrapper may remain."
|
|
6
6
|
see_also:
|
|
7
7
|
- spur-dev
|
|
8
8
|
- execution-workflow
|
|
@@ -18,7 +18,7 @@ see_also:
|
|
|
18
18
|
## Supported action and guard set (0755 R2 parity contract)
|
|
19
19
|
|
|
20
20
|
The action and guard kinds this driver implements. The parity check
|
|
21
|
-
(`
|
|
21
|
+
(`scripts/commands/inline-pipeline-parity-check.ts`) compares this set against
|
|
22
22
|
the resolved actions and guards of every `.spur/workflows/*.yaml`; any element present
|
|
23
23
|
in one and absent in the other fails the check. Add a new kind here when the driver
|
|
24
24
|
implements it; remove the entry when the corresponding kind is dropped from the YAML.
|
|
@@ -76,11 +76,14 @@ the human/native presentation layer — labels are display addresses only, never
|
|
|
76
76
|
accept the inline run (0785 R3):
|
|
77
77
|
|
|
78
78
|
```bash
|
|
79
|
-
SETUP_SCRIPT=
|
|
80
|
-
|
|
79
|
+
SETUP_SCRIPT=plugins/sp/scripts/inline-run-setup.ts; [ -f config/plugin-scripts.json -a -f "$SETUP_SCRIPT" ] || SETUP_SCRIPT="$(superskill script path sp inline-run-setup.mjs 2>/dev/null)";
|
|
80
|
+
# 0960 R2: record the run's script-resolution identity beside the run row (the same file the
|
|
81
|
+
# pipelines' run-start action writes) so the inline path carries the same provenance.
|
|
82
|
+
RS=plugins/sp/scripts/script-root.ts; [ -f config/plugin-scripts.json -a -f "$RS" ] || RS="$(superskill script path sp script-root.mjs 2>/dev/null)";
|
|
83
|
+
RUNNER=bun; case "$RS" in *.mjs) RUNNER=node ;; esac; [ -f "$RS" ] && "$RUNNER" "$RS" --run-id "$RUN_ID" || echo "script-root failed closed — run 'superskill install sp --marketplace gobing-ai/spur'" >&2
|
|
81
84
|
[ -n "$SETUP_SCRIPT" ] && [ -f "$SETUP_SCRIPT" ] && \
|
|
82
85
|
bun "$SETUP_SCRIPT" --run-id "$RUN_ID" --file <selected-pipeline-yaml> \
|
|
83
|
-
|| { echo "inline run setup failed closed — checker not found; run 'superskill install sp'" >&2; exit 1; }
|
|
86
|
+
|| { echo "inline run setup failed closed — checker not found; run 'superskill install sp --marketplace gobing-ai/spur'" >&2; exit 1; }
|
|
84
87
|
```
|
|
85
88
|
|
|
86
89
|
The delegate uses the source app service when the SPUR_BIN chain identifies a checkout;
|
|
@@ -198,7 +201,7 @@ Expected artifacts per stage (all run-scoped under `.spur/run/<run-id>-*`):
|
|
|
198
201
|
| start | `-idea-input.md` (verbatim idea), `-idea-precheck-doctor.status` |
|
|
199
202
|
| discovery | `-idea-eval-report.md` (with `## Requirement inventory`), `-idea-needs-design.json` |
|
|
200
203
|
| feature-create | `-idea-feature-id.txt`, `-idea-goal.md`, `-idea-scope.md` |
|
|
201
|
-
| ac-generate | `-idea-ac-content.md`, `-idea-ac-check.status
|
|
204
|
+
| ac-generate | `-idea-ac-content.md`, `-idea-ac-check.status` |
|
|
202
205
|
| system-design | `-idea-design-review.md`, `-idea-design-check.status` |
|
|
203
206
|
| decompose | `-idea-task-batch.json`, `-idea-task-order.json` |
|
|
204
207
|
| batch-create-run | `-idea-batch-create-result.json`, `-idea-batch-create.done`/`.failed` |
|
|
@@ -244,6 +247,13 @@ Action semantics come from the YAML and the workflow action contract:
|
|
|
244
247
|
actions/guards.
|
|
245
248
|
- `hitl.confirm` — under `profile=auto`, follow the YAML's auto-skip transition. Otherwise pause,
|
|
246
249
|
surface the prompt, and resume from the same state with the operator's answer.
|
|
250
|
+
**Host-session rendering:** ask the gate as ONE `AskUserQuestion`
|
|
251
|
+
[decision brief](decision-brief.md), never a typed yes/no. Read the state's evidence (the
|
|
252
|
+
artifacts its prompt names and the recorded `.status` files) and derive the recommendation;
|
|
253
|
+
map options to the `yes` / `no` / `cancel` answers the guards route on, recommended option
|
|
254
|
+
first, each with a one-line reason from that evidence. When a `no` needs operator feedback
|
|
255
|
+
(design-approval's `## Operator feedback`), take it from the operator's notes/"Other" text
|
|
256
|
+
and write it into the named artifact yourself before resuming. Never ask them to edit the file.
|
|
247
257
|
- `hitl.input` — pause, surface the declared prompt (the agent's operator question, 0933), and
|
|
248
258
|
resume from the same state with the operator's answer written into the declared var (default
|
|
249
259
|
`__hitlInput`); the subsequent guards route on answer presence exactly as the engine does.
|
|
@@ -497,6 +507,25 @@ The driver reaches it through the existing run delegate (`$SETUP_SCRIPT`,
|
|
|
497
507
|
(0887 R8), so `completed_at − started_at == duration_ms` exactly; a back-date failure is
|
|
498
508
|
recorded (`action.backdate`) and never affects the run.
|
|
499
509
|
|
|
510
|
+
- **A state with several actions (1007 R5)** — emit the whole state's boundaries in one call
|
|
511
|
+
instead of one `--action` invocation per action. Write a JSON array
|
|
512
|
+
(`[{node,kind,status,ok,durationMs}, …]` — same fields the `--action` flags carry) to a temp
|
|
513
|
+
file and pass it with `--actions-file`:
|
|
514
|
+
|
|
515
|
+
```bash
|
|
516
|
+
bun "$SETUP_SCRIPT" --actions-file <actions.json> --run-id "$RUN_ID"
|
|
517
|
+
```
|
|
518
|
+
|
|
519
|
+
Every row is recorded through the same writer as `--action` (one `action_runs` row per entry);
|
|
520
|
+
the batch is validated in full before the first write, so an invalid row or unreadable file
|
|
521
|
+
exits `1` with `{"ok":false}` and leaves **no** partial rows — fix the batch and re-emit. On
|
|
522
|
+
success it prints `{"ok":true,"runId":…,"recorded":<n>}` and exits `0`. Row emission stays
|
|
523
|
+
best-effort exactly like `--action`: if a row's write fails mid-batch, the failure is recorded
|
|
524
|
+
to the run record and the call reports `{"ok":false,…,"error":…}` but still exits `0` — the run
|
|
525
|
+
continues; never retry the batch or backfill by hand. `--actions-file` is exclusive with the
|
|
526
|
+
other mode flags (`--action`, `--decide`, `--close`, …): mixing them is a usage error (exit 2),
|
|
527
|
+
and a mixed call must be corrected, not silently split.
|
|
528
|
+
|
|
500
529
|
- **A `decide` action (0941)** — the driver never executes the DecisionMaker itself; it delegates
|
|
501
530
|
to the same app runner the engine registers, which writes the resultFile row (schemaVersion 1)
|
|
502
531
|
and returns the decision, then the delegate records the `action_runs` row (`kind=decide`)
|
|
@@ -105,7 +105,7 @@ rows stay per file. Flagged rows wait for the operator's answer.
|
|
|
105
105
|
|
|
106
106
|
## Workflow step profile and cache-window flags
|
|
107
107
|
|
|
108
|
-
The step profile (`plugins/sp/scripts/workflow-step-profile`, ADR-065 plugin entrypoint) reads
|
|
108
|
+
The step profile (`plugins/sp/scripts/workflow-step-profile`, ADR-065 plugin entrypoint whose aggregation core lives in `packages/app/src/workflow/step-profile.ts`) reads
|
|
109
109
|
`spur workflow trace` for a workflow's last N completed, non-dry runs. Per node and action kind it
|
|
110
110
|
reports run count, executions, p50 and max `durationMs`, p50 idle gap before the step, session mode
|
|
111
111
|
(`fresh`, `resumed` or `mixed`) and `cacheHit` p50 with its coverage — satellite §10 step evidence.
|
|
@@ -73,8 +73,9 @@ codebase (or a named module tree) for **shallow modules and deepening opportunit
|
|
|
73
73
|
them as candidates for the planning half. This is a *generator*, not a fixer — it never refactors;
|
|
74
74
|
it produces a ranked candidate report an operator can turn into a task.
|
|
75
75
|
|
|
76
|
-
**Not `/sp:dev-review`.** `/sp:dev-review` is a
|
|
77
|
-
to
|
|
76
|
+
**Not `/sp:dev-review`.** `/sp:dev-review` is a DIFF review of a task set (`--tasks`/`--feature`) or an advisory `--scope` path review
|
|
77
|
+
(task targets: forward, findings written to each task's `## Review`; paths: advisory report, no task
|
|
78
|
+
mutation; backed by `sp:code-verification`). The survey has no task set and no diff — it
|
|
78
79
|
audits the standing codebase and feeds the planning half. Folding it into `dev-review` would overload
|
|
79
80
|
that verb and pollute `code-verification` with a codebase scanner; it earns its own operation here.
|
|
80
81
|
|