@gobing-ai/spur 0.4.6 → 0.4.8

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.
@@ -7,7 +7,7 @@
7
7
  "plugins": [
8
8
  {
9
9
  "name": "sp",
10
- "version": "0.4.6",
10
+ "version": "0.4.8",
11
11
  "source": "./plugins/sp"
12
12
  }
13
13
  ]
@@ -78,7 +78,8 @@ rules:
78
78
  - "packages/app/src/services/history-anatomy.ts" # deterministic history-anatomy cache core (task 1005 R2): fsync'd tmp+rename atomic publish, readdir digest scans and sync report reads must stay byte-stable; bundled standalone for the bare-node plugin twin (mirrors agent-usage-producer.ts / history-service.ts exemptions)
79
79
  - "packages/app/src/observability/workflow-run-log-sink.ts" # sync FD append for mid-run tail-able all-in-one run log (task 0426 / feature D2); append() is sync from the observability bus
80
80
  - "packages/app/src/observability/agent-run-log.ts" # same primitive as the sink above for the per-run agent stream (task 1076 R1, ADR-132); append() is sync from the agent service's own onOutput hook, and the byte cap needs the FD position it tracks
81
- - "apps/cli/src/commands/workflow.ts" # FD byte-window tail of the mid-run run log for `workflow trace --follow` streaming (task 0428 / feature D2); readSync at offset over the observability sink's FDs
81
+ # commands/workflow.ts was split per verb (commands/workflow/<verb>.ts); the FD tail lives in trace.ts.
82
+ - "apps/cli/src/commands/workflow/trace.ts" # FD byte-window tail of the mid-run run log for `workflow trace --follow` streaming (task 0428 / feature D2); readSync at offset over the observability sink's FDs
82
83
  - "apps/web/src/modules/discover.ts" # Vite/Astro module scanner fallback under bun test
83
84
  - "packages/app/src/services/quality-gate.ts" # gate artifacts (log/findings/receipt) written directly; merged-fd gate log and fsync-free atomic writes must stay byte-stable; bundled standalone for the bare-node plugin twin (task 1006 R1; mirrors history-anatomy.ts)
84
85
  - "packages/app/src/workflow/feature-verification-run.ts" # the pass opens the run's single merged log fd (`openSync(path,'a')`) and mkdirs the run dir beside the receipt writer, exactly as the plugin entry did before the move; the fd cannot be expressed through the FileSystem seam (task 1176 R2; same class as the quality-gate exemption above)
@@ -99,8 +100,12 @@ rules:
99
100
  - "apps/cli/src/commands/serve.ts" # sync resolveServeCwd() directory validation before server startup (task 0805 R2); mirrors task.ts sync-template exemption
100
101
 
101
102
  # Synchronous template & workflow resolvers:
102
- - "apps/cli/src/commands/task.ts" # sync loadTemplateContent/Bodies callbacks
103
- - "packages/app/src/services/workflow-service.ts" # run-log/checkpoint reclamation realpath confinement (:988, :1014)
103
+ # commands/task.ts was split per verb (commands/task/<verb>.ts); the exempt fs use moved verbatim:
104
+ - "apps/cli/src/commands/task/shared.ts" # sync loadTemplateContent/Bodies callbacks
105
+ - "apps/cli/src/commands/task/batch-create.ts" # temp batch payload write + cleanup for `task batch-create` (moved verbatim from task.ts, same exemption)
106
+ # WorkflowAppService's class body was split into verb modules; the reclamation passes moved verbatim to workflow-clean-ops.ts.
107
+ - "packages/app/src/services/workflow-clean-ops.ts" # run-log/checkpoint reclamation realpath confinement (cleanRunLogs / cleanScratch, moved verbatim out of workflow-service.ts, same exemption)
108
+ - "packages/app/src/services/workflow-catalog-scan.ts" # `workflow list` catalogue scan (lstat/readdir newest-mtime walk) moved verbatim out of workflow-service.ts (same exemption)
104
109
  - "packages/app/src/workflow/run-record.ts" # confined sync run-record reads: realpath + fstat byte-window (moved from workflow-service.ts, 0962)
105
110
  - "apps/cli/src/release-ops.ts" # sync manifest/workspace reads + Bun.write rewrites inside the git release flow (task 0617); mirrors task.ts sync-template exemption
106
111
  - "apps/cli/src/version-carriers.ts" # sync manifest reads + Bun.write rewrites for registered release carriers (task 0854); mirrors release-ops.ts sync exemption
@@ -5,9 +5,15 @@ $schema: "@gobing-ai/spur/schemas/rule-file.schema.json"
5
5
  #
6
6
  # Part of the recommended-pre-check preset. Run:
7
7
  # spur rule run --preset recommended-pre-check
8
+ #
9
+ # Layout: single-file nouns live at commands/<noun>.ts; large nouns are split
10
+ # into commands/<noun>/{index.ts, <verb>.ts..., shared.ts} (one module per
11
+ # `spur <noun> <verb>`). Both shapes are covered below.
8
12
 
9
13
  include:
10
14
  - "apps/cli/src/commands/*.ts"
15
+ # Per-noun folders (commands/task/, commands/workflow/, commands/agent/).
16
+ - "apps/cli/src/commands/*/*.ts"
11
17
 
12
18
  exclude:
13
19
  # Not a command file: shared-options.ts is the option registry.
@@ -19,6 +25,9 @@ rules:
19
25
  Every CLI command file must export a registerXxxCommand(program, context)
20
26
  function matching the standard Commander.js wiring pattern.
21
27
  severity: error
28
+ exclude:
29
+ # Per-noun shared.ts holds helpers used by 2+ verbs; it registers nothing.
30
+ - "apps/cli/src/commands/*/shared.ts"
22
31
  evaluator:
23
32
  type: rg
24
33
  config:
@@ -31,6 +40,17 @@ rules:
31
40
  (ADR-091 envelope seam), toJson(), or JSON.stringify() to produce
32
41
  machine-readable output.
33
42
  severity: error
43
+ exclude:
44
+ # Per-noun index.ts only creates the noun and calls each verb's register
45
+ # function; it declares no options, so there is no --json to back.
46
+ - "apps/cli/src/commands/*/index.ts"
47
+ # Verbs that hand JSON rendering to the code that serializes it:
48
+ # doctor -> AgentService.doctor (spur-app); start/stop -> runAgentLifecycle
49
+ # in commands/agent/shared.ts (checked). loop declares no --json.
50
+ - "apps/cli/src/commands/agent/doctor.ts"
51
+ - "apps/cli/src/commands/agent/loop.ts"
52
+ - "apps/cli/src/commands/agent/start.ts"
53
+ - "apps/cli/src/commands/agent/stop.ts"
34
54
  evaluator:
35
55
  type: rg
36
56
  config:
@@ -4,7 +4,7 @@
4
4
  {
5
5
  "id": "agent-bare-binary-name",
6
6
  "wbs": "0536",
7
- "file": "packages/app/src/services/agent-service.ts",
7
+ "file": "packages/app/src/services/agent-resolver.ts",
8
8
  "keepsWorking": "a bare coding-agent binary name (codex, omp, claude with no matching agent.executors entry) remains a valid --agent value during the role transition, with a one-time warning emitted by warnBareBinaryOnce",
9
9
  "removalCondition": "no bare-binary --agent value remains in docs/, config/workflows/, or plugins/sp/ (scan for --agent <binary-name> usages against agent.executors names)"
10
10
  }
@@ -35,7 +35,7 @@ description: >
35
35
  Two-layer done gate (task 0292): this workflow's testing→done guard
36
36
  (`spur task check --as done`, F92 R3 — target-aware) is the FIRST gate.
37
37
  The CLI verdict guard (`packages/app/src/services/done-transition-guard.ts`)
38
- is the SECOND gate, invoked by `apps/cli/src/commands/task.ts` for every
38
+ is the SECOND gate, invoked by `apps/cli/src/commands/task/update.ts` for every
39
39
  `spur task update <wbs> done` call — it reads `.spur/run/<wbs>-verdict.json`
40
40
  and blocks non-PASS verdicts unless `--force-done --reason "<why>"` is
41
41
  supplied. The CLI gate covers the `--no-lifecycle` and adapter-unavailable
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gobing-ai/spur",
3
- "version": "0.4.6",
3
+ "version": "0.4.8",
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",
@@ -26,5 +26,5 @@ For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag
26
26
 
27
27
  ## Implementation
28
28
 
29
- Follow the inline procedure in [dev-operations.md](../skills/spur-dev/references/dev-operations.md#8-changelog) (changelog). This is a docs-only generator: run no quality gates (`bun run gate`, lint, typecheck, tests, `spur-check`, rules, citation checks) — a generic "verify before finishing" rule does not apply here.
29
+ Follow the inline procedure in [dev-operations.md](../skills/spur-dev/references/dev-operations.md#8-changelog) (changelog). This is a docs-only generator: run no quality gates (`bun run gate`, lint, typecheck, tests, `spur-check`, rules) — a generic "verify before finishing" rule does not apply here. The generator's own claim-verification pass (dev-operations §8, step 7: API/library claims get `<!-- src: … · HIGH|MEDIUM|LOW -->` citations) is part of the procedure, not a gate.
30
30