@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.
- package/.claude-plugin/marketplace.json +1 -1
- package/config/rules/strict/runtime-boundaries.yaml +8 -3
- package/config/rules/surface/check-cli-surface.yaml +20 -0
- package/config/transition-shims.json +1 -1
- package/config/workflows/task-lifecycle.yaml +1 -1
- package/package.json +1 -1
- package/plugins/sp/commands/dev-changelog.md +1 -1
- package/plugins/sp/lib/inline-run.generated.mjs +1 -1
- package/plugins/sp/plugin.json +1 -1
- package/plugins/sp/skills/code-verification/SKILL.md +1 -1
- package/plugins/sp/skills/code-verification/references/verdict-schema.md +1 -1
- package/plugins/sp/skills/functional-review/SKILL.md +1 -1
- package/plugins/sp/skills/spur-dev/references/dev-operations.md +7 -3
- package/plugins/sp/skills/spur-dev/references/execution-batch.md +1 -1
- package/plugins/sp/skills/spur-dev/references/execution-worktree-setup.md +1 -1
- package/plugins/sp/skills/spur-dev/references/gate-checklists.md +1 -1
- package/spur.js +42725 -41974
|
@@ -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
|
-
|
|
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
|
-
|
|
103
|
-
- "
|
|
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-
|
|
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.
|
|
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
|
|
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
|
|