@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.
Files changed (81) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/config/config.global.yaml +64 -57
  3. package/config/corpus-baseline.json +409 -49
  4. package/config/plugin-scripts.json +2 -2
  5. package/config/rules/boundary/config-loading-ownership.yaml +21 -0
  6. package/config/workflows/history-anatomy.yaml +366 -0
  7. package/package.json +1 -1
  8. package/plugins/sp/README.md +19 -6
  9. package/plugins/sp/commands/dev-find-issue.md +25 -46
  10. package/plugins/sp/commands/dev-run.md +22 -3
  11. package/plugins/sp/lib/artifact-digest.generated.d.mts +7 -0
  12. package/plugins/sp/lib/artifact-digest.generated.mjs +48 -0
  13. package/plugins/sp/plugin.json +1 -1
  14. package/plugins/sp/references/roles.md +5 -5
  15. package/plugins/sp/scripts/history-anatomy-cache.mjs +669 -0
  16. package/plugins/sp/scripts/history-anatomy-cache.ts +818 -0
  17. package/plugins/sp/skills/history-anatomy/SKILL.md +67 -0
  18. package/plugins/sp/skills/history-anatomy/references/modes.md +82 -0
  19. package/plugins/sp/skills/history-anatomy/references/operations.md +67 -0
  20. package/plugins/sp/skills/history-anatomy/references/report-contract.md +133 -0
  21. package/plugins/sp/skills/spur-dev/references/dev-operations.md +2 -2
  22. package/plugins/sp/skills/spur-dev/references/execution-batch.md +14 -1
  23. package/plugins/sp/skills/spur-dev/references/execution-workflow.md +7 -0
  24. package/plugins/sp/skills/spur-dev/references/flag-glossary.md +25 -13
  25. package/spur.js +1091 -823
  26. package/web/_astro/BoardApp.Z9jMwI9G.js +1 -0
  27. package/web/_astro/BoardApp.rkWGVwwK.js +178 -0
  28. package/web/_astro/{TaskDetail.D2N60cfE.js → TaskDetail.B7ODt_bA.js} +1 -1
  29. package/web/_astro/{arc.D-EfJJwf.js → arc.C5QRz6AQ.js} +1 -1
  30. package/web/_astro/{architectureDiagram-3BPJPVTR.CgvTTzqp.js → architectureDiagram-3BPJPVTR.CHptn8gZ.js} +1 -1
  31. package/web/_astro/{blockDiagram-GPEHLZMM.CnOohvvn.js → blockDiagram-GPEHLZMM.b1nEDkDw.js} +1 -1
  32. package/web/_astro/{c4Diagram-AAUBKEIU.BFcBGUy_.js → c4Diagram-AAUBKEIU.BWj8S_Qq.js} +1 -1
  33. package/web/_astro/channel.BJtn6CGV.js +1 -0
  34. package/web/_astro/{chunk-2J33WTMH.C-6MR-XY.js → chunk-2J33WTMH.q0BBuE1n.js} +1 -1
  35. package/web/_astro/{chunk-4BX2VUAB.BN4LP5AR.js → chunk-4BX2VUAB.DP2KDkAU.js} +1 -1
  36. package/web/_astro/{chunk-55IACEB6.tUJ_CTtZ.js → chunk-55IACEB6.CkCId72p.js} +1 -1
  37. package/web/_astro/{chunk-727SXJPM.BNCk-sxv.js → chunk-727SXJPM.oHWzxMot.js} +1 -1
  38. package/web/_astro/{chunk-AQP2D5EJ.BkpFIbNa.js → chunk-AQP2D5EJ.DkkgxfMP.js} +1 -1
  39. package/web/_astro/{chunk-FMBD7UC4.DcSZ87PN.js → chunk-FMBD7UC4.lmFJDvRK.js} +1 -1
  40. package/web/_astro/{chunk-ND2GUHAM.BkLvHFFf.js → chunk-ND2GUHAM.52jt0eHK.js} +1 -1
  41. package/web/_astro/{chunk-QZHKN3VN.HOdgszax.js → chunk-QZHKN3VN.Cg8KEFoD.js} +1 -1
  42. package/web/_astro/{classDiagram-4FO5ZUOK.CWfRiY6b.js → classDiagram-4FO5ZUOK.BuOUhxcD.js} +1 -1
  43. package/web/_astro/{classDiagram-v2-Q7XG4LA2.CWfRiY6b.js → classDiagram-v2-Q7XG4LA2.BuOUhxcD.js} +1 -1
  44. package/web/_astro/{cose-bilkent-S5V4N54A.C6j4PxoN.js → cose-bilkent-S5V4N54A.BRUU8E_0.js} +1 -1
  45. package/web/_astro/{dagre-BM42HDAG.BATZG1II.js → dagre-BM42HDAG.GDbfFYVV.js} +1 -1
  46. package/web/_astro/{diagram-2AECGRRQ.B0f5yY6x.js → diagram-2AECGRRQ.CvIDBeJF.js} +1 -1
  47. package/web/_astro/{diagram-5GNKFQAL.Bewupqv0.js → diagram-5GNKFQAL.DMgJjWOX.js} +1 -1
  48. package/web/_astro/{diagram-KO2AKTUF.C23r1tB2.js → diagram-KO2AKTUF.njjl-0AP.js} +1 -1
  49. package/web/_astro/{diagram-LMA3HP47.DUErdBOR.js → diagram-LMA3HP47.CcCqgP8M.js} +1 -1
  50. package/web/_astro/{diagram-OG6HWLK6.BubmwAjb.js → diagram-OG6HWLK6.Btqd-YVE.js} +1 -1
  51. package/web/_astro/{erDiagram-TEJ5UH35.BE_Qs5mv.js → erDiagram-TEJ5UH35.BbhML_Xo.js} +1 -1
  52. package/web/_astro/{flowDiagram-I6XJVG4X.COWdbzon.js → flowDiagram-I6XJVG4X.CkvsIgY8.js} +1 -1
  53. package/web/_astro/{ganttDiagram-6RSMTGT7.5EGYC4MK.js → ganttDiagram-6RSMTGT7.m8IWD_wW.js} +1 -1
  54. package/web/_astro/{gitGraphDiagram-PVQCEYII.bUUV7iEw.js → gitGraphDiagram-PVQCEYII.5z87HXO-.js} +1 -1
  55. package/web/_astro/{index.Cestp9nh.css → index.nWve6EHS.css} +1 -1
  56. package/web/_astro/{infoDiagram-5YYISTIA.CbiInFvz.js → infoDiagram-5YYISTIA.Bvyvsd7Q.js} +1 -1
  57. package/web/_astro/{ishikawaDiagram-YF4QCWOH.CB7lrSsJ.js → ishikawaDiagram-YF4QCWOH.DdWVYO87.js} +1 -1
  58. package/web/_astro/{journeyDiagram-JHISSGLW.rhGZgWt8.js → journeyDiagram-JHISSGLW.C3kOlYH1.js} +1 -1
  59. package/web/_astro/{kanban-definition-UN3LZRKU.DPeZD_lP.js → kanban-definition-UN3LZRKU.CfKTUHVC.js} +1 -1
  60. package/web/_astro/{linear.l60Nyp5b.js → linear.CMDHnzgX.js} +1 -1
  61. package/web/_astro/{mermaid.core.DmtMJcmL.js → mermaid.core.DN7-WrsP.js} +4 -4
  62. package/web/_astro/{mindmap-definition-RKZ34NQL.Cc47AcCn.js → mindmap-definition-RKZ34NQL.DcQxLvqG.js} +1 -1
  63. package/web/_astro/{pieDiagram-4H26LBE5.B8cN-S9g.js → pieDiagram-4H26LBE5.Nu-Inbw6.js} +1 -1
  64. package/web/_astro/{quadrantDiagram-W4KKPZXB.DY1FN89L.js → quadrantDiagram-W4KKPZXB.Dck2EChs.js} +1 -1
  65. package/web/_astro/{requirementDiagram-4Y6WPE33.CnM6VbV8.js → requirementDiagram-4Y6WPE33.C--E5XuW.js} +1 -1
  66. package/web/_astro/{sankeyDiagram-5OEKKPKP.B9DcGfNV.js → sankeyDiagram-5OEKKPKP.B_0iRNna.js} +1 -1
  67. package/web/_astro/{sequenceDiagram-3UESZ5HK.ymxaNlAY.js → sequenceDiagram-3UESZ5HK.PKuKr9mk.js} +1 -1
  68. package/web/_astro/{stateDiagram-AJRCARHV.DDOJ3d8P.js → stateDiagram-AJRCARHV.ClhGHb-O.js} +1 -1
  69. package/web/_astro/{stateDiagram-v2-BHNVJYJU.Ck0Nb_KY.js → stateDiagram-v2-BHNVJYJU.Bv6BBnvg.js} +1 -1
  70. package/web/_astro/{timeline-definition-PNZ67QCA.BNOvZwAN.js → timeline-definition-PNZ67QCA.BZm2ZvAH.js} +1 -1
  71. package/web/_astro/{vennDiagram-CIIHVFJN.D3k5ivSF.js → vennDiagram-CIIHVFJN.Dt6yZXry.js} +1 -1
  72. package/web/_astro/{wardley-L42UT6IY.BylaxVqn.js → wardley-L42UT6IY.rUs-E00M.js} +1 -1
  73. package/web/_astro/{wardleyDiagram-YWT4CUSO.HLNtFUm9.js → wardleyDiagram-YWT4CUSO.BcWgv4cA.js} +1 -1
  74. package/web/_astro/{xychartDiagram-2RQKCTM6.B-WooKSU.js → xychartDiagram-2RQKCTM6.DH-M-cX9.js} +1 -1
  75. package/web/index.html +2 -2
  76. package/plugins/sp/commands/dev-history-load.md +0 -63
  77. package/plugins/sp/scripts/history-load.mjs +0 -268
  78. package/plugins/sp/scripts/history-load.ts +0 -400
  79. package/web/_astro/BoardApp.BtRfVADq.js +0 -1
  80. package/web/_astro/BoardApp.CBIzcvqi.js +0 -178
  81. 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
+ };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sp",
3
- "version": "0.3.61",
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-history-load, dev-changelog, dev-refresh, rule-add, rule-refine, workflow-add, workflow-refine, spur-init]
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. The six additional commands were placed by the
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-history-load`
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