Per docs/tier8-class-b-cport-migrate-arm-spec.md theologian 01:01:50Z +
supervisor 01:02:46Z ADOPTED + supervisor 01:18:35Z + 03:44:19Z +
04:14:27Z (8-incident root-cause attribution to §3.5 restore-trap +
b83f084 fix LIVE).
Migrates HIRBuilder std::vector<ExceptionTableEntry> exception_table_
field to PhxExceptionTable (purpose-built typed-inline pure-C
container in PhxHirBuilderState.exception_table_phx). Validates
Pythia
python#103 +
python#94 (3) §5 forcing-decision MIGRATE-ARM via 1-pilot
port (vs Phase 3's 4-Class-B-kept disposition).
CONTAINER:
PhxExceptionTable (builder_state_c.h): typed-inline data/count/capacity
with 6 inline funcs (init/destroy/push/size/at/clear). Lazy-init,
doubling realloc, free at HIRBuilder dtor.
ExceptionTableEntry (builder_state_c.h): POD mirror of deleted C++
struct, fields flattened BCOffset → int + bool → unsigned char.
C BODY PORTS (builder_state_c.c):
hir_builder_state_init: also calls phx_exception_table_init
hir_builder_state_destroy: NEW (calls phx_exception_table_destroy)
parse_exception_table_c: pushes ExceptionTableEntry via
phx_exception_table_push (replaces deleted push_cpp bridge)
find_exception_handler_c: linear scan via phx_exception_table_size +
at (replaces deleted size_cpp/entry_cpp bridges)
C++ SHIM (transient compatibility per Phase A; Phase B deletes):
HIRBuilder::parseExceptionTable → 1-line delegate to C body
HIRBuilder::findExceptionHandler → C body returns index, shim
converts via phx_exception_table_at preserving caller-contract
HIRBuilder::buildHIRImpl translate-loop iterates PhxExceptionTable
via size+at; .clear() goes to phx_exception_table_clear
HIRBuilder::getSimpleExceptInfo wraps handler.target in BCOffset{}
(now plain int post-C struct migration)
emit_call_method_exception_handler_inline_c at builder.cpp:2883
still calls self->findExceptionHandler (KEPT shim — Phase B
will rewire)
DELETED:
3 _cpp bridge impls in builder.cpp (push/size/entry, ~37L)
3 friend decls in builder.h
C++ struct ExceptionTableEntry in builder.h (5L)
std::vector<ExceptionTableEntry> exception_table_ field in builder.h
W45 §1-§2 fixture removals (3): the deleted bridges no longer have
signatures to fuzz. Cumulative bridge-count delta: -3 (per Tier 8
spec §5
python#11 acceptance).
Numstat (vs HEAD
b83f084):
Python/jit/hir/builder.cpp +21 -44 (-23 NET)
Python/jit/hir/builder.h +14 -19 (-5 NET)
Python/jit/hir/builder_state_c.c +30 -17 (+13 NET)
Python/jit/hir/builder_state_c.h +103 -48 (+55 NET)
scripts/w45_bridge_drift_falsifier.sh +0 -3 (-3 NET)
TOTAL: NET +37L, bridge-count delta -3.
Per Tier 8 spec §5
python#10 amendment (theologian 01:14:29Z): full Tier 8
endpoint ≤+0L cumulative is across all 4 Class B containers, not
single pilot. exception_table_ pilot subtracts ~19% of Phase 3 +257L
foundation cost; Phase 3 + Tier 8 Phase A cumulative now +257 + 37 =
+294L.
Apply mechanism: python single-process write (8-incident root cause
was §3.5 restore-trap, NOT Write-tool-burst — but python single-process
remains best practice per Pythia
python#107 (4) isolation principle). Apply
script: /tmp/apply_phase_a.py.
EXPANDED PRE-COMMIT GATE per supervisor 01:17:23Z (testkeeper 04:24:49Z):
Stage 1 compile-check: BUILD_EXIT=0
Stage 2 §3.5 BUILD MODE: 4/4 PASS, PhxExceptionTable INTACT post
(§3.5 fix
b83f084 VINDICATED)
Stage 3 per-bench gate: GEO 1.27x, all 4 floor criteria PASS
§5 forcing-decision MIGRATE-ARM EMPIRICALLY VALIDATED via this pilot:
exception_table_ migrated to PhxArray-equivalent pure-C container
without C++-side-keep dependency in C-side reads. Pattern propagatable
to remaining 3 Class B containers (block_map_, temps_,
static_method_stack_) in future Tier 8 batches per spec §1.1
container-shape transferability caveat.
Phase B follow-up commit (NEXT) deletes C++ shims + rewires the
remaining caller at builder.cpp:2883 per Tier 8 spec §5
python#5.
Authorization: supervisor 03:44:19Z + 04:14:27Z; theologian 03:33:50Z
patch-apply hybrid + 03:54:15Z content-trigger refinement (later
attributed to §3.5 trap, not content) + 04:14:27Z fix directive.
Cross-link: 8 incidents resolved via
b83f084 §3.5 restore-trap fix.
Pythia
python#105 'fever has name infection still spreads' RESOLVED — fever
was self-inflicted instrumentation. W48 spec marked CANCELLED post-
this-commit per supervisor 04:14:27Z cascade re-retract.
That way they look nicer under the GitHub web UI, e.g.: