@gobing-ai/spur 0.3.78 → 0.3.80

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.
@@ -128,6 +128,18 @@ silently incomplete (H6 shipped at 23/48 that way, with one verdict carrying an
128
128
  `acceptanceCriteria` array and still reading PASS). See `ac-style-guide.md` §
129
129
  "Verdict AC ↔ feature scenario linkage" for the id forms and evidence vocabulary.
130
130
 
131
+ **Parser contract (verify-answer-lint + `task verdict`, 0817 re-verify findings):**
132
+
133
+ 1. The requirement id cell must be the **bare** id — `| R1 | MET | … |`. Suffixes (`R1 (AC1)`) or
134
+ decoration (`**R1**`) fail the exact-match completeness check (`missing requirement row`).
135
+ 2. The AC table only opens when the header's **third** cell contains the word "evidence" — use
136
+ `| AC | Status | Evidence Type | Evidence |`. `| AC | Status | Type | Evidence |` silently
137
+ parses zero AC rows while lint still reports PASS.
138
+ 3. A behavioral AC marked `MET` with a non-executable evidence type (`static-ref`,
139
+ `manual-review`, `llm-judge`) is **downgraded to PARTIAL** by `task verdict`, making the whole
140
+ verdict PARTIAL. Use `test`/`command` (grep-based verification counts as `command`), or tag the
141
+ AC id `[non-behavior]`/`[advisory]` when executable evidence genuinely doesn't apply.
142
+
131
143
  **Invariant:** a force-done task has a non-empty `done_reason` naming the timeout, a verdict
132
144
  artifact whose AC rows cover every declared scenario, and a green lint/test run recorded in
133
145
  `## Testing`.
@@ -244,10 +244,52 @@ No token estimate, stage-size threshold, model heuristic, or configuration switc
244
244
  resolved absolute path, not the YAML's relative string, is what the dispatched agent is instructed
245
245
  to write and what post-join validation reads. Resolving once at the dispatch boundary fixes every
246
246
  surface at once; a relative path would resolve against whatever cwd the writer process happens to
247
- have. Send only: the stage id, the YAML's exact pure slash command, and
248
- `execution surface already resolved: native subagent; do not dispatch this stage again`. The WBS/path
249
- already carried by the slash command is the handoff do not paste task/session transcripts or embed
250
- machine-specific session paths. Dispatch exactly one native subagent and wait for it; the inline FSM
247
+ have.
248
+
249
+ **Dispatch payload (task 0818 R2).** Send exactly these five fields. The earlier "send only the
250
+ stage id, the slash command, and the no-recursion notice" restriction is **deliberately replaced**:
251
+ the execution-tree cwd, the Spur invocation, and the output path are all already resolved at this
252
+ boundary, and a delegate left to re-derive them re-derives them against its own cwd and PATH.
253
+
254
+ 1. The stage id.
255
+ 2. The YAML's **exact** pure slash command — unchanged, never reformulated.
256
+ 3. `execution surface already resolved: native subagent; do not dispatch this stage again`.
257
+ 4. The **confirmed execution-tree cwd** (absolute) and the **resolved absolute Spur invocation** —
258
+ `vars.spurBin`, i.e. `resolveSpurBin()`'s `<runtime> <mainModule>` form
259
+ (`apps/cli/src/workflow/resolve-spur-bin.ts`). The delegate MUST run every Spur command through
260
+ that invocation and MUST NOT rely on a bare `spur`: a competing `spur` earlier on the delegate's
261
+ PATH otherwise wins. Setting `SPUR_BIN` alone does **not** change bare-command resolution — only
262
+ using the supplied invocation does. Spur-owned scripted calls take it through the existing
263
+ `--spur-bin` flag rather than a new mechanism.
264
+ 5. The **resolved absolute output path** (`answerFile`/`expectFile`, resolved as above) and the
265
+ **owning stage's artifact contract** — for a verify stage, the compact contract below.
266
+
267
+ Nothing else: no task/session transcripts, no machine-specific session paths. The WBS/path already
268
+ carried by the slash command remains the task handoff.
269
+
270
+ **Verify-stage artifact contract.** A verify handoff names
271
+ [`code-verification/references/verdict-schema.md`](../../code-verification/references/verdict-schema.md)
272
+ as the canonical answer schema and carries this compact form verbatim:
273
+
274
+ ```text
275
+ Verdict: PASS|PARTIAL|FAIL top-level, one line
276
+ | Req | Status | Evidence | Status = MET | PARTIAL | UNMET
277
+ (N/A and PASS are NOT valid requirement statuses)
278
+ | AC | Status | Evidence Type | Evidence | Status = MET | PARTIAL | UNMET | N/A (justified)
279
+ Evidence Type = test | command | static-ref | manual-review | llm-judge | n/a
280
+ AC rows use the task's exact AC identities (verbatim `Scenario:` titles / checklist text).
281
+ A behavioral AC marked MET requires executable evidence (test | command);
282
+ static-ref or llm-judge alone cannot carry it.
283
+ ```
284
+
285
+ **Review-stage artifact contract.** A review handoff carries the Review output contract owned by
286
+ `plugins/sp/agents/super-reviewer.md` — native `P1 (blocker)` / `P2 (major)` / `P3 (minor)` /
287
+ `P4 (advisory)` priority cells and section-relative headings — **not** the verify answer schema.
288
+
289
+ This is an invocation and handoff fix, not a runtime PATH-injection subsystem: it makes no guarantee
290
+ about arbitrary bare commands in host shells or agent-generated shells.
291
+
292
+ Dispatch exactly one native subagent and wait for it; the inline FSM
251
293
  must not advance actions or guards concurrently (one writer at a time). After join, validate
252
294
  `answerFile`, `expectFile`, `requireDiff`, task scope, and the action's error policy from the shared
253
295
  filesystem — a subagent success message is not evidence. On success append exactly: