@gobing-ai/spur 0.3.91 → 0.3.92
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/config/pipeline-budgets.json +2 -2
- package/config/plugin-scripts.json +17 -1
- package/config/workflows/feature-lifecycle.yaml +14 -5
- package/config/workflows/feature-verification.yaml +35 -27
- package/config/workflows/history-anatomy.yaml +14 -25
- package/config/workflows/idea-pipeline.yaml +9 -5
- package/config/workflows/task-pipeline.yaml +185 -4
- package/config/workflows/wrapup-pipeline.yaml +47 -5
- package/package.json +9 -9
- package/plugins/sp/agents/super-planner.md +14 -5
- package/plugins/sp/commands/dev-dogfood.md +4 -4
- package/plugins/sp/commands/dev-fixall.md +8 -5
- package/plugins/sp/commands/dev-run.md +6 -0
- package/plugins/sp/commands/dev-runall.md +12 -6
- package/plugins/sp/commands/dev-verify.md +9 -0
- package/plugins/sp/commands/dev-verifyall.md +5 -0
- package/plugins/sp/lib/idea-handoff.generated.mjs +301 -300
- package/plugins/sp/lib/inline-run.generated.d.mts +17 -0
- package/plugins/sp/lib/inline-run.generated.mjs +1460 -0
- package/plugins/sp/plugin.json +1 -1
- package/plugins/sp/references/environment-lens.md +1 -1
- package/plugins/sp/scripts/dogfood-testing/validate-report.mjs +136 -0
- package/plugins/sp/scripts/dogfood-testing/validate-report.ts +196 -2
- package/plugins/sp/scripts/feature-verification-steps.mjs +174 -0
- package/plugins/sp/scripts/feature-verification-steps.ts +275 -0
- package/plugins/sp/scripts/history-anatomy-cache.mjs +104 -4
- package/plugins/sp/scripts/history-anatomy-cache.ts +137 -13
- package/plugins/sp/scripts/inline-pipeline-parity-check.ts +1 -0
- package/plugins/sp/scripts/inline-run-setup.mjs +349 -0
- package/plugins/sp/scripts/inline-run-setup.ts +192 -75
- package/plugins/sp/scripts/record-feature-sync.mjs +63 -0
- package/plugins/sp/scripts/record-feature-sync.ts +84 -0
- package/plugins/sp/scripts/residual-scan.mjs +476 -0
- package/plugins/sp/scripts/residual-scan.ts +614 -0
- package/plugins/sp/scripts/task-evidence-precheck.ts +8 -3
- package/plugins/sp/scripts/task-size-precheck.ts +8 -3
- package/plugins/sp/skills/branch-workflow/SKILL.md +1 -0
- package/plugins/sp/skills/branch-workflow/references/worktree-patterns.md +2 -0
- package/plugins/sp/skills/code-implementation/SKILL.md +17 -0
- package/plugins/sp/skills/code-verification/SKILL.md +21 -0
- package/plugins/sp/skills/code-verification/references/verdict-schema.md +1 -0
- package/plugins/sp/skills/dogfood-testing/SKILL.md +5 -3
- package/plugins/sp/skills/dogfood-testing/references/monitor-ledger.md +63 -26
- package/plugins/sp/skills/dogfood-testing/references/report-template.md +33 -10
- package/plugins/sp/skills/history-anatomy/references/modes.md +5 -3
- package/plugins/sp/skills/next-feature/references/ranking-rubric.md +1 -1
- package/plugins/sp/skills/next-router/references/routing-table.md +7 -0
- package/plugins/sp/skills/parallel-execution/references/dispatch-surface.md +1 -1
- package/plugins/sp/skills/session-review/SKILL.md +12 -2
- package/plugins/sp/skills/spur-cli/references/features.md +1 -1
- package/plugins/sp/skills/spur-cli/references/projects.md +3 -1
- package/plugins/sp/skills/spur-cli/references/workflows.md +39 -19
- package/plugins/sp/skills/spur-dev/SKILL.md +11 -4
- package/plugins/sp/skills/spur-dev/references/cross-cutting.md +4 -1
- package/plugins/sp/skills/spur-dev/references/dev-operations.md +2 -2
- package/plugins/sp/skills/spur-dev/references/execution-batch.md +285 -57
- package/plugins/sp/skills/spur-dev/references/execution-workflow.md +1 -1
- package/plugins/sp/skills/spur-dev/references/flag-glossary.md +19 -4
- package/plugins/sp/skills/spur-dev/references/inline-pipeline-driver.md +43 -16
- package/plugins/sp/skills/spur-dev/references/planning-workflow.md +5 -0
- package/spur.js +21827 -19615
- package/web/_astro/BoardApp.CerSBgis.js +192 -0
- package/web/_astro/BoardApp.eoTz0pZs.js +1 -0
- package/web/_astro/{TaskDetail.CXGltuT_.js → TaskDetail.DCqiC-OZ.js} +1 -1
- package/web/_astro/arc.CPwg6Rw0.js +1 -0
- package/web/_astro/{architectureDiagram-3BPJPVTR.DJ8DHkWE.js → architectureDiagram-3BPJPVTR.DM_vp_hO.js} +1 -1
- package/web/_astro/{blockDiagram-GPEHLZMM.D8DHK3Jl.js → blockDiagram-GPEHLZMM.DXVIiv0p.js} +1 -1
- package/web/_astro/{c4Diagram-AAUBKEIU.BugQbX9u.js → c4Diagram-AAUBKEIU.BbF_zCxW.js} +1 -1
- package/web/_astro/channel.MYZLKNwy.js +1 -0
- package/web/_astro/{chunk-2J33WTMH.Mv26KlVn.js → chunk-2J33WTMH.CAgQHpPC.js} +1 -1
- package/web/_astro/{chunk-4BX2VUAB.CD51JoT_.js → chunk-4BX2VUAB.BN-5tpw4.js} +1 -1
- package/web/_astro/{chunk-55IACEB6.D_PFaIEe.js → chunk-55IACEB6.CnPkEEr0.js} +1 -1
- package/web/_astro/{chunk-727SXJPM.DemMW1ao.js → chunk-727SXJPM.BQzQeMVm.js} +4 -4
- package/web/_astro/{chunk-AQP2D5EJ.Iu2V5-ex.js → chunk-AQP2D5EJ.B6xNyDnL.js} +1 -1
- package/web/_astro/{chunk-FMBD7UC4.MsNgSP-E.js → chunk-FMBD7UC4.C7f9Ih78.js} +1 -1
- package/web/_astro/{chunk-ND2GUHAM.DfbRaAlm.js → chunk-ND2GUHAM.CNV1dFXT.js} +1 -1
- package/web/_astro/{chunk-QZHKN3VN.BbJAQ4h-.js → chunk-QZHKN3VN.Cudn2TkJ.js} +1 -1
- package/web/_astro/{classDiagram-4FO5ZUOK.CPurtiC2.js → classDiagram-4FO5ZUOK.D1NwP50q.js} +1 -1
- package/web/_astro/{classDiagram-v2-Q7XG4LA2.CPurtiC2.js → classDiagram-v2-Q7XG4LA2.D1NwP50q.js} +1 -1
- package/web/_astro/{cose-bilkent-S5V4N54A.CKKdx1bM.js → cose-bilkent-S5V4N54A.B1wSL-Xb.js} +1 -1
- package/web/_astro/{cynefin-OW5HDTMX.CoKMTg-R.js → cynefin-OW5HDTMX.BmK52w8G.js} +1 -1
- package/web/_astro/{dagre-BM42HDAG.D4h4_k56.js → dagre-BM42HDAG.Bfy5CTDT.js} +2 -2
- package/web/_astro/diagram-2AECGRRQ.DhNnvUvX.js +43 -0
- package/web/_astro/diagram-5GNKFQAL.lTX5KwnS.js +10 -0
- package/web/_astro/{diagram-KO2AKTUF.BFoCkiCr.js → diagram-KO2AKTUF.CW_vMJ4z.js} +3 -3
- package/web/_astro/{diagram-LMA3HP47.exHn9OVx.js → diagram-LMA3HP47.B_8ZGF67.js} +1 -1
- package/web/_astro/{diagram-OG6HWLK6.CeqO34nN.js → diagram-OG6HWLK6.BppnHsdS.js} +1 -1
- package/web/_astro/{erDiagram-TEJ5UH35.D_v7HqxR.js → erDiagram-TEJ5UH35.BEuHXcjJ.js} +5 -5
- package/web/_astro/{flowDiagram-I6XJVG4X.EUmrpbwh.js → flowDiagram-I6XJVG4X.CH-UlnGr.js} +4 -4
- package/web/_astro/{ganttDiagram-6RSMTGT7.BOCF5lII.js → ganttDiagram-6RSMTGT7.BO81S85v.js} +1 -1
- package/web/_astro/{gitGraphDiagram-PVQCEYII.Di7otYZD.js → gitGraphDiagram-PVQCEYII.XnPxPPZN.js} +1 -1
- package/web/_astro/index.Hjbr15fG.css +1 -0
- package/web/_astro/{infoDiagram-5YYISTIA.TcBkCAJk.js → infoDiagram-5YYISTIA.JyjYRu_T.js} +1 -1
- package/web/_astro/{ishikawaDiagram-YF4QCWOH.D-2y4M0c.js → ishikawaDiagram-YF4QCWOH.BBRBF-Fo.js} +5 -5
- package/web/_astro/{journeyDiagram-JHISSGLW.DPbJI_n2.js → journeyDiagram-JHISSGLW.C_iymSyp.js} +1 -1
- package/web/_astro/{kanban-definition-UN3LZRKU.EFxhQ9Fj.js → kanban-definition-UN3LZRKU.DdfW-Oqt.js} +7 -7
- package/web/_astro/{linear.DSAsQLzs.js → linear.C2_IkbZT.js} +1 -1
- package/web/_astro/mermaid.core.GAOYeSR0.js +303 -0
- package/web/_astro/{mindmap-definition-RKZ34NQL.CJY1N_7V.js → mindmap-definition-RKZ34NQL.DAZIxQSK.js} +2 -2
- package/web/_astro/{pieDiagram-4H26LBE5.567ZNoL2.js → pieDiagram-4H26LBE5.CN8sIhKM.js} +3 -3
- package/web/_astro/{quadrantDiagram-W4KKPZXB.mqfz9-MY.js → quadrantDiagram-W4KKPZXB.3dGcX5GP.js} +1 -1
- package/web/_astro/{requirementDiagram-4Y6WPE33.Bv1Gv9In.js → requirementDiagram-4Y6WPE33.BV2y4dd6.js} +3 -3
- package/web/_astro/{sankeyDiagram-5OEKKPKP.B6Gs4X4r.js → sankeyDiagram-5OEKKPKP.Cqo15Tvo.js} +4 -4
- package/web/_astro/{sequenceDiagram-3UESZ5HK.BhYj4v-m.js → sequenceDiagram-3UESZ5HK.CROCPMJB.js} +1 -1
- package/web/_astro/{stateDiagram-AJRCARHV.BPbBnkpw.js → stateDiagram-AJRCARHV.RfXZrkFE.js} +1 -1
- package/web/_astro/{stateDiagram-v2-BHNVJYJU.C4squMNK.js → stateDiagram-v2-BHNVJYJU.CPXmbBs9.js} +1 -1
- package/web/_astro/{timeline-definition-PNZ67QCA.C_SwIHgl.js → timeline-definition-PNZ67QCA.DdgKTiO8.js} +3 -3
- package/web/_astro/{vennDiagram-CIIHVFJN.Bz4NZGpQ.js → vennDiagram-CIIHVFJN.CPNVSHF1.js} +5 -5
- package/web/_astro/{wardleyDiagram-YWT4CUSO.CozMVZ3i.js → wardleyDiagram-YWT4CUSO.CQhA0Jyr.js} +3 -3
- package/web/_astro/{xychartDiagram-2RQKCTM6.BwMGBwjB.js → xychartDiagram-2RQKCTM6.n61BWyy4.js} +1 -1
- package/web/index.html +2 -2
- package/web/_astro/BoardApp.BEDWpzsr.js +0 -188
- package/web/_astro/BoardApp.DQG2xfEz.js +0 -1
- package/web/_astro/arc.C0rrflm_.js +0 -1
- package/web/_astro/channel.SRrg1P-w.js +0 -1
- package/web/_astro/diagram-2AECGRRQ.DJ0h9zgw.js +0 -43
- package/web/_astro/diagram-5GNKFQAL.DvPk1jYd.js +0 -10
- package/web/_astro/index.Bx6GY4RH.css +0 -1
- package/web/_astro/mermaid.core.kAZjgJHG.js +0 -301
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
#
|
|
16
16
|
# Shape: start -> task-resolve -> doc-sync -> learnings-append -> metrics-record
|
|
17
17
|
# -> feature-transition (conditional: if vars.feature set)
|
|
18
|
+
# -> feature-verify (post-transition feature check gate, 0915 F1)
|
|
18
19
|
# -> branch-cleanup (conditional: if vars.merge=true)
|
|
19
20
|
# -> done
|
|
20
21
|
# doc-sync routes a contract violation to `repair` (cheap, no
|
|
@@ -295,6 +296,30 @@ states:
|
|
|
295
296
|
printf 'FAIL\n' > ".spur/run/$__runId-wrapup-sync.status";
|
|
296
297
|
fi
|
|
297
298
|
|
|
299
|
+
- id: feature-verify
|
|
300
|
+
description: >
|
|
301
|
+
Post-feature-transition verification hop (D63 task 0915, review finding
|
|
302
|
+
F1): wrapup's doc-sync and the feature transition mutate the corpus AFTER
|
|
303
|
+
the feature-scoped verification pass ran. The proof digest deliberately
|
|
304
|
+
excludes docs/tasks*/docs/features* (shared evidence, concurrent writers),
|
|
305
|
+
so the bound receipt stays valid — but the feature's completion boundary
|
|
306
|
+
must still observe the post-wrapup state. This hop re-runs the feature
|
|
307
|
+
check gate (`featureGateCmd`). When the configured command is the done-
|
|
308
|
+
boundary variant (`feature check --as done`), it validates the bound
|
|
309
|
+
evidence receipt (feature identity, verifier definition digest, terminal
|
|
310
|
+
recording run, artifact registration, checked-input digest) against the
|
|
311
|
+
current feature contract; a plain gate command observes the post-wrapup
|
|
312
|
+
corpus state but does not enforce the receipt (0915 re-review P3). A FAIL
|
|
313
|
+
fails the wrapup loudly instead of letting a stale PASS ride; only a
|
|
314
|
+
verified gate writes PASS (0783 R4).
|
|
315
|
+
onEnter:
|
|
316
|
+
- kind: shell
|
|
317
|
+
options:
|
|
318
|
+
command: >-
|
|
319
|
+
sh -c "$featureGateCmd" &&
|
|
320
|
+
printf 'PASS\n' > ".spur/run/$__runId-wrapup-feature-verify.status" ||
|
|
321
|
+
printf 'FAIL\n' > ".spur/run/$__runId-wrapup-feature-verify.status"
|
|
322
|
+
|
|
298
323
|
- id: branch-cleanup
|
|
299
324
|
description: >
|
|
300
325
|
Irreversible-operation HITL gate, consent-only (0770). If vars.merge=true,
|
|
@@ -474,19 +499,36 @@ transitions:
|
|
|
474
499
|
options:
|
|
475
500
|
command: 'test "$(cat .spur/run/$__runId-wrapup-sync.status 2>/dev/null)" = FAIL'
|
|
476
501
|
- from: feature-transition
|
|
502
|
+
to: feature-verify
|
|
503
|
+
description: Sync PASS — re-run the feature check gate against the post-wrapup state.
|
|
504
|
+
guard:
|
|
505
|
+
kind: shell
|
|
506
|
+
options:
|
|
507
|
+
command: 'test "$(cat .spur/run/$__runId-wrapup-sync.status 2>/dev/null)" = PASS'
|
|
508
|
+
- from: feature-verify
|
|
509
|
+
to: failed
|
|
510
|
+
description: >
|
|
511
|
+
Post-wrapup feature check failed (0915 F1): the bound receipt no longer
|
|
512
|
+
validates against the current feature contract. Already-written
|
|
513
|
+
learnings/metrics stay on disk.
|
|
514
|
+
guard:
|
|
515
|
+
kind: shell
|
|
516
|
+
options:
|
|
517
|
+
command: 'test "$(cat .spur/run/$__runId-wrapup-feature-verify.status 2>/dev/null)" = FAIL'
|
|
518
|
+
- from: feature-verify
|
|
477
519
|
to: branch-cleanup
|
|
478
|
-
description:
|
|
520
|
+
description: Post-wrapup feature check PASS — merge is requested.
|
|
479
521
|
guard:
|
|
480
522
|
kind: shell
|
|
481
523
|
options:
|
|
482
|
-
command: 'test "$(cat .spur/run/$__runId-wrapup-
|
|
483
|
-
- from: feature-
|
|
524
|
+
command: 'test "$(cat .spur/run/$__runId-wrapup-feature-verify.status 2>/dev/null)" = PASS && test "$merge" = true'
|
|
525
|
+
- from: feature-verify
|
|
484
526
|
to: done
|
|
485
|
-
description:
|
|
527
|
+
description: Post-wrapup feature check PASS — no merge requested.
|
|
486
528
|
guard:
|
|
487
529
|
kind: shell
|
|
488
530
|
options:
|
|
489
|
-
command: 'test "$(cat .spur/run/$__runId-wrapup-
|
|
531
|
+
command: 'test "$(cat .spur/run/$__runId-wrapup-feature-verify.status 2>/dev/null)" = PASS && test "$merge" != true'
|
|
490
532
|
|
|
491
533
|
# ── branch-cleanup: HITL exhaustive routing (yes / no / cancel → done) ──
|
|
492
534
|
# No irreversible git op is wired yet; confirmation is recorded, then wrap
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gobing-ai/spur",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.92",
|
|
4
4
|
"description": "Spur CLI — local-first harness for mainstream coding agents: constraint checking, workflow orchestration, agent health, and history analytics. Bun-native; exposes the `spur` command.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"spur",
|
|
@@ -53,14 +53,14 @@
|
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
55
|
"@commander-js/extra-typings": "^14.0.0",
|
|
56
|
-
"@gobing-ai/ts-db": "^0.5.
|
|
57
|
-
"@gobing-ai/ts-ai-runner": "^0.5.
|
|
58
|
-
"@gobing-ai/ts-dual-workflow-engine": "^0.5.
|
|
59
|
-
"@gobing-ai/ts-infra": "^0.5.
|
|
60
|
-
"@gobing-ai/ts-llm-jsonl-importer": "^0.5.
|
|
61
|
-
"@gobing-ai/ts-rule-engine": "^0.5.
|
|
62
|
-
"@gobing-ai/ts-runtime": "^0.5.
|
|
63
|
-
"@gobing-ai/ts-utils": "^0.5.
|
|
56
|
+
"@gobing-ai/ts-db": "^0.5.5",
|
|
57
|
+
"@gobing-ai/ts-ai-runner": "^0.5.5",
|
|
58
|
+
"@gobing-ai/ts-dual-workflow-engine": "^0.5.5",
|
|
59
|
+
"@gobing-ai/ts-infra": "^0.5.5",
|
|
60
|
+
"@gobing-ai/ts-llm-jsonl-importer": "^0.5.5",
|
|
61
|
+
"@gobing-ai/ts-rule-engine": "^0.5.5",
|
|
62
|
+
"@gobing-ai/ts-runtime": "^0.5.5",
|
|
63
|
+
"@gobing-ai/ts-utils": "^0.5.5",
|
|
64
64
|
"@types/bun": "1.3.14",
|
|
65
65
|
"@types/figlet": "^1.7.0",
|
|
66
66
|
"@types/node-notifier": "8.0.5",
|
|
@@ -86,7 +86,10 @@ You own the spaces **between** task runs:
|
|
|
86
86
|
- **Parallelize only when requested** by applying `sp:parallel-execution` to a proven-independent
|
|
87
87
|
subset (Step 3 optional path). Serialize when dependency, file-overlap, or budget checks fail.
|
|
88
88
|
Preflight still runs per WBS before fan-out; recovery stays sequential.
|
|
89
|
-
- **Inspect** each terminal state
|
|
89
|
+
- **Inspect** each terminal state via `spur workflow trace "$RUN" --follow --timeout 600000` (a
|
|
90
|
+
timeout prints one checkpoint and exits 1; the run continues, never cancelled or relaunched) plus
|
|
91
|
+
`.spur/run/<wbs>-verdict.json`, accepted only when the trace's `.run.runId` equals the dispatched
|
|
92
|
+
run and the verdict's mtime ≥ the trace's `.run.startedAt` — otherwise `stale-evidence` (Step 3.3).
|
|
90
93
|
- **One-shot recovery (optional)** - on non-PASS / stuck status, consult next-router **once** for that
|
|
91
94
|
WBS (`recoveryHint` / dry-run plan): print the child command, or dispatch once only when the batch
|
|
92
95
|
was started with `--auto` and cardinality is 1. Never self-loop until done.
|
|
@@ -264,7 +267,10 @@ Report using the batch-report template from execution-batch.md §5:
|
|
|
264
267
|
**Next:** <one-line action>
|
|
265
268
|
```
|
|
266
269
|
|
|
267
|
-
Per-task outcome vocabulary: `done` | `failed` | `blocked` | `skipped` | `
|
|
270
|
+
Per-task outcome vocabulary: `done` | `failed` | `blocked` | `skipped` | `paused` (0933: parked on
|
|
271
|
+
an operator question — escalate hop — or an approval gate; non-terminal, never `done`) |
|
|
272
|
+
`not-attempted`, plus the parallel-only `integration-conflict`
|
|
273
|
+
([execution-batch.md § Parallel isolation](../skills/spur-dev/references/execution-batch.md#parallel-isolation---mode-parallel)).
|
|
268
274
|
Batch verdict: `clean` (all attempted tasks `done`) | `halted` (a failure stopped the batch) |
|
|
269
275
|
`aborted` (cycle or selector error before any run).
|
|
270
276
|
|
|
@@ -272,9 +278,12 @@ With `--json`, emit the same shape as a JSON object for machine consumption.
|
|
|
272
278
|
|
|
273
279
|
## Out of scope (deferred)
|
|
274
280
|
|
|
275
|
-
- **Parallel execution** -
|
|
276
|
-
-
|
|
277
|
-
|
|
281
|
+
- **Parallel execution** - `--mode parallel` isolates each task in its own worktree with
|
|
282
|
+
rebase-and-FF integration; see [execution-batch.md § Parallel isolation](../skills/spur-dev/references/execution-batch.md#parallel-isolation---mode-parallel).
|
|
283
|
+
- **Interactive within-step escalation** — implemented (0933): the pipeline's `escalate` hop
|
|
284
|
+
pauses on the implement agent's operator question; the operator answers via
|
|
285
|
+
`spur workflow continue --answer-text` and the run resumes implement with the Q/A transcript
|
|
286
|
+
(bounded by `maxEscalations`). See [execution-batch.md Step 3](../skills/spur-dev/references/execution-batch.md#step-3--the-driver-loop-r3-r4).
|
|
278
287
|
|
|
279
288
|
## Platform Notes
|
|
280
289
|
|
|
@@ -14,11 +14,11 @@ Wraps the **sp:dogfood-testing** skill.
|
|
|
14
14
|
| Flag | Description | Default |
|
|
15
15
|
| --- | --- | --- |
|
|
16
16
|
| `<testee>` | Skill / command / CLI to exercise end-to-end. | required |
|
|
17
|
-
| `--agent` `<inline\|auto\|name>` |
|
|
18
|
-
| `--max-retry` `<n>` | Max auto-fix retries per
|
|
17
|
+
| `--agent` `<inline\|auto\|name>` | **Testee-scoped** agent the testee runs under — forwarded into the testee invocation; the dogfood driver always runs in the current session. | omit (forward nothing) |
|
|
18
|
+
| `--max-retry` `<n>` | Max auto-fix retries per step. `0` = observe-only. Mandatory (as `0` or `N`) for pipeline-driving testees and testees with a mutating `--fix` mode. | 2 |
|
|
19
19
|
| `--save` | Compatibility no-op; saving is now default. Retained until evidenced retirement. | off |
|
|
20
|
-
| `--task` |
|
|
21
|
-
| `--chain-follow` |
|
|
20
|
+
| `--task` | **Creates** a new review-template task for the findings (`spur task create --template review`) — it does not attach to or update the task under test. | off |
|
|
21
|
+
| `--chain-follow` | **Reads existing chained-leg evidence** (verdict artifacts, task-file diffs, review tables) after a chained leg completes, for attribution — it never executes the chained leg itself. Without it the driver stops at the testing boundary. | off |
|
|
22
22
|
| `--full` | Full report verbosity (all sections). | off |
|
|
23
23
|
|
|
24
24
|
For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag-glossary.md).
|
|
@@ -27,9 +27,12 @@ For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag
|
|
|
27
27
|
|
|
28
28
|
## Implementation
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
`
|
|
34
|
-
|
|
30
|
+
Follow the inline procedure in [dev-operations.md](../skills/spur-dev/references/dev-operations.md#10-fixall) (fixall). Pipeline signal: when `--gate-log` is set (the `test-fix` hop), run no full gate — the `test-recheck` state immediately after is the deciding run (R4, task 0483).
|
|
31
|
+
|
|
32
|
+
When dispatched from the pipeline's test-fix stage (F96, task 0950), the gate log carries a
|
|
33
|
+
`residual artifact` block (`<wbs>-residuals.json`) and the findings file already
|
|
34
|
+
contains the merged residual anchors: treat those items as fix targets, in order,
|
|
35
|
+
alongside gate anchors. The fixer may write `.spur/run/<wbs>-residual-deferrals.json`
|
|
36
|
+
— one `{id, reason}` entry per item — but only for P3 findings or diff markers it
|
|
37
|
+
cannot fix inside the task; the done stage settles deferrals into follow-up tasks.
|
|
35
38
|
|
|
@@ -41,6 +41,12 @@ For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag
|
|
|
41
41
|
**Flags:**
|
|
42
42
|
|
|
43
43
|
- `--auto` | `--agent <inline|auto|name>` — Skip objective HITL confirmations (taste/irreversible gates still pause). `--agent` names who does the model-bearing work. Interactive omit/`inline` keeps the controller and implement-only stages in this session; full mode reads `task-pipeline.yaml` as the SSOT and interprets its actions/guards through the inline driver, whose eligible `agent.run` stages dispatch once to a native subagent and otherwise run in the host (0508 eligibility — task 0687 resolved-inline) It records `stage <id> executed inline in session <session-id>` or `stage <id> executed via subagent <agent-id> (host session <session-id>)` in the run log. `auto` or a name is merged into `vars.agent` and `vars.implementAgent` and keeps the existing subprocess workflow. Headless `spur workflow run` / `spur agent run` is unchanged. See the [execution-surface contract](../skills/spur-dev/references/cross-cutting.md#inline-default-execution-surface).
|
|
44
|
+
- `--escalation-file <path>` (implement step only, 0933) — names the Q/A escalation transcript
|
|
45
|
+
(default `.spur/run/<wbs>-escalation.md`). Absent on a first attempt means "no prior
|
|
46
|
+
escalations". When the implement agent needs an operator decision it appends its question to
|
|
47
|
+
`.spur/run/<wbs>-question.md` and exits 0 — the pipeline's `escalate` hop surfaces the question,
|
|
48
|
+
the operator answers via `spur workflow continue --answer-text`, and the guard appends the Q/A
|
|
49
|
+
pair to this transcript before re-entering implement, where the agent reads it and resumes.
|
|
44
50
|
|
|
45
51
|
`--worktree` `[<name>]` (run the task's pipeline in an isolated git worktree — FF-merge onto the
|
|
46
52
|
base ref on full success, retain intact on any failure/halt/non-FF; bare form creates a fresh tree,
|
|
@@ -20,10 +20,11 @@ Wraps the **sp:spur-dev** skill.
|
|
|
20
20
|
| `--auto` | Skip objective HITL gates. | off |
|
|
21
21
|
| `--agent` `<inline\|auto\|name>` | Who runs each task's pipeline stages. Interactive sequential omit/`inline` uses the host-session driver with unified inline semantics (task 0687 — see below)). `auto`, a name, parallel mode, and headless invocation use subprocesses. | omit |
|
|
22
22
|
| `--json` | Emit structured JSON. | off |
|
|
23
|
-
| `--wrap` | Run the wrap hop
|
|
23
|
+
| `--wrap` | Run the wrap hop **once for the batch** over the `done` subset only (Step 6 of execution-batch.md): `vars.feature` is passed only when every frozen task is `done`/`cancelled`; an empty done subset skips the wrap with a reason. The `--agent` selector is preserved into the `/sp:dev-wrap` handoff when supplied; omission remains omission. | off |
|
|
24
24
|
| `--next` | Chain-to-completion via the next-router. | off |
|
|
25
25
|
| `--continue` | Resume an interrupted batch. | off |
|
|
26
26
|
| `--worktree` `[<name>]` | Run the batch in an isolated git worktree; FF-merge on success, retain on failure. Bare `--worktree` creates a fresh tree; `--worktree <name>` adopts an existing worktree by name/path/branch. | off |
|
|
27
|
+
| `--concurrency` `<n>` | Parallel-mode worker bound: at most `<n>` task pipelines run at once (task 0931); a dependent starts only after its in-set dependencies are integrated onto the base ref. No-op in sequential mode (ignored). | 2 |
|
|
27
28
|
|
|
28
29
|
For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag-glossary.md).
|
|
29
30
|
|
|
@@ -41,7 +42,9 @@ structured findings, before any task pipeline action, task 0510 R2; scoped: `L4.
|
|
|
41
42
|
(the expected pre-run state of any not-yet-run feature) is reported verbatim but does not abort —
|
|
42
43
|
any other strict error aborts), `--mode`
|
|
43
44
|
`<sequential|parallel>` (default `sequential`; `parallel` fans out a proven-independent subset —
|
|
44
|
-
see `execution-batch.md` § Parallel
|
|
45
|
+
see `execution-batch.md` § Parallel isolation), `--concurrency <n>`
|
|
46
|
+
(parallel-mode worker bound — at most <n> task pipelines at once, default 2; a dependent task starts
|
|
47
|
+
only after its in-set dependencies are **integrated** onto the base ref), `--keep-going`
|
|
45
48
|
(batch failure policy — skip a failed task's in-batch dependents, continue independents; default
|
|
46
49
|
halts on first failure), `--auto`
|
|
47
50
|
(sets `profile=auto` on each per-task run, skipping the HITL approve gate), `--agent <inline|auto|name>`
|
|
@@ -56,9 +59,10 @@ FF-merge onto the base ref on full success, retain intact on any failure/halt/no
|
|
|
56
59
|
creates a fresh tree, `<name>` form adopts an existing worktree by name/path/branch; see
|
|
57
60
|
`execution-batch.md` § Worktree isolation).
|
|
58
61
|
|
|
59
|
-
**`--worktree`
|
|
60
|
-
|
|
61
|
-
|
|
62
|
+
**`--worktree` and parallel mode.** `--worktree --mode parallel` is **rejected** — parallel mode
|
|
63
|
+
already isolates each task in its own worktree (see `execution-batch.md` § Parallel isolation), and
|
|
64
|
+
reuse mode (`--worktree <name>`) has no per-task meaning. Run parallel batches without
|
|
65
|
+
`--worktree`, or run them sequentially with it.
|
|
62
66
|
|
|
63
67
|
**`--worktree` corpus visibility.** While the batch runs in a worktree, corpus writes (task
|
|
64
68
|
statuses, kanban) land in the worktree copy; your main tree still shows pre-run statuses until the
|
|
@@ -75,7 +79,9 @@ advancing the feature lifecycle). **was: `--next` deliberately omitted; the old
|
|
|
75
79
|
**Three orthogonal axes** (do not confuse): `--keep-going`
|
|
76
80
|
= batch failure policy (does a failure halt the batch or skip dependents?);
|
|
77
81
|
`--continue` = resume from
|
|
78
|
-
checkpoint
|
|
82
|
+
checkpoint against the batch's original frozen identity — persisted plan membership, worktree
|
|
83
|
+
marker, identity-filtered checkpoints as hints (execution-batch.md § Batch continuation, task
|
|
84
|
+
0919); `--next`
|
|
79
85
|
= chain each task to terminal status + batch-once wrap. See `dev-operations.md` § runall for the
|
|
80
86
|
full distinction.
|
|
81
87
|
|
|
@@ -40,6 +40,15 @@ See `sp:code-verification` § Shippable readiness gate.
|
|
|
40
40
|
|
|
41
41
|
- Apply the [inline-default execution-surface contract](../skills/spur-dev/references/cross-cutting.md#inline-default-execution-surface).
|
|
42
42
|
- `Skill(skill="sp:code-verification", args="verify $ARGUMENTS")`
|
|
43
|
+
- **Residual sweep (F96 R1):** after the verify answer is written and `task verdict` derives
|
|
44
|
+
`.spur/run/<wbs>-verdict.json`, run `residual-scan scan` + `fold` (observe-only; folds the
|
|
45
|
+
verdict's `residual-sweep` check, PASS → PARTIAL when a blocking residual exists) — under every
|
|
46
|
+
`--fix` mode — before `spur task record`. Resolve the script via `superskill script path sp
|
|
47
|
+
residual-scan.mjs`; never reference `plugins/sp/scripts/` in shipped surfaces
|
|
48
|
+
(script-contract-check rule 4). When the task reaches `done` through `--next`, run
|
|
49
|
+
`residual-scan settle` (best-effort). On a folded PARTIAL: the bounded remediation loop has
|
|
50
|
+
already run — a residual-failed task is routed to router C6 (HITL STOP), never another
|
|
51
|
+
automatic fix loop.
|
|
43
52
|
|
|
44
53
|
**Flags:**
|
|
45
54
|
|
|
@@ -72,3 +72,8 @@ Without `--fix all`, shippable is not evaluated (optional note: use `--fix all`
|
|
|
72
72
|
- Batch orchestration: `Skill(skill="sp:spur-dev", args="verifyall $ARGUMENTS")`
|
|
73
73
|
- Per-task verification (inner): `Skill(skill="sp:code-verification", args="verify <wbs> $SHARED_FLAGS")`
|
|
74
74
|
- Shippable gate: once after the batch (same skill § Shippable readiness gate)
|
|
75
|
+
- **Residual sweep (F96 R1, per task):** same contract as `/sp:dev-verify` — after each task's
|
|
76
|
+
verdict artifact is derived, run `residual-scan scan` + `fold` (under every `--fix` mode) before
|
|
77
|
+
`spur task record`; on reaching `done` via `--next`, run `settle`. Script resolution:
|
|
78
|
+
`superskill script path sp residual-scan.mjs` (never `plugins/sp/scripts/` —
|
|
79
|
+
script-contract-check rule 4).
|