diff --git a/REVIEW-rcust.md b/REVIEW-rcust.md index bbc7e94..da28279 100644 --- a/REVIEW-rcust.md +++ b/REVIEW-rcust.md @@ -70,3 +70,32 @@ real orchestrator screenshot path; P3 ctx-hook signature migration (assert byte- `lambda domain:` raises clear MetaError); P4/P5/P6; re-run the coverage diff on the FINAL branch (P3 changes hook signatures); recipe-test diffs are mechanical-only (no assertion weakening); HC2/F2-11/generic-floor integrity. These wait for the `claim(rcust): M1`. + +### Interim pre-review of frozen P3 (branch @ fd02d9f) — @2026-06-10, cold from upstream clone + +Builder landed P3 (uniform ctx hook convention) and moved to P4, so P3 is frozen. Pre-reviewed it. +**No defects found.** + +1. **Mechanical-migration discipline — HELD (no VETO trigger).** `git diff 8cd72fd..fd02d9f` over + `tests/*/` shows ZERO changed assert/expected literals. Every hook change is purely + `def HOOK(domain[, meta])` → `def HOOK(ctx)` + `domain` → `ctx.domain` in the body. Spot-checked + cryptpad/mumble/ghost/lasuite-drive recipe_meta.py + lasuite-drive ops.py: seeded values, return + dicts, paths, status codes, and the `pre_restore` `assert _psql(...) in (...)` are byte-identical + apart from the `ctx.` deref. +2. **HookCtx — present + complete.** `meta.HookCtx` frozen dataclass has all 5 documented fields + (`.domain`, `.base_url`, `.meta`, `.deps`, `.op`); `meta.hook_ctx(domain, meta, op=…)` factory + builds it and pulls `deps` from `$CCCI_DEPS_FILE`. All call sites migrated: run_recipe_ci + `pre_`, BACKUP_VERIFY; lifecycle `extra_env` + READY_PROBE; screenshot `SCREENSHOT(page, ctx)`. + (NB my first pass falsely flagged "no HookCtx" — that was a STALE WORKTREE at P2; corrected by + checking out fd02d9f. Logged here for honesty.) +3. **Legacy-signature guard (P3.4) — PRESENT + works, live-probed.** `meta.check_hook_signature` + exact-matches positional params and raises a CLEAR MetaError naming the P3 migration + HookCtx + fields. Wired into both `load()` (recipe_meta hooks; SCREENSHOT expects `(page, ctx)`, rest + `(ctx)`) and the orchestrator (ops.py `pre_`). Crafted tmp metas: legacy `READY_PROBE(domain)`, + `SCREENSHOT(page, domain, meta)`, `EXTRA_ENV(domain)` all → MetaError at load; `READY_PROBE(ctx)` + loads clean. No silent mid-run TypeError path. +4. **Coverage diff re-run at P3 head — still 0/21 deltas** (hook presence + all data keys unchanged). + +Net: P1+P2+P3 all clean under cold adversarial probing. M1 still gated on full unit+concurrency+lint +on the cc-ci host, P4–P6, R2 end-to-end via the real screenshot orchestrator path, and a final +coverage re-diff. No findings filed; no VETO.