@gobing-ai/spur 0.3.77 → 0.3.80

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 (32) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/config/templates/AGENTS.md +26 -23
  3. package/config/templates/docs/00_ADR.md +13 -23
  4. package/config/templates/docs/01_PRD.md +5 -2
  5. package/config/templates/docs/02_ROADMAP.md +9 -13
  6. package/config/templates/docs/03_ARCHITECTURE.md +2 -2
  7. package/config/templates/docs/04_DESIGN.md +12 -31
  8. package/config/templates/docs/05_FEATURES.md +6 -18
  9. package/config/templates/docs/99_PROJECT_CONSTITUTION.md +162 -394
  10. package/package.json +9 -9
  11. package/plugins/sp/README.md +12 -7
  12. package/plugins/sp/agents/super-reviewer.md +43 -8
  13. package/plugins/sp/commands/dev-refineall.md +1 -0
  14. package/plugins/sp/commands/dev-run.md +1 -0
  15. package/plugins/sp/commands/dev-runall.md +1 -0
  16. package/plugins/sp/commands/dev-verifyall.md +1 -0
  17. package/plugins/sp/plugin.json +1 -1
  18. package/plugins/sp/scripts/batch-preflight.mjs +173 -2
  19. package/plugins/sp/scripts/batch-preflight.ts +257 -2
  20. package/plugins/sp/scripts/verify-answer-lint.ts +32 -9
  21. package/plugins/sp/skills/conflict-finding/SKILL.md +6 -0
  22. package/plugins/sp/skills/daily-summary/SKILL.md +1 -1
  23. package/plugins/sp/skills/doc-evolve/SKILL.md +26 -40
  24. package/plugins/sp/skills/doc-evolve/references/operations.md +17 -30
  25. package/plugins/sp/skills/spur-cli/references/tasks/verbs.md +17 -1
  26. package/plugins/sp/skills/spur-cli/references/tasks.md +31 -1
  27. package/plugins/sp/skills/spur-dev/references/ac-style-guide.md +14 -0
  28. package/plugins/sp/skills/spur-dev/references/cross-cutting.md +36 -3
  29. package/plugins/sp/skills/spur-dev/references/done-housekeeping.md +12 -0
  30. package/plugins/sp/skills/spur-dev/references/execution-batch.md +17 -0
  31. package/plugins/sp/skills/spur-dev/references/inline-pipeline-driver.md +148 -17
  32. package/spur.js +1389 -615
@@ -7,7 +7,7 @@
7
7
  "plugins": [
8
8
  {
9
9
  "name": "sp",
10
- "version": "0.3.77",
10
+ "version": "0.3.80",
11
11
  "source": "./plugins/sp"
12
12
  }
13
13
  ]
@@ -90,35 +90,39 @@ Invoke CLI: `spur <noun> <verb> … --json` (or the project’s documented dev e
90
90
 
91
91
  ## Documentation
92
92
 
93
- **Process SSOT:** `docs/99_PROJECT_CONSTITUTION.md`. Operate with **`sp:doc-evolve`**
94
- (`drift-audit`, `sync-check`, `contract-verify`, `lesson-append`).
95
-
96
- **Conflict rule:** lower number wins on content (`00` decisions, `01` scope, `99` process). Fix
97
- authority first, then derived docs, then this file.
93
+ Read [the constitution](docs/99_PROJECT_CONSTITUTION.md) before key-document edits.
94
+ It owns document responsibilities and maintenance; `00` owns architectural choices,
95
+ `01` product scope, and root `DESIGN.md` UI/UX. Use **`sp:doc-evolve`** for drift,
96
+ sync and contract checks. Follow host/operator precedence.
98
97
 
99
98
  ### Doc map
100
99
 
101
- | Doc | Owns | Authority | When |
102
- | ------ | ------ | ----------- | ------ |
103
- | `docs/00_ADR.md` | **WHY** | Authoritative (content) | Structural change; dated entry before diverging |
104
- | `docs/01_PRD.md` | **WHAT** | Authoritative on scope | New feature/command |
105
- | `docs/02_ROADMAP.md` | **WHEN** | Derived | Phase placement |
106
- | `docs/03_ARCHITECTURE.md` | **HOW** | Derived (ADR wins) | Cross-module / seam / schema |
107
- | `docs/04_DESIGN.md` | **SURFACE** (+ `docs/design/`) | Derived | Same commit as surface code (T3) |
108
- | `docs/05_FEATURES.md` | **STATUS** (+ `docs/features/`) | Derived | Feature status (T4) |
109
- | `docs/99_PROJECT_CONSTITUTION.md` | **PROCESS** | Authoritative on process | Before editing numbered docs |
110
- | `AGENTS.md` (this file) | **ENTRY** | Derived | First every session |
111
-
112
- **Routing:** decision → `00`; scope → `01`; mechanism → `03`; surface → `04`; phase → `02`;
113
- feature status `05`. Working-layer, audit, and satellite rules live in the project constitution.
100
+ | File | Owns | Update when |
101
+ | --- | --- | --- |
102
+ | `AGENTS.md` | ENTRY: orientation, commands, constraints, owner links | Essential repo facts or routing change |
103
+ | `DESIGN.md` | UI/UX: tokens, components, layout, interaction, accessibility | Shared UI design changes |
104
+ | `docs/00_ADR.md` | WHY: lasting architectural choices and tradeoffs | A meaningful cross-module boundary or invariant changes |
105
+ | `docs/01_PRD.md` | WHAT: vision, users, capability scope | Scope changes |
106
+ | `docs/02_ROADMAP.md` | WHEN: phases, dependencies, exits | Phase commitments or sequencing change |
107
+ | `docs/03_ARCHITECTURE.md` | HOW: current topology, data flow, runtime, invariants | Mechanisms or boundaries change |
108
+ | `docs/04_DESIGN.md` + `docs/design/` | SURFACE: index and non-UI contracts | CLI/API/config/schema or boundary behavior changes |
109
+ | `docs/05_FEATURES.md` + `docs/features/` | STATUS: entry to tool-owned feature records | Feature tool updates lifecycle/acceptance |
110
+ | `docs/99_PROJECT_CONSTITUTION.md` | PROCESS: stable document-governance metadata | Authorized responsibility, authority or maintenance correction |
111
+
112
+ **Placement guard:** feature approvals, task progress and test receipts do not belong in ADRs.
113
+ Preserve ADR numbers and decision history when condensing. Tasks own execution evidence;
114
+ existing context/learning storage owns lessons. Do not append either to the constitution.
115
+ A constitution edit needs a specific governance defect and operator-authorized scope (§6.8).
116
+ Update only owners whose facts changed; portable changes also update init templates.
117
+ Keep `04` an index and `05` a pointer to the generated feature index, without duplicate ledgers.
114
118
 
115
119
  ---
116
120
 
117
121
  ## Design system
118
122
 
119
- **Conditional contract:** If repository-root `DESIGN.md` exists, leverage it dynamically as the industry-standard SSOT for UI design documentation — visual language, color tokens, typography, component specs, layout, micro-animations, accessibility, and responsive patterns. Read it before planning or implementing any UI changes, and keep affected work consistent with it. If `DESIGN.md` is absent, ignore it and continue with the project's established UI conventions.
120
-
121
- **Boundary distinction:** Root `DESIGN.md` owns UI/UX design guidance; `docs/04_DESIGN.md` owns non-UI surface design by default (command signatures, flags, config schemas, DTOs, and system boundaries). When working with design teams, choose `DESIGN.md` for UI/UX visual design and `docs/04_DESIGN.md` for non-UI API/schema surfaces.
123
+ **Conditional contract:** Read root `DESIGN.md` before UI work when present; otherwise use
124
+ established UI conventions. It owns visual and interaction design. Non-UI contracts belong in
125
+ `docs/04_DESIGN.md` and its satellites; system mechanisms belong in `docs/03_ARCHITECTURE.md`.
122
126
 
123
127
  ---
124
128
 
@@ -183,8 +187,7 @@ catalog here or maintain generated per-platform capability copies in the project
183
187
  `BREAKING CHANGE:` footer.
184
188
  - Never commit secrets or `.env*`.
185
189
  - Surgical changes only — no drive-by refactors or speculative abstractions.
186
- - Surface changes keep `docs/04_DESIGN.md` in the **same commit** (T3); run `sp:doc-evolve`
187
- sync-check when unsure.
190
+ - Surface changes update their owning design satellite (T3); feature changes use the feature tool (T4).
188
191
  - **One writer per working tree.** Two agent sessions in one checkout overwrite each other silently
189
192
  — the symptom reads as a model regression. Parallel agent work uses git worktree isolation (one
190
193
  branch + one tree per agent).
@@ -1,9 +1,9 @@
1
1
  ---
2
2
  name: Architecture Decision Records
3
3
  doc: 00_ADR
4
- owns: WHY — which cross-cutting decision was made, and the one-line reason
4
+ owns: WHY — lasting architectural choices, context and tradeoffs
5
5
  authority: authoritative
6
- version: 1.0.0
6
+ version: 1.1.0
7
7
  owner: _(project owner)_
8
8
  updated_at: {{init-date}}
9
9
  read_before: any structural change
@@ -13,30 +13,20 @@ sync: [T1, T2]
13
13
 
14
14
  # Architecture Decision Records
15
15
 
16
- ## ADR-001 Adopt this doc structure
16
+ Architectural choices only; admission and editorial rules: constitution §6.1.
17
+ Record context, the chosen alternative, material tradeoffs/consequences and a detail link.
18
+ Feature approvals, task updates and test receipts stay in their owning records.
19
+ Preserve every issued ADR number, title and decision history.
17
20
 
18
- **Status:** Accepted · **Date:** {{init-date}}
21
+ <!-- No decision is pre-accepted by scaffolding. Add a real founding decision when made.
19
22
 
20
- **Decision.** Adopt the Spur doc structure (`00`–`05` + `99` constitution).
23
+ ## ADR-NNN: <Architectural choice>
21
24
 
22
- **Why.** Separates WHY (`00`) from WHAT (`01`) from HOW (`03`/`04`) — one fact, one home.
25
+ **Status:** Accepted | Accepted (design) · **Date:** YYYY-MM-DD
23
26
 
24
- **Detail:** `docs/99_PROJECT_CONSTITUTION.md` §4.1.
27
+ **Decision.** <Lasting boundary or invariant selected among meaningful alternatives.>
25
28
 
26
- <!--
27
- Add new ADRs here. Entry shape (per 99 §6.1):
29
+ **Why / tradeoff.** <Context, strongest reason, and material cost or consequence.>
28
30
 
29
- ## ADR-NNN: <Decision title, outcome-shaped>
30
-
31
- **Status:** Accepted | Accepted (design) | Superseded by ADR-MMM | Skipped · **Date:** YYYY-MM-DD
32
-
33
- **Decision.** <What was decided — the smallest complete statement of the choice.>
34
-
35
- **Why.** <One line. The single strongest reason.>
36
-
37
- **Detail:** <pointer into 03/04/plans — depth never lives here.>
38
-
39
- A decision that reverses a prior ADR adds a new entry that says "supersedes ADR-NNN".
40
- An Amendment records the decision delta + one-line reason — not the mechanism. Implementation
41
- paths, detailed semantics, and multi-paragraph rationale belong in 03/04, not in the amendment.
42
- -->
31
+ **Detail:** <Owning architecture/design reference.>
32
+ -->
@@ -3,7 +3,7 @@ name: Product Requirements Document
3
3
  doc: 01_PRD
4
4
  owns: WHAT — product vision, users, scope (in / out / deferred)
5
5
  authority: authoritative-on-scope
6
- version: 1.0.0
6
+ version: 1.1.0
7
7
  owner: _(project owner)_
8
8
  updated_at: {{init-date}}
9
9
  read_before: adding a command or feature
@@ -39,4 +39,7 @@ _(One sentence: what this product is and who it is for.)_
39
39
 
40
40
  ### Out of scope
41
41
 
42
- - _(explicitly excluded capability — prevents scope creep)_
42
+ - _(explicitly excluded capability — prevents scope creep)_
43
+
44
+ <!-- Capability scope only. Delivery state belongs in feature records, sequencing in 02,
45
+ and implementation in 03/04. Do not duplicate command catalogs or task updates. -->
@@ -3,28 +3,24 @@ name: Roadmap
3
3
  doc: 02_ROADMAP
4
4
  owns: WHEN — phases, current vs deferred, sequencing
5
5
  authority: derived
6
- version: 1.0.0
6
+ version: 1.1.0
7
7
  derived_from: [00_ADR, 01_PRD]
8
8
  owner: _(project owner)_
9
9
  updated_at: {{init-date}}
10
10
  read_before: placing work in a phase
11
11
  edit_rules: 99 §6.3
12
- sync: [T5]
12
+ sync: [T5, T6]
13
13
  ---
14
14
 
15
15
  # Roadmap
16
16
 
17
- ## Phases
17
+ Phase goals, order, dependencies and exits only. Detailed feature state belongs in the
18
+ feature tool's index; task progress belongs in task records (constitution §6.3).
18
19
 
19
- | Phase | Status | Items | Exit criterion |
20
- |-------|--------|-------|----------------|
21
- | Phase 0 — Foundation | ✅ done | _(list the real, shipped deliverable names)_ | _(what must be true to exit)_ |
22
- | Phase 1 — _(name)_ | ⏳ planned | _(items)_ | _(what must be true to exit)_ |
20
+ ## Phase 0 Foundation
23
21
 
24
- **Status legend:** done · 🔶 partial · ⏳ planned · 💤 deferred
22
+ _(Goal and dependencies, based on actual project scope.)_
25
23
 
26
- <!--
27
- Markers: [x] done · [~] partial · [ ] pending. [x]/[~] carry a one-line evidence note.
28
- When a deliverable lands under a different name than planned, rewrite the bullet to the real name.
29
- Insert sub-phases (1.5) rather than renumbering existing ones.
30
- -->
24
+ - [ ] _(Coarse deliverable; use its real name and link to the feature.)_
25
+
26
+ **Exit:** _(Observable conditions required to complete this phase.)_
@@ -3,7 +3,7 @@ name: Architecture
3
3
  doc: 03_ARCHITECTURE
4
4
  owns: HOW — module boundaries, data flow, runtime model, invariants
5
5
  authority: derived
6
- version: 1.0.0
6
+ version: 1.1.0
7
7
  derived_from: [00_ADR, 01_PRD]
8
8
  owner: _(project owner)_
9
9
  updated_at: {{init-date}}
@@ -30,5 +30,5 @@ _(Describe the primary data path: input → processing → output. Name the seam
30
30
 
31
31
  <!--
32
32
  Describes the CURRENT architecture only. Future/accepted designs go in sections explicitly
33
- titled "(accepted design — ADR-NNN; not yet built)". On conflict with 00, the ADR wins; fix here.
33
+ titled "(accepted design — ADR-NNN; not yet built)". Keep command/schema detail in 04 satellites and task delivery receipts in task records.
34
34
  -->
@@ -1,9 +1,9 @@
1
1
  ---
2
2
  name: Design
3
3
  doc: 04_DESIGN
4
- owns: SURFACE — concrete shapes: every CLI command, flag, config key, env var, table, DTO; index over docs/design/
4
+ owns: SURFACE — index of non-UI CLI, API, config, schema and boundary contracts
5
5
  authority: derived
6
- version: 1.0.0
6
+ version: 1.1.0
7
7
  derived_from: [00_ADR, 01_PRD]
8
8
  owner: _(project owner)_
9
9
  updated_at: {{init-date}}
@@ -14,38 +14,19 @@ sync: [T3, T9]
14
14
 
15
15
  # Design
16
16
 
17
- > **Index page** over `docs/design/` satellites (99 §4.5). Each surface area gets a
18
- > `docs/design/<slug>.md` satellite; this index carries the surface map + pointers.
19
- > Edit order: satellite first, then index row — same change (T9).
17
+ Non-UI contract index (constitution §6.5). Keep signatures, schemas, defaults, errors
18
+ and boundary behavior in the owning `docs/design/<slug>.md` satellite.
20
19
 
21
20
  ## UI/UX boundary & DESIGN.md
22
21
 
23
- Repository-root `DESIGN.md` owns all UI/UX design documentation (industry standard visual language, color tokens, typography, component specs, accessibility, and responsive patterns). Read and update it for UI work; keep `docs/04_DESIGN.md` focused on non-UI surface design by default. If `DESIGN.md` is absent, ignore it and follow the project's established UI conventions.
22
+ Root `DESIGN.md`, when present, owns UI/UX visual and interaction design.
23
+ Architecture mechanisms belong in `03_ARCHITECTURE.md`.
24
24
 
25
- By contrast, `docs/04_DESIGN.md` is our SSOT of non-UI surface design by default — covering CLI command signatures, flags, config schemas, DTOs, tables, and system boundaries.
25
+ ## Surface map
26
26
 
27
- When collaborating with the design team:
28
- - **UI/UX & Visual Design:** Refer to and update repository-root `DESIGN.md`.
29
- - **Non-UI Surface & API/Schema DTOs:** Refer to and update `docs/04_DESIGN.md` (and `docs/design/<slug>.md` satellites).
27
+ | Area | Contract reference |
28
+ | --- | --- |
29
+ | _(Existing CLI/API/config/schema area)_ | _(Link to its owning satellite when created)_ |
30
30
 
31
- ## 1. CLI commands
32
-
33
- ```
34
- _(command) <positional> [--flag <value>] [--json]
35
- ```
36
-
37
- | Command | Description | Design doc |
38
- |---------|-------------|------------|
39
- | _(command)_ | _(one-line description)_ | `docs/design/_(slug)_.md` |
40
-
41
- ## 2. Configuration keys
42
-
43
- | Key | Type | Default | Description |
44
- |-----|------|---------|-------------|
45
- | _(key)_ | _(type)_ | _(default)_ | _(description)_ |
46
-
47
- <!--
48
- Shapes only — rationale lives in 00/03. Behavioral notes are shapes ("resolving zero rules exits 1"
49
- — keep); justifications are not ("...because a silent gate is the worst failure mode" — cut).
50
- Transcribe command signatures from the code registrations, never from memory.
51
- -->
31
+ Update a satellite when its contract changes; update this index only when its pointers change.
32
+ Do not create a satellite merely to hold task receipts or duplicate an existing contract.
@@ -3,7 +3,7 @@ name: Features
3
3
  doc: 05_FEATURES
4
4
  owns: STATUS — feature decomposition + state; index over docs/features/
5
5
  authority: derived
6
- version: 1.0.0
6
+ version: 1.1.0
7
7
  derived_from: [00_ADR, 01_PRD]
8
8
  owner: _(project owner)_
9
9
  updated_at: {{init-date}}
@@ -14,21 +14,9 @@ sync: [T4, T9]
14
14
 
15
15
  # Features
16
16
 
17
- > **Index page** over `docs/features/` satellites (99 §4.5). Both the satellites and this index's
18
- > generated region are **tool-owned** (e.g. `spur feature`/`ftree`); edit through the tool, never
19
- > with raw file writes. Edit order: satellite first, then refresh index (T9).
17
+ Entry to feature decomposition, acceptance criteria and lifecycle state (constitution §6.6).
18
+ Use the configured feature tool to create records and generate its index.
19
+ Once generated, link that index here. Do not maintain a second status table or invent seed features.
20
20
 
21
- ## Status legend
22
-
23
- ✅ done · 🔶 partial · ⏳ planned · 💤 deferred
24
-
25
- ## Feature tree
26
-
27
- | ID | Feature | Status | Parent | Notes | Satellite |
28
- |----|---------|--------|--------|-------|-----------|
29
- | F1 | _(root feature)_ | ⏳ planned | — | _(one-line scope)_ | `docs/features/F1__(slug)_.md` |
30
-
31
- <!--
32
- Never trust a row you have not verified — check status against code before citing or building on it.
33
- One item per satellite; <feature-id> is the stable grep anchor. Renaming is a tool operation.
34
- -->
21
+ <!-- Feature records and generated index regions are tool-owned. Never raw-edit them.
22
+ Verify lifecycle claims against current task/implementation evidence before relying on them. -->