@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
|
@@ -324,7 +324,7 @@ node "$RESIDUAL" fold <wbs>
|
|
|
324
324
|
> `review` coordinator (`/sp:dev-review` → `sp:super-reviewer`), which merges
|
|
325
325
|
> `functional-review` + `code-verification` review mode + `code-improvement` fragments. The
|
|
326
326
|
> `record` step backfills `## Review` from the verdict artifact **only** if the section is bare
|
|
327
|
-
> (`sectionIsBare` guard, `task-
|
|
327
|
+
> (`sectionIsBare` guard, `task-section-bodies.ts`) — a standalone compatibility fallback, never an
|
|
328
328
|
> overwrite of authored Review. Writing `## Review` here destroys the review step's
|
|
329
329
|
> three-dimensional findings.
|
|
330
330
|
|
|
@@ -161,7 +161,7 @@ every Testing/Solution anchor against the repo root. A basename citation — `de
|
|
|
161
161
|
`spur task update <wbs> done`, because the gate cannot tell which file the row meant. Write the
|
|
162
162
|
repo-root-relative form from the first pass:
|
|
163
163
|
|
|
164
|
-
- Right: `packages/app/src/decision/decision-events.ts:83`, `apps/cli/tests/commands/task.test.ts:42`
|
|
164
|
+
- Right: `packages/app/src/decision/decision-events.ts:83`, `apps/cli/tests/commands/task/verdict.test.ts:42`
|
|
165
165
|
- Wrong: `decision-events.ts:83`, `../services/foo.ts:12`, `@gobing-ai/ts-x/src/persistence.ts:108`
|
|
166
166
|
(a scoped package is never repo-relative — use the external named-origin form below)
|
|
167
167
|
|
|
@@ -296,7 +296,7 @@ Include the per-requirement traceability table in the report:
|
|
|
296
296
|
fragment to the coordinator (`sp:super-reviewer` — the invoking session under `/sp:dev-review`),
|
|
297
297
|
which writes the combined `## Review`. The
|
|
298
298
|
`record` step transcribes only `## Testing` from the verdict artifact and backfills `## Review`
|
|
299
|
-
only when the section is bare (`sectionIsBare` guard, `task-
|
|
299
|
+
only when the section is bare (`sectionIsBare` guard, `task-section-bodies.ts`); it never overwrites the
|
|
300
300
|
coordinator's authored Review. Keep the priority-table lead stable in the fragment so the L3 gate
|
|
301
301
|
stays satisfied through `record` → `done`.
|
|
302
302
|
|
|
@@ -590,9 +590,13 @@ host instructions does not add one. An opt-in gate is explicit: `gitmsg --check
|
|
|
590
590
|
- `keepachangelog` (default): `## [<version>] - <date>` header, then category headings per the keepachangelog convention — `### Added` / `### Fixed` / `### Changed` / `### Removed` / `### Other` — mapped from conventional-commit types.
|
|
591
591
|
- `simple`: flat bulleted list grouped by type heading (`### feat`, `### fix`, …).
|
|
592
592
|
6. Emit: with `<file>`, insert the section into that file above its newest `## [` release heading (or after its title when none exists) and touch nothing else in the file; without `<file>`, print it to stdout.
|
|
593
|
-
7.
|
|
594
|
-
|
|
595
|
-
-
|
|
593
|
+
7. **Verify claims before emitting:** scan the generated bullets for API/library claims — bullets asserting what code, APIs, libraries, dependencies, or versions do (skip merge/bookkeeping bullets that assert no such fact). Verify each affected bullet, then append an HTML comment line directly under it: `<!-- src: <citation> · <HIGH|MEDIUM|LOW> -->`.
|
|
594
|
+
- Internal claims (what a commit or the code does): confirm against the commit diff (`git show --stat <hash>`, reading hunks when the summary asserts behavior) or the artifact's presence in the tree; cite `path[:line]` — bare path for whole-file claims, `path:line` for a specific behavior or symbol.
|
|
595
|
+
- External claims (framework/library/version behavior): confirm against official docs for the installed version; cite the URL. Unverifiable → LOW plus the reason in one clause.
|
|
596
|
+
- Confidence: HIGH = the diff/artifact confirms the summary as written; MEDIUM = the evidence is real but narrower than the summary; LOW = cannot be confirmed from available sources.
|
|
597
|
+
8. Self-check before emitting: every short hash in `<since>..<until>` appears exactly once, and every verified bullet carries exactly one `<!-- src: … -->` comment whose level is `HIGH`, `MEDIUM`, or `LOW` — no off-rubric levels, no unannotated claim bullets. Fix any miss, duplicate, or bad level; do not report a verdict.
|
|
598
|
+
9. Reply in at most three lines: the range, bullet counts per category plus verified-claim counts (`x HIGH / y MEDIUM / z LOW`), and the output target.
|
|
599
|
+
- **Invariants:** Bullets are derived from `git log` only; the claim-verification pass (step 7) adds evidence from commit diffs, the working tree, and official docs. No quality gates — no `bun run gate`/lint/typecheck/test/`spur-check`/rule runs, and no edits beyond the one inserted section (its verification comments included). The file is left uncommitted.
|
|
596
600
|
|
|
597
601
|
### 9. gitmsg
|
|
598
602
|
|
|
@@ -625,7 +625,7 @@ Before launching a full `spur-check-new`:
|
|
|
625
625
|
3. **Promoted code must satisfy the boundary rules `scripts/` never enforced.** A command module
|
|
626
626
|
moving from `scripts/` into `apps/cli/src` must route output through the `CommandOutput` seam (no
|
|
627
627
|
`console.*`), spawn processes via `NodeProcessExecutor` (no `Bun.spawnSync`), get a
|
|
628
|
-
`runtime-boundaries` fs-io exemption for sync reads (mirrors `task.ts`), and a non-command helper
|
|
628
|
+
`runtime-boundaries` fs-io exemption for sync reads (mirrors `commands/task/shared.ts`), and a non-command helper
|
|
629
629
|
must not live in `apps/cli/src/commands/` (the noun scan treats every file there as a noun).
|
|
630
630
|
4. **Doc/TSDoc edits shift `file:line` anchors** cited by other tasks — the per-task gate surfaces
|
|
631
631
|
them as `L4.anchor-subject-mismatch` (0775: the corpus sweep retired; run `spur task check <wbs>`
|
|
@@ -202,7 +202,7 @@ install rule (source: task 0481) — create mode always installs because a fresh
|
|
|
202
202
|
|
|
203
203
|
After creation or adoption, immediately write/adopt the state marker (WT-3), then run the
|
|
204
204
|
existing batch loop (Steps 1–5) with the worktree as process cwd. `spur workflow run` resolves cwd
|
|
205
|
-
from the process (`apps/cli/src/commands/workflow.ts
|
|
205
|
+
from the process (`apps/cli/src/commands/workflow/run.ts`), so no CLI change is needed — `cd` into
|
|
206
206
|
the worktree directory before launching the loop.
|
|
207
207
|
|
|
208
208
|
#### Evidence staging before the first task (create and reuse mode)
|
|
@@ -188,7 +188,7 @@ transition to `done`.
|
|
|
188
188
|
> in-sandbox for the same reason.
|
|
189
189
|
>
|
|
190
190
|
> **Triage without a baseline run:** list the failing test *files*, then grep them for the surface
|
|
191
|
-
> you changed. If your change touches `task
|
|
191
|
+
> you changed. If your change touches `commands/task/` and no failing file references task/lifecycle, the
|
|
192
192
|
> failure is not yours. This costs seconds and mutates nothing — do **not** `git stash` to get a
|
|
193
193
|
> clean baseline on a shared working tree. Treat any failure that does *not* name a port/listen/`ps`
|
|
194
194
|
> cause as yours until proven otherwise; the count is a moving baseline, not a constant.
|