@gobing-ai/spur 0.3.86 → 0.3.88
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/config.example.yaml +9 -0
- package/config/plugin-scripts.json +4 -0
- package/config/rules/strict/runtime-boundaries.yaml +1 -0
- package/config/templates/feature/default.md +2 -0
- package/config/templates/task/brainstorm.md +2 -2
- package/config/templates/task/feature-impl.md +2 -2
- package/config/templates/task/issue.md +2 -2
- package/config/templates/task/meta.md +2 -2
- package/config/templates/task/review.md +2 -2
- package/config/templates/task/standard.md +2 -2
- package/config/workflow-candidates.json +13 -35
- package/config/workflows/feature-lifecycle.yaml +6 -0
- package/config/workflows/feature-verification.yaml +6 -5
- package/config/workflows/idea-pipeline.yaml +89 -36
- package/config/workflows/task-pipeline.yaml +25 -0
- package/package.json +9 -9
- package/plugins/sp/README.md +9 -6
- package/plugins/sp/commands/dev-idea.md +9 -2
- package/plugins/sp/commands/dev-refactor.md +33 -0
- package/plugins/sp/commands/dev-refine.md +25 -7
- package/plugins/sp/commands/dev-refineall.md +9 -6
- package/plugins/sp/lib/idea-handoff.generated.mjs +160 -152
- package/plugins/sp/plugin.json +1 -1
- package/plugins/sp/references/roles.md +1 -1
- package/plugins/sp/scripts/idea-coverage-check.ts +168 -0
- package/plugins/sp/scripts/inline-pipeline-parity-check.ts +114 -3
- package/plugins/sp/scripts/inline-run-setup.ts +28 -18
- package/plugins/sp/skills/brainstorm/SKILL.md +4 -0
- package/plugins/sp/skills/code-refactoring/SKILL.md +155 -0
- package/plugins/sp/skills/code-refactoring/references/finding-schema.md +74 -0
- package/plugins/sp/skills/code-refactoring/references/fix-ladder.md +52 -0
- package/plugins/sp/skills/code-refactoring/references/focus-detection.md +44 -0
- package/plugins/sp/skills/code-refactoring/references/refactor-finding.schema.json +95 -0
- package/plugins/sp/skills/spec-decomposition/references/decomposition.md +23 -16
- package/plugins/sp/skills/spur-cli/references/agent.md +92 -9
- package/plugins/sp/skills/spur-cli/references/features/acceptance-criteria.md +4 -2
- package/plugins/sp/skills/spur-cli/references/features.md +6 -1
- package/plugins/sp/skills/spur-cli/references/workflows/authoring-workflows.md +2 -2
- package/plugins/sp/skills/spur-cli/references/workflows/operations.md +3 -3
- package/plugins/sp/skills/spur-cli/references/workflows/workflow-fit-and-tuning.md +1 -1
- package/plugins/sp/skills/spur-dev/SKILL.md +33 -33
- package/plugins/sp/skills/spur-dev/references/ac-style-guide.md +24 -0
- package/plugins/sp/skills/spur-dev/references/dev-operations.md +99 -26
- package/plugins/sp/skills/spur-dev/references/flag-glossary.md +27 -5
- package/plugins/sp/skills/spur-dev/references/idea-evaluation.md +11 -1
- package/plugins/sp/skills/spur-dev/references/inline-pipeline-driver.md +33 -1
- package/plugins/sp/skills/spur-dev/references/planning-workflow.md +10 -6
- package/plugins/sp/skills/taste-refactoring-api/SKILL.md +44 -1
- package/plugins/sp/skills/taste-refactoring-api/references/protocol-modes.md +31 -0
- package/plugins/sp/skills/taste-refactoring-architect/SKILL.md +43 -0
- package/plugins/sp/skills/taste-refactoring-tests/SKILL.md +42 -0
- package/plugins/sp/skills/taste-refactoring-ui/SKILL.md +43 -0
- package/schemas/spur-config.schema.json +14 -2
- package/schemas/task-batch.schema.json +2 -2
- package/spur.js +2012 -487
- package/web/_astro/{BoardApp.yBBcFXWP.js → BoardApp.CDUcHlTJ.js} +67 -67
- package/web/_astro/BoardApp.CaCGU_uX.js +1 -0
- package/web/_astro/{TaskDetail.DqFJbRFc.js → TaskDetail.DwTmbQp5.js} +1 -1
- package/web/_astro/{arc.DL-BpHoi.js → arc.BzF71EFI.js} +1 -1
- package/web/_astro/{architectureDiagram-3BPJPVTR.9IdQYyDq.js → architectureDiagram-3BPJPVTR.jvdDahWM.js} +1 -1
- package/web/_astro/{blockDiagram-GPEHLZMM.BKsFCqTl.js → blockDiagram-GPEHLZMM.zSg4AmFD.js} +1 -1
- package/web/_astro/{c4Diagram-AAUBKEIU.DhwI0dh1.js → c4Diagram-AAUBKEIU.BkUIUQWH.js} +1 -1
- package/web/_astro/channel.SSVY0JPQ.js +1 -0
- package/web/_astro/{chunk-2J33WTMH.B3QVmQ9S.js → chunk-2J33WTMH.DvfQ_f50.js} +1 -1
- package/web/_astro/{chunk-4BX2VUAB.DBSuqs9F.js → chunk-4BX2VUAB.DuI4gQqX.js} +1 -1
- package/web/_astro/{chunk-55IACEB6.BSYTWAYD.js → chunk-55IACEB6.D3BWBOpF.js} +1 -1
- package/web/_astro/{chunk-727SXJPM.cWVuxXfS.js → chunk-727SXJPM.3QSi0a9M.js} +1 -1
- package/web/_astro/{chunk-AQP2D5EJ.DpU_Ob3d.js → chunk-AQP2D5EJ.xazCQrAF.js} +1 -1
- package/web/_astro/{chunk-FMBD7UC4.BykFkyji.js → chunk-FMBD7UC4.B2g6u4rA.js} +1 -1
- package/web/_astro/{chunk-ND2GUHAM.DwgHlMdY.js → chunk-ND2GUHAM.wWwWs99t.js} +1 -1
- package/web/_astro/{chunk-QZHKN3VN.CusXUGWM.js → chunk-QZHKN3VN.BD5g3qa9.js} +1 -1
- package/web/_astro/{classDiagram-4FO5ZUOK.fx0ObzkN.js → classDiagram-4FO5ZUOK.C7CzCdsX.js} +1 -1
- package/web/_astro/{classDiagram-v2-Q7XG4LA2.fx0ObzkN.js → classDiagram-v2-Q7XG4LA2.C7CzCdsX.js} +1 -1
- package/web/_astro/{cose-bilkent-S5V4N54A.Z4HgOlsd.js → cose-bilkent-S5V4N54A.Xyiau0gw.js} +1 -1
- package/web/_astro/{cynefin-OW5HDTMX.B5dIZHJu.js → cynefin-OW5HDTMX.BeC5MWas.js} +1 -1
- package/web/_astro/{dagre-BM42HDAG.DT70Q_Yw.js → dagre-BM42HDAG.yZbMN9vc.js} +1 -1
- package/web/_astro/{diagram-2AECGRRQ.DqHA3XBF.js → diagram-2AECGRRQ.Cmo2zQM-.js} +1 -1
- package/web/_astro/{diagram-5GNKFQAL.BmCem957.js → diagram-5GNKFQAL.D033eSVi.js} +1 -1
- package/web/_astro/{diagram-KO2AKTUF.sn0-hrE0.js → diagram-KO2AKTUF.CR6k3Y3G.js} +1 -1
- package/web/_astro/{diagram-LMA3HP47.BSHe9tVc.js → diagram-LMA3HP47.x7mwu8jz.js} +1 -1
- package/web/_astro/{diagram-OG6HWLK6.DHIc-86k.js → diagram-OG6HWLK6.D8aTTvUr.js} +1 -1
- package/web/_astro/{erDiagram-TEJ5UH35.Bxayrs7v.js → erDiagram-TEJ5UH35.BoBqcKXQ.js} +1 -1
- package/web/_astro/{flowDiagram-I6XJVG4X.BkzoE_5I.js → flowDiagram-I6XJVG4X.D3mTQdrU.js} +1 -1
- package/web/_astro/{ganttDiagram-6RSMTGT7.okT6CvTo.js → ganttDiagram-6RSMTGT7.H-cqgIh-.js} +1 -1
- package/web/_astro/{gitGraphDiagram-PVQCEYII.CJuYbhC7.js → gitGraphDiagram-PVQCEYII.B6s9zbfC.js} +1 -1
- package/web/_astro/{infoDiagram-5YYISTIA.RqLy7nBo.js → infoDiagram-5YYISTIA.BzgCoV6P.js} +1 -1
- package/web/_astro/{ishikawaDiagram-YF4QCWOH.BwIcoagw.js → ishikawaDiagram-YF4QCWOH.BZzVhy1-.js} +1 -1
- package/web/_astro/{journeyDiagram-JHISSGLW.UB1VbWtH.js → journeyDiagram-JHISSGLW.BV3195Py.js} +1 -1
- package/web/_astro/{kanban-definition-UN3LZRKU.AaxMKpTk.js → kanban-definition-UN3LZRKU.BjRd2DWz.js} +1 -1
- package/web/_astro/{linear.Nv_xOUjP.js → linear.BILTgS5N.js} +1 -1
- package/web/_astro/{mermaid.core.Bc4LqQgX.js → mermaid.core.DBy_WKeW.js} +4 -4
- package/web/_astro/{mindmap-definition-RKZ34NQL.oKUvU_qi.js → mindmap-definition-RKZ34NQL.BiEjaI4-.js} +1 -1
- package/web/_astro/{pieDiagram-4H26LBE5.DQk0oo03.js → pieDiagram-4H26LBE5.i_8V5pIn.js} +1 -1
- package/web/_astro/{quadrantDiagram-W4KKPZXB.BdDjESDa.js → quadrantDiagram-W4KKPZXB.BWaW3MHn.js} +1 -1
- package/web/_astro/{requirementDiagram-4Y6WPE33.C2u9hUeH.js → requirementDiagram-4Y6WPE33.CzddBbtg.js} +1 -1
- package/web/_astro/{sankeyDiagram-5OEKKPKP.CDEoiJST.js → sankeyDiagram-5OEKKPKP.X2ww0e-D.js} +1 -1
- package/web/_astro/{sequenceDiagram-3UESZ5HK.D_hT_GAT.js → sequenceDiagram-3UESZ5HK.DSA4kTcc.js} +1 -1
- package/web/_astro/{stateDiagram-AJRCARHV.DI8RYG0b.js → stateDiagram-AJRCARHV.D0DtFSpR.js} +1 -1
- package/web/_astro/{stateDiagram-v2-BHNVJYJU.Bkxz4DnP.js → stateDiagram-v2-BHNVJYJU.BfQq0zQv.js} +1 -1
- package/web/_astro/{timeline-definition-PNZ67QCA.DSY-kH3-.js → timeline-definition-PNZ67QCA.Dmlrgi1m.js} +1 -1
- package/web/_astro/{vennDiagram-CIIHVFJN.CpaDtuGr.js → vennDiagram-CIIHVFJN.D5mpl00Z.js} +1 -1
- package/web/_astro/{wardleyDiagram-YWT4CUSO.DujQWvo8.js → wardleyDiagram-YWT4CUSO.Df4BdzO4.js} +1 -1
- package/web/_astro/{xychartDiagram-2RQKCTM6.DcM5Y4b9.js → xychartDiagram-2RQKCTM6.DiTRreKN.js} +1 -1
- package/web/index.html +1 -1
- package/web/_astro/BoardApp.CJiqp5pS.js +0 -1
- package/web/_astro/channel.CX5453qQ.js +0 -1
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: taste-refactoring-tests
|
|
3
3
|
description: Refactor unit tests for failure sensitivity, deterministic confidence, and regression protection without mock-heavy brittle tests or vanity coverage. Backs test suite quality audits.
|
|
4
|
+
license: Apache-2.0
|
|
5
|
+
metadata:
|
|
6
|
+
author: spur
|
|
7
|
+
version: "1.0"
|
|
8
|
+
platforms: "claude-code,codex,openclaw,opencode,antigravity"
|
|
9
|
+
category: execution
|
|
10
|
+
interactions:
|
|
11
|
+
- technique
|
|
12
|
+
operations:
|
|
13
|
+
- refactor-tests
|
|
14
|
+
openclaw:
|
|
15
|
+
emoji: "🧪"
|
|
4
16
|
---
|
|
5
17
|
|
|
6
18
|
# taste-refactoring-tests
|
|
@@ -480,3 +492,33 @@ A test refactor is complete only when:
|
|
|
480
492
|
- delivery speed is not degraded without a justified risk trade-off.
|
|
481
493
|
|
|
482
494
|
The goal is **earned confidence**: green means something because the suite has demonstrated that it can turn red when the product is wrong.
|
|
495
|
+
|
|
496
|
+
## Spur contract
|
|
497
|
+
|
|
498
|
+
Machine-facing adapter for `sp:code-refactoring` dispatch (feature H13). Everything above is the
|
|
499
|
+
lens's native output and is unchanged; this section only maps it to the shared finding schema.
|
|
500
|
+
|
|
501
|
+
**Inputs received:** a scope path, an optional change description, and the `tests` focus. Read
|
|
502
|
+
first: the intervention ladder, Confidence Contract, and review severity above, then
|
|
503
|
+
`../code-refactoring/references/finding-schema.md` for shared field semantics.
|
|
504
|
+
|
|
505
|
+
**Native finding → schema mapping:** `ID` → `id` as `RF-tests-<nnn>`; `Action` (T0–T7) → `rung`
|
|
506
|
+
verbatim; `Severity` → `severity` via the map below; `Evidence` → `evidence` as `{file, line}`
|
|
507
|
+
entries inside scope; `Why it matters` → `title`; `Proposed change` → `proposal` (imperative);
|
|
508
|
+
`Expected regression-detection improvement` → folded into `proposal`; new findings start at
|
|
509
|
+
`status: open`.
|
|
510
|
+
|
|
511
|
+
**Severity mapping (design §5):** native P0 → `P1`; P1 → `P2`; P2 → `P3`; P3 → `P4`.
|
|
512
|
+
|
|
513
|
+
**Preserved-behavior inventory (required before proposals):** emit the Confidence Contract —
|
|
514
|
+
critical business rules, compatibility contracts, authorization/security decisions, data
|
|
515
|
+
integrity invariants, error semantics, and incident regressions the suite must keep protecting —
|
|
516
|
+
before the first finding.
|
|
517
|
+
|
|
518
|
+
**Preservation class:** T0 and rungs that keep or add protection (fixture cleanup, adding a
|
|
519
|
+
missing test) → `preserving`; removing a test or test file (T1) → `cutting`; weakening or
|
|
520
|
+
semantically changing existing assertions → `breaking`.
|
|
521
|
+
|
|
522
|
+
**Stop rules:** unknown protection is a risk, never permission to delete; a `cutting`/`breaking`
|
|
523
|
+
finding is never `fix_eligibility: auto` and never below `P2`; tests are never removed or
|
|
524
|
+
weakened by an `auto` fix; anything outside the scope path is not a finding.
|
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: taste-refactoring-ui
|
|
3
3
|
description: Design, review, and refactor UI hierarchy, layout, typography, spacing, color, and interactions.
|
|
4
|
+
license: Apache-2.0
|
|
5
|
+
metadata:
|
|
6
|
+
author: spur
|
|
7
|
+
version: "1.0"
|
|
8
|
+
platforms: "claude-code,codex,openclaw,opencode,antigravity"
|
|
9
|
+
category: execution
|
|
10
|
+
interactions:
|
|
11
|
+
- technique
|
|
12
|
+
operations:
|
|
13
|
+
- refactor-ui
|
|
14
|
+
openclaw:
|
|
15
|
+
emoji: "🎨"
|
|
4
16
|
---
|
|
5
17
|
|
|
6
18
|
# taste-refactoring-ui
|
|
@@ -288,3 +300,34 @@ For deeper reasoning and daily use, read:
|
|
|
288
300
|
- `references/refactoring-ui-playbook.md` — chapter-by-chapter distilled guidance.
|
|
289
301
|
- `checklists/daily-ui-review.md` — fast audit and ship checklist.
|
|
290
302
|
- `examples/review-template.md` — reusable UI critique response structure.
|
|
303
|
+
|
|
304
|
+
## Spur contract
|
|
305
|
+
|
|
306
|
+
Machine-facing adapter for `sp:code-refactoring` dispatch (feature H13). Everything above is the
|
|
307
|
+
lens's native output and is unchanged; this section only maps it to the shared finding schema.
|
|
308
|
+
|
|
309
|
+
**Inputs received:** a scope path, an optional change description, and the `ui` focus. Read
|
|
310
|
+
first: the refactoring protocol and output contract above, then
|
|
311
|
+
`../code-refactoring/references/finding-schema.md` for shared field semantics.
|
|
312
|
+
|
|
313
|
+
**Native finding → schema mapping:** each issue → `id` as `RF-ui-<nnn>`; the pass that owns it
|
|
314
|
+
(hierarchy, spacing, typography, color, states) → `rung`; `Observation` + `Refactor` → `title`
|
|
315
|
+
and `proposal` (imperative); the cited component/file and line → `evidence` as `{file, line}`
|
|
316
|
+
entries inside scope; the `System rule` → folded into `proposal`; new findings start at
|
|
317
|
+
`status: open`.
|
|
318
|
+
|
|
319
|
+
**Severity mapping (design §5):** native P0 (task failure) → `P1`; P1 (hierarchy/structure) →
|
|
320
|
+
`P2`; P2 (system inconsistency) → `P3`; P3 (polish) → `P4`.
|
|
321
|
+
|
|
322
|
+
**Preserved-behavior inventory (required before proposals):** emit the controls and interactions
|
|
323
|
+
in scope — primary/secondary actions, navigation, form semantics, accessible names, states —
|
|
324
|
+
before the first finding.
|
|
325
|
+
|
|
326
|
+
**Preservation class:** token normalization and layout/typography consolidation with identical
|
|
327
|
+
function → `preserving`; adding a missing state or a11y attribute → `preserving`; removing or
|
|
328
|
+
merging a control or interaction → `cutting`; changes to user-visible flows or behavior →
|
|
329
|
+
`breaking`.
|
|
330
|
+
|
|
331
|
+
**Stop rules:** meaning is never carried by color alone; preserve component semantics and
|
|
332
|
+
accessibility; a `cutting`/`breaking` finding is never `fix_eligibility: auto` and never below
|
|
333
|
+
`P2`; anything outside the scope path is not a finding.
|
|
@@ -167,8 +167,20 @@
|
|
|
167
167
|
"description": "Capability tier for stage-registry adaptive model routing (ADR-033, 0343). Live values: cheap | standard | capable-1 | capable-2 | capable-3 (1=low output quality, 3=high within the capable band). A stage starts on the cheapest eligible executor meeting its model_policy min_tier. Bare legacy `capable` is accepted at runtime (zod preprocess \u2192 capable-1) during the deprecation window but is not part of this editor enum."
|
|
168
168
|
},
|
|
169
169
|
"disabled": {
|
|
170
|
-
"
|
|
171
|
-
"
|
|
170
|
+
"description": "Routing kill-switch (111; ownership widened 0890): a disabled profile never serves a role, team, stage, or explicit selection, and doctor inventories it without probing. Omitted = enabled. Bare `true` is operator-owned (only humans write booleans); automatic writers emit the object form carrying owner (operator|quota|probe), since (RFC 3339) and reason.",
|
|
171
|
+
"anyOf": [
|
|
172
|
+
{ "type": "boolean" },
|
|
173
|
+
{
|
|
174
|
+
"type": "object",
|
|
175
|
+
"additionalProperties": false,
|
|
176
|
+
"required": ["owner", "since", "reason"],
|
|
177
|
+
"properties": {
|
|
178
|
+
"owner": { "enum": ["operator", "quota", "probe"] },
|
|
179
|
+
"since": { "type": "string", "format": "date-time", "minLength": 1 },
|
|
180
|
+
"reason": { "type": "string", "minLength": 1 }
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
]
|
|
172
184
|
}
|
|
173
185
|
}
|
|
174
186
|
}
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
},
|
|
21
21
|
"requirements": {
|
|
22
22
|
"type": "string",
|
|
23
|
-
"description": "R-
|
|
23
|
+
"description": "Pre-filled ### Requirements body: one R-item per line, exactly `- [ ] R1. <text>` (checkbox + `R<n>.`); any other form fails `spur task check`."
|
|
24
24
|
},
|
|
25
25
|
"design": {
|
|
26
26
|
"type": "string",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
},
|
|
33
33
|
"acceptance_criteria": {
|
|
34
34
|
"type": "string",
|
|
35
|
-
"description": "Pre-filled ### Acceptance Criteria body (
|
|
35
|
+
"description": "Pre-filled ### Acceptance Criteria body: items numbered AC1, AC2, … (never R<n>, the Requirements namespace): `- [ ] AC1 — <feature scenario title without its R-number>` bullets or `Scenario: AC1 — <title>` blocks (L4.uncovered-task-scenario matches the title after the prefix); `(req: R<n>)` binds a task requirement; task-only checks go in prose after the bullets."
|
|
36
36
|
},
|
|
37
37
|
"feature_id": {
|
|
38
38
|
"type": "string",
|