@gobing-ai/spur 0.4.6 → 0.4.7

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.
@@ -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-service.ts`) — a standalone compatibility fallback, never an
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-service.ts`); it never overwrites the
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. Self-check before emitting: every short hash in `<since>..<until>` appears exactly once. Fix any miss or duplicate; do not report a verdict.
594
- 8. Reply in at most three lines: the range, bullet counts per category, and the output target.
595
- - **Invariants:** Output is derived from `git log` only. No quality gates — no `bun run gate`/lint/typecheck/test/`spur-check`/rule runs, citation or manifest lookups, confidence ratings, or edits beyond the one inserted section. The file is left uncommitted.
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:124`), so no CLI change is needed — `cd` into
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.ts` and no failing file references task/lifecycle, the
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.