@gobing-ai/spur 0.3.53 → 0.3.55

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 (96) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/config/corpus-baseline.json +2783 -2783
  3. package/config/pipeline-budgets.json +42 -0
  4. package/config/plugin-scripts.json +73 -0
  5. package/config/workflow-composition-baseline.json +561 -0
  6. package/config/workflows/docs-pipeline.yaml +29 -13
  7. package/config/workflows/feature-dev.yaml +54 -2
  8. package/config/workflows/idea-pipeline.yaml +15 -0
  9. package/config/workflows/task-pipeline.yaml +77 -65
  10. package/config/workflows/wrapup-pipeline.yaml +40 -45
  11. package/package.json +9 -9
  12. package/plugins/README.md +1 -1
  13. package/plugins/sp/README.md +3 -3
  14. package/plugins/sp/agents/super-planner.md +1 -1
  15. package/plugins/sp/commands/dev-daily.md +1 -1
  16. package/plugins/sp/commands/dev-history-load.md +1 -1
  17. package/plugins/sp/commands/dev-idea.md +10 -2
  18. package/plugins/sp/plugin.json +1 -1
  19. package/plugins/sp/scripts/batch-preflight.mjs +160 -0
  20. package/plugins/sp/scripts/batch-preflight.ts +1 -1
  21. package/plugins/sp/scripts/daily-summary/daily-summary.mjs +479 -0
  22. package/plugins/sp/scripts/daily-summary/daily-summary.ts +75 -37
  23. package/plugins/sp/scripts/dogfood-testing/detect-pipeline-driving.mjs +204 -0
  24. package/plugins/sp/scripts/dogfood-testing/detect-pipeline-driving.ts +1 -1
  25. package/plugins/sp/scripts/dogfood-testing/validate-report.mjs +141 -0
  26. package/plugins/sp/scripts/dogfood-testing/validate-report.ts +1 -1
  27. package/plugins/sp/scripts/feature-sync-bounded.mjs +290 -0
  28. package/plugins/sp/scripts/feature-sync-bounded.ts +9 -8
  29. package/plugins/sp/scripts/history-load.mjs +268 -0
  30. package/plugins/sp/scripts/pr-reviewing.mjs +685 -0
  31. package/plugins/sp/scripts/pr-reviewing.ts +1 -1
  32. package/plugins/sp/scripts/script-contract-check.ts +319 -0
  33. package/plugins/sp/skills/daily-summary/SKILL.md +3 -3
  34. package/plugins/sp/skills/dogfood-testing/SKILL.md +5 -5
  35. package/plugins/sp/skills/dogfood-testing/references/report-template.md +1 -1
  36. package/plugins/sp/skills/pr-reviewing/SKILL.md +3 -3
  37. package/plugins/sp/skills/spur-dev/SKILL.md +2 -1
  38. package/plugins/sp/skills/spur-dev/references/cross-cutting.md +3 -4
  39. package/plugins/sp/skills/spur-dev/references/dev-operations.md +1 -1
  40. package/plugins/sp/skills/spur-dev/references/execution-batch.md +3 -3
  41. package/plugins/sp/skills/spur-dev/references/gate-checklists.md +4 -4
  42. package/spur.js +4270 -1323
  43. package/web/_astro/{BoardApp.plVXYkKo.js → BoardApp.DCLSB3Zs.js} +63 -63
  44. package/web/_astro/BoardApp.Dx5gzAhb.js +1 -0
  45. package/web/_astro/{TaskDetail.5DIyVQ_N.js → TaskDetail.DN_RxS-2.js} +1 -1
  46. package/web/_astro/{arc.BnUgL7ho.js → arc.CldTHRg-.js} +1 -1
  47. package/web/_astro/{architectureDiagram-3BPJPVTR.B9YMJau-.js → architectureDiagram-3BPJPVTR.DQ4T9oeU.js} +1 -1
  48. package/web/_astro/{blockDiagram-GPEHLZMM.Dw2qgvWJ.js → blockDiagram-GPEHLZMM.CGDaXH8J.js} +1 -1
  49. package/web/_astro/{c4Diagram-AAUBKEIU.jTbU0-Nk.js → c4Diagram-AAUBKEIU.Cqsc2iub.js} +1 -1
  50. package/web/_astro/channel.CrBJYpxo.js +1 -0
  51. package/web/_astro/{chunk-2J33WTMH.Di46EtkU.js → chunk-2J33WTMH.CQSKsRmq.js} +1 -1
  52. package/web/_astro/{chunk-4BX2VUAB.DweHBwqQ.js → chunk-4BX2VUAB.Pv1HCtp8.js} +1 -1
  53. package/web/_astro/{chunk-55IACEB6.rRjTKaa7.js → chunk-55IACEB6.-9MseOIk.js} +1 -1
  54. package/web/_astro/{chunk-727SXJPM.BkEQIkSV.js → chunk-727SXJPM.M3OI1DF7.js} +1 -1
  55. package/web/_astro/{chunk-AQP2D5EJ.Cfe9IvAd.js → chunk-AQP2D5EJ.NfHka5Ca.js} +1 -1
  56. package/web/_astro/{chunk-FMBD7UC4.fI6tLbeN.js → chunk-FMBD7UC4.B2suYe3s.js} +1 -1
  57. package/web/_astro/{chunk-ND2GUHAM.BIjgpq0O.js → chunk-ND2GUHAM.BfJ7aucP.js} +1 -1
  58. package/web/_astro/{chunk-QZHKN3VN.ZwLnVxyz.js → chunk-QZHKN3VN._582hZVc.js} +1 -1
  59. package/web/_astro/{classDiagram-4FO5ZUOK.BJAGYidE.js → classDiagram-4FO5ZUOK._tttU_jk.js} +1 -1
  60. package/web/_astro/{classDiagram-v2-Q7XG4LA2.BJAGYidE.js → classDiagram-v2-Q7XG4LA2._tttU_jk.js} +1 -1
  61. package/web/_astro/{cose-bilkent-S5V4N54A.B5y3nz26.js → cose-bilkent-S5V4N54A.C4rVATLQ.js} +1 -1
  62. package/web/_astro/{dagre-BM42HDAG.DHmw0ZBC.js → dagre-BM42HDAG.8BLRi7f9.js} +1 -1
  63. package/web/_astro/{diagram-2AECGRRQ.10gapJfY.js → diagram-2AECGRRQ.D6lwUZos.js} +1 -1
  64. package/web/_astro/{diagram-5GNKFQAL.Gh33_drM.js → diagram-5GNKFQAL.Cl_rMiVT.js} +1 -1
  65. package/web/_astro/{diagram-KO2AKTUF.8ROWlfcX.js → diagram-KO2AKTUF.DhMExHLp.js} +1 -1
  66. package/web/_astro/{diagram-LMA3HP47.BsP3tKmg.js → diagram-LMA3HP47.3OAxzH_o.js} +1 -1
  67. package/web/_astro/{diagram-OG6HWLK6.DM2WFDhU.js → diagram-OG6HWLK6.Uh9RLucG.js} +1 -1
  68. package/web/_astro/{erDiagram-TEJ5UH35.royaC_lH.js → erDiagram-TEJ5UH35.izzElG0c.js} +1 -1
  69. package/web/_astro/{flowDiagram-I6XJVG4X.C9GEvIie.js → flowDiagram-I6XJVG4X.BlGwp5qM.js} +1 -1
  70. package/web/_astro/{ganttDiagram-6RSMTGT7.CXO4T2U0.js → ganttDiagram-6RSMTGT7.je7Vf8dN.js} +1 -1
  71. package/web/_astro/{gitGraphDiagram-PVQCEYII.Q02KzYH7.js → gitGraphDiagram-PVQCEYII.DNk0Ycop.js} +1 -1
  72. package/web/_astro/{index.DAxu50UF.css → index.V6Q7nhed.css} +1 -1
  73. package/web/_astro/{infoDiagram-5YYISTIA.DNfSDKJt.js → infoDiagram-5YYISTIA.K2HhGyWH.js} +1 -1
  74. package/web/_astro/{ishikawaDiagram-YF4QCWOH.BFttvtgJ.js → ishikawaDiagram-YF4QCWOH.BbbOW4IN.js} +1 -1
  75. package/web/_astro/{journeyDiagram-JHISSGLW.Cfm-2SbG.js → journeyDiagram-JHISSGLW.B1UaZKqN.js} +1 -1
  76. package/web/_astro/{kanban-definition-UN3LZRKU.BWGNW6fV.js → kanban-definition-UN3LZRKU.9tsw5QFd.js} +1 -1
  77. package/web/_astro/{linear.BprdUk2Y.js → linear.I9dvtu-j.js} +1 -1
  78. package/web/_astro/{mermaid.core.B2zRNxtX.js → mermaid.core.5bKJsMgf.js} +4 -4
  79. package/web/_astro/{mindmap-definition-RKZ34NQL.g9jij8sw.js → mindmap-definition-RKZ34NQL.BC5MqSn6.js} +1 -1
  80. package/web/_astro/{pieDiagram-4H26LBE5.CbzR4n5b.js → pieDiagram-4H26LBE5.B8GIMyxD.js} +1 -1
  81. package/web/_astro/{quadrantDiagram-W4KKPZXB.DxV3viWt.js → quadrantDiagram-W4KKPZXB.K_aZSM_u.js} +1 -1
  82. package/web/_astro/{requirementDiagram-4Y6WPE33.DvAb90JS.js → requirementDiagram-4Y6WPE33.B_V5kzfT.js} +1 -1
  83. package/web/_astro/{sankeyDiagram-5OEKKPKP.CIFz5t4D.js → sankeyDiagram-5OEKKPKP.DyV2quLS.js} +1 -1
  84. package/web/_astro/{sequenceDiagram-3UESZ5HK.DzlEQynd.js → sequenceDiagram-3UESZ5HK.BlKvPnBv.js} +1 -1
  85. package/web/_astro/{stateDiagram-AJRCARHV.Dph2V-ts.js → stateDiagram-AJRCARHV.C1lYUMdS.js} +1 -1
  86. package/web/_astro/{stateDiagram-v2-BHNVJYJU.wJhfrLAy.js → stateDiagram-v2-BHNVJYJU.DJWjr3QV.js} +1 -1
  87. package/web/_astro/{timeline-definition-PNZ67QCA.BrSiyubX.js → timeline-definition-PNZ67QCA.CYYiXVlv.js} +1 -1
  88. package/web/_astro/{vennDiagram-CIIHVFJN.COobPrUX.js → vennDiagram-CIIHVFJN.zYjQKa_S.js} +1 -1
  89. package/web/_astro/{wardley-L42UT6IY.CrjeTx8A.js → wardley-L42UT6IY.BGrWTY3D.js} +1 -1
  90. package/web/_astro/{wardleyDiagram-YWT4CUSO.B8_fTQ8E.js → wardleyDiagram-YWT4CUSO.CkXxtcI1.js} +1 -1
  91. package/web/_astro/{xychartDiagram-2RQKCTM6.BPpokgVv.js → xychartDiagram-2RQKCTM6.BhKH3KG3.js} +1 -1
  92. package/web/index.html +2 -2
  93. package/config/workflows/planning-pipeline.yaml +0 -249
  94. package/config/workflows/task-pipeline2.yaml +0 -778
  95. package/web/_astro/BoardApp.pdtYu-yW.js +0 -1
  96. package/web/_astro/channel.DEqvaz-I.js +0 -1
@@ -1,249 +0,0 @@
1
- # Planning pipeline — front-half of the development workflow (task 0088, design §6).
2
- #
3
- # Orchestration is configuration (ADR-022 / §3.2): this is YAML over the existing
4
- # dual-workflow engine — zero new engine code. The pipeline automates steps 3–6 of the
5
- # ideation→implementation chain: phasing → feature-ID derivation → design-doc generation →
6
- # design-doc approval. It terminates at a drafted feature list and hands off to sp:spur-dev
7
- # (steps 7–12), which is already shipped and unchanged.
8
- #
9
- # Every authoritative-doc touch invokes sp:doc-evolve to honor the constitution §5 sync triggers.
10
- # Derived docs (docs/design/*, docs/features/*, 05_FEATURES index) are auto-written; high-risk
11
- # authoritative edits (02_ROADMAP phasing, 04_DESIGN index) are STAGED to docs/plans/ for human
12
- # commit (Q3 — hybrid by risk).
13
- #
14
- # Shape: phasing(HITL) → feature-id → design-gen → design-approval(HITL) → handoff
15
- # (phasing skipped when profile=auto; design-approval skipped when profile=auto
16
- # AND design_approved=true — taste gates pause even in auto unless prior approval
17
- # is encoded, per design doc HITL taxonomy).
18
- #
19
- # Vars (passed as a JSON object via `--vars`):
20
- # slug — the design-doc slug, e.g. `--vars '{"slug":"auth-migration"}'`
21
- # profile — set `--vars '{"profile":"auto"}'` to skip the HITL gates (Q4)
22
- # feature — optional parent feature ID for derivation context
23
- # design_approved — "true" only when the operator explicitly approved the design in-session;
24
- # lets profile=auto route around the design-approval taste gate (default "false")
25
- #
26
- # Reliability (aligned with task-pipeline / ADR-043):
27
- # - Soft start precheck (slug non-empty + agent doctor) → failed via transitions
28
- # - feature-id + design-gen use expectFile so silent no-ops cannot proceed
29
- # - HITL routing is exhaustive (yes/no/cancel) on phasing and design-approval
30
- # - Free-form skill pointers remain only where no pure slash surface exists yet
31
-
32
- "$schema": "@gobing-ai/spur/schemas/state-machine-workflow.schema.json"
33
- kind: state-machine
34
- name: planning-pipeline
35
- description: "Front-half planning pipeline (start → phasing → feature-ID → design-gen → design-approval → handoff)"
36
- iterationBound: 20
37
- initialState: start
38
- terminalStates:
39
- - handoff
40
- - cancelled
41
- - failed
42
- failureStates:
43
- - failed
44
- - cancelled
45
- vars:
46
- slug: "draft"
47
- profile: "interactive"
48
- feature: ""
49
- design_approved: "false"
50
- __hitlAnswer: ""
51
- spurBin: "spur"
52
- agent: "omp"
53
- stepTimeoutMs: "1800000"
54
- # Injected by WorkflowAppService.run(); scopes .spur/run artifacts per run (0425 R4).
55
- __runId: ""
56
-
57
- states:
58
- - id: start
59
- description: >
60
- Soft precheck + routing node. Validates slug and agent doctor (status file,
61
- always exit 0), then routes to the phasing HITL gate (interactive) or straight
62
- to feature-id (profile=auto) so hitl.confirm only fires when a human is in loop.
63
- onEnter:
64
- - kind: shell
65
- options:
66
- command: >-
67
- mkdir -p .spur/run &&
68
- set +e &&
69
- test -n "$slug"; slug_rc=$?;
70
- $spurBin agent doctor $agent; doctor_rc=$?;
71
- set -e &&
72
- if [ "$slug_rc" -eq 0 ] && [ "$doctor_rc" -eq 0 ]; then
73
- printf 'PASS\n' > .spur/run/$__runId-plan-precheck.status;
74
- else
75
- printf 'FAIL\n' > .spur/run/$__runId-plan-precheck.status;
76
- fi &&
77
- exit 0
78
- - kind: note
79
- options:
80
- message: "Planning pipeline start for slug=${vars.slug}."
81
-
82
- - id: phasing
83
- description: >
84
- Decide whether this requirement needs a new phase in 02_ROADMAP. The HITL gate asks
85
- the operator; if a new phase is needed, the edit is STAGED to docs/plans/ (never
86
- auto-written — Q3). Under profile=auto this state is never entered (start routes
87
- around it straight to feature-id).
88
- onEnter:
89
- - kind: hitl.confirm
90
- options:
91
- prompt: "Does this requirement need a new phase in 02_ROADMAP? (Stage the edit if yes.)"
92
-
93
- - id: feature-id
94
- description: >
95
- Allocate the feature id via the canonical `spur feature create` verb (DD-14).
96
- expectFile fails a silent no-op so design-gen never runs without an id.
97
- onEnter:
98
- - kind: shell
99
- options:
100
- command: 'mkdir -p .spur/run && rm -f .spur/run/$__runId-plan-feature-id.txt'
101
- - kind: agent.run
102
- options:
103
- agent: ${vars.agent}
104
- # `vars.feature` is optional and defaults to "" — the parent flag must be
105
- # Declared Layer-1 role (0538 R2): routing reason beside the agent: pin.
106
- role: planner
107
- # described conditionally, never interpolated bare. `--parent <empty> --json`
108
- # makes commander swallow `--json` as the parent value.
109
- input: "Skill(skill=\"sp:spur-cli\", args=\"feature create for slug ${vars.slug}\"). Run `${vars.spurBin} feature create \"${vars.slug}\" --json` (or reuse an existing id); append `--parent \"${vars.feature}\"` ONLY if the parent id between those quotes is non-empty — if it is empty, omit the --parent flag entirely. Write the feature id alone to .spur/run/${vars.__runId}-plan-feature-id.txt."
110
- expectFile: .spur/run/${vars.__runId}-plan-feature-id.txt
111
- timeoutMs: ${vars.stepTimeoutMs}
112
-
113
- - id: design-gen
114
- description: >
115
- Author docs/design/${vars.slug}.md from docs/plans/${vars.slug}-drafted.md and
116
- stage 04_DESIGN index via sp:doc-evolve (Q3 — never auto-write the index).
117
- expectFile fails a silent no-op design gen.
118
- onEnter:
119
- - kind: agent.run
120
- options:
121
- agent: ${vars.agent}
122
- input: "Skill(skill=\"sp:doc-evolve\", args=\"design-gen slug=${vars.slug}\"). Author docs/design/${vars.slug}.md from docs/plans/${vars.slug}-drafted.md; stage 04_DESIGN index edit only."
123
- # Declared Layer-1 role (0538 R2): routing reason beside the agent: pin.
124
- role: planner
125
- expectFile: docs/design/${vars.slug}.md
126
- timeoutMs: ${vars.stepTimeoutMs}
127
-
128
- - id: failed
129
- description: Terminal — planning failed a hard gate (feature-id / design-gen / check).
130
-
131
- - id: design-approval
132
- description: >
133
- HITL gate — the highest-leverage gate in the pipeline. Loop until the operator
134
- approves the design doc. Under profile=auto this state is skipped ONLY when
135
- vars.design_approved=true (explicit prior approval); otherwise the taste gate
136
- pauses even in auto mode (design doc HITL taxonomy). Loop back to design-gen
137
- for revisions.
138
- pause: true
139
- onEnter:
140
- - kind: hitl.confirm
141
- options:
142
- prompt: "Approve the design doc at docs/design/${vars.slug}.md? (Loop back to design-gen for revisions.)"
143
-
144
- - id: handoff
145
- description: >
146
- Terminal — design doc approved; the drafted feature list is ready. Hand off to
147
- sp:spur-dev (steps 7–12), which starts at `spur feature create`. The seam is the
148
- drafted-feature-list file at docs/plans/${vars.slug}-drafted.md.
149
- # Checkpoint write: record session state for resume (Phase 4, task 0171 R3)
150
- onEnter:
151
- - kind: shell
152
- options:
153
- command: 'mkdir -p .spur/memory/sessions && echo "checkpoint: planning-pipeline handoff slug=$slug ts=$(date -u +%Y-%m-%dT%H:%M:%SZ)" > .spur/memory/sessions/$slug-checkpoint.md'
154
-
155
- - id: cancelled
156
- description: Terminal — planning abandoned by the operator.
157
-
158
- transitions:
159
- # ── start: precheck FAIL → failed; else route around phasing when profile=auto ──
160
- # Declaration order: FAIL first, then auto-skip, then interactive phasing.
161
- - from: start
162
- to: failed
163
- description: Precheck FAIL (empty slug and/or doctor red) — stop.
164
- guard:
165
- kind: shell
166
- options:
167
- command: 'test "$(cat .spur/run/$__runId-plan-precheck.status 2>/dev/null)" = FAIL'
168
- - from: start
169
- to: feature-id
170
- description: profile=auto and precheck PASS — skip the phasing HITL gate.
171
- guard:
172
- kind: shell
173
- options:
174
- command: 'test "$profile" = auto && test "$(cat .spur/run/$__runId-plan-precheck.status 2>/dev/null)" = PASS'
175
- - from: start
176
- to: phasing
177
- description: Interactive and precheck PASS — enter the phasing HITL gate.
178
- guard:
179
- kind: shell
180
- options:
181
- command: 'test "$(cat .spur/run/$__runId-plan-precheck.status 2>/dev/null)" = PASS'
182
- - from: start
183
- to: failed
184
- description: Defense — corrupt/missing precheck status — failed.
185
- guard:
186
- kind: always
187
-
188
- # ── phasing: HITL gate (reached only when profile != auto) ──
189
- - from: phasing
190
- to: feature-id
191
- description: Phasing decided — proceed to feature-ID derivation.
192
- guard:
193
- kind: shell
194
- options:
195
- command: 'test "$__hitlAnswer" = yes || test "$__hitlAnswer" = no'
196
- - from: phasing
197
- to: cancelled
198
- description: Operator cancelled planning.
199
- guard:
200
- kind: shell
201
- options:
202
- command: 'test "$__hitlAnswer" = cancel'
203
-
204
- # ── linear body ──
205
- - from: feature-id
206
- to: design-gen
207
- description: Feature ID derived — generate the design doc.
208
- guard:
209
- kind: always
210
-
211
- # ── design-gen → design-approval, OR skip the HITL gate when profile=auto AND design_approved=true ──
212
- # Auto-skip guard tried FIRST: under profile=auto with explicit prior approval,
213
- # route straight to handoff without entering design-approval. Without prior
214
- # approval, the taste gate pauses even in auto (design doc HITL taxonomy).
215
- - from: design-gen
216
- to: handoff
217
- description: profile=auto AND design_approved=true — skip the design-approval HITL gate.
218
- guard:
219
- kind: shell
220
- options:
221
- command: 'test "$profile" = auto && test "$design_approved" = true'
222
- - from: design-gen
223
- to: design-approval
224
- description: Design doc drafted — gate on human approval.
225
- guard:
226
- kind: always
227
-
228
- # ── design-approval: HITL gate (reached only when profile != auto) ──
229
- - from: design-approval
230
- to: handoff
231
- description: Design approved — hand off to sp:spur-dev.
232
- guard:
233
- kind: shell
234
- options:
235
- command: 'test "$__hitlAnswer" = yes'
236
- - from: design-approval
237
- to: design-gen
238
- description: Rework — operator requested design revisions.
239
- guard:
240
- kind: shell
241
- options:
242
- command: 'test "$__hitlAnswer" = no'
243
- - from: design-approval
244
- to: cancelled
245
- description: Operator cancelled planning.
246
- guard:
247
- kind: shell
248
- options:
249
- command: 'test "$__hitlAnswer" = cancel'