@gobing-ai/spur 0.3.61 → 0.3.62
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.global.yaml +64 -57
- package/config/corpus-baseline.json +409 -49
- package/config/plugin-scripts.json +2 -2
- package/config/rules/boundary/config-loading-ownership.yaml +21 -0
- package/config/workflows/history-anatomy.yaml +366 -0
- package/package.json +1 -1
- package/plugins/sp/README.md +19 -6
- package/plugins/sp/commands/dev-find-issue.md +25 -46
- package/plugins/sp/commands/dev-run.md +22 -3
- package/plugins/sp/lib/artifact-digest.generated.d.mts +7 -0
- package/plugins/sp/lib/artifact-digest.generated.mjs +48 -0
- package/plugins/sp/plugin.json +1 -1
- package/plugins/sp/references/roles.md +5 -5
- package/plugins/sp/scripts/history-anatomy-cache.mjs +669 -0
- package/plugins/sp/scripts/history-anatomy-cache.ts +818 -0
- package/plugins/sp/skills/history-anatomy/SKILL.md +67 -0
- package/plugins/sp/skills/history-anatomy/references/modes.md +82 -0
- package/plugins/sp/skills/history-anatomy/references/operations.md +67 -0
- package/plugins/sp/skills/history-anatomy/references/report-contract.md +133 -0
- package/plugins/sp/skills/spur-dev/references/dev-operations.md +2 -2
- package/plugins/sp/skills/spur-dev/references/execution-batch.md +14 -1
- package/plugins/sp/skills/spur-dev/references/execution-workflow.md +7 -0
- package/plugins/sp/skills/spur-dev/references/flag-glossary.md +25 -13
- package/spur.js +1091 -823
- package/web/_astro/BoardApp.Z9jMwI9G.js +1 -0
- package/web/_astro/BoardApp.rkWGVwwK.js +178 -0
- package/web/_astro/{TaskDetail.D2N60cfE.js → TaskDetail.B7ODt_bA.js} +1 -1
- package/web/_astro/{arc.D-EfJJwf.js → arc.C5QRz6AQ.js} +1 -1
- package/web/_astro/{architectureDiagram-3BPJPVTR.CgvTTzqp.js → architectureDiagram-3BPJPVTR.CHptn8gZ.js} +1 -1
- package/web/_astro/{blockDiagram-GPEHLZMM.CnOohvvn.js → blockDiagram-GPEHLZMM.b1nEDkDw.js} +1 -1
- package/web/_astro/{c4Diagram-AAUBKEIU.BFcBGUy_.js → c4Diagram-AAUBKEIU.BWj8S_Qq.js} +1 -1
- package/web/_astro/channel.BJtn6CGV.js +1 -0
- package/web/_astro/{chunk-2J33WTMH.C-6MR-XY.js → chunk-2J33WTMH.q0BBuE1n.js} +1 -1
- package/web/_astro/{chunk-4BX2VUAB.BN4LP5AR.js → chunk-4BX2VUAB.DP2KDkAU.js} +1 -1
- package/web/_astro/{chunk-55IACEB6.tUJ_CTtZ.js → chunk-55IACEB6.CkCId72p.js} +1 -1
- package/web/_astro/{chunk-727SXJPM.BNCk-sxv.js → chunk-727SXJPM.oHWzxMot.js} +1 -1
- package/web/_astro/{chunk-AQP2D5EJ.BkpFIbNa.js → chunk-AQP2D5EJ.DkkgxfMP.js} +1 -1
- package/web/_astro/{chunk-FMBD7UC4.DcSZ87PN.js → chunk-FMBD7UC4.lmFJDvRK.js} +1 -1
- package/web/_astro/{chunk-ND2GUHAM.BkLvHFFf.js → chunk-ND2GUHAM.52jt0eHK.js} +1 -1
- package/web/_astro/{chunk-QZHKN3VN.HOdgszax.js → chunk-QZHKN3VN.Cg8KEFoD.js} +1 -1
- package/web/_astro/{classDiagram-4FO5ZUOK.CWfRiY6b.js → classDiagram-4FO5ZUOK.BuOUhxcD.js} +1 -1
- package/web/_astro/{classDiagram-v2-Q7XG4LA2.CWfRiY6b.js → classDiagram-v2-Q7XG4LA2.BuOUhxcD.js} +1 -1
- package/web/_astro/{cose-bilkent-S5V4N54A.C6j4PxoN.js → cose-bilkent-S5V4N54A.BRUU8E_0.js} +1 -1
- package/web/_astro/{dagre-BM42HDAG.BATZG1II.js → dagre-BM42HDAG.GDbfFYVV.js} +1 -1
- package/web/_astro/{diagram-2AECGRRQ.B0f5yY6x.js → diagram-2AECGRRQ.CvIDBeJF.js} +1 -1
- package/web/_astro/{diagram-5GNKFQAL.Bewupqv0.js → diagram-5GNKFQAL.DMgJjWOX.js} +1 -1
- package/web/_astro/{diagram-KO2AKTUF.C23r1tB2.js → diagram-KO2AKTUF.njjl-0AP.js} +1 -1
- package/web/_astro/{diagram-LMA3HP47.DUErdBOR.js → diagram-LMA3HP47.CcCqgP8M.js} +1 -1
- package/web/_astro/{diagram-OG6HWLK6.BubmwAjb.js → diagram-OG6HWLK6.Btqd-YVE.js} +1 -1
- package/web/_astro/{erDiagram-TEJ5UH35.BE_Qs5mv.js → erDiagram-TEJ5UH35.BbhML_Xo.js} +1 -1
- package/web/_astro/{flowDiagram-I6XJVG4X.COWdbzon.js → flowDiagram-I6XJVG4X.CkvsIgY8.js} +1 -1
- package/web/_astro/{ganttDiagram-6RSMTGT7.5EGYC4MK.js → ganttDiagram-6RSMTGT7.m8IWD_wW.js} +1 -1
- package/web/_astro/{gitGraphDiagram-PVQCEYII.bUUV7iEw.js → gitGraphDiagram-PVQCEYII.5z87HXO-.js} +1 -1
- package/web/_astro/{index.Cestp9nh.css → index.nWve6EHS.css} +1 -1
- package/web/_astro/{infoDiagram-5YYISTIA.CbiInFvz.js → infoDiagram-5YYISTIA.Bvyvsd7Q.js} +1 -1
- package/web/_astro/{ishikawaDiagram-YF4QCWOH.CB7lrSsJ.js → ishikawaDiagram-YF4QCWOH.DdWVYO87.js} +1 -1
- package/web/_astro/{journeyDiagram-JHISSGLW.rhGZgWt8.js → journeyDiagram-JHISSGLW.C3kOlYH1.js} +1 -1
- package/web/_astro/{kanban-definition-UN3LZRKU.DPeZD_lP.js → kanban-definition-UN3LZRKU.CfKTUHVC.js} +1 -1
- package/web/_astro/{linear.l60Nyp5b.js → linear.CMDHnzgX.js} +1 -1
- package/web/_astro/{mermaid.core.DmtMJcmL.js → mermaid.core.DN7-WrsP.js} +4 -4
- package/web/_astro/{mindmap-definition-RKZ34NQL.Cc47AcCn.js → mindmap-definition-RKZ34NQL.DcQxLvqG.js} +1 -1
- package/web/_astro/{pieDiagram-4H26LBE5.B8cN-S9g.js → pieDiagram-4H26LBE5.Nu-Inbw6.js} +1 -1
- package/web/_astro/{quadrantDiagram-W4KKPZXB.DY1FN89L.js → quadrantDiagram-W4KKPZXB.Dck2EChs.js} +1 -1
- package/web/_astro/{requirementDiagram-4Y6WPE33.CnM6VbV8.js → requirementDiagram-4Y6WPE33.C--E5XuW.js} +1 -1
- package/web/_astro/{sankeyDiagram-5OEKKPKP.B9DcGfNV.js → sankeyDiagram-5OEKKPKP.B_0iRNna.js} +1 -1
- package/web/_astro/{sequenceDiagram-3UESZ5HK.ymxaNlAY.js → sequenceDiagram-3UESZ5HK.PKuKr9mk.js} +1 -1
- package/web/_astro/{stateDiagram-AJRCARHV.DDOJ3d8P.js → stateDiagram-AJRCARHV.ClhGHb-O.js} +1 -1
- package/web/_astro/{stateDiagram-v2-BHNVJYJU.Ck0Nb_KY.js → stateDiagram-v2-BHNVJYJU.Bv6BBnvg.js} +1 -1
- package/web/_astro/{timeline-definition-PNZ67QCA.BNOvZwAN.js → timeline-definition-PNZ67QCA.BZm2ZvAH.js} +1 -1
- package/web/_astro/{vennDiagram-CIIHVFJN.D3k5ivSF.js → vennDiagram-CIIHVFJN.Dt6yZXry.js} +1 -1
- package/web/_astro/{wardley-L42UT6IY.BylaxVqn.js → wardley-L42UT6IY.rUs-E00M.js} +1 -1
- package/web/_astro/{wardleyDiagram-YWT4CUSO.HLNtFUm9.js → wardleyDiagram-YWT4CUSO.BcWgv4cA.js} +1 -1
- package/web/_astro/{xychartDiagram-2RQKCTM6.B-WooKSU.js → xychartDiagram-2RQKCTM6.DH-M-cX9.js} +1 -1
- package/web/index.html +2 -2
- package/plugins/sp/commands/dev-history-load.md +0 -63
- package/plugins/sp/scripts/history-load.mjs +0 -268
- package/plugins/sp/scripts/history-load.ts +0 -400
- package/web/_astro/BoardApp.BtRfVADq.js +0 -1
- package/web/_astro/BoardApp.CBIzcvqi.js +0 -178
- package/web/_astro/channel.kIu33Gui.js +0 -1
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// packages/domain/src/analytics/artifact-digest.ts
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
var ARTIFACT_ARRAY_CLASSIFICATION = {
|
|
4
|
+
byTool: "ranked",
|
|
5
|
+
bySession: "ranked",
|
|
6
|
+
topStepsByTokens: "ranked",
|
|
7
|
+
topStepsByDuration: "ranked",
|
|
8
|
+
topSteps: "ranked",
|
|
9
|
+
bottlenecks: "ranked",
|
|
10
|
+
coverage: "set",
|
|
11
|
+
daily: "set",
|
|
12
|
+
loops: "set",
|
|
13
|
+
warnings: "set",
|
|
14
|
+
pairings: "set",
|
|
15
|
+
ladderSnapshot: "set",
|
|
16
|
+
stepSupport: "set",
|
|
17
|
+
phases: "set",
|
|
18
|
+
tools: "set",
|
|
19
|
+
skills: "set",
|
|
20
|
+
sources: "set",
|
|
21
|
+
models: "set"
|
|
22
|
+
};
|
|
23
|
+
var RANKED_ARTIFACT_KEYS = new Set(Object.entries(ARTIFACT_ARRAY_CLASSIFICATION).filter(([, kind]) => kind === "ranked").map(([key]) => key));
|
|
24
|
+
function canonicalize(value, key) {
|
|
25
|
+
if (key === "generatedAt" || key === "validatedAt" || key === "baselineArtifactDigest")
|
|
26
|
+
return null;
|
|
27
|
+
if (Array.isArray(value)) {
|
|
28
|
+
const raw = value.map((v) => JSON.stringify(canonicalize(v, "")));
|
|
29
|
+
return RANKED_ARTIFACT_KEYS.has(key) ? raw : [...raw].sort();
|
|
30
|
+
}
|
|
31
|
+
if (value !== null && typeof value === "object") {
|
|
32
|
+
const out = {};
|
|
33
|
+
for (const k of Object.keys(value).sort()) {
|
|
34
|
+
out[k] = canonicalize(value[k], k);
|
|
35
|
+
}
|
|
36
|
+
return out;
|
|
37
|
+
}
|
|
38
|
+
return value;
|
|
39
|
+
}
|
|
40
|
+
function semanticArtifactDigest(artifactJson) {
|
|
41
|
+
const material = JSON.stringify(canonicalize(artifactJson, "root"));
|
|
42
|
+
return createHash("sha256").update(material).digest("hex");
|
|
43
|
+
}
|
|
44
|
+
export {
|
|
45
|
+
semanticArtifactDigest,
|
|
46
|
+
RANKED_ARTIFACT_KEYS,
|
|
47
|
+
ARTIFACT_ARRAY_CLASSIFICATION
|
|
48
|
+
};
|
package/plugins/sp/plugin.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sp",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.62",
|
|
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"]
|
|
@@ -50,7 +50,7 @@ version: 1
|
|
|
50
50
|
roles:
|
|
51
51
|
- id: scribe
|
|
52
52
|
tier: cheap
|
|
53
|
-
commands: [dev-gitmsg, dev-handover, dev-daily, dev-
|
|
53
|
+
commands: [dev-gitmsg, dev-handover, dev-daily, dev-changelog, dev-refresh, rule-add, rule-refine, workflow-add, workflow-refine, spur-init]
|
|
54
54
|
stages: [changelog]
|
|
55
55
|
- id: coder
|
|
56
56
|
tier: standard
|
|
@@ -83,19 +83,19 @@ must not sit below the highest `min_tier` among its folded stages.
|
|
|
83
83
|
- **`reviewer` (capable-1).** Verification and analysis: per-task verify/review, batch verify,
|
|
84
84
|
dogfooding, anti-pattern scanning (`rule-scan`), and the two audit commands (`dev-find-conflict`,
|
|
85
85
|
`dev-find-issue`) — those analyse rather than transcribe, which is why they sit here and not
|
|
86
|
-
under `scribe`. Folds `verify`, `review`, `dogfood`.
|
|
86
|
+
under `scribe`. `dev-find-issue` now routes through the `sp:history-anatomy` skill (mode contract + report contract). Folds `verify`, `review`, `dogfood`.
|
|
87
87
|
- **`planner` (capable-2).** The planning half: feature planning, requirement refinement (single
|
|
88
88
|
and batch), brainstorm, idea intake, batch run/parallel orchestration, next-step routing,
|
|
89
89
|
architecture survey, feature-frontier prioritization, and feature-tree restructure. Folds `plan`,
|
|
90
90
|
`refine`, `brainstorm`.
|
|
91
91
|
|
|
92
92
|
**Placement notes (directory closure, task 0535).** The decided four-row table listed 31 commands;
|
|
93
|
-
the live `plugins/sp/commands/` directory has 39
|
|
93
|
+
the live `plugins/sp/commands/` directory has 38 (39 at the time of the mapping; `dev-history-load`
|
|
94
|
+
was removed in HA-S1 0661). The six additional commands were placed by the
|
|
94
95
|
same stage logic: `dev-refineall` folds `refine` → planner; `dev-find-next` is planning-side
|
|
95
96
|
frontier work → planner; `dev-feature-change` is planning-half corpus surgery on the feature tree →
|
|
96
97
|
planner; `dev-gtd` is the execution/delivery flow → coder; `dev-find-conflict` and `dev-find-issue`
|
|
97
|
-
are audits/analysis → reviewer (same reasoning as `rule-scan`). Later additions: `dev-
|
|
98
|
-
is mechanical load+analyze orchestration → scribe; `dev-pr-review` is review orchestration —
|
|
98
|
+
are audits/analysis → reviewer (same reasoning as `rule-scan`). Later additions: `dev-pr-review` is review orchestration —
|
|
99
99
|
driving the external PR review and triaging its findings folds the `review` stage → reviewer.
|
|
100
100
|
|
|
101
101
|
**Consistency is a test, not a convention.** `plugins/sp/tests/roles.test.ts` parses this YAML and
|