Canary mode detection (the real 18161 defect):
- isfile() is not a valid LIVE/ISOLATED discriminator: run 18141's shim
writes left a zombie 1-entry ledger in the runner's persistent HOME, which
flipped the naive gate to LIVE with wrong data. The discriminator is now
the repo's own CI-sandbox convention (RUNE_HOME=/tmp/rune-ci-<id> — the
workflow's own cleanup guard matches exactly that).
- The isolated battery seeds a PER-RUN temp ledger (module-attr override on
the shim's LEDGER_FILE) instead of writing the runner's persistent home;
binary §5 gets HOME=<temp> so binary and shim resolve the same file.
Both modes: 74/74 locally and under simulated runner topology (zombie
ledger present, RUNE_HOME set). Rust canary §4 gets the same dual-mode
treatment.
Henxels holds cleared:
- plans/: three phase-g files renamed to kebab-case; references updated in
lib.rs, ep_loader.py, canary docstring, Cargo.toml, supersession ledger.
- ffi_query_memory_smoke coverage: smoke repaired (was stranded — imported
the deleted src/rune vintage; now drives shared/ shim, 41/41 green) and
tests/test_ffi_query_memory_smoke.py runs it, skipping honestly when the
cdylib isn't built (CI has no cargo step).
Type ratchet — instrument repair (§16V), not reading-management:
- scripts/type_check_ratchet.py now pins pyright --pythonpath to the
INVOKING interpreter. Ambient-interpreter dependency resolution was the
residual non-determinism: runner (py311, no rich/Pillow) vs desktop (3.14
system site) produced 460 vs 454 on the identical tree, and any import
ignore flipped to unnecessary-ignore in the other environment.
- pyrightconfig extraPaths now covers src/rune + shared + both crate dirs
(bare intra-repo imports resolve under the pinned environment).
- Pillow declared in pyproject (genuine lazy dep of the diamond-frames
surface; was undeclared) — lock regenerated, dep-lock checker green.
- Measured under the pinned instrument: 115 errors / 439 warnings
(CI-equivalent locked 3.11 venv) and 115/436 (local 3.14 venv) — both
below the 117/454 baseline; baseline unchanged. My canary's 4
reportOptionalSubscript errors fixed by real narrowing, not suppression.
Lint baseline: BLE001 346 -> 345 (bulk_issue_guard.py's retry catch gains a
reasoned noqa; the file stays untracked per checkpoint hygiene, but the
honest-ledger test counts disk state — the noqa keeps local == CI).
Local wall: full pytest 2251/0 (incl. the new smoke test); canaries 74+66
both modes; parities 33/24/13/16/17; henxels exit 0; umbrella gate exit 0;
dep-lock green.
- testing_mode.py (19L/M/N/O/P): TestingSession (coordination-only,
pausable — durable truth stays in the Behaviour Ledger); dynamic
queue (fix-for-B-reopens-A via structural closure, 19S-9 proven);
Observation→closure gate (closure requires retest AND user
confirmation — automated green alone recorded as NOT closed);
forge projection through the T18 boundary (failure never rewrites
truth, 19S-14 proven); cross-project aggregate.
- 19R LIVE_PROOF: /testing command implemented through the full
system — self-scaffold lookup → capability-ledger packet (bound
exactly ONE file) → qualified INWARD basis → predictive impact →
preview → contract 19r-testing-command → event-bridged verification
→ descriptive impact (prediction matched, delta persisted) →
selective invalidation + obligations → ledgers updated → closed.
- 19T benchmark (honest): cold agent found the answer in 6 tool calls
(4 files) — on this well-organized repo raw speed ≈ equal; the
scaffold advantage is correctness/continuity (validation state,
obligations, invalidation), recorded without inflation.
- 19U: V1 definition gains the T19 layer model + both governing
objectives verbatim; implementation audit gains T19 classifications.
- type ratchet: forge.py gitea_auth import made resolvable via
pyrightconfig extraPaths (the +1 warning FIXED, not re-baselined).
Suite 2002 green; ratchets PASS; Henxels rc=0.