SIGN IN SIGN UP

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