@gobing-ai/spur 0.3.61 → 0.3.63

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 (87) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/config/config.global.yaml +64 -57
  3. package/config/corpus-baseline.json +601 -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 +395 -0
  7. package/package.json +9 -9
  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-idea.md +3 -3
  11. package/plugins/sp/commands/dev-run.md +22 -3
  12. package/plugins/sp/lib/artifact-digest.generated.d.mts +7 -0
  13. package/plugins/sp/lib/artifact-digest.generated.mjs +48 -0
  14. package/plugins/sp/plugin.json +1 -1
  15. package/plugins/sp/references/environment-lens.md +66 -0
  16. package/plugins/sp/references/roles.md +5 -5
  17. package/plugins/sp/scripts/history-anatomy-cache.mjs +818 -0
  18. package/plugins/sp/scripts/history-anatomy-cache.ts +1014 -0
  19. package/plugins/sp/skills/dogfood-testing/references/report-template.md +30 -0
  20. package/plugins/sp/skills/history-anatomy/SKILL.md +67 -0
  21. package/plugins/sp/skills/history-anatomy/references/modes.md +82 -0
  22. package/plugins/sp/skills/history-anatomy/references/operations.md +80 -0
  23. package/plugins/sp/skills/history-anatomy/references/report-contract.md +183 -0
  24. package/plugins/sp/skills/spur-cli/references/agent.md +15 -6
  25. package/plugins/sp/skills/spur-cli/references/message.md +4 -2
  26. package/plugins/sp/skills/spur-dev/references/cross-cutting.md +6 -4
  27. package/plugins/sp/skills/spur-dev/references/dev-operations.md +2 -2
  28. package/plugins/sp/skills/spur-dev/references/execution-batch.md +14 -1
  29. package/plugins/sp/skills/spur-dev/references/execution-workflow.md +7 -0
  30. package/plugins/sp/skills/spur-dev/references/flag-glossary.md +25 -13
  31. package/spur.js +1958 -1133
  32. package/web/_astro/{BoardApp.CBIzcvqi.js → BoardApp.CKolAjUz.js} +102 -102
  33. package/web/_astro/BoardApp.DXD--ybM.js +1 -0
  34. package/web/_astro/{TaskDetail.D2N60cfE.js → TaskDetail.Bre7G4gC.js} +1 -1
  35. package/web/_astro/{arc.D-EfJJwf.js → arc.7luwOGiC.js} +1 -1
  36. package/web/_astro/{architectureDiagram-3BPJPVTR.CgvTTzqp.js → architectureDiagram-3BPJPVTR.F6KaHXp-.js} +1 -1
  37. package/web/_astro/{blockDiagram-GPEHLZMM.CnOohvvn.js → blockDiagram-GPEHLZMM.CCGHeRVi.js} +1 -1
  38. package/web/_astro/{c4Diagram-AAUBKEIU.BFcBGUy_.js → c4Diagram-AAUBKEIU.CpqewGmd.js} +1 -1
  39. package/web/_astro/channel.DxfOFf1l.js +1 -0
  40. package/web/_astro/{chunk-2J33WTMH.C-6MR-XY.js → chunk-2J33WTMH.CB9vKa5F.js} +1 -1
  41. package/web/_astro/{chunk-4BX2VUAB.BN4LP5AR.js → chunk-4BX2VUAB.ifGXoUA3.js} +1 -1
  42. package/web/_astro/{chunk-55IACEB6.tUJ_CTtZ.js → chunk-55IACEB6.VIaRo7l8.js} +1 -1
  43. package/web/_astro/{chunk-727SXJPM.BNCk-sxv.js → chunk-727SXJPM.DzPE41OS.js} +1 -1
  44. package/web/_astro/{chunk-AQP2D5EJ.BkpFIbNa.js → chunk-AQP2D5EJ.UF2QRXYF.js} +1 -1
  45. package/web/_astro/{chunk-FMBD7UC4.DcSZ87PN.js → chunk-FMBD7UC4.D2zXKa1R.js} +1 -1
  46. package/web/_astro/{chunk-ND2GUHAM.BkLvHFFf.js → chunk-ND2GUHAM.Cb9bDyvx.js} +1 -1
  47. package/web/_astro/{chunk-QZHKN3VN.HOdgszax.js → chunk-QZHKN3VN.nUKFBiLD.js} +1 -1
  48. package/web/_astro/{classDiagram-4FO5ZUOK.CWfRiY6b.js → classDiagram-4FO5ZUOK.DZg9K9mO.js} +1 -1
  49. package/web/_astro/{classDiagram-v2-Q7XG4LA2.CWfRiY6b.js → classDiagram-v2-Q7XG4LA2.DZg9K9mO.js} +1 -1
  50. package/web/_astro/{cose-bilkent-S5V4N54A.C6j4PxoN.js → cose-bilkent-S5V4N54A.D9STo90d.js} +1 -1
  51. package/web/_astro/{dagre-BM42HDAG.BATZG1II.js → dagre-BM42HDAG.D3IbwhHz.js} +1 -1
  52. package/web/_astro/{diagram-2AECGRRQ.B0f5yY6x.js → diagram-2AECGRRQ.BWTDxBe9.js} +1 -1
  53. package/web/_astro/{diagram-5GNKFQAL.Bewupqv0.js → diagram-5GNKFQAL.XnXlonHG.js} +1 -1
  54. package/web/_astro/{diagram-KO2AKTUF.C23r1tB2.js → diagram-KO2AKTUF.CywOngCO.js} +1 -1
  55. package/web/_astro/{diagram-LMA3HP47.DUErdBOR.js → diagram-LMA3HP47.DY1D21Iu.js} +1 -1
  56. package/web/_astro/{diagram-OG6HWLK6.BubmwAjb.js → diagram-OG6HWLK6.DQxb59KA.js} +1 -1
  57. package/web/_astro/{erDiagram-TEJ5UH35.BE_Qs5mv.js → erDiagram-TEJ5UH35.CF2U-pQZ.js} +1 -1
  58. package/web/_astro/{flowDiagram-I6XJVG4X.COWdbzon.js → flowDiagram-I6XJVG4X.BJK4M3in.js} +1 -1
  59. package/web/_astro/{ganttDiagram-6RSMTGT7.5EGYC4MK.js → ganttDiagram-6RSMTGT7.BSniMzdB.js} +1 -1
  60. package/web/_astro/{gitGraphDiagram-PVQCEYII.bUUV7iEw.js → gitGraphDiagram-PVQCEYII.Dxg-yRov.js} +1 -1
  61. package/web/_astro/index.BVXdIsZV.css +1 -0
  62. package/web/_astro/{infoDiagram-5YYISTIA.CbiInFvz.js → infoDiagram-5YYISTIA.BY4CgO_n.js} +1 -1
  63. package/web/_astro/{ishikawaDiagram-YF4QCWOH.CB7lrSsJ.js → ishikawaDiagram-YF4QCWOH.BmWDZtwF.js} +1 -1
  64. package/web/_astro/{journeyDiagram-JHISSGLW.rhGZgWt8.js → journeyDiagram-JHISSGLW.CpB1YWDP.js} +1 -1
  65. package/web/_astro/{kanban-definition-UN3LZRKU.DPeZD_lP.js → kanban-definition-UN3LZRKU.k-fukQX9.js} +1 -1
  66. package/web/_astro/{linear.l60Nyp5b.js → linear.BNNCobvI.js} +1 -1
  67. package/web/_astro/{mermaid.core.DmtMJcmL.js → mermaid.core.DnpzzuPU.js} +4 -4
  68. package/web/_astro/{mindmap-definition-RKZ34NQL.Cc47AcCn.js → mindmap-definition-RKZ34NQL.D9NnlLBu.js} +1 -1
  69. package/web/_astro/{pieDiagram-4H26LBE5.B8cN-S9g.js → pieDiagram-4H26LBE5.CKhoMiyC.js} +1 -1
  70. package/web/_astro/{quadrantDiagram-W4KKPZXB.DY1FN89L.js → quadrantDiagram-W4KKPZXB.BkAygRlm.js} +1 -1
  71. package/web/_astro/{requirementDiagram-4Y6WPE33.CnM6VbV8.js → requirementDiagram-4Y6WPE33.CX8ibmwc.js} +1 -1
  72. package/web/_astro/{sankeyDiagram-5OEKKPKP.B9DcGfNV.js → sankeyDiagram-5OEKKPKP.Dvurpa0Y.js} +1 -1
  73. package/web/_astro/{sequenceDiagram-3UESZ5HK.ymxaNlAY.js → sequenceDiagram-3UESZ5HK.veO8c2tk.js} +1 -1
  74. package/web/_astro/{stateDiagram-AJRCARHV.DDOJ3d8P.js → stateDiagram-AJRCARHV.DpMr4CO3.js} +1 -1
  75. package/web/_astro/{stateDiagram-v2-BHNVJYJU.Ck0Nb_KY.js → stateDiagram-v2-BHNVJYJU.CKjso86_.js} +1 -1
  76. package/web/_astro/{timeline-definition-PNZ67QCA.BNOvZwAN.js → timeline-definition-PNZ67QCA.DayoPp_2.js} +1 -1
  77. package/web/_astro/{vennDiagram-CIIHVFJN.D3k5ivSF.js → vennDiagram-CIIHVFJN.XNHf04O9.js} +1 -1
  78. package/web/_astro/{wardley-L42UT6IY.BylaxVqn.js → wardley-L42UT6IY.CpM_031g.js} +1 -1
  79. package/web/_astro/{wardleyDiagram-YWT4CUSO.HLNtFUm9.js → wardleyDiagram-YWT4CUSO.lIAjSkZJ.js} +1 -1
  80. package/web/_astro/{xychartDiagram-2RQKCTM6.B-WooKSU.js → xychartDiagram-2RQKCTM6.D8_2K6U1.js} +1 -1
  81. package/web/index.html +2 -2
  82. package/plugins/sp/commands/dev-history-load.md +0 -63
  83. package/plugins/sp/scripts/history-load.mjs +0 -268
  84. package/plugins/sp/scripts/history-load.ts +0 -400
  85. package/web/_astro/BoardApp.BtRfVADq.js +0 -1
  86. package/web/_astro/channel.kIu33Gui.js +0 -1
  87. package/web/_astro/index.Cestp9nh.css +0 -1
@@ -7,7 +7,7 @@
7
7
  "plugins": [
8
8
  {
9
9
  "name": "sp",
10
- "version": "0.3.61",
10
+ "version": "0.3.63",
11
11
  "source": "./plugins/sp"
12
12
  }
13
13
  ]
@@ -1,16 +1,20 @@
1
1
  # Spur GLOBAL configuration — `~/.config/spur/config.yaml`
2
2
  #
3
- # Seeded here by `spur init` on first run (never overwritten once it exists — you
4
- # own this file). It is the DEFAULT layer: every project's `.spur/config.yaml` is
5
- # merged OVER it, so a project config only needs to carry its delta.
3
+ # Seeded here by `spur init` on first run (never overwritten once it exists —
4
+ # you own this file). It is the DEFAULT layer: every project's
5
+ # `.spur/config.yaml` is merged OVER it, so a project config only needs to carry
6
+ # its delta.
6
7
  #
7
8
  # Merge contract (A4 / config 1.2):
8
- # - Both layers are validated by the SAME schema; each legitimately carries a subset.
9
- # - The merge is total and automatic: project layer wins over global, key by key.
10
- # - Validation runs ONCE, on the merged result a partial entry here is a legal
11
- # merge fragment, never a legal config on its own.
12
- # - `agent.executors` merges by `name`: a project restating `- name: omp` with a
13
- # different `model` overrides just that field and keeps the rest from here.
9
+ # - Both layers are validated by the SAME schema; each legitimately carries a
10
+ # subset.
11
+ # - The merge is total and automatic: project layer wins over global, key by
12
+ # key.
13
+ # - Validation runs ONCE, on the merged result a partial entry here is a
14
+ # legal merge fragment, never a legal config on its own.
15
+ # - `agent.executors` merges by `name`: a project restating `- name: omp` with
16
+ # a different `model` overrides just that field and keeps the rest from
17
+ # here.
14
18
  #
15
19
  # Only machine-wide keys belong in this file. Project-shaped keys — `name`,
16
20
  # `bootstrap`, `rules`, `redaction`, `tasks`, `features`, `agent.team` — resolve
@@ -32,26 +36,27 @@ agent:
32
36
  default: coder
33
37
 
34
38
  # Role → tier map. Resolution: role → tier → cheapest USABLE executor whose
35
- # tier >= the role's tier, climbing the ladder across gaps. Keep at least one
36
- # usable executor at or above each rung or that role fails loudly at dispatch.
37
- # Stage floors (stage-registry model_policy): changelog=cheap;
39
+ # tier >= the role's tier, climbing the ladder across gaps. Keep at least
40
+ # one usable executor at or above each rung or that role fails loudly at
41
+ # dispatch. Stage floors (stage-registry model_policy): changelog=cheap;
38
42
  # implement/test/wrap/review/refine/brainstorm=standard;
39
- # verify/dogfood=capable-1; plan=capable-2. A stage's fallback ladder
40
- # (auth / resource-exhaustion / gate-fail) only advances when a higher rung
41
- # has a usable executor — an empty rung turns a quota failure into a hang.
43
+ # verify/dogfood=capable-1; plan=capable-2. A stage's fallback ladder (auth
44
+ # / resource-exhaustion / gate-fail) only advances when a higher rung has a
45
+ # usable executor — an empty rung turns a quota failure into a hang.
42
46
  #
43
- # The vocabulary is CLOSED (task 0536): re-tier or re-stage these four, never
44
- # invent a fifth — a config naming any other key fails at load naming the
45
- # accepted four. A project may override per-field in its own `.spur/config.yaml`;
46
- # restate only what you change.
47
+ # The vocabulary is CLOSED (task 0536): re-tier or re-stage these four,
48
+ # never invent a fifth — a config naming any other key fails at load naming
49
+ # the accepted four. A project may override per-field in its own
50
+ # `.spur/config.yaml`; restate only what you change.
47
51
  #
48
52
  # ADR-078: THIS TABLE IS THE SSOT. `DEFAULT_AGENT_ROLES` in
49
- # `packages/config/src/index.ts` is a byte-identical fallback that applies only
50
- # when no config layer supplies `agent.roles` at all (the CF-safe core must
51
- # resolve roles with no filesystem). The two must stay byte-identical — a
52
- # fallback that differed would turn a missing config file into a silent
53
+ # `packages/config/src/index.ts` is a byte-identical fallback that applies
54
+ # only when no config layer supplies `agent.roles` at all (the CF-safe core
55
+ # must resolve roles with no filesystem). The two must stay byte-identical —
56
+ # a fallback that differed would turn a missing config file into a silent
53
57
  # behavior change. `plugins/sp/tests/roles.test.ts` R9 gates all three
54
- # projections (this table, the constant, and `plugins/sp/references/roles.md`).
58
+ # projections (this table, the constant, and
59
+ # `plugins/sp/references/roles.md`).
55
60
  roles:
56
61
  scribe:
57
62
  tier: cheap
@@ -66,40 +71,42 @@ agent:
66
71
  tier: capable-2
67
72
  stages: [plan, refine, brainstorm]
68
73
 
69
- # Canonical coding-agent ids (ts-ai-runner DISPLAY_ORDER, 0.4.8+):
70
- # claude, codex, gemini, pi, omp, opencode, antigravity-cli,
71
- # openclaw, hermes, grok
74
+ # Canonical coding-agent ids (ts-ai-runner DISPLAY_ORDER, 0.4.8+): claude,
75
+ # codex, gemini, pi, omp, opencode, antigravity-cli, openclaw, hermes, grok
72
76
  # Grok auth: non-empty XAI_API_KEY and/or ~/.grok/auth.json (no CLI
73
77
  # auth-status verb).
74
78
 
75
- # Named executor profiles (ADR-033 / 0343). Each pairs a canonical agent with
76
- # an explicit model override and an explicit capability tier.
77
- # `model` is pinned on every entry: omitting it defers to the agent CLI's own
79
+ # Named executor profiles (ADR-033 / 0343). Each pairs a canonical agent
80
+ # with an explicit model override and an explicit capability tier. `model`
81
+ # is pinned on every entry: omitting it defers to the agent CLI's own
78
82
  # default, which drifts with CLI upgrades and account state — pin what your
79
83
  # CLI would resolve today (`grok models`, omp config.yml modelRoles.default,
80
84
  # ~/.codex/config.toml, ~/.claude.json). The ids below are working examples,
81
85
  # not vendor defaults — re-pin for your accounts.
82
86
  #
83
- # Pairing philosophy (operator guidance, 2026-08): a `native` pair — a vendor's
84
- # model served by that vendor's own CLI (gpt-5.6-* via codex, claude-*-5 via
85
- # claude, grok-4.6 via grok, gemini-3.x via agy) — consistently outperforms the
86
- # same model routed through a third-party CLI, and belongs at the capable rungs.
87
- # `portable` models (glm-5.x, deepseek-v4-*, …) are provider-agnostic and best
88
- # carried by omp or pi at the cheap/standard rungs. The ladder below mixes both
89
- # classes on purpose; measure pairings with the history plane before promoting
90
- # a portable model into a capable rung.
91
- # Live tiers: cheap | standard | capable-1 | capable-2 | capable-3
92
- # (1=low quality within capable, 3=high). DECLARE tier — inference never
93
- # invents capable-2/3. Stage routing starts on the cheapest executor whose
94
- # tier >= min_tier; same exact tier ties break by array order.
95
- # Legacy bare `capable` is accepted at runtime as synonym for capable-1.
87
+ # Pairing philosophy (operator guidance, 2026-08): a `native` pair — a
88
+ # vendor's model served by that vendor's own CLI (gpt-5.6-* via codex,
89
+ # claude-*-5 via claude, grok-4.6 via grok, gemini-3.x via agy) —
90
+ # consistently outperforms the same model routed through a third-party CLI,
91
+ # and belongs at the capable rungs. `portable` models (glm-5.x,
92
+ # deepseek-v4-*, …) are provider-agnostic and best carried by omp or pi at
93
+ # the cheap/standard rungs. The ladder below mixes both classes on purpose;
94
+ # measure pairings with the history plane before promoting a portable model
95
+ # into a capable rung. Live tiers: cheap | standard | capable-1 | capable-2
96
+ # | capable-3 (1=low quality within capable, 3=high). DECLARE tier —
97
+ # inference never invents capable-2/3. Stage routing starts on the cheapest
98
+ # executor whose tier >= min_tier; same exact tier ties break by array
99
+ # order. Legacy bare `capable` is accepted at runtime as synonym for
100
+ # capable-1.
96
101
  #
97
102
  # Because this is the global layer, a project that wants one different model
98
- # writes only `- name: omp` + `model: …` — the agent and tier come from here.
103
+ # writes only `- name: omp` + `model: …` — the agent and tier come from
104
+ # here.
99
105
  executors:
100
- # cheap rung is optional: with none declared, scribe-role work starts one
101
- # rung up at the cheapest standard executor. Add one when transcript-heavy
102
- # mechanical commands (changelog/gitmsg/handover) get noisy on cost.
106
+ # cheap rung is optional: with none declared, scribe-role work starts
107
+ # one rung up at the cheapest standard executor. Add one when
108
+ # transcript-heavy mechanical commands (changelog/gitmsg/handover) get
109
+ # noisy on cost.
103
110
  # - name: minimax
104
111
  # agent: omp
105
112
  # model: minimax/MiniMax-M3
@@ -125,13 +132,13 @@ agent:
125
132
  model: gpt-5.6
126
133
  tier: capable-3
127
134
 
128
- # `workflows.paths` is deliberately NOT set here. Its values are search paths
129
- # resolved against a project's own root (0639 classifies it project-relative), so
130
- # a machine-wide value would point every project at a directory that mostly does
131
- # not exist. The key is present (the A4 goal names it among the shipped global
132
- # defaults) but empty: `workflow list` falls back to default `.spur/workflows/`
133
- # discovery, and the lifecycle adapter resolves bundled → project
134
- # `.spur/workflows/` on its own (make-lifecycle-adapter.ts:24, two tiers since
135
- # task 0648). Set paths per project when a project keeps workflows somewhere
136
- # non-standard.
137
- workflows: {}
135
+ # `bundled:workflows` resolves against the installed package's own config root
136
+ # at read time (BUNDLED_PATH_PREFIX in apps/cli/src/commands/workflow.ts), so
137
+ # every project discovers the shipped workflows without a machine-specific
138
+ # absolute path ever being persisted here. A project's own `workflows.paths`
139
+ # concatenates over this (loader merge), and the run-time adapter resolves
140
+ # bundled project on its own (make-lifecycle-adapter.ts, two tiers since
141
+ # task 0648).
142
+ workflows:
143
+ paths:
144
+ - bundled:workflows