@gobing-ai/spur 0.3.25 → 0.3.27
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/config/rules/recommended-pre-check.yaml +1 -0
- package/config/rules/strict/runtime-boundaries.yaml +23 -16
- package/config/rules/ui/ui-import-boundary.yaml +7 -4
- package/config/tasks/section-matrix.yaml +7 -7
- package/config/workflows/task-pipeline.yaml +9 -0
- package/package.json +1 -1
- package/spur.js +2007 -469
- package/web/_astro/BoardApp.Bk3T0o6s.js +1 -0
- package/web/_astro/BoardApp.BwAdAgK9.js +179 -0
- package/web/_astro/{TaskDetail.Dsk9DnGY.js → TaskDetail.L36slEqE.js} +1 -1
- package/web/_astro/{arc.Biv8k-OR.js → arc.CO-I_PZe.js} +1 -1
- package/web/_astro/{architectureDiagram-3BPJPVTR.BrtW5Sn7.js → architectureDiagram-3BPJPVTR.Si-A1Ncl.js} +1 -1
- package/web/_astro/{blockDiagram-GPEHLZMM.CTpFZJhW.js → blockDiagram-GPEHLZMM.CeNy_ta6.js} +1 -1
- package/web/_astro/{c4Diagram-AAUBKEIU._ZJj9H0G.js → c4Diagram-AAUBKEIU.BgN_scEU.js} +1 -1
- package/web/_astro/channel.CYdGnFHM.js +1 -0
- package/web/_astro/{chunk-2J33WTMH.DD9mDiEM.js → chunk-2J33WTMH.C3oDtmdi.js} +1 -1
- package/web/_astro/{chunk-4BX2VUAB.ENDQu3TH.js → chunk-4BX2VUAB.Bv8Fxh4H.js} +1 -1
- package/web/_astro/{chunk-55IACEB6.DLpJf8Xp.js → chunk-55IACEB6.BT-TqtV6.js} +1 -1
- package/web/_astro/{chunk-727SXJPM.BR6vsvIV.js → chunk-727SXJPM.DkGMsI0B.js} +1 -1
- package/web/_astro/{chunk-AQP2D5EJ.DGOBzXM6.js → chunk-AQP2D5EJ.B_-SqGnF.js} +1 -1
- package/web/_astro/{chunk-FMBD7UC4.DrghnRtZ.js → chunk-FMBD7UC4.DwR3skMv.js} +1 -1
- package/web/_astro/{chunk-ND2GUHAM.BqIqI3oO.js → chunk-ND2GUHAM.BaTQutFl.js} +1 -1
- package/web/_astro/{chunk-QZHKN3VN.CJ2RJt0K.js → chunk-QZHKN3VN.BJMSqqJp.js} +1 -1
- package/web/_astro/{classDiagram-4FO5ZUOK.Qu1p6crX.js → classDiagram-4FO5ZUOK.SaqCNUPF.js} +1 -1
- package/web/_astro/{classDiagram-v2-Q7XG4LA2.Qu1p6crX.js → classDiagram-v2-Q7XG4LA2.SaqCNUPF.js} +1 -1
- package/web/_astro/{cose-bilkent-S5V4N54A.7VrRetJ0.js → cose-bilkent-S5V4N54A.BkmjA_E2.js} +1 -1
- package/web/_astro/{dagre-BM42HDAG.r4lTyJXQ.js → dagre-BM42HDAG.CNUvWhrX.js} +1 -1
- package/web/_astro/{diagram-2AECGRRQ.DahExuaR.js → diagram-2AECGRRQ.C68Cg9uE.js} +1 -1
- package/web/_astro/{diagram-5GNKFQAL.B-dSm3op.js → diagram-5GNKFQAL.DbHkPLEn.js} +1 -1
- package/web/_astro/{diagram-KO2AKTUF.CQGlKa6a.js → diagram-KO2AKTUF.Dt0EdErs.js} +1 -1
- package/web/_astro/{diagram-LMA3HP47.CJ6nomD-.js → diagram-LMA3HP47.Bixs6mnm.js} +1 -1
- package/web/_astro/{diagram-OG6HWLK6.ijGl68sM.js → diagram-OG6HWLK6.B4KBI6KT.js} +1 -1
- package/web/_astro/{erDiagram-TEJ5UH35.DBAe2Iin.js → erDiagram-TEJ5UH35.C_4i9Xvx.js} +1 -1
- package/web/_astro/{flowDiagram-I6XJVG4X.z3iXF6Ku.js → flowDiagram-I6XJVG4X.CfGFczAY.js} +1 -1
- package/web/_astro/{ganttDiagram-6RSMTGT7.DP2ouiRt.js → ganttDiagram-6RSMTGT7.C2AIvtmg.js} +1 -1
- package/web/_astro/{gitGraphDiagram-PVQCEYII.DizVfgVG.js → gitGraphDiagram-PVQCEYII.HlXuGqQg.js} +1 -1
- package/web/_astro/index.D5Wqk2Tw.css +1 -0
- package/web/_astro/{infoDiagram-5YYISTIA.BPTTgL0f.js → infoDiagram-5YYISTIA.BWQJsJ4Z.js} +1 -1
- package/web/_astro/{ishikawaDiagram-YF4QCWOH.CXdMa4-b.js → ishikawaDiagram-YF4QCWOH.CCHgIHik.js} +1 -1
- package/web/_astro/{journeyDiagram-JHISSGLW.ChSKZ-1j.js → journeyDiagram-JHISSGLW.D9M6YwOJ.js} +1 -1
- package/web/_astro/{kanban-definition-UN3LZRKU.DUUlW-km.js → kanban-definition-UN3LZRKU.K20D-a1_.js} +1 -1
- package/web/_astro/{linear.AzHrSiEQ.js → linear.DeP5Qsol.js} +1 -1
- package/web/_astro/{mermaid.core.BajX78G7.js → mermaid.core.ClzxNMPU.js} +4 -4
- package/web/_astro/{mindmap-definition-RKZ34NQL.BmdUHcac.js → mindmap-definition-RKZ34NQL.CGn9RUNj.js} +1 -1
- package/web/_astro/{pieDiagram-4H26LBE5.Dh59Ur2v.js → pieDiagram-4H26LBE5.CoA92Csb.js} +1 -1
- package/web/_astro/{quadrantDiagram-W4KKPZXB.D2qYQmFj.js → quadrantDiagram-W4KKPZXB.CJ_UPjM1.js} +1 -1
- package/web/_astro/{requirementDiagram-4Y6WPE33.DW5nnrHl.js → requirementDiagram-4Y6WPE33.KkEPNNUU.js} +1 -1
- package/web/_astro/{sankeyDiagram-5OEKKPKP.CMl1PJrk.js → sankeyDiagram-5OEKKPKP.CoCWbQgh.js} +1 -1
- package/web/_astro/{sequenceDiagram-3UESZ5HK.U5dq1PA0.js → sequenceDiagram-3UESZ5HK.DUFpV3EP.js} +1 -1
- package/web/_astro/{stateDiagram-AJRCARHV.zrt55DVx.js → stateDiagram-AJRCARHV.CgWX0_9m.js} +1 -1
- package/web/_astro/{stateDiagram-v2-BHNVJYJU.CKBGQ0dG.js → stateDiagram-v2-BHNVJYJU.BKUXeGSf.js} +1 -1
- package/web/_astro/{timeline-definition-PNZ67QCA.CKAlx9rU.js → timeline-definition-PNZ67QCA.CXayAguY.js} +1 -1
- package/web/_astro/{vennDiagram-CIIHVFJN.Bgt1eF06.js → vennDiagram-CIIHVFJN.DPak_Elh.js} +1 -1
- package/web/_astro/{wardley-L42UT6IY.BF02aioC.js → wardley-L42UT6IY.t3ZlDKd0.js} +1 -1
- package/web/_astro/{wardleyDiagram-YWT4CUSO.C94wxcnJ.js → wardleyDiagram-YWT4CUSO.CwPSVASQ.js} +1 -1
- package/web/_astro/{xychartDiagram-2RQKCTM6.BwK7SRoW.js → xychartDiagram-2RQKCTM6.CJfrQgpF.js} +1 -1
- package/web/index.html +2 -2
- package/web/_astro/BoardApp.DH9wI8y7.js +0 -179
- package/web/_astro/BoardApp.DZiwQCP7.js +0 -1
- package/web/_astro/channel.Ih1_8SAH.js +0 -1
- package/web/_astro/index.D3Y4Q0mx.css +0 -1
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
$schema: "@gobing-ai/spur/schemas/rule-file.schema.json"
|
|
2
|
-
#
|
|
3
|
-
# ts-libs/.spur/rules/typescript/runtime-boundaries.yaml. NOT in
|
|
4
|
-
# recommended-pre-check: Spur consumes ts-runtime's ProcessExecutor/FileSystem
|
|
5
|
-
# seams but also does light direct fs/spawn at app edges, so these run as
|
|
6
|
-
# opt-in hygiene with explicit allowlists for the sanctioned sites.
|
|
7
|
-
# `no-direct-process-env` is intentionally omitted — config-from-env is Spur's
|
|
8
|
-
# design (packages/config, apps/cli/context).
|
|
2
|
+
# Runtime boundaries: process execution and fs IO hygiene.
|
|
9
3
|
include:
|
|
10
4
|
- "apps/**/src/**/*.ts"
|
|
11
5
|
- "packages/**/src/**/*.ts"
|
|
@@ -17,8 +11,11 @@ exclude:
|
|
|
17
11
|
|
|
18
12
|
rules:
|
|
19
13
|
- id: no-direct-process-spawn
|
|
20
|
-
description:
|
|
21
|
-
|
|
14
|
+
description: >
|
|
15
|
+
Process execution must go through @gobing-ai/ts-runtime ProcessExecutor
|
|
16
|
+
(or ts-ai-runner for agents). Do not call Bun.spawn/spawnSync, import
|
|
17
|
+
node:child_process, or pull in execa/zx at app/package sources.
|
|
18
|
+
severity: error
|
|
22
19
|
evaluator:
|
|
23
20
|
type: forbidden-import
|
|
24
21
|
config:
|
|
@@ -37,11 +34,9 @@ rules:
|
|
|
37
34
|
- "**/tests/**"
|
|
38
35
|
- "**/*.test.ts"
|
|
39
36
|
- "**/dist/**"
|
|
40
|
-
# `spur agent edit` opens the operator's $EDITOR interactively.
|
|
41
|
-
- "apps/cli/src/commands/agent.ts"
|
|
42
37
|
|
|
43
38
|
- id: no-direct-fs-io
|
|
44
|
-
description: "Prefer ts-runtime's FileSystem seam for fs IO.
|
|
39
|
+
description: "Prefer ts-runtime's FileSystem seam for fs IO."
|
|
45
40
|
severity: warning
|
|
46
41
|
evaluator:
|
|
47
42
|
type: forbidden-import
|
|
@@ -59,7 +54,19 @@ rules:
|
|
|
59
54
|
- "**/tests/**"
|
|
60
55
|
- "**/*.test.ts"
|
|
61
56
|
- "**/dist/**"
|
|
62
|
-
|
|
63
|
-
-
|
|
64
|
-
- "packages/
|
|
65
|
-
- "packages/
|
|
57
|
+
|
|
58
|
+
# Low-level system primitives (O_EXCL locks, FD byte-tailing, FS watcher, atomic registry, Vite glob fallback):
|
|
59
|
+
- "packages/domain/src/planning/locks.ts" # POSIX atomic O_EXCL file locks
|
|
60
|
+
- "packages/app/src/services/token-ledger-service.ts" # FD byte-window log tailing
|
|
61
|
+
- "packages/app/src/services/token-ledger-watcher.ts" # node:fs watch() live watcher
|
|
62
|
+
- "packages/app/src/services/project-registry.ts" # atomic projects.json persistence
|
|
63
|
+
- "apps/web/src/modules/discover.ts" # Vite/Astro module scanner fallback under bun test
|
|
64
|
+
|
|
65
|
+
# Synchronous bootstrap & path resolution:
|
|
66
|
+
- "packages/config/src/bundled-config.ts" # sync bundledConfigRoot() directory walk
|
|
67
|
+
- "packages/config/src/loader.ts" # sync resolveConfigFile() / schema specifier lookup
|
|
68
|
+
- "packages/app/src/services/project-start.ts" # sync CLI binary path checks before daemon spawn
|
|
69
|
+
|
|
70
|
+
# Synchronous template & workflow resolvers:
|
|
71
|
+
- "apps/cli/src/commands/task.ts" # sync loadTemplateContent/Bodies callbacks
|
|
72
|
+
- "apps/cli/src/workflow/make-lifecycle-adapter.ts" # sync resolveWorkflowPath lookup
|
|
@@ -34,14 +34,17 @@ rules:
|
|
|
34
34
|
description: >
|
|
35
35
|
daisyUI COMPONENT classes (btn, card, badge, modal, ...) must not appear in
|
|
36
36
|
className strings outside `apps/web/src/components/ui/`. Layout/utility classes
|
|
37
|
-
(flex, grid, gap-*, p
|
|
38
|
-
className context and word-bounded to the
|
|
39
|
-
|
|
37
|
+
(flex, grid, gap-*, p-*, select-none, [user-select:none]) are unaffected -
|
|
38
|
+
the pattern is anchored to a className context and word-bounded to the
|
|
39
|
+
component-class allowlist only. `select` is matched as a standalone class
|
|
40
|
+
token (followed by whitespace or quote) to avoid colliding with Tailwind's
|
|
41
|
+
`select-*` utilities and CSS `user-select` property. `components/ui/` stays
|
|
42
|
+
excluded: it is the sanctioned class-authoring site.
|
|
40
43
|
severity: error
|
|
41
44
|
evaluator:
|
|
42
45
|
type: rg
|
|
43
46
|
config:
|
|
44
|
-
pattern: "className=[\"'][^\"']*\\b(btn|card|badge|modal|menu|navbar|drawer|tabs|alert|dropdown|collapse|join|tooltip|loading|
|
|
47
|
+
pattern: "className=[\"'][^\"']*\\b(btn|card|badge|modal|menu|navbar|drawer|tabs|alert|dropdown|collapse|join|tooltip|loading|checkbox|toggle)\\b|className=[\"'][^\"']*\\bselect[\\s\"']"
|
|
45
48
|
include:
|
|
46
49
|
- "apps/web/src/**/*.tsx"
|
|
47
50
|
exclude:
|
|
@@ -135,25 +135,25 @@ variants:
|
|
|
135
135
|
meta:
|
|
136
136
|
backlog:
|
|
137
137
|
required: [Background]
|
|
138
|
-
optional: [Requirements, Acceptance Criteria, Q&A, Design, Plan, Solution, Testing, Review]
|
|
138
|
+
optional: [Requirements, Acceptance Criteria, Q&A, Design, Plan, Root Cause, Solution, Testing, Review]
|
|
139
139
|
todo:
|
|
140
140
|
required: [Background, Plan]
|
|
141
|
-
optional: [Requirements, Acceptance Criteria, Q&A, Design, Solution, Testing, Review]
|
|
141
|
+
optional: [Requirements, Acceptance Criteria, Q&A, Design, Root Cause, Solution, Testing, Review]
|
|
142
142
|
wip:
|
|
143
143
|
required: [Background, Plan]
|
|
144
|
-
optional: [Requirements, Acceptance Criteria, Q&A, Design, Solution, Testing, Review]
|
|
144
|
+
optional: [Requirements, Acceptance Criteria, Q&A, Design, Root Cause, Solution, Testing, Review]
|
|
145
145
|
testing:
|
|
146
146
|
required: [Background, Plan]
|
|
147
|
-
optional: [Requirements, Acceptance Criteria, Q&A, Design, Solution, Testing, Review]
|
|
147
|
+
optional: [Requirements, Acceptance Criteria, Q&A, Design, Root Cause, Solution, Testing, Review]
|
|
148
148
|
done:
|
|
149
149
|
required: [Background, Plan]
|
|
150
|
-
optional: [Requirements, Acceptance Criteria, Q&A, Design, Solution, Testing, Review]
|
|
150
|
+
optional: [Requirements, Acceptance Criteria, Q&A, Design, Root Cause, Solution, Testing, Review]
|
|
151
151
|
blocked:
|
|
152
152
|
required: [Background]
|
|
153
|
-
optional: [Requirements, Acceptance Criteria, Q&A, Design, Plan, Solution, Testing, Review]
|
|
153
|
+
optional: [Requirements, Acceptance Criteria, Q&A, Design, Plan, Root Cause, Solution, Testing, Review]
|
|
154
154
|
cancelled:
|
|
155
155
|
required: []
|
|
156
|
-
optional: [Background, Requirements, Acceptance Criteria, Q&A, Design, Plan, Solution, Testing, Review]
|
|
156
|
+
optional: [Background, Requirements, Acceptance Criteria, Q&A, Design, Plan, Root Cause, Solution, Testing, Review]
|
|
157
157
|
|
|
158
158
|
# Brainstorm template (minimal idea capture).
|
|
159
159
|
brainstorm:
|
|
@@ -20,6 +20,15 @@
|
|
|
20
20
|
kind: state-machine
|
|
21
21
|
name: task-pipeline
|
|
22
22
|
description: "Standard task execution pipeline (precheck → implement → test → review → approve → verify → record → done)"
|
|
23
|
+
# Task entity lifecycle (owned by task-lifecycle.yaml):
|
|
24
|
+
# normal: backlog → todo → wip → testing → done
|
|
25
|
+
# blocked is bidirectional with todo/wip/testing; done may reopen to wip.
|
|
26
|
+
# any non-terminal state may transition to cancelled.
|
|
27
|
+
# Guards:
|
|
28
|
+
# wip → testing: spur task check <wbs>
|
|
29
|
+
# testing → done: spur task check <wbs> --strict-core, then PASS-verdict provenance
|
|
30
|
+
# Invalid: todo → testing, todo → done, and wip → done.
|
|
31
|
+
# Pipeline states below are orchestration states, not task statuses.
|
|
23
32
|
iterationBound: 20
|
|
24
33
|
initialState: precheck
|
|
25
34
|
terminalStates:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gobing-ai/spur",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.27",
|
|
4
4
|
"description": "Spur CLI — local-first harness for mainstream coding agents: constraint checking, workflow orchestration, agent health, and history analytics. Bun-native; exposes the `spur` command.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"spur",
|