@gobing-ai/spur 0.3.61 → 0.3.62

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.
Files changed (81) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/config/config.global.yaml +64 -57
  3. package/config/corpus-baseline.json +409 -49
  4. package/config/plugin-scripts.json +2 -2
  5. package/config/rules/boundary/config-loading-ownership.yaml +21 -0
  6. package/config/workflows/history-anatomy.yaml +366 -0
  7. package/package.json +1 -1
  8. package/plugins/sp/README.md +19 -6
  9. package/plugins/sp/commands/dev-find-issue.md +25 -46
  10. package/plugins/sp/commands/dev-run.md +22 -3
  11. package/plugins/sp/lib/artifact-digest.generated.d.mts +7 -0
  12. package/plugins/sp/lib/artifact-digest.generated.mjs +48 -0
  13. package/plugins/sp/plugin.json +1 -1
  14. package/plugins/sp/references/roles.md +5 -5
  15. package/plugins/sp/scripts/history-anatomy-cache.mjs +669 -0
  16. package/plugins/sp/scripts/history-anatomy-cache.ts +818 -0
  17. package/plugins/sp/skills/history-anatomy/SKILL.md +67 -0
  18. package/plugins/sp/skills/history-anatomy/references/modes.md +82 -0
  19. package/plugins/sp/skills/history-anatomy/references/operations.md +67 -0
  20. package/plugins/sp/skills/history-anatomy/references/report-contract.md +133 -0
  21. package/plugins/sp/skills/spur-dev/references/dev-operations.md +2 -2
  22. package/plugins/sp/skills/spur-dev/references/execution-batch.md +14 -1
  23. package/plugins/sp/skills/spur-dev/references/execution-workflow.md +7 -0
  24. package/plugins/sp/skills/spur-dev/references/flag-glossary.md +25 -13
  25. package/spur.js +1091 -823
  26. package/web/_astro/BoardApp.Z9jMwI9G.js +1 -0
  27. package/web/_astro/BoardApp.rkWGVwwK.js +178 -0
  28. package/web/_astro/{TaskDetail.D2N60cfE.js → TaskDetail.B7ODt_bA.js} +1 -1
  29. package/web/_astro/{arc.D-EfJJwf.js → arc.C5QRz6AQ.js} +1 -1
  30. package/web/_astro/{architectureDiagram-3BPJPVTR.CgvTTzqp.js → architectureDiagram-3BPJPVTR.CHptn8gZ.js} +1 -1
  31. package/web/_astro/{blockDiagram-GPEHLZMM.CnOohvvn.js → blockDiagram-GPEHLZMM.b1nEDkDw.js} +1 -1
  32. package/web/_astro/{c4Diagram-AAUBKEIU.BFcBGUy_.js → c4Diagram-AAUBKEIU.BWj8S_Qq.js} +1 -1
  33. package/web/_astro/channel.BJtn6CGV.js +1 -0
  34. package/web/_astro/{chunk-2J33WTMH.C-6MR-XY.js → chunk-2J33WTMH.q0BBuE1n.js} +1 -1
  35. package/web/_astro/{chunk-4BX2VUAB.BN4LP5AR.js → chunk-4BX2VUAB.DP2KDkAU.js} +1 -1
  36. package/web/_astro/{chunk-55IACEB6.tUJ_CTtZ.js → chunk-55IACEB6.CkCId72p.js} +1 -1
  37. package/web/_astro/{chunk-727SXJPM.BNCk-sxv.js → chunk-727SXJPM.oHWzxMot.js} +1 -1
  38. package/web/_astro/{chunk-AQP2D5EJ.BkpFIbNa.js → chunk-AQP2D5EJ.DkkgxfMP.js} +1 -1
  39. package/web/_astro/{chunk-FMBD7UC4.DcSZ87PN.js → chunk-FMBD7UC4.lmFJDvRK.js} +1 -1
  40. package/web/_astro/{chunk-ND2GUHAM.BkLvHFFf.js → chunk-ND2GUHAM.52jt0eHK.js} +1 -1
  41. package/web/_astro/{chunk-QZHKN3VN.HOdgszax.js → chunk-QZHKN3VN.Cg8KEFoD.js} +1 -1
  42. package/web/_astro/{classDiagram-4FO5ZUOK.CWfRiY6b.js → classDiagram-4FO5ZUOK.BuOUhxcD.js} +1 -1
  43. package/web/_astro/{classDiagram-v2-Q7XG4LA2.CWfRiY6b.js → classDiagram-v2-Q7XG4LA2.BuOUhxcD.js} +1 -1
  44. package/web/_astro/{cose-bilkent-S5V4N54A.C6j4PxoN.js → cose-bilkent-S5V4N54A.BRUU8E_0.js} +1 -1
  45. package/web/_astro/{dagre-BM42HDAG.BATZG1II.js → dagre-BM42HDAG.GDbfFYVV.js} +1 -1
  46. package/web/_astro/{diagram-2AECGRRQ.B0f5yY6x.js → diagram-2AECGRRQ.CvIDBeJF.js} +1 -1
  47. package/web/_astro/{diagram-5GNKFQAL.Bewupqv0.js → diagram-5GNKFQAL.DMgJjWOX.js} +1 -1
  48. package/web/_astro/{diagram-KO2AKTUF.C23r1tB2.js → diagram-KO2AKTUF.njjl-0AP.js} +1 -1
  49. package/web/_astro/{diagram-LMA3HP47.DUErdBOR.js → diagram-LMA3HP47.CcCqgP8M.js} +1 -1
  50. package/web/_astro/{diagram-OG6HWLK6.BubmwAjb.js → diagram-OG6HWLK6.Btqd-YVE.js} +1 -1
  51. package/web/_astro/{erDiagram-TEJ5UH35.BE_Qs5mv.js → erDiagram-TEJ5UH35.BbhML_Xo.js} +1 -1
  52. package/web/_astro/{flowDiagram-I6XJVG4X.COWdbzon.js → flowDiagram-I6XJVG4X.CkvsIgY8.js} +1 -1
  53. package/web/_astro/{ganttDiagram-6RSMTGT7.5EGYC4MK.js → ganttDiagram-6RSMTGT7.m8IWD_wW.js} +1 -1
  54. package/web/_astro/{gitGraphDiagram-PVQCEYII.bUUV7iEw.js → gitGraphDiagram-PVQCEYII.5z87HXO-.js} +1 -1
  55. package/web/_astro/{index.Cestp9nh.css → index.nWve6EHS.css} +1 -1
  56. package/web/_astro/{infoDiagram-5YYISTIA.CbiInFvz.js → infoDiagram-5YYISTIA.Bvyvsd7Q.js} +1 -1
  57. package/web/_astro/{ishikawaDiagram-YF4QCWOH.CB7lrSsJ.js → ishikawaDiagram-YF4QCWOH.DdWVYO87.js} +1 -1
  58. package/web/_astro/{journeyDiagram-JHISSGLW.rhGZgWt8.js → journeyDiagram-JHISSGLW.C3kOlYH1.js} +1 -1
  59. package/web/_astro/{kanban-definition-UN3LZRKU.DPeZD_lP.js → kanban-definition-UN3LZRKU.CfKTUHVC.js} +1 -1
  60. package/web/_astro/{linear.l60Nyp5b.js → linear.CMDHnzgX.js} +1 -1
  61. package/web/_astro/{mermaid.core.DmtMJcmL.js → mermaid.core.DN7-WrsP.js} +4 -4
  62. package/web/_astro/{mindmap-definition-RKZ34NQL.Cc47AcCn.js → mindmap-definition-RKZ34NQL.DcQxLvqG.js} +1 -1
  63. package/web/_astro/{pieDiagram-4H26LBE5.B8cN-S9g.js → pieDiagram-4H26LBE5.Nu-Inbw6.js} +1 -1
  64. package/web/_astro/{quadrantDiagram-W4KKPZXB.DY1FN89L.js → quadrantDiagram-W4KKPZXB.Dck2EChs.js} +1 -1
  65. package/web/_astro/{requirementDiagram-4Y6WPE33.CnM6VbV8.js → requirementDiagram-4Y6WPE33.C--E5XuW.js} +1 -1
  66. package/web/_astro/{sankeyDiagram-5OEKKPKP.B9DcGfNV.js → sankeyDiagram-5OEKKPKP.B_0iRNna.js} +1 -1
  67. package/web/_astro/{sequenceDiagram-3UESZ5HK.ymxaNlAY.js → sequenceDiagram-3UESZ5HK.PKuKr9mk.js} +1 -1
  68. package/web/_astro/{stateDiagram-AJRCARHV.DDOJ3d8P.js → stateDiagram-AJRCARHV.ClhGHb-O.js} +1 -1
  69. package/web/_astro/{stateDiagram-v2-BHNVJYJU.Ck0Nb_KY.js → stateDiagram-v2-BHNVJYJU.Bv6BBnvg.js} +1 -1
  70. package/web/_astro/{timeline-definition-PNZ67QCA.BNOvZwAN.js → timeline-definition-PNZ67QCA.BZm2ZvAH.js} +1 -1
  71. package/web/_astro/{vennDiagram-CIIHVFJN.D3k5ivSF.js → vennDiagram-CIIHVFJN.Dt6yZXry.js} +1 -1
  72. package/web/_astro/{wardley-L42UT6IY.BylaxVqn.js → wardley-L42UT6IY.rUs-E00M.js} +1 -1
  73. package/web/_astro/{wardleyDiagram-YWT4CUSO.HLNtFUm9.js → wardleyDiagram-YWT4CUSO.BcWgv4cA.js} +1 -1
  74. package/web/_astro/{xychartDiagram-2RQKCTM6.B-WooKSU.js → xychartDiagram-2RQKCTM6.DH-M-cX9.js} +1 -1
  75. package/web/index.html +2 -2
  76. package/plugins/sp/commands/dev-history-load.md +0 -63
  77. package/plugins/sp/scripts/history-load.mjs +0 -268
  78. package/plugins/sp/scripts/history-load.ts +0 -400
  79. package/web/_astro/BoardApp.BtRfVADq.js +0 -1
  80. package/web/_astro/BoardApp.CBIzcvqi.js +0 -178
  81. package/web/_astro/channel.kIu33Gui.js +0 -1
@@ -0,0 +1,366 @@
1
+ # History-anatomy pipeline — daily/ad-hoc diagnostic report over already-imported history
2
+ # (feature I8, HA-S1 0660 / ADR-079).
3
+ #
4
+ # Orchestration is configuration (ADR-022): a state machine over the existing dual-workflow
5
+ # engine. The YAML owns ONLY the cache branch, deterministic stage ordering, executor dispatch,
6
+ # bounded correction, and atomic publication sequencing. The deterministic cache/digest/
7
+ # structure/publish work is 0659's dependency-free helper script; the judgment (mode validity,
8
+ # what counts as evidence, the report contract, enrich/validate rubrics) is 0658's skill. Per
9
+ # ADR-069 R1, cache-decide / digest / structure-check / publish must NOT be inline shell — every
10
+ # shell action here is glue length (a single helper invocation), because each of those programs
11
+ # would exceed the shell composition threshold and be flagged as an owned-capability candidate.
12
+ #
13
+ # Shape:
14
+ # start -> resolve-scope -> resolve-paths -> analyze -> cache-probe
15
+ # (hit -> refresh-provenance -> publish -> published)
16
+ # (miss -> render -> enrich -> structure-gate -> validate -> stamp -> publish)
17
+ # (validate FAIL -> correct (max 1) -> structure-gate ...; exhausted -> failed)
18
+ # (any all-paths failure -> failed)
19
+ #
20
+ # `analyze` precedes `cache-probe` deliberately: ADR-079 makes cache validity a DERIVED fact, so
21
+ # the semantic digest must come from a fresh analyze, never from the cached report being judged.
22
+ # The deterministic half is therefore never cached — only the model-authored half is reused.
23
+ #
24
+ # terminalStates: [published, failed]. Publication is reachable ONLY via `stamp` (guarded on a
25
+ # passing validation) or `refresh-provenance` (whose model half was itself published through a
26
+ # passing validation) — there is no edge into `publish` from structure-gate or enrich directly.
27
+ #
28
+ # Vars (all must be declared here — the vars: block is the only safe shape; `spur workflow
29
+ # validate` and the skill-structure test enforce it):
30
+ # mode — "daily" (default) | "ad-hoc" (validated in resolve-scope)
31
+ # date — YYYY-MM-DD for --date (daily); empty for ad-hoc
32
+ # since — inclusive ISO lower bound (ad-hoc; also normalizes daily via the DST-aware rule)
33
+ # until — inclusive ISO upper bound (ad-hoc)
34
+ # focus — ad-hoc focus string (required in ad-hoc mode, rejected in daily)
35
+ # recompute — "true" forces the full analyze/render/enrich/validate path (cache disposition
36
+ # forced-recompute)
37
+ # output — explicit report output path; default run directory
38
+ # agent — executor for the agent.run stages (enrich/validate)
39
+ # spurBin — PATH-independent spur invocation (overridden by CLI at run start)
40
+ # __runId — run-scoped id for explicit artifact paths (allocated in start)
41
+ # stepTimeoutMs — agent.run budget for enrich/validate
42
+ # correctionCount — bounded correction loop counter file path bits (name resolved in correct)
43
+
44
+ "$schema": "@gobing-ai/spur/schemas/state-machine-workflow.schema.json"
45
+ kind: state-machine
46
+ name: history-anatomy
47
+ description: "Daily/ad-hoc history-anatomy report: cache branch, deterministic analyze/render, skill enrichment, deterministic structure gate, independent evidence validation, bounded correction, atomic publication"
48
+ iterationBound: 20
49
+ initialState: start
50
+ terminalStates:
51
+ - published
52
+ - failed
53
+ failureStates:
54
+ - failed
55
+ vars:
56
+ mode: "daily"
57
+ date: ""
58
+ since: ""
59
+ until: ""
60
+ focus: ""
61
+ recompute: "false"
62
+ output: ""
63
+ agent: "omp"
64
+ spurBin: "spur"
65
+ __runId: ""
66
+ stepTimeoutMs: "1800000"
67
+ correctionCount: "0"
68
+ workflowFile: "config/workflows/history-anatomy.yaml"
69
+ contractVersion: "1"
70
+ reportDir: "docs/report"
71
+
72
+ states:
73
+ - id: start
74
+ description: >
75
+ Allocate the run-scoped id and root. Every analyze/render path in this workflow writes to
76
+ an explicit unique path under this run id — no stage reads the mutable latest.json pointer.
77
+ onEnter:
78
+ - kind: shell
79
+ options:
80
+ command: >-
81
+ mkdir -p .spur/run;
82
+ if [ -z "$__runId" ]; then __runId=$(uuidgen | tr 'A-Z' 'a-z' | cut -c1-8); fi;
83
+ echo "$__runId" > .spur/run/history-anatomy-run.id
84
+
85
+ - id: resolve-scope
86
+ description: >
87
+ Dispatch the skill's mode validation (0658 references/modes.md): daily is the default and
88
+ rejects focus/since/until/output; ad-hoc requires a non-empty focus plus two ordered
89
+ inclusive bounds and rejects --date/--recompute. Writes the normalized selector artifact.
90
+ onEnter:
91
+ - kind: agent.run
92
+ options:
93
+ agent: ${vars.agent}
94
+ input: "Validate the mode arguments per sp:history-anatomy references/modes.md and write the normalized selector to .spur/run/${vars.__runId}-selector.json. mode=${vars.mode} date=${vars.date} since=${vars.since} until=${vars.until} focus=${vars.focus}. Reject conflicting arguments, naming the offending one; a rejection marks the run failed."
95
+ # Declared Layer-1 role (0538 R2): mode validation is a reviewer-standard judgment.
96
+ role: reviewer
97
+ expectFile: .spur/run/${vars.__runId}-selector.json
98
+ timeoutMs: ${vars.stepTimeoutMs}
99
+
100
+ - id: resolve-paths
101
+ description: >
102
+ Resolve the helper, the skill/contract logic paths, and the publication target once, into a
103
+ run-scoped env file every later stage sources. Keeps each downstream shell action at glue
104
+ length (ADR-069 R1) instead of repeating path arithmetic per stage.
105
+ onEnter:
106
+ - kind: shell
107
+ options:
108
+ # Path arithmetic lives in the helper (ADR-069 R1); the shell only locates it. Avoid
109
+ # `${...}` here — that syntax collides with the engine's own template interpolation.
110
+ command: >-
111
+ h=$(superskill script path sp history-anatomy-cache.mjs);
112
+ node "$h" paths --helper "$h" --report-dir "$reportDir" --date "$date"
113
+ --output "$output" --out .spur/run/$__runId-paths.env
114
+
115
+ - id: analyze
116
+ description: >
117
+ Deterministic analyze of the current window and the immediately preceding comparable
118
+ window, each to an explicit run-scoped path. Always reruns — the deterministic half is
119
+ never cached (ADR-079).
120
+ onEnter:
121
+ - kind: shell
122
+ options:
123
+ command: >-
124
+ mkdir -p .spur/run;
125
+ $spurBin history analyze --out .spur/run/$__runId-history-anatomy-current.json --since "$since" --until "$until" --json
126
+ - kind: shell
127
+ options:
128
+ command: >-
129
+ $spurBin history analyze --out .spur/run/$__runId-history-anatomy-baseline.json --since "$baselineSince" --until "$until" --json 2>/dev/null || true
130
+
131
+ - id: cache-probe
132
+ description: >
133
+ Deterministic cache probe via the helper (0659). Runs AFTER analyze because ADR-079 makes
134
+ validity a derived fact: the semantic digest must come from the fresh artifact, never from
135
+ the cached report being judged. A hit skips only enrichment, never the probe. Daily only;
136
+ ad-hoc always reports miss (`ad-hoc-never-cached`). Also writes the run's full provenance.
137
+ onEnter:
138
+ - kind: shell
139
+ options:
140
+ command: >-
141
+ . .spur/run/$__runId-paths.env;
142
+ node "$HA_HELPER" probe --artifact .spur/run/$__runId-history-anatomy-current.json
143
+ --baseline .spur/run/$__runId-history-anatomy-baseline.json --target "$HA_TARGET"
144
+ --mode "$mode" --date "$HA_DATE" --recompute "$recompute" --executor "$agent"
145
+ --skill-dir "$HA_SKILL" --contract "$HA_SKILL/references/report-contract.md"
146
+ --workflow "$workflowFile" --contract-version "$contractVersion" --run-id "$__runId"
147
+ --out .spur/run/$__runId-provenance.json
148
+ > .spur/run/$__runId-cache-disposition.txt
149
+
150
+ - id: render
151
+ description: >
152
+ Render both artifacts with report --mode forensics, naming the exact analyze paths.
153
+ onEnter:
154
+ - kind: shell
155
+ options:
156
+ command: >-
157
+ mkdir -p .spur/run;
158
+ $spurBin history report .spur/run/$__runId-history-anatomy-current.json --mode forensics > .spur/run/$__runId-history-anatomy-current.md;
159
+ $spurBin history report .spur/run/$__runId-history-anatomy-baseline.json --mode forensics > .spur/run/$__runId-history-anatomy-baseline.md || true
160
+
161
+ - id: enrich
162
+ description: >
163
+ Model enrichment via the skill operation sp:history-anatomy enrich (0658 operations.md).
164
+ Consumes the two artifacts; authors the model half of the report.
165
+ onEnter:
166
+ - kind: agent.run
167
+ options:
168
+ agent: ${vars.agent}
169
+ input: "Run sp:history-anatomy enrich: given .spur/run/${vars.__runId}-history-anatomy-current.json and -baseline.json, author the model half of the report (Baseline comparison, Findings, Recurrence ledger, Remediation options, Performance analysis, Workflow/process improvements, Positive patterns) to .spur/run/${vars.__runId}-candidate.md per references/report-contract.md. This operation never launches a workflow."
170
+ # Declared Layer-1 role (0538 R2): enrichment is model judgment.
171
+ role: reviewer
172
+ expectFile: .spur/run/${vars.__runId}-candidate.md
173
+ timeoutMs: ${vars.stepTimeoutMs}
174
+
175
+ - id: structure-gate
176
+ description: >
177
+ Deterministic structure gate via the helper (0659). Asserts the eleven sections in order,
178
+ per-finding fields, no placeholders, evidence anchors. Not reachable on the hit path from
179
+ enrich — always gated before validation.
180
+ onEnter:
181
+ - kind: shell
182
+ options:
183
+ command: >-
184
+ node "$(superskill script path sp history-anatomy-cache.mjs)" check \
185
+ .spur/run/$__runId-candidate.md > .spur/run/$__runId-structure-gate.txt 2>&1 || true
186
+
187
+ - id: validate
188
+ description: >
189
+ Independent evidence validation via the skill operation sp:history-anatomy validate.
190
+ Publication is reachable only from a PASS here.
191
+ onEnter:
192
+ - kind: agent.run
193
+ options:
194
+ agent: ${vars.agent}
195
+ input: "Run sp:history-anatomy validate: independently check .spur/run/${vars.__runId}-candidate.md against the two artifacts per references/operations.md; write Verdict: PASS or FAIL to .spur/run/${vars.__runId}-validation.txt. This operation never launches a workflow."
196
+ # Declared Layer-1 role (0538 R2): independent verification.
197
+ role: reviewer
198
+ expectFile: .spur/run/${vars.__runId}-validation.txt
199
+ timeoutMs: ${vars.stepTimeoutMs}
200
+
201
+ - id: correct
202
+ description: >
203
+ One bounded correction pass. onEnter increments the counter; the retry edge guards on
204
+ correctionCount < 1, the second failure takes the -> failed edge.
205
+ onEnter:
206
+ - kind: shell
207
+ options:
208
+ command: >-
209
+ n=$(cat .spur/run/$__runId-correction-count 2>/dev/null || echo 0) &&
210
+ printf '%s\n' "$((n + 1))" > .spur/run/$__runId-correction-count
211
+
212
+ - id: refresh-provenance
213
+ description: >
214
+ Cache-hit path. Keeps the published model half verbatim and refreshes only validated_at,
215
+ the cache disposition, and the imported-snapshot banner — which is the EARLIEST per-source
216
+ lastImportedAt, so the report never claims a source was imported after its own recorded
217
+ timestamp. Emits the publishable artifact the shared publish state consumes.
218
+ onEnter:
219
+ - kind: shell
220
+ options:
221
+ command: >-
222
+ . .spur/run/$__runId-paths.env;
223
+ node "$HA_HELPER" refresh --report "$HA_TARGET"
224
+ --out .spur/run/$__runId-publishable.md --disposition hit
225
+
226
+ - id: stamp
227
+ description: >
228
+ Cache-miss path. Attaches the full R7 frontmatter provenance block (identity tuple, window
229
+ state, generated/validated timestamps, artifact paths + digests, contract/skill/workflow
230
+ digests, per-source coverage + last_imported_at, spur/schema version, executor, run id,
231
+ cache disposition) and the freshness banner to the validated candidate.
232
+ onEnter:
233
+ - kind: shell
234
+ options:
235
+ command: >-
236
+ . .spur/run/$__runId-paths.env;
237
+ node "$HA_HELPER" stamp --candidate .spur/run/$__runId-candidate.md
238
+ --provenance .spur/run/$__runId-provenance.json
239
+ --out .spur/run/$__runId-publishable.md
240
+
241
+ - id: publish
242
+ description: >
243
+ Atomic publication via the helper (0659). Reachable only from `stamp` (which is reachable
244
+ only from a passing validate) or from `refresh-provenance` on the cache-hit path — the
245
+ model half a hit reuses was itself published through a passing validation.
246
+ onEnter:
247
+ - kind: shell
248
+ options:
249
+ command: >-
250
+ . .spur/run/$__runId-paths.env;
251
+ mkdir -p "$(dirname "$HA_TARGET")";
252
+ node "$HA_HELPER" publish .spur/run/$__runId-publishable.md "$HA_TARGET"
253
+
254
+ - id: published
255
+ description: Terminal — report published atomically after a passing validation.
256
+
257
+ - id: failed
258
+ description: Terminal — mode rejection, gate failure, or validation failure not corrected.
259
+
260
+ transitions:
261
+ - from: start
262
+ to: resolve-scope
263
+ description: Scope resolved.
264
+ guard:
265
+ kind: always
266
+
267
+ - from: resolve-scope
268
+ to: resolve-paths
269
+ description: Mode valid — resolve helper/skill/target paths once.
270
+ guard:
271
+ kind: always
272
+
273
+ - from: resolve-paths
274
+ to: analyze
275
+ description: Paths resolved — always rerun the deterministic half (ADR-079).
276
+ guard:
277
+ kind: always
278
+
279
+ - from: analyze
280
+ to: cache-probe
281
+ description: Fresh artifacts on disk — derive the digest and decide reuse.
282
+ guard:
283
+ kind: always
284
+
285
+ # Daily only takes the hit branch; ad-hoc always regenerates.
286
+ - from: cache-probe
287
+ to: refresh-provenance
288
+ description: Cache hit (daily) — refresh provenance and publish without re-enrichment.
289
+ guard:
290
+ kind: shell
291
+ options:
292
+ command: 'test "$mode" = daily && grep -q "^hit$" .spur/run/$__runId-cache-disposition.txt 2>/dev/null'
293
+ - from: cache-probe
294
+ to: render
295
+ description: Cache miss, forced recompute, or ad-hoc — render and re-enrich.
296
+ guard:
297
+ kind: always
298
+
299
+ - from: refresh-provenance
300
+ to: publish
301
+ description: Provenance refreshed — publish the cached model half.
302
+ guard:
303
+ kind: always
304
+
305
+ - from: render
306
+ to: enrich
307
+ description: Both artifacts rendered — enrich.
308
+ guard:
309
+ kind: always
310
+
311
+ - from: enrich
312
+ to: structure-gate
313
+ description: Candidate authored — deterministic structure gate.
314
+ guard:
315
+ kind: always
316
+
317
+ - from: structure-gate
318
+ to: validate
319
+ description: Candidate structurally sound — independent evidence validation.
320
+ guard:
321
+ kind: shell
322
+ options:
323
+ command: 'grep -q "^PASS$" .spur/run/$__runId-structure-gate.txt 2>/dev/null'
324
+ - from: structure-gate
325
+ to: failed
326
+ description: Structure gate FAIL — never publish a malformed candidate.
327
+ guard:
328
+ kind: always
329
+
330
+ - from: validate
331
+ to: stamp
332
+ description: Independent validation PASS — stamp provenance, then publish atomically.
333
+ guard:
334
+ kind: shell
335
+ options:
336
+ command: 'grep -q "Verdict: PASS" .spur/run/$__runId-validation.txt 2>/dev/null'
337
+ - from: validate
338
+ to: correct
339
+ description: Validation FAIL under the correction cap — one bounded pass.
340
+ guard:
341
+ kind: shell
342
+ options:
343
+ command: '! grep -q "Verdict: PASS" .spur/run/$__runId-validation.txt 2>/dev/null && test "$(cat .spur/run/$__runId-correction-count 2>/dev/null || echo 0)" -lt 1'
344
+ - from: validate
345
+ to: failed
346
+ description: Validation FAIL with the correction cap exhausted — terminate without publishing.
347
+ guard:
348
+ kind: always
349
+
350
+ - from: correct
351
+ to: structure-gate
352
+ description: Corrected candidate re-enters the deterministic gate, then re-validates.
353
+ guard:
354
+ kind: always
355
+
356
+ - from: stamp
357
+ to: publish
358
+ description: Provenance stamped — publish atomically.
359
+ guard:
360
+ kind: always
361
+
362
+ - from: publish
363
+ to: published
364
+ description: Report published.
365
+ guard:
366
+ kind: always
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gobing-ai/spur",
3
- "version": "0.3.61",
3
+ "version": "0.3.62",
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",
@@ -127,9 +127,8 @@ list this README is checked against.
127
127
  | `dev-handover` | Generate a structured handover document when blocked — captures goal, progress, blocker, rejected approaches, and next steps |
128
128
  | `dev-debug` | Systematic debugging protocol — reproduce, isolate, diagnose root cause, apply minimal fix, and verify with regression tests |
129
129
  | `dev-daily` | Generate a daily summary report from agent usage data, git history, and notes |
130
- | `dev-history-load` | On-demand cumulative history load + narrowed analyze — import (checkpoint-resume) then analyze, optionally by session/task/window, with optional forensics render |
131
130
  | `dev-dogfood` | Dogfood an agent skill/command/CLI — drive it end-to-end with bounded auto-fix, self-monitor, and emit a comprehensive report |
132
- | `dev-find-issue` | Review agent session logs, identify performance bottlenecks and behavioral anti-patterns, and generate a structured task file with proposed fixes |
131
+ | `dev-find-issue` | Generate the daily/ad-hoc history-anatomy diagnostic report over already-imported history — mode contract, closed finding taxonomy, eleven-section report contract, cache branch, atomic publication; forwards to sp:history-anatomy |
133
132
  | `dev-find-conflict` | Authority-aware semantic audit across source, task, feature, and project authority files — detect conflicts, resolve claim-specific authority, and route confirmed repairs through owner surfaces |
134
133
  | `dev-find-next` | Prompt-first feature frontier prioritizer — ranks the open feature frontier by derived importance/urgency with per-candidate evidence; gates unactionable features; emits tree defects as proposals only |
135
134
  | `dev-fixall` | Fix all lint, type, and test errors systematically across the working tree |
@@ -240,6 +239,8 @@ plugins/sp/
240
239
  │ │ └── references/{authority-resolution.md, comparison-protocol.md, finding-contract.md, remediation-routing.md}
241
240
  │ ├── next-feature/ # Prompt-first feature frontier prioritizer (backs /sp:dev-find-next)
242
241
  │ │ └── references/{signal-derivation.md, ranking-rubric.md, proposal-contract.md, handoff-routing.md}
242
+ │ ├── history-anatomy/ # Diagnostic interpretation owner over already-imported history (backs /sp:dev-find-issue)
243
+ │ │ └── references/{modes.md, report-contract.md, operations.md}
243
244
  │ ├── sys-architecture/ # Architecture / ADR judgment competency
244
245
  │ │ └── references/decision-method.md
245
246
  │ ├── sys-debugging/ # Structured debugging protocol
@@ -312,11 +313,23 @@ surface or run one workflow. All skills target the same five core platforms: `cl
312
313
  | `daily-summary` | 1.0.0 | Daily summary report generator — orchestrates ccusage CLI + git history into structured markdown summaries |
313
314
  | `doc-evolve` | 1.0 | Key-document evolution per `docs/99_PROJECT_CONSTITUTION.md` — drift audits, same-commit sync checks, frontmatter-contract verification, machine-appended lessons |
314
315
  | `reverse-engineering` | 1.1 | Codebase analysis / HLD generation / audit — depth-driven reverse engineering with orthogonal mode, focus, and format controls; backs `/sp:dev-reverse` |
315
- | `issue-finding` | 1.1 | Session-log forensics — multi-source discovery, bottleneck ranking, optional topic focus, CLI-gated fix task generation; backs `/sp:dev-find-issue` |
316
+ | `issue-finding` | 1.1 | Session-log forensics — multi-source discovery, bottleneck ranking, optional topic focus, CLI-gated fix task generation; **legacy path** — superseded by `history-anatomy` for indexed reporting; backs no current command; directly invocable as sp:issue-finding |
316
317
  | `conflict-finding` | 1.0 | Authority-aware semantic audit — four-pillar (source/task/feature/authority) conflict discovery, claim-specific authority resolution, reproducible evidence, confirmed owner-routed remediation; backs `/sp:dev-find-conflict` |
317
318
  | `next-feature` | 1.0 | Prompt-first feature frontier prioritizer — sync-first precondition, B3 actionability gate (cited, never restated), tiered rubric over measured signals, D1–D4 defect proposals conforming to the restructure map schema; backs `/sp:dev-find-next` |
318
319
  | `pr-reviewing` | 1.0 | GitHub Codex PR review — PR prepare/reuse, `@codex review` request with per-HEAD dedupe, bounded polling, findings normalization, validated fix + re-review; spine SSOT `pr-review.yaml` + `scripts/pr-reviewing.ts`; backs `/sp:dev-pr-review` |
319
320
  | `indexed-context` | 1.0 | Cross-agent project context — anatomy/learnings/pitfalls/buglog/memory in `.spur/context/`; hook-tracked token-ledger; graceful degradation on agents without hooks |
321
+ | `history-anatomy` | 1.0 | Diagnostic interpretation owner over already-imported history — daily/ad-hoc mode contract, closed finding taxonomy, eleven-section report contract, `enrich`/`validate` rubrics; no workflow launch, no JSONL fallback, no corpus mutation |
322
+
323
+ #### Bounded coexistence and retirement gate — `sp:issue-finding` (HA-S1 0661)
324
+
325
+ `sp:issue-finding` remains packaged and directly invocable as the **legacy path**; `/sp:dev-find-issue` resolves to `sp:history-anatomy`. No logic is shared between them. This coexistence is _bounded_, not permanent — the retirement gate below is the contract:
326
+
327
+ - **Parity fixtures** the new contract must cover before retirement is considered: typed history analysis; daily and focused range selection; repeated-work and error reporting; evidence and confidence; remediation proposals; performance analysis; process observations; positive patterns.
328
+ - **Intentional exclusions, not gaps:** raw history-file parsing and task creation are deliberately out of scope for `history-anatomy`; a missing parity item is checked against this list before it counts as a gap.
329
+ - **Adoption evidence:** successful `history-anatomy.yaml` workflow run records across both modes (`daily`, `ad-hoc`) and the available source families. No bespoke telemetry is added to count adoption.
330
+ - **Review point:** one minor release or 30 days after this feature ships, whichever is later.
331
+ - **Gate:** parity PASS + demonstrated use of both modes + no open high-impact regression + explicit operator approval. A failed gate records the missing evidence and one dated extension.
332
+ - **Retirement is a separate change.** This feature removes nothing; `sp:issue-finding` stays until the operator approves a dedicated retirement change.
320
333
 
321
334
  Each skill directory contains:
322
335
 
@@ -338,11 +351,11 @@ Skills contain zero validation logic — the CLI is the gate.
338
351
 
339
352
  Thin slash-command wrappers that parse user arguments and delegate to the corresponding skill. Each
340
353
  command is a user-facing entry point that bridges natural language to skill invocation. There are
341
- **39 commands** (see the Command index above for the full list), organized by the surface they wrap:
354
+ **38 commands** (see the Command index above for the full list), organized by the surface they wrap:
342
355
 
343
356
  | Prefix | Count | Delegates to | Purpose |
344
357
  | ------------ | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
345
- | `dev-*` | 33 | `sp:spur-dev`, `sp:code-implementation`, `sp:code-testing`, `sp:code-verification`, `sp:code-simplification`, `sp:next-router`, `sp:brainstorm`, `sp:dogfood-testing`, `sp:parallel-execution`, `sp:sys-debugging`, `sp:daily-summary`, `sp:issue-finding`, `sp:conflict-finding`, `sp:reverse-engineering`, `sp:pr-reviewing`, inline | The dev-workflow surface — planning, execution, batch, wrap-up, review/verify, hygiene |
358
+ | `dev-*` | 32 | `sp:spur-dev`, `sp:code-implementation`, `sp:code-testing`, `sp:code-verification`, `sp:code-simplification`, `sp:next-router`, `sp:brainstorm`, `sp:dogfood-testing`, `sp:parallel-execution`, `sp:sys-debugging`, `sp:daily-summary`, `sp:history-anatomy`, `sp:conflict-finding`, `sp:reverse-engineering`, `sp:pr-reviewing`, inline | The dev-workflow surface — planning, execution, batch, wrap-up, review/verify, hygiene |
346
359
  | `rule-*` | 3 | `sp:spur-cli` | The rule surface — `rule-add`, `rule-refine`, `rule-scan` |
347
360
  | `workflow-*` | 2 | `sp:spur-cli` | The workflow surface — `workflow-add`, `workflow-refine` |
348
361
  | `spur-init` | 1 | `sp:doc-evolve` | Project bootstrap (`spur init`) with doc-evolve integration |
@@ -352,7 +365,7 @@ Each command file contains:
352
365
  - YAML frontmatter (`description`, `argument-hint`, `allowed-tools`).
353
366
  - A delegation block: `Skill(skill="sp:<skill-name>", args="<operation> $ARGUMENTS")`.
354
367
 
355
- **Commands as SSOT (ADR-032).** The 39 `.md` files in `commands/` are the authoritative,
368
+ **Commands as SSOT (ADR-032).** The 38 `.md` files in `commands/` are the authoritative,
356
369
  hand-editable source for the operator command surface. Per-platform adapters are **install-time
357
370
  output** owned by `superskill` (`superskill install sp`) and never committed here. Plugin `sp` ships
358
371
  no per-platform artifacts — only the platform-independent thin wrappers.
@@ -1,37 +1,32 @@
1
1
  ---
2
- description: "Render the session-forensics report from imported history data (8 CLI-derivable sections plus 6 model-authored), identify bottlenecks and behavioral anti-patterns, and optionally create a structured fix task behind --create-task. Triggers: post-mortem, performance analysis, session review, find issues, identify bottlenecks"
2
+ description: "Generate the daily or ad-hoc history-anatomy diagnostic report over already-imported history: the eleven-section report contract, closed finding taxonomy, cache branch, bounded correction, and atomic publication. Triggers: find issues, post-mortem, performance analysis, session review, history-anatomy, run the daily report, ad-hoc diagnosis"
3
3
  role: reviewer
4
- argument-hint: "[<topic>] [--sessions <glob>] [--source <auto|pi|claude|codex|gemini|opencode|antigravity|openclaw|omp|grok|agy|all>] [--feature <id>] [--template <meta|issue|standard>] [--priority <P0|P1|P2|P3>] [--severity <S0|S1|S2>] [--category <list>] [--since <iso>] [--until <iso>] [--top <n>] [--min-cost <duration>] [--strict-topic] [--create-task] [--agent <inline|auto|name>] [--json]"
5
- allowed-tools: ["Bash", "Read", "Write", "Grep", "Glob", "Skill"]
4
+ argument-hint: "[<focus>] [--mode <daily|ad-hoc>] [--date <YYYY-MM-DD>] [--since <RFC3339>] [--until <RFC3339>] [--recompute] [--agent <inline|auto|name>] [--output <path>]"
5
+ allowed-tools: ["Bash", "Read", "Skill"]
6
6
  ---
7
7
 
8
8
  # Dev Find Issue
9
9
 
10
- Wraps the **sp:issue-finding** skill — report-first session forensics over the history data plane.
11
- The CLI renders the 8 derivable report sections (`spur history report --mode forensics`); the skill
12
- identifies bottlenecks, proposes fixes, and only with `--create-task` generates a structured
13
- task file via `spur task create`.
10
+ Wraps the **sp:history-anatomy** skill — the independent owner of diagnostic interpretation over
11
+ already-imported history. The skill resolves the mode contract (daily is the default and uses the
12
+ current local calendar day; ad-hoc requires a focus plus two ordered bounds), owns the report
13
+ contract (eleven sections, closed finding taxonomy, evidence rules, recurrence ledger), and
14
+ exposes the `enrich` and `validate` operations the `history-anatomy.yaml` workflow invokes.
15
+ Publication is atomic and gated behind both the deterministic structure gate and independent
16
+ evidence validation. This command never triggers an import.
14
17
 
15
18
  ## Argument Flags
16
19
 
17
- | Flag | Description | Default |
18
- | ---------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ---------- |
19
- | `[<topic>]` | Narrow the analysis to a topic. | omitted |
20
- | `--sessions` `<glob>` | Session log glob (fallback input). | recent |
21
- | `--source` `<auto\|pi\|claude\|codex\|gemini\|opencode\|antigravity\|openclaw\|omp\|grok\|agy\|all>` | Agent source to scan (CLI vocabulary; `all` fans out, `auto` resolves at runtime). | auto |
22
- | `--feature` `<id>` | Attach the generated task to a feature. | omitted |
23
- | `--template` `<meta\|issue\|standard>` | Task template shape (`--create-task` only); `issue` is the explicit single-finding override, `standard` the generic override. | meta |
24
- | `--priority` `<P0\|P1\|P2\|P3>` | Filter / assign task priority. | P2 |
25
- | `--severity` `<S0\|S1\|S2>` | Filter / assign severity. | all |
26
- | `--category` `<list>` | Comma list of categories to keep. | all |
27
- | `--since` `<iso>` | Start of the scan window. | configured |
28
- | `--until` `<iso>` | End of the scan window. | now |
29
- | `--top` `<n>` | Limit to top N findings. | omitted |
30
- | `--min-cost` `<duration>` | Minimum wasted duration to report. | omitted |
31
- | `--strict-topic` | Drop findings off-topic. | off |
32
- | `--create-task` | Generate a fix task for findings. | off |
33
- | `--agent` `<inline\|auto\|name>` | Who runs the model-bearing analysis. | omit |
34
- | `--json` | Emit structured JSON. | off |
20
+ | Flag | Description | Default |
21
+ | -------------------------------------- | -------------------------------------------------------------------------------------------------- | -------- |
22
+ | `[<focus>]` | Ad-hoc focus string (required in `--mode ad-hoc`; rejected in daily). | omitted |
23
+ | `--mode` `<daily\|ad-hoc>` | Report mode. Daily uses the current local calendar day. | daily |
24
+ | `--date` `<YYYY-MM-DD>` | Selects that local calendar day (daily; DST-aware). | today |
25
+ | `--since` `<RFC3339>` | Inclusive lower bound (ad-hoc; required). | omitted |
26
+ | `--until` `<RFC3339>` | Inclusive upper bound (ad-hoc; required). | omitted |
27
+ | `--recompute` | Force the full analyze/render/enrich/validate path; records disposition forced-recompute. | off |
28
+ | `--agent` `<inline\|auto\|name>` | Execution surface selector. | inline |
29
+ | `--output` `<path>` | Explicit report output path (ad-hoc; default writes to the run directory). | run dir |
35
30
 
36
31
  For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag-glossary.md).
37
32
 
@@ -39,31 +34,15 @@ For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag
39
34
 
40
35
  ```
41
36
  /sp:dev-find-issue
42
- /sp:dev-find-issue "test-loop spinning"
43
- /sp:dev-find-issue --sessions "~/.omp/agent/sessions/-xprojects-spur-new/2026-07-29T*"
44
- /sp:dev-find-issue "L3 guard format discovery" --feature H51 --priority P1 --severity S1
45
- /sp:dev-find-issue --category test-loop,guard --min-cost 30m
46
- /sp:dev-find-issue --source claude --since 2026-07-28 --create-task --json
37
+ /sp:dev-find-issue --date 2026-08-24
38
+ /sp:dev-find-issue --mode ad-hoc --since 2026-08-01T00:00:00Z --until 2026-08-15T00:00:00Z "focus"
39
+ /sp:dev-find-issue --recompute
47
40
  ```
48
41
 
49
- **Report-first (task 0556).** Default output is the markdown report to stdout; no task file is
50
- written. Task creation moved behind `--create-task`. `--use-history` and `--no-task` are removed:
51
- the history data plane is now the primary source (no flag needed), and the old report-only behavior
52
- is the new default. Raw JSONL remains a fallback under the three conditions documented in
53
- `sp:issue-finding`.
54
-
55
- **Data-plane preflight.** Forensics read the imported history plane as-is. If findings come back
56
- empty or stale, run `/sp:dev-history-load` (on-demand cumulative `spur history import` + analyze,
57
- checkpoint resume — task 0567) before re-running forensics; it owns the interactive preflight, while
58
- `spur history daily` owns the periodic cadence.
59
-
60
- **See also:** skill `sp:issue-finding` (SSOT), `/sp:dev-runall`, `/sp:dev-dogfood`,
61
- `sp:daily-summary`, `sp:reverse-engineering`.
62
-
63
42
  ## Implementation
64
43
 
65
- Apply the [inline-default execution-surface contract](../skills/spur-dev/references/cross-cutting.md#inline-default-execution-surface), then invoke the issue-finding skill, forwarding all arguments:
44
+ Apply the [inline-default execution-surface contract](../skills/spur-dev/references/cross-cutting.md#inline-default-execution-surface).
66
45
 
67
46
  ```
68
- Skill(skill="sp:issue-finding", args="$ARGUMENTS")
47
+ Skill(skill="sp:history-anatomy", args="$ARGUMENTS")
69
48
  ```
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  description: Run a task — full pipeline (precheck→implement→test→review→approve→verify→record→done) or single-step (implement)
3
3
  role: coder
4
- argument-hint: "<wbs> [--mode <full|implement>] [--agent <inline|auto|name>] [--auto] [--next] [--wrap] [--continue]"
4
+ argument-hint: "<wbs> [--mode <full|implement>] [--agent <inline|auto|name>] [--auto] [--next] [--wrap] [--continue] [--worktree [<name>]]"
5
5
  allowed-tools: ["Bash", "Read", "Write", "Edit", "Skill"]
6
6
  ---
7
7
 
@@ -20,12 +20,13 @@ Wraps the **sp:spur-dev** and **sp:code-implementation** skills.
20
20
  | `--next` | Chain-to-completion via the next-router. | off |
21
21
  | `--wrap` | Run the wrap hop after the main step. The `--agent` selector is preserved into the `/sp:dev-wrap <wbs>` handoff when supplied; omission remains omission. The wrap hop is workflow-backed and reports its trigger-3 subprocess override. | off |
22
22
  | `--continue` | Resume an interrupted task from its checkpoint. | off |
23
+ | `--worktree` `[<name>]` | Run the task pipeline 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. Full mode only. | off |
23
24
 
24
25
  For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag-glossary.md).
25
26
 
26
27
  ## Usage
27
28
 
28
- /sp:dev-run <wbs> [--mode <full|implement>] [--agent <inline|auto|name>] [--auto] [--next] [--wrap] [--continue]
29
+ /sp:dev-run <wbs> [--mode <full|implement>] [--agent <inline|auto|name>] [--auto] [--next] [--wrap] [--continue] [--worktree [<name>]]
29
30
 
30
31
  ## Implementation
31
32
 
@@ -40,12 +41,30 @@ For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag
40
41
 
41
42
  - `--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, where **omitted** `--agent`'s eligible `agent.run` stages may dispatch once to a native subagent and otherwise run in the host (task 0508); explicit `--agent inline` is the zero-dispatch carve-out — every stage executes in the invoking session. 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).
42
43
 
44
+ `--worktree` `[<name>]` (run the task's pipeline in an isolated git worktree — FF-merge onto the
45
+ base ref on full success, retain intact on any failure/halt/non-FF; bare form creates a fresh tree,
46
+ `<name>` form adopts an existing worktree by name/path/branch). The lifecycle — dirty-tree precheck,
47
+ creation or adoption, crash-safe `.spur/run/` marker, merge-or-retain, `--continue` re-entry — is
48
+ `execution-batch.md` § Worktree isolation applied to a batch of one: marker `command` is `dev-run`
49
+ and `selector` is the `<wbs>`, the derived branch is `sp/run-<wbs>-<short-id>`, and the success
50
+ condition is the task reaching terminal `done` with no failed stage. A failing gate, a non-PASS
51
+ verify verdict, or a HITL pause that ends the run all take the retention path.
52
+
53
+ **`--worktree` is full-mode only.** `--worktree --mode implement` is **rejected**. `--mode implement`
54
+ *is* the pipeline's implement stage and runs in whatever tree the driver already set up (bug-742);
55
+ giving it a second worktree would split one task's evidence across two trees. Use `--worktree` on the
56
+ full-mode invocation, which carries the implement stage with it.
57
+
58
+ **`--worktree` corpus visibility.** While the task runs in a worktree, corpus writes (status
59
+ transitions, evidence sections, kanban) land in the worktree copy; your main tree still shows the
60
+ pre-run status until the FF-merge on success. This is expected, not a bug.
61
+
43
62
  **Mode split (load-bearing — bug-742)**
44
63
 
45
64
  | Mode | What runs | Must not do |
46
65
  | --- | --- | --- |
47
66
  | `--mode full` (default) | Interactive omit/inline: host-session driver over `task-pipeline.yaml`; explicit/headless executor: workflow subprocess | — |
48
- | `--mode implement` | Single implement competency via `sp:code-implementation` | Re-launch the full pipeline, `spur workflow run …task-pipeline…`, or `/sp:dev-run` **without** `--mode implement` |
67
+ | `--mode implement` | Single implement competency via `sp:code-implementation` | Re-launch the full pipeline, `spur workflow run …task-pipeline…`, `/sp:dev-run` **without** `--mode implement`, or accept `--worktree` (rejected) |
49
68
 
50
69
  The pipeline's `implement` step invokes this command **only** as:
51
70
 
@@ -0,0 +1,7 @@
1
+ /**
2
+ * GENERATED by scripts/commands/bundle-plugin-lib.ts — do not edit.
3
+ * Source of truth: packages/domain/src/analytics/artifact-digest.ts (task 0669).
4
+ */
5
+ export declare const ARTIFACT_ARRAY_CLASSIFICATION: Readonly<Record<string, 'ranked' | 'set'>>;
6
+ export declare const RANKED_ARTIFACT_KEYS: ReadonlySet<string>;
7
+ export declare function semanticArtifactDigest(artifactJson: unknown): string;