@gobing-ai/spur 0.3.57 → 0.3.58
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/corpus-baseline.json +264 -56
- package/config/workflow-composition-baseline.json +1 -1
- package/config/workflows/wrapup-pipeline.yaml +31 -1
- package/package.json +9 -9
- package/plugins/README.md +1 -1
- package/plugins/sp/README.md +1 -1
- package/plugins/sp/agents/expert-spur.md +1 -1
- package/plugins/sp/commands/dev-feature-change.md +2 -2
- package/plugins/sp/plugin.json +1 -1
- package/plugins/sp/skills/spur-cli/references/features/hierarchy-mece.md +2 -2
- package/plugins/sp/skills/spur-cli/references/features/roadmap-priority.md +1 -1
- package/plugins/sp/skills/spur-cli/references/features/verbs.md +1 -1
- package/plugins/sp/skills/spur-cli/references/features.md +5 -2
- package/plugins/sp/skills/spur-dev/references/ac-style-guide.md +1 -1
- package/plugins/sp/skills/spur-dev/references/execution-workflow.md +1 -1
- package/plugins/sp/skills/spur-dev/references/planning-workflow.md +1 -1
- package/spur.js +3523 -248
- package/web/_astro/BoardApp.CrusGeQ4.js +1 -0
- package/web/_astro/BoardApp.P8SRAD5Q.js +179 -0
- package/web/_astro/{TaskDetail.DN_RxS-2.js → TaskDetail.DHjEt5vl.js} +1 -1
- package/web/_astro/{arc.CldTHRg-.js → arc.XgRC1Ij_.js} +1 -1
- package/web/_astro/{architectureDiagram-3BPJPVTR.DQ4T9oeU.js → architectureDiagram-3BPJPVTR.DOZWrfHc.js} +1 -1
- package/web/_astro/{blockDiagram-GPEHLZMM.CGDaXH8J.js → blockDiagram-GPEHLZMM.ClQnCGf_.js} +1 -1
- package/web/_astro/{c4Diagram-AAUBKEIU.Cqsc2iub.js → c4Diagram-AAUBKEIU.CKCtUD0Y.js} +1 -1
- package/web/_astro/channel.CmK546kO.js +1 -0
- package/web/_astro/{chunk-2J33WTMH.CQSKsRmq.js → chunk-2J33WTMH.c7J8OHq5.js} +1 -1
- package/web/_astro/{chunk-4BX2VUAB.Pv1HCtp8.js → chunk-4BX2VUAB.C-A1Dv27.js} +1 -1
- package/web/_astro/{chunk-55IACEB6.-9MseOIk.js → chunk-55IACEB6.C4kGGALB.js} +1 -1
- package/web/_astro/{chunk-727SXJPM.M3OI1DF7.js → chunk-727SXJPM.Bith2NHt.js} +1 -1
- package/web/_astro/{chunk-AQP2D5EJ.NfHka5Ca.js → chunk-AQP2D5EJ.qeSXhsVY.js} +1 -1
- package/web/_astro/{chunk-FMBD7UC4.B2suYe3s.js → chunk-FMBD7UC4.DdQQnTAy.js} +1 -1
- package/web/_astro/{chunk-ND2GUHAM.BfJ7aucP.js → chunk-ND2GUHAM.BZYQVeZd.js} +1 -1
- package/web/_astro/{chunk-QZHKN3VN._582hZVc.js → chunk-QZHKN3VN.BiUWwHaV.js} +1 -1
- package/web/_astro/{classDiagram-4FO5ZUOK._tttU_jk.js → classDiagram-4FO5ZUOK.OGRhcldh.js} +1 -1
- package/web/_astro/{classDiagram-v2-Q7XG4LA2._tttU_jk.js → classDiagram-v2-Q7XG4LA2.OGRhcldh.js} +1 -1
- package/web/_astro/{cose-bilkent-S5V4N54A.C4rVATLQ.js → cose-bilkent-S5V4N54A.DxYklM_j.js} +1 -1
- package/web/_astro/{dagre-BM42HDAG.8BLRi7f9.js → dagre-BM42HDAG.BSb2dEbo.js} +1 -1
- package/web/_astro/{diagram-2AECGRRQ.D6lwUZos.js → diagram-2AECGRRQ.mOrItPK2.js} +1 -1
- package/web/_astro/{diagram-5GNKFQAL.Cl_rMiVT.js → diagram-5GNKFQAL.C99r7J3C.js} +1 -1
- package/web/_astro/{diagram-KO2AKTUF.DhMExHLp.js → diagram-KO2AKTUF.BKbnisJO.js} +1 -1
- package/web/_astro/{diagram-LMA3HP47.3OAxzH_o.js → diagram-LMA3HP47.D8FJGo4V.js} +1 -1
- package/web/_astro/{diagram-OG6HWLK6.Uh9RLucG.js → diagram-OG6HWLK6.DVBs7n4Q.js} +1 -1
- package/web/_astro/{erDiagram-TEJ5UH35.izzElG0c.js → erDiagram-TEJ5UH35.CddMTl4l.js} +1 -1
- package/web/_astro/{flowDiagram-I6XJVG4X.BlGwp5qM.js → flowDiagram-I6XJVG4X.B7WclnjQ.js} +1 -1
- package/web/_astro/{ganttDiagram-6RSMTGT7.je7Vf8dN.js → ganttDiagram-6RSMTGT7.CRh7ggvz.js} +1 -1
- package/web/_astro/{gitGraphDiagram-PVQCEYII.DNk0Ycop.js → gitGraphDiagram-PVQCEYII.du-L7V8A.js} +1 -1
- package/web/_astro/index.B4x8fe52.css +1 -0
- package/web/_astro/{infoDiagram-5YYISTIA.K2HhGyWH.js → infoDiagram-5YYISTIA.CClGl9Px.js} +1 -1
- package/web/_astro/{ishikawaDiagram-YF4QCWOH.BbbOW4IN.js → ishikawaDiagram-YF4QCWOH.BuTETIPz.js} +1 -1
- package/web/_astro/{journeyDiagram-JHISSGLW.B1UaZKqN.js → journeyDiagram-JHISSGLW.Cyg1zCiE.js} +1 -1
- package/web/_astro/{kanban-definition-UN3LZRKU.9tsw5QFd.js → kanban-definition-UN3LZRKU.aH8eDXwX.js} +1 -1
- package/web/_astro/{linear.I9dvtu-j.js → linear.paE_RY_i.js} +1 -1
- package/web/_astro/{mermaid.core.5bKJsMgf.js → mermaid.core.BhdKkI85.js} +4 -4
- package/web/_astro/{mindmap-definition-RKZ34NQL.BC5MqSn6.js → mindmap-definition-RKZ34NQL.aZNfv8Nx.js} +1 -1
- package/web/_astro/{pieDiagram-4H26LBE5.B8GIMyxD.js → pieDiagram-4H26LBE5.5psni0hC.js} +1 -1
- package/web/_astro/{quadrantDiagram-W4KKPZXB.K_aZSM_u.js → quadrantDiagram-W4KKPZXB.DcGPGrFd.js} +1 -1
- package/web/_astro/{requirementDiagram-4Y6WPE33.B_V5kzfT.js → requirementDiagram-4Y6WPE33.BwPD2lzi.js} +1 -1
- package/web/_astro/{sankeyDiagram-5OEKKPKP.DyV2quLS.js → sankeyDiagram-5OEKKPKP.B3jGVk0l.js} +1 -1
- package/web/_astro/{sequenceDiagram-3UESZ5HK.BlKvPnBv.js → sequenceDiagram-3UESZ5HK.BdWsx3LW.js} +1 -1
- package/web/_astro/{stateDiagram-AJRCARHV.C1lYUMdS.js → stateDiagram-AJRCARHV.DRpG4ClZ.js} +1 -1
- package/web/_astro/{stateDiagram-v2-BHNVJYJU.DJWjr3QV.js → stateDiagram-v2-BHNVJYJU.Su0ML9Wo.js} +1 -1
- package/web/_astro/{timeline-definition-PNZ67QCA.CYYiXVlv.js → timeline-definition-PNZ67QCA.Cg_Uv8A5.js} +1 -1
- package/web/_astro/{vennDiagram-CIIHVFJN.zYjQKa_S.js → vennDiagram-CIIHVFJN.DVouKT4b.js} +1 -1
- package/web/_astro/{wardley-L42UT6IY.BGrWTY3D.js → wardley-L42UT6IY.CexIVQli.js} +1 -1
- package/web/_astro/{wardleyDiagram-YWT4CUSO.CkXxtcI1.js → wardleyDiagram-YWT4CUSO.ChSAzcvx.js} +1 -1
- package/web/_astro/{xychartDiagram-2RQKCTM6.BhKH3KG3.js → xychartDiagram-2RQKCTM6.CN-Yp50J.js} +1 -1
- package/web/index.html +2 -2
- package/web/_astro/BoardApp.DCLSB3Zs.js +0 -179
- package/web/_astro/BoardApp.Dx5gzAhb.js +0 -1
- package/web/_astro/channel.CrBJYpxo.js +0 -1
- package/web/_astro/index.V6Q7nhed.css +0 -1
package/plugins/sp/README.md
CHANGED
|
@@ -601,7 +601,7 @@ All planning entities (tasks and features) share a common lifecycle, managed by
|
|
|
601
601
|
| **check** | `spur task check` | `spur feature check` | 4-layer readiness matrix (schema, sections, traceability, AC) |
|
|
602
602
|
| **update** | `spur task update <wbs> [status]` | `spur feature update <id> [status]` | Lifecycle transition or scalar field set |
|
|
603
603
|
| **record** | `spur task record <wbs>` | — | Write Testing/Review from a verify verdict; optional Solution backfill (never transitions to `done`) |
|
|
604
|
-
| **refresh** | `spur task refresh` | `spur feature refresh`
|
|
604
|
+
| **refresh** | `spur task refresh` | `spur feature refresh --feature <id> \| --all` | Index + feature-tree roll-up regeneration |
|
|
605
605
|
|
|
606
606
|
The **workflow** and **rule** engines have their own lifecycles (author → validate → run → trace /
|
|
607
607
|
refine), documented in their respective `sp:spur-cli` references.
|
|
@@ -71,7 +71,7 @@ Invoke `sp:spur-cli` for verb guidance and per-noun conventions:
|
|
|
71
71
|
- [ ] Run the noun's `check`/`validate` verb before and after editing (e.g. `spur task check <wbs> --json`).
|
|
72
72
|
- [ ] Run the corpus-wide sweep after batch edits: `spur task check --corpus --json` (fails on structural errors outside `config/corpus-baseline.json`).
|
|
73
73
|
- [ ] Use `spur task update --section --from-file` for all task section edits.
|
|
74
|
-
- [ ] Run the noun's `refresh` after batch operations where one exists (`spur task refresh`, `spur feature refresh`).
|
|
74
|
+
- [ ] Run the noun's scoped `refresh` after batch operations where one exists (`spur task refresh`, `spur feature refresh --feature <id>` or `--all`).
|
|
75
75
|
|
|
76
76
|
### Never
|
|
77
77
|
|
|
@@ -62,7 +62,7 @@ Do **not** fire independent dry-runs that all claim the same next id. Walk rows
|
|
|
62
62
|
3. After predicting `new_id`, add it to the occupancy set so the next sibling under the same parent gets the next free digit.
|
|
63
63
|
4. Record `mapping` and `tasksUpdated[]` from each dry-run (with multi-folder scan, tasksUpdated should list every linked WBS).
|
|
64
64
|
|
|
65
|
-
Plan `spur feature refresh` + `spur feature check --json` after apply.
|
|
65
|
+
Plan `spur feature refresh --all` + `spur feature check --json` after apply.
|
|
66
66
|
|
|
67
67
|
**Root docs/\*.md references (high-confidence only)**
|
|
68
68
|
|
|
@@ -95,7 +95,7 @@ spur feature move <old_id> --parent <new_parent> --json
|
|
|
95
95
|
After all moves (or per wave):
|
|
96
96
|
|
|
97
97
|
```bash
|
|
98
|
-
spur feature refresh --json
|
|
98
|
+
spur feature refresh --all --json
|
|
99
99
|
spur feature check --json
|
|
100
100
|
```
|
|
101
101
|
|
package/plugins/sp/plugin.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sp",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.58",
|
|
4
4
|
"description": "Spur — a local-first harness engineering toolkit that wraps mainstream coding agents with constraint checking, workflow orchestration, and history analytics.",
|
|
5
5
|
"extensions": {
|
|
6
6
|
"pi": ["./hooks/pi/guard-extension.ts"]
|
|
@@ -158,7 +158,7 @@ work under H.
|
|
|
158
158
|
- [ ] Sibling set stays MECE at that parent.
|
|
159
159
|
- [ ] Name is capability/outcome, not a package path.
|
|
160
160
|
- [ ] Will attach tasks with `--feature <new-id>` (or parent if intentionally epic-only).
|
|
161
|
-
- [ ] After create: `spur feature refresh
|
|
161
|
+
- [ ] After create: `spur feature refresh --feature <new-id>` if INDEX must update; `spur feature check <new-id>`.
|
|
162
162
|
|
|
163
163
|
## Checklist: before restructure / `/sp:dev-feature-change`
|
|
164
164
|
|
|
@@ -166,7 +166,7 @@ work under H.
|
|
|
166
166
|
- [ ] False merges rejected (name overlap ≠ one Goal).
|
|
167
167
|
- [ ] Apply via CLI (`spur feature move`, `spur task update --feature`), not raw ID edits.
|
|
168
168
|
- [ ] Dry-run reviewed; doc rewrites limited to agreed surface (e.g. root `docs/*.md`).
|
|
169
|
-
- [ ] `spur feature refresh` + `spur feature check` after apply.
|
|
169
|
+
- [ ] `spur feature refresh --all` + `spur feature check --json` after apply.
|
|
170
170
|
|
|
171
171
|
---
|
|
172
172
|
|
|
@@ -78,7 +78,7 @@ For roadmap adjustment work:
|
|
|
78
78
|
3. Present the proposed moves/status/priority changes before mutating if the blast radius spans
|
|
79
79
|
multiple features.
|
|
80
80
|
4. Apply each accepted deterministic change through `spur feature update` or `spur feature move`.
|
|
81
|
-
5. Run `spur feature refresh` and `spur feature check --json`.
|
|
81
|
+
5. Run `spur feature refresh --all` and `spur feature check --json`.
|
|
82
82
|
|
|
83
83
|
Do not add `/sp:prd-adjust` for this. The current CLI already has the deterministic primitives; the
|
|
84
84
|
PM value is the ranking and tradeoff judgment.
|
|
@@ -116,7 +116,7 @@ spur feature update <id> [status] [--field <k> --value <v>] [--section <n> --fr
|
|
|
116
116
|
spur feature advance <id> [--to <status>] [--folder] [--json]
|
|
117
117
|
spur feature list [--status <s>] [--priority <p>] [--folder] [--json]
|
|
118
118
|
spur feature move <id> [--parent <id>] [--dry-run] [--folder] [--json]
|
|
119
|
-
spur feature refresh [--feature <id>] [--folder] [--json]
|
|
119
|
+
spur feature refresh [--feature <id> | --all] [--folder] [--json]
|
|
120
120
|
spur feature sync [id] | --all [--dry-run] [--force] [--folder] [--json]
|
|
121
121
|
spur feature check [id] [--strict] [--folder] [--json]
|
|
122
122
|
```
|
|
@@ -27,7 +27,7 @@ what* or *how to write a scenario*, this skill.
|
|
|
27
27
|
| `advance <id>` | Walk forward along the legal lifecycle path to a target status | `--to <status>` (default `done`) `--folder` `--json` |
|
|
28
28
|
| `list` | List features, filtered | `--status <s>` `--priority <p>` `--folder` `--json` |
|
|
29
29
|
| `move <id>` | Re-parent a subtree (cascade-rename of descendants) | `--parent <id>` `--dry-run` `--folder` `--json` |
|
|
30
|
-
| `refresh` | Rebuild INDEX + each feature `## Tasks` table from task edges (**docs only**; no status change) | `--feature <id>` `--folder` `--json` |
|
|
30
|
+
| `refresh` | Rebuild INDEX + each feature `## Tasks` table from task edges (**docs only**; no status change) | `--feature <id>` `--all` `--folder` `--json` |
|
|
31
31
|
| `check [id]` | Validate one feature / the tree; the 4-layer gate; `--fix` repairs structural findings in place | `--strict` `--fix` `--folder` `--json` |
|
|
32
32
|
| `sync [id]` | Align feature **lifecycle status** with linked task states (real transitions + guards) | `--all` `--dry-run` `--force` `--folder` `--json` |
|
|
33
33
|
|
|
@@ -157,6 +157,9 @@ the AC coverage map. Habits that keep it green:
|
|
|
157
157
|
the files (files win). This is **not** `sync` — it does not change feature status.
|
|
158
158
|
- **Scope `refresh` to one feature** with `--feature <id>` when only one feature's task links changed
|
|
159
159
|
(INDEX.md is still regenerated for the whole tree): `spur feature refresh --feature H2`.
|
|
160
|
+
- **The broad sweep is explicit** (task 0625 R5a): bare `spur feature refresh` refuses to sweep; pass
|
|
161
|
+
`--all` to rewrite every feature's `## Tasks` region. A bare sweep silently touched unrelated
|
|
162
|
+
features during the A3 run.
|
|
160
163
|
|
|
161
164
|
## Roadmap and priority habits
|
|
162
165
|
|
|
@@ -192,7 +195,7 @@ reopens. It computes a proposal (`from → to` with a `reason`) and, unless `--d
|
|
|
192
195
|
via real lifecycle transitions (dogfood / one-active-goal / L4 gates may deny a hop).
|
|
193
196
|
|
|
194
197
|
**Not for roster tables.** A stale `## Tasks` line (e.g. task still listed `todo` after it is `done`)
|
|
195
|
-
is fixed with `spur feature refresh
|
|
198
|
+
is fixed with `spur feature refresh --feature <id>` (or explicit `--all`), not `sync`. Use `sync --dry-run` first when you only want to
|
|
196
199
|
see the proposed status hop.
|
|
197
200
|
|
|
198
201
|
```bash
|
|
@@ -193,7 +193,7 @@ During decomposition, each core scenario maps to ≥1 task:
|
|
|
193
193
|
| R3 — Login with email and password | 0043, 0044 | Auth service + UI |
|
|
194
194
|
|
|
195
195
|
The mapping is recorded in the task's `## Background` or in the feature's `## Notes`.
|
|
196
|
-
`spur feature check` warns on unmapped core scenarios after `spur feature refresh
|
|
196
|
+
`spur feature check` warns on unmapped core scenarios after `spur feature refresh --feature <id>`
|
|
197
197
|
regenerates the `## Tasks` block.
|
|
198
198
|
|
|
199
199
|
## Decision-trace → AC-scenario mapping
|
|
@@ -351,7 +351,7 @@ After a completed task, decide next action:
|
|
|
351
351
|
- **More tasks in the feature?** Pick the next one, run again.
|
|
352
352
|
- **Feature complete?** Run `spur feature update <id> verifying` to mark it for
|
|
353
353
|
acceptance verification.
|
|
354
|
-
- **All done?** Run `spur task refresh` + `spur feature refresh` to regenerate the kanban
|
|
354
|
+
- **All done?** Run `spur task refresh` + `spur feature refresh --all` to regenerate the kanban
|
|
355
355
|
and index.
|
|
356
356
|
|
|
357
357
|
## Skipping HITL
|
|
@@ -146,7 +146,7 @@ that is the pre-check's job above). Common shape failures:
|
|
|
146
146
|
- WBS collisions (already-allocated range).
|
|
147
147
|
|
|
148
148
|
Loop until the command exits 0 — then the batch is created and each task appears in the
|
|
149
|
-
feature's `## Tasks` block on next `spur feature refresh
|
|
149
|
+
feature's `## Tasks` block on next `spur feature refresh --feature <id>`.
|
|
150
150
|
|
|
151
151
|
**If you decomposed a parent task into sub-task files** (the children carry `parent_wbs`), the
|
|
152
152
|
sub-task roster is **auto-generated** — `spur task batch-create` invokes `spur task refresh-roster`
|