fix(rpiv-pi): make the quarantine manifest the adjudication record (review I2/I1/Q8/Q6)
Review 2026-08-21_10-29-11 caught a stranded-state cascade in the tiered scope floor: the quarantine re-check's pass verdict overwrites the basename-keyed verdict JSON AND becomes the channel tail, so validate's --scope adjudication read a clean verdict and its skip rule bypassed the quarantine-manifest bullet — the untracked-tier findings, the only record of what moved and why, were write-only. A quarantined load-bearing file no verification command references sailed to commit with the tree silently missing it (I2). The manifest is now the record, and validate reads it unconditionally: - validate Step 2.7: the quarantine-manifest check runs whatever the verdict says — every `moved` entry is ruled (scratch = non-blocking note; a file the deliverable needs = blocking plan deviation naming the restore path), and `refused` entries are ruled the same way. The verdict-pass short-circuit no longer skips the step's manifest bullet. - scopeQuarantine MERGES the manifest across rounds instead of replacing it (I1 — a validate-fix re-entry that quarantined again erased round 1's moves from the only file validate globs; current-round moves supersede a prior entry for the same `from`, everything else survives), records this round's refusals with reasons (Q8 — not-untracked-at-move-time / escapes-cwd, observable without re-running the floor), and writes in a `finally` (Q6 — a mid-loop rename throw still lands every completed move on disk before the fail-loud STOP; never moved-but-unrecorded files). Tests: cross-round merge, failure injection (second move's destination dir blocked by a file — throw propagates, first move manifested), refused recording on both refusal reasons, and the idempotence case now asserts round 1's record survives an empty re-run.
S
Sergii committed
02f48c2431e22eb1604437a6e2c2be24ac73b500
Parent: 15cc719