@gobing-ai/spur 0.3.89 → 0.3.91
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 +7 -0
- package/config/rules/boundary/sp-plugin-standalone.yaml +37 -0
- package/config/workflows/decision-routing-example.yaml +134 -0
- package/config/workflows/idea-pipeline.yaml +8 -0
- package/config/workflows/task-pipeline.yaml +2 -0
- package/config/workflows/wayfinder-resolution.yaml +2 -0
- package/config/workflows/wrapup-pipeline.yaml +2 -0
- package/package.json +9 -9
- package/plugins/sp/README.md +1 -0
- package/plugins/sp/agents/expert-spur.md +2 -2
- package/plugins/sp/lib/idea-handoff.generated.mjs +157 -150
- package/plugins/sp/plugin.json +1 -1
- package/plugins/sp/scripts/inline-pipeline-parity-check.ts +1 -0
- package/plugins/sp/scripts/script-contract-check.ts +58 -0
- package/plugins/sp/scripts/surface-drift-inventory.ts +71 -6
- package/plugins/sp/scripts/validate-flag-contracts.ts +3 -3
- package/plugins/sp/skills/spur-cli/references/agent.md +11 -2
- package/plugins/sp/skills/spur-cli/references/self.md +5 -1
- package/plugins/sp/skills/spur-cli/references/workflows.md +11 -4
- package/plugins/sp/skills/spur-dev/references/cross-cutting.md +21 -2
- package/plugins/sp/skills/spur-dev/references/execution-workflow.md +13 -4
- package/plugins/sp/skills/spur-dev/references/glossary.md +9 -1
- package/plugins/sp/skills/spur-dev/references/inline-pipeline-driver.md +9 -1
- package/plugins/sp/skills/wayfinder/SKILL.md +1 -1
- package/spur.js +3100 -959
- package/web/_astro/{BoardApp.CDUcHlTJ.js → BoardApp.BEDWpzsr.js} +82 -82
- package/web/_astro/BoardApp.DQG2xfEz.js +1 -0
- package/web/_astro/{TaskDetail.DwTmbQp5.js → TaskDetail.CXGltuT_.js} +1 -1
- package/web/_astro/{arc.BzF71EFI.js → arc.C0rrflm_.js} +1 -1
- package/web/_astro/{architectureDiagram-3BPJPVTR.jvdDahWM.js → architectureDiagram-3BPJPVTR.DJ8DHkWE.js} +1 -1
- package/web/_astro/{blockDiagram-GPEHLZMM.zSg4AmFD.js → blockDiagram-GPEHLZMM.D8DHK3Jl.js} +1 -1
- package/web/_astro/{c4Diagram-AAUBKEIU.BkUIUQWH.js → c4Diagram-AAUBKEIU.BugQbX9u.js} +1 -1
- package/web/_astro/channel.SRrg1P-w.js +1 -0
- package/web/_astro/{chunk-2J33WTMH.DvfQ_f50.js → chunk-2J33WTMH.Mv26KlVn.js} +1 -1
- package/web/_astro/{chunk-4BX2VUAB.DuI4gQqX.js → chunk-4BX2VUAB.CD51JoT_.js} +1 -1
- package/web/_astro/{chunk-55IACEB6.D3BWBOpF.js → chunk-55IACEB6.D_PFaIEe.js} +1 -1
- package/web/_astro/{chunk-727SXJPM.3QSi0a9M.js → chunk-727SXJPM.DemMW1ao.js} +1 -1
- package/web/_astro/{chunk-AQP2D5EJ.xazCQrAF.js → chunk-AQP2D5EJ.Iu2V5-ex.js} +1 -1
- package/web/_astro/{chunk-FMBD7UC4.B2g6u4rA.js → chunk-FMBD7UC4.MsNgSP-E.js} +1 -1
- package/web/_astro/{chunk-ND2GUHAM.wWwWs99t.js → chunk-ND2GUHAM.DfbRaAlm.js} +1 -1
- package/web/_astro/{chunk-QZHKN3VN.BD5g3qa9.js → chunk-QZHKN3VN.BbJAQ4h-.js} +1 -1
- package/web/_astro/{classDiagram-4FO5ZUOK.C7CzCdsX.js → classDiagram-4FO5ZUOK.CPurtiC2.js} +1 -1
- package/web/_astro/{classDiagram-v2-Q7XG4LA2.C7CzCdsX.js → classDiagram-v2-Q7XG4LA2.CPurtiC2.js} +1 -1
- package/web/_astro/{cose-bilkent-S5V4N54A.Xyiau0gw.js → cose-bilkent-S5V4N54A.CKKdx1bM.js} +1 -1
- package/web/_astro/{cynefin-OW5HDTMX.BeC5MWas.js → cynefin-OW5HDTMX.CoKMTg-R.js} +1 -1
- package/web/_astro/{dagre-BM42HDAG.yZbMN9vc.js → dagre-BM42HDAG.D4h4_k56.js} +1 -1
- package/web/_astro/{diagram-2AECGRRQ.Cmo2zQM-.js → diagram-2AECGRRQ.DJ0h9zgw.js} +1 -1
- package/web/_astro/{diagram-5GNKFQAL.D033eSVi.js → diagram-5GNKFQAL.DvPk1jYd.js} +1 -1
- package/web/_astro/{diagram-KO2AKTUF.CR6k3Y3G.js → diagram-KO2AKTUF.BFoCkiCr.js} +1 -1
- package/web/_astro/{diagram-LMA3HP47.x7mwu8jz.js → diagram-LMA3HP47.exHn9OVx.js} +1 -1
- package/web/_astro/{diagram-OG6HWLK6.D8aTTvUr.js → diagram-OG6HWLK6.CeqO34nN.js} +1 -1
- package/web/_astro/{erDiagram-TEJ5UH35.BoBqcKXQ.js → erDiagram-TEJ5UH35.D_v7HqxR.js} +1 -1
- package/web/_astro/{flowDiagram-I6XJVG4X.D3mTQdrU.js → flowDiagram-I6XJVG4X.EUmrpbwh.js} +1 -1
- package/web/_astro/{ganttDiagram-6RSMTGT7.H-cqgIh-.js → ganttDiagram-6RSMTGT7.BOCF5lII.js} +1 -1
- package/web/_astro/{gitGraphDiagram-PVQCEYII.B6s9zbfC.js → gitGraphDiagram-PVQCEYII.Di7otYZD.js} +1 -1
- package/web/_astro/index.Bx6GY4RH.css +1 -0
- package/web/_astro/{infoDiagram-5YYISTIA.BzgCoV6P.js → infoDiagram-5YYISTIA.TcBkCAJk.js} +1 -1
- package/web/_astro/{ishikawaDiagram-YF4QCWOH.BZzVhy1-.js → ishikawaDiagram-YF4QCWOH.D-2y4M0c.js} +1 -1
- package/web/_astro/{journeyDiagram-JHISSGLW.BV3195Py.js → journeyDiagram-JHISSGLW.DPbJI_n2.js} +1 -1
- package/web/_astro/{kanban-definition-UN3LZRKU.BjRd2DWz.js → kanban-definition-UN3LZRKU.EFxhQ9Fj.js} +1 -1
- package/web/_astro/{linear.BILTgS5N.js → linear.DSAsQLzs.js} +1 -1
- package/web/_astro/{mermaid.core.DBy_WKeW.js → mermaid.core.kAZjgJHG.js} +4 -4
- package/web/_astro/{mindmap-definition-RKZ34NQL.BiEjaI4-.js → mindmap-definition-RKZ34NQL.CJY1N_7V.js} +1 -1
- package/web/_astro/{pieDiagram-4H26LBE5.i_8V5pIn.js → pieDiagram-4H26LBE5.567ZNoL2.js} +1 -1
- package/web/_astro/{quadrantDiagram-W4KKPZXB.BWaW3MHn.js → quadrantDiagram-W4KKPZXB.mqfz9-MY.js} +1 -1
- package/web/_astro/{requirementDiagram-4Y6WPE33.CzddBbtg.js → requirementDiagram-4Y6WPE33.Bv1Gv9In.js} +1 -1
- package/web/_astro/{sankeyDiagram-5OEKKPKP.X2ww0e-D.js → sankeyDiagram-5OEKKPKP.B6Gs4X4r.js} +1 -1
- package/web/_astro/{sequenceDiagram-3UESZ5HK.DSA4kTcc.js → sequenceDiagram-3UESZ5HK.BhYj4v-m.js} +1 -1
- package/web/_astro/{stateDiagram-AJRCARHV.D0DtFSpR.js → stateDiagram-AJRCARHV.BPbBnkpw.js} +1 -1
- package/web/_astro/{stateDiagram-v2-BHNVJYJU.BfQq0zQv.js → stateDiagram-v2-BHNVJYJU.C4squMNK.js} +1 -1
- package/web/_astro/{timeline-definition-PNZ67QCA.Dmlrgi1m.js → timeline-definition-PNZ67QCA.C_SwIHgl.js} +1 -1
- package/web/_astro/{vennDiagram-CIIHVFJN.D5mpl00Z.js → vennDiagram-CIIHVFJN.Bz4NZGpQ.js} +1 -1
- package/web/_astro/{wardleyDiagram-YWT4CUSO.Df4BdzO4.js → wardleyDiagram-YWT4CUSO.CozMVZ3i.js} +1 -1
- package/web/_astro/{xychartDiagram-2RQKCTM6.DiTRreKN.js → xychartDiagram-2RQKCTM6.BwMGBwjB.js} +1 -1
- package/web/index.html +2 -2
- package/web/_astro/BoardApp.CaCGU_uX.js +0 -1
- package/web/_astro/channel.SSVY0JPQ.js +0 -1
- package/web/_astro/index.CcU5weKX.css +0 -1
|
@@ -48,6 +48,13 @@
|
|
|
48
48
|
"tokenCostUsd": null,
|
|
49
49
|
"source": "Coverage entry (0826 R2): the live definition's model-query count (extractResolvedWorkflowFacts, 2026-09-11). No real-run measurement yet: wall-clock and cost are unenforced until measured, never 0.",
|
|
50
50
|
"decision": null
|
|
51
|
+
},
|
|
52
|
+
"decision-routing-example": {
|
|
53
|
+
"modelQueries": 0,
|
|
54
|
+
"wallClockMs": null,
|
|
55
|
+
"tokenCostUsd": null,
|
|
56
|
+
"source": "Coverage entry (0911): authoring example (config/workflows/decision-routing-example.yaml) enumerating `decision:` modes. Measured 0 model queries — the producer is a shell action, so the example runs with no provider (live count via loadQueryCounts, 2026-09-20). Not a pipeline humans run; wall-clock and cost unenforced, never 0.",
|
|
57
|
+
"decision": null
|
|
51
58
|
}
|
|
52
59
|
}
|
|
53
60
|
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
$schema: "@gobing-ai/spur/schemas/rule-file.schema.json"
|
|
2
|
+
# Plugin standalone contract — bundled plugin surfaces import only node:* or relative paths.
|
|
3
|
+
#
|
|
4
|
+
# WHY: `superskill install` bundles plugins/sp hooks and scripts on targets (and from
|
|
5
|
+
# marketplace snapshots) with NO node_modules. A bare `@gobing-ai/*` value import only
|
|
6
|
+
# converts if the host superskill happens to carry that package in its private dep tree
|
|
7
|
+
# (superskill 0.3.28+ bundles ts-utils/ts-runtime; older versions do not). When it does
|
|
8
|
+
# not: "Error: Bundle failed" and the plugin cannot install — this broke releases
|
|
9
|
+
# 0.3.81–0.3.88 (task 0669; regression commit 84c87a9ac).
|
|
10
|
+
#
|
|
11
|
+
# Contract:
|
|
12
|
+
# - plugins/sp/hooks/**, plugins/sp/scripts/**, plugins/sp/lib/** may value-import
|
|
13
|
+
# only `node:*` builtins and relative paths (vendored helpers live in plugins/sp/lib/).
|
|
14
|
+
# - `import type` / `export type` from any package is fine — erased before bundling
|
|
15
|
+
# (e.g. inline-run-setup.ts's type-only import from @gobing-ai/app).
|
|
16
|
+
# - This rule is the author-time tripwire over DIRECT imports; the transitive closure
|
|
17
|
+
# and the real `superskill install` path are checked by `bun run plugin-smoke`, and
|
|
18
|
+
# script-contract-check Rule 5 (manifest-aware) fails the spur-check gate.
|
|
19
|
+
#
|
|
20
|
+
# Scope: plugins/sp bundled surfaces only. apps/packages follow the normal workspace
|
|
21
|
+
# import rules and are not affected.
|
|
22
|
+
include:
|
|
23
|
+
- "plugins/sp/hooks/**/*.ts"
|
|
24
|
+
- "plugins/sp/scripts/**/*.ts"
|
|
25
|
+
- "plugins/sp/lib/**/*.ts"
|
|
26
|
+
rules:
|
|
27
|
+
- id: sp-plugin-standalone
|
|
28
|
+
description: >
|
|
29
|
+
No value imports of workspace packages (`@gobing-ai/*` or any bare specifier)
|
|
30
|
+
in plugin bundled surfaces — superskill bundles them onto targets with no
|
|
31
|
+
node_modules. Vendor the helper into plugins/sp/lib/ (see lib/env.ts) or use a
|
|
32
|
+
relative import. `import type` is exempt.
|
|
33
|
+
severity: error
|
|
34
|
+
evaluator:
|
|
35
|
+
type: rg
|
|
36
|
+
config:
|
|
37
|
+
pattern: "^import \\{[^}]*\\} from ['\\\"]@gobing-ai/|^import ['\\\"]@gobing-ai/|^import\\(['\\\"]@gobing-ai/|^} from ['\\\"]@gobing-ai/"
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# DecisionMaker routing example (task 0911, D7). Demonstrates the three `decision:` modes
|
|
2
|
+
# on hitl.* actions; copy the pattern into your own workflow instead of running this file.
|
|
3
|
+
#
|
|
4
|
+
# never — the action always asks the human (DecisionMaker is bypassed even when
|
|
5
|
+
# `workflow.hitlDecisionMaker: true`). Used for gates that must stay human-only.
|
|
6
|
+
# evidence — the DecisionMaker answers from recorded action evidence of the listed producer
|
|
7
|
+
# states: it picks one of the offered choices when confidence >= 0.9, or defers
|
|
8
|
+
# (answer var is cleared, status var records `deferred`) when evidence is missing,
|
|
9
|
+
# stale, or inconclusive. Requires a non-paused state, a statusVar distinct from
|
|
10
|
+
# the answer var, and producer states that exist in this workflow.
|
|
11
|
+
# (omitted) — legacy 0910 semantics: DecisionMaker may confirm/select without evidence and
|
|
12
|
+
# without provenance. Kept for compatibility; prefer an explicit mode.
|
|
13
|
+
#
|
|
14
|
+
# The run is safe and local: one shell producer emits a fixed failure summary, the choose step
|
|
15
|
+
# reads it as evidence, and the operator gate has no side effects. No provider is required —
|
|
16
|
+
# without `workflow.hitlDecisionMaker: true` (or without a key) the evidence step defers and
|
|
17
|
+
# `never` behaves exactly like an unconfigured gate. See `spur self status` -> `decisionMaker`
|
|
18
|
+
# for offline readiness. Optional registered-summary evidence (`summaryArtifact`) is documented
|
|
19
|
+
# in docs/help/how_to_enable_jev_in_spur.md; this example deliberately creates no artifact.
|
|
20
|
+
"$schema": "@gobing-ai/spur/schemas/state-machine-workflow.schema.json"
|
|
21
|
+
kind: state-machine
|
|
22
|
+
name: decision-routing-example
|
|
23
|
+
version: "1"
|
|
24
|
+
initialState: assess
|
|
25
|
+
description: >
|
|
26
|
+
Worked example of DecisionMaker decision routing (0911 D7): a shell producer records a fixed
|
|
27
|
+
recovery summary as action evidence, a non-pausing hitl.select lets the DecisionMaker choose
|
|
28
|
+
retry or stop from that evidence (deferring with provenance when it is inconclusive), an
|
|
29
|
+
accepted retry runs exactly one attempt and then escalates, and the never-mode pause=true
|
|
30
|
+
hitl.confirm gate always waits for the operator with explicit yes/no/cancel branches.
|
|
31
|
+
Illustrative only — copy the patterns rather than running this file.
|
|
32
|
+
vars:
|
|
33
|
+
recoveryChoice: ""
|
|
34
|
+
decisionStatus: ""
|
|
35
|
+
# Default answer var the never-mode gate's yes/no/cancel branches read (matches the stock gates).
|
|
36
|
+
__hitlAnswer: ""
|
|
37
|
+
states:
|
|
38
|
+
- id: assess
|
|
39
|
+
description: >
|
|
40
|
+
Producer state: one shell action whose redacted output becomes the evidence the decide
|
|
41
|
+
state's DecisionMaker reads. One producer state carries one evidence-bearing action.
|
|
42
|
+
onEnter:
|
|
43
|
+
- kind: shell
|
|
44
|
+
options:
|
|
45
|
+
command: >-
|
|
46
|
+
printf 'Failure summary: verification failed twice on the flaky fixture; no data loss;
|
|
47
|
+
retry is safe, or stop and hand the decision to the operator.'
|
|
48
|
+
- id: decide
|
|
49
|
+
description: >
|
|
50
|
+
Evidence-mode select (non-paused): DecisionMaker picks a recovery step from the assess
|
|
51
|
+
state's recorded evidence. Low confidence, missing or stale evidence defers and writes the
|
|
52
|
+
status variable instead of answering, so no implicit approval is ever produced.
|
|
53
|
+
onEnter:
|
|
54
|
+
- kind: hitl.select
|
|
55
|
+
options:
|
|
56
|
+
prompt: "Choose the next safe recovery step using the recorded failure summary."
|
|
57
|
+
options: [retry, stop]
|
|
58
|
+
var: recoveryChoice
|
|
59
|
+
decision:
|
|
60
|
+
mode: evidence
|
|
61
|
+
statusVar: decisionStatus
|
|
62
|
+
evidenceNodes: [assess]
|
|
63
|
+
- id: retry
|
|
64
|
+
description: >
|
|
65
|
+
The single bounded retry an accepted `retry` choice buys: this state runs once and routes
|
|
66
|
+
to the operator gate, so an accepted answer can never loop back into the decision.
|
|
67
|
+
onEnter:
|
|
68
|
+
- kind: shell
|
|
69
|
+
options:
|
|
70
|
+
command: "printf 'retry attempt: re-running the failed verification step once'"
|
|
71
|
+
- id: humanGate
|
|
72
|
+
description: >
|
|
73
|
+
Never-mode confirm (paused): always waits for the operator, whichever branch reached it.
|
|
74
|
+
`spur workflow continue --answer yes|no|cancel` records the explicit operator answer.
|
|
75
|
+
pause: true
|
|
76
|
+
onEnter:
|
|
77
|
+
- kind: hitl.confirm
|
|
78
|
+
options:
|
|
79
|
+
prompt: "Publish the recovered result, stop, or cancel the run?"
|
|
80
|
+
decision:
|
|
81
|
+
mode: never
|
|
82
|
+
- id: published
|
|
83
|
+
description: Operator approved the recovered result; terminal marker state.
|
|
84
|
+
- id: stop
|
|
85
|
+
description: Recovery stopped deliberately — requested by the decision or rejected by the operator.
|
|
86
|
+
- id: cancelled
|
|
87
|
+
description: Operator cancelled the run at the gate; terminal marker state.
|
|
88
|
+
transitions:
|
|
89
|
+
# Accepted decision branches first: the state machine takes the first passing edge.
|
|
90
|
+
- from: assess
|
|
91
|
+
to: decide
|
|
92
|
+
guard: { kind: always }
|
|
93
|
+
- from: decide
|
|
94
|
+
to: retry
|
|
95
|
+
guard:
|
|
96
|
+
kind: shell
|
|
97
|
+
options:
|
|
98
|
+
command: 'test "$recoveryChoice" = "retry"'
|
|
99
|
+
- from: decide
|
|
100
|
+
to: stop
|
|
101
|
+
guard:
|
|
102
|
+
kind: shell
|
|
103
|
+
options:
|
|
104
|
+
command: 'test "$recoveryChoice" = "stop"'
|
|
105
|
+
# Declared defer edge: evidence mode wrote `deferred` and cleared the answer var.
|
|
106
|
+
- from: decide
|
|
107
|
+
to: humanGate
|
|
108
|
+
guard:
|
|
109
|
+
kind: shell
|
|
110
|
+
options:
|
|
111
|
+
command: 'test "$decisionStatus" = "deferred"'
|
|
112
|
+
- from: retry
|
|
113
|
+
to: humanGate
|
|
114
|
+
guard: { kind: always }
|
|
115
|
+
# Explicit yes / no / cancel branches on the default answer var, matching the stock gates.
|
|
116
|
+
- from: humanGate
|
|
117
|
+
to: published
|
|
118
|
+
guard:
|
|
119
|
+
kind: shell
|
|
120
|
+
options:
|
|
121
|
+
command: 'test "$__hitlAnswer" = "yes"'
|
|
122
|
+
- from: humanGate
|
|
123
|
+
to: stop
|
|
124
|
+
guard:
|
|
125
|
+
kind: shell
|
|
126
|
+
options:
|
|
127
|
+
command: 'test "$__hitlAnswer" = "no"'
|
|
128
|
+
- from: humanGate
|
|
129
|
+
to: cancelled
|
|
130
|
+
guard:
|
|
131
|
+
kind: shell
|
|
132
|
+
options:
|
|
133
|
+
command: 'test "$__hitlAnswer" = "cancel"'
|
|
134
|
+
terminalStates: [published, stop, cancelled]
|
|
@@ -145,6 +145,8 @@ states:
|
|
|
145
145
|
- kind: hitl.confirm
|
|
146
146
|
options:
|
|
147
147
|
prompt: "Review the idea evaluation report (.spur/run/${vars.__runId}-idea-eval-report.md). Approve to create a feature, or reject to cancel? (Reject creates no feature.)"
|
|
148
|
+
decision:
|
|
149
|
+
mode: never
|
|
148
150
|
|
|
149
151
|
- id: feature-create
|
|
150
152
|
description: >
|
|
@@ -282,6 +284,8 @@ states:
|
|
|
282
284
|
- kind: hitl.confirm
|
|
283
285
|
options:
|
|
284
286
|
prompt: "Feature check for ${vars.featureId}. Review the AC and confirm to proceed? Requirement coverage status: $(cat .spur/run/${vars.__runId}-idea-coverage.status 2>/dev/null || echo unknown) — reason: $(cat .spur/run/${vars.__runId}-idea-coverage.reason 2>/dev/null || echo n/a) (.spur/run/${vars.__runId}-idea-coverage.status[.reason]). (Failures route back to ac-generate for revision, capped at 3 retries.)"
|
|
287
|
+
decision:
|
|
288
|
+
mode: never
|
|
285
289
|
|
|
286
290
|
- id: system-design
|
|
287
291
|
description: >
|
|
@@ -358,6 +362,8 @@ states:
|
|
|
358
362
|
- kind: hitl.confirm
|
|
359
363
|
options:
|
|
360
364
|
prompt: "Review the system design for feature ${vars.featureId}. Approve to proceed to decomposition? To reject, first record your feedback in .spur/run/${vars.__runId}-idea-design-review.md under the `## Operator feedback` heading, then answer no."
|
|
365
|
+
decision:
|
|
366
|
+
mode: never
|
|
361
367
|
|
|
362
368
|
- id: decompose
|
|
363
369
|
description: >
|
|
@@ -416,6 +422,8 @@ states:
|
|
|
416
422
|
- kind: hitl.confirm
|
|
417
423
|
options:
|
|
418
424
|
prompt: "Batch-create for feature ${vars.featureId}. Review the task batch and confirm to proceed? (Failures route back to decompose for revision, capped at 3 retries.)"
|
|
425
|
+
decision:
|
|
426
|
+
mode: never
|
|
419
427
|
|
|
420
428
|
- id: batch-create-run
|
|
421
429
|
description: >
|
|
@@ -308,6 +308,8 @@ states:
|
|
|
308
308
|
- kind: hitl.confirm
|
|
309
309
|
options:
|
|
310
310
|
prompt: "Branch cleanup for the validated task list (.spur/run/${vars.__runId}-wrapup-tasks.json). This is IRREVERSIBLE (merge or delete). Confirm to proceed?"
|
|
311
|
+
decision:
|
|
312
|
+
mode: never
|
|
311
313
|
|
|
312
314
|
- id: done
|
|
313
315
|
description: >
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gobing-ai/spur",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.91",
|
|
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.
|
|
57
|
-
"@gobing-ai/ts-ai-runner": "^0.
|
|
58
|
-
"@gobing-ai/ts-dual-workflow-engine": "^0.
|
|
59
|
-
"@gobing-ai/ts-infra": "^0.
|
|
60
|
-
"@gobing-ai/ts-llm-jsonl-importer": "^0.
|
|
61
|
-
"@gobing-ai/ts-rule-engine": "^0.
|
|
62
|
-
"@gobing-ai/ts-runtime": "^0.
|
|
63
|
-
"@gobing-ai/ts-utils": "^0.
|
|
56
|
+
"@gobing-ai/ts-db": "^0.5.2",
|
|
57
|
+
"@gobing-ai/ts-ai-runner": "^0.5.2",
|
|
58
|
+
"@gobing-ai/ts-dual-workflow-engine": "^0.5.2",
|
|
59
|
+
"@gobing-ai/ts-infra": "^0.5.2",
|
|
60
|
+
"@gobing-ai/ts-llm-jsonl-importer": "^0.5.2",
|
|
61
|
+
"@gobing-ai/ts-rule-engine": "^0.5.2",
|
|
62
|
+
"@gobing-ai/ts-runtime": "^0.5.2",
|
|
63
|
+
"@gobing-ai/ts-utils": "^0.5.2",
|
|
64
64
|
"@types/bun": "1.3.14",
|
|
65
65
|
"@types/figlet": "^1.7.0",
|
|
66
66
|
"@types/node-notifier": "8.0.5",
|
package/plugins/sp/README.md
CHANGED
|
@@ -629,6 +629,7 @@ pipeline owns one lifecycle phase:
|
|
|
629
629
|
| `idea-pipeline.yaml` | Idea/planning → feature + tasks | `/sp:dev-idea`, `/sp:dev-plan` |
|
|
630
630
|
| `wrapup-pipeline.yaml` | Post-execution wrap-up | `/sp:dev-wrap`, `/sp:dev-wrapall` |
|
|
631
631
|
| `wayfinder-resolution.yaml` | Wayfinder ticket resolution loop | `spur workflow run` (free-form) |
|
|
632
|
+
| `decision-routing-example.yaml` | DecisionMaker routing example (never / evidence / omitted modes, defer → operator pause) | `spur workflow run` (authoring sample) |
|
|
632
633
|
|
|
633
634
|
### Lifecycle operations
|
|
634
635
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: expert-spur
|
|
3
|
-
description:
|
|
4
|
-
Use PROACTIVELY for "create tasks for this feature", "update all task statuses", "audit task traceability",
|
|
3
|
+
description: |-
|
|
4
|
+
Use PROACTIVELY for "create tasks for this feature", "update all task statuses", "audit task traceability", or "expert-spur". Runs multi-step corpus campaigns across tasks, features, rules, workflows, and agent specs: creation, status/section updates, audits, and hardening. Uses sp:spur-composer for workflow composition, rule tuning, and accepted proposals; sp:spur-doctor for artifact evaluation and history reflection. Run single operations via CLI; recurring loops and multi-agent coordination belong to sp:super-planner.
|
|
5
5
|
|
|
6
6
|
<example>
|
|
7
7
|
Context: Batch task status update across a feature.
|