assistant_corvinOS_reachability_review · git:20260915.459047e · 2026-09-15 · sha256 9e9a5a97a5e2e9f9

assistant_corvinOS_reachability_review git:20260915.459047eA

Immutable. This exact content is served forever at /api/v1/blob/9e9a5a97a5e2e9f9.

---
name: assistant_corvinOS_reachability_review
description: Reachability as a separate review axis: after adversarial review converges on enforcement, run a round asking whether the code runs at all — driven by invented operator tasks against live code. Extracted from CONCEPT-0008 after six defects (2 HIGH) were found in a surface five enforcement rounds had passed as correct.
---

# Reachability review — does this code actually run?

Distilled from CONCEPT-0008 (`Corvin-ADR/concepts/CONCEPT-0008-reachability-review-axis.md`).
Read the concept for the full evidence, alternatives, and boundaries.

## When this fires

- An adversarial review series just converged to **zero enforcement findings** —
  that convergence is the trigger, not the finish line.
- A phase added a channel, plugin type, provisioning path, or a **second entry
  point** for an existing mechanism.
- An ADR claims something is enforced "by construction".
- A feature was wired into one of two hosts/surfaces (console + bridge,
  gateway + standalone).

## Why enforcement review cannot find this

"Can this guard be defeated?" is answerable inside the file. "Who calls this, from
what real trigger?" is not — reachability lives in the *absence* of a call
elsewhere. The blindness gets worse the better the code is: a channel with a gate,
a rollback path, an audit record and a green test suite READS as load-bearing, so
nobody checks whether anything is on the other end.

## Method

1. **Enumerate public symbols, not entry points.** For each exported name:
   `grep -rn "<name>" --include="*.py" . | grep -v "/tests/\|test_\|__pycache__"`.
   Only its own definition + an `__init__` re-export + a docstring ⇒ candidate.

2. **Split the verdict three ways — they look identical in a grep:**
   - *dead-and-wrong*: a live surface should call it and does not → HIGH, fix wiring.
   - *dead-and-vacuous*: no subject today; the invariant holds only by accident →
     wire it anyway, cheap, turns "safe by coincidence" into "safe by construction".
   - *dead-and-honest*: built ahead of an unbuilt phase, refusal is fail-closed, the
     docstring says "dormant" → leave it; verify the refusal, move on.

3. **Invent a concrete operator task per suspicion and run it against live code
   BEFORE writing any fix.** Not "is X called" but "I open the editor, drag in the
   stage, save, and ask a question in the web-chat — what happens?" One throwaway
   script of pass/fail checks. This also refutes wrong suspicions: resolve the REAL
   object through the REAL resolver — raw config JSON misleads.

4. **Re-run the identical script after the fixes.** N FAIL → 0 FAIL is the evidence.
   A green unit test is not — it was green the whole time.

5. **Check the TEST SUITE's own reachability.** An uncollectable test file is worth
   less than none, because it counts as coverage. Never `--ignore` a collection
   error; repair the import and see what it exposes.

6. **Then refute your own wiring fixes.** New call sites are new attack surface
   (unbounded injected bodies, namespace prefixes that collapse, double validation).

7. **When new code REPLACES old code, prove which module WON — not that one loaded.**
   Every check above answers "yes" when a shadow is in play: `file.tsx` beats
   `file/index.tsx`, a stale `.pyc` beats its source, `operator/` loses to the stdlib
   module. The wrong artifact is a legitimate artifact, so nothing errors. Grep the
   SERVED/INSTALLED artifact for a string that exists only in the new code
   (`console-deploy.sh --marker '<string>'`); a matching build hash proves nothing.
   Delete the replaced thing in the same commit — keeping both is what creates the
   shadow. (CONCEPT-0008 Amendment 2026-08-27; ADR-0431, ADR-0215 F1.)

## Do NOT use

- On a single bug fix or a refactor with existing E2E coverage — the per-commit
  `e2e-wiring-proof` gate covers that; this is the sweep, not the gate.
- Instead of enforcement review. A reachable gate that fails open is worse than an
  unreachable one — run this AFTER, never in place of it.
- To re-litigate an honestly-dormant module with a fail-closed refusal.