Commit Graph

4313 Commits

Author SHA1 Message Date
Drew T d5111014d1 phase-36: S104 s104_d6 — func_8017B614 banked at 0 through the whole-object gate + propagated — 3 levers→0: the banked ov_SC01_000 variant ported (one-scope src, struct-member tail reads, D_8012694C[0] store) 2026-09-10 21:22:44 -06:00
Drew T 8030518bcc phase-36: S104 d5 — func_801837E8 at 0 levers (was 1 $2 pin): the hoisted +0xFC temp folded into a compound assignment so the left side is born first (local-alloc.c:1486-1507, block_alloc's three-quantity order is by birth, not a sort); gate IDENTICAL each 2026-09-10 21:12:58 -06:00
Drew T f644ecb9d2 phase-36: S104 d3 — func_8017FB4C at 0 levers (was 1 $2 pin): the goto chain as structured if/else with one constant store per arm, the flag test before the angle mask (sched.c:2428 tie-break → allocno_compare 8333 > 8000), one variable for the global and its child; 4 bodies, gate IDENTICAL each 2026-09-10 21:11:56 -06:00
Drew T 547571fd18 phase-36: S104 d1 — func_80185960 at 0 levers (was 1 launder): the one-armed abs as an if/else with the non-simple value in the ELSE arm (jump1 keeps it, jump.c:739-741; cse's skip-block path stops at the join, cse.c:8116); 10 bodies, gate IDENTICAL each 2026-09-10 21:08:34 -06:00
Drew T 55ef71b95f phase-36: S104 d2 — func_80166F58 (ov_MAIN_012 class) at 0 levers (was 5): the banked SC04_011 header ported (return type from the TU's extern, table symbol renamed) + a re-extended short copy with a second use (combine.c:7926-7942, local-alloc.c:700); 8 bodies, gate IDENTICAL each 2026-09-10 21:07:10 -06:00
Drew T 7db8372ae2 phase-36: S104 sweep banks — 5 classes from the all-families regen (R12 ×3, R15, R19) + 12 siblings, each IDENTICAL through the whole-object gate; R22 follows the batch 2026-09-10 21:05:27 -06:00
Drew T 16411105e2 phase-36: kit corpus regenerated for the delever_regen and lever_census changes (tool_census --check OK, 0 gaps) 2026-09-10 20:59:56 -06:00
Drew T 98a4bbcb65 phase-36: S104 — the all-families free sweep running (2 R12 matches so far); agents d1–d5 drawn from sweep-judged classes; METHOD S104 section (Drew's rulings) | 🛑 T7 RUNNING, census 5,097 / 0 unmarked 2026-09-10 20:57:55 -06:00
Drew T 7b6418c179 phase-36: the census walker defaults to the tree's cross-file asm-macro table for every out-of-census caller (delever scrub/bank/judge) — S103's scrub false positive on an ENGINE_SHB launder reproduced and fixed; control still finds a real orphan; census unchanged 5,097 / 0 unmarked 2026-09-10 20:54:20 -06:00
Drew T 48176e51ff phase-36: delever_regen forks worker processes after warming the shared caches (threads sat on the GIL with zero compiles) and appends each judged class to <label>.jsonl as it lands; the S104 all-families sweep runs 2026-09-10 20:50:56 -06:00
Drew T c1ac890e3f phase-36: S104 opens — Drew's dispositions of S103's four questions, read against sotn-decomp's tree (0 pins, !FAKE do-while kept as C, one GTE header with project-local macros); milestone amended: unclosed sites stay marked and go to the structs phase 2026-09-10 20:28:07 -06:00
Drew T b27c987ba9 phase-36: S103 ends — c51 func_8012E364 at two marked pins (134 bodies); 46 orphan markers scrubbed (one scrub false positive restored, the defect recorded); census 5,097 sites, 0 unmarked, exit 0; checkpoint final (R22 218/218) 2026-09-10 19:13:58 -06:00
Drew T 94520756e0 phase-36: the R26 regen closes 28 classes (71 bodies); c55 and c53 close five tier classes; census 5,231 sites, 0 unmarked — exit 1 on 45 orphan !FAKE markers, scrubbed next (R22 218/218) 2026-09-10 19:05:22 -06:00
Drew T 0ef49b5154 phase-36: the S103 checkpoint refreshed at 89% context — 5,376 sites, the minimum-lever pivot, the late tools, the four decisions for Drew, what is in flight 2026-09-10 18:51:17 -06:00
Drew T baac1f851c phase-36: c56 ports the func_8013D9B0 minimum-lever text to ov_MAIN_012's 7-copy class; c54 ports func_8017B238 (8 bodies) (R22 218/218) 2026-09-10 18:48:23 -06:00
Drew T c02fc7cd55 phase-36: minimum-lever banks — func_8013D9B0 (2 marked GTE asm instead of 34 levers) and func_80140958 (2 marked levers), 266 bodies; c52 closes four ov_SC06_010 classes with the R26 alias (R22 218/218) 2026-09-10 18:44:29 -06:00
Drew T 433aa07018 phase-36: c50 closes func_80136824 with zero levers body-only (off the types-phase list, 130 bodies); c49 func_8013F350 at two marked head levers (133 bodies); delever_regen survives stale sites (R22 218/218) 2026-09-10 18:38:42 -06:00
Drew T aada3bdc2b phase-36: the first minimum-lever bank (func_80177B5C: 1 marked launder instead of 23 levers, 133 bodies); c43/c44/c45/c37 closes with their cross-address copies (delever --port-scan); generator R26 alias_repeated_addresses (known-true: c45's close from its start text) (R22 218/218) 2026-09-10 18:32:46 -06:00
Drew T 8bc06a2cb8 phase-36: T7 agent c42 — func_80186A8C and func_80182058 closed through cross-jump readings (10 bodies); related.txt requires evidence before calling a same-name body a variant (R22 218/218) 2026-09-10 18:17:41 -06:00
Drew T 2a4f28f835 phase-36: where the residue is — 70% of the lever weight in 9 read classes; the minimum-lever pivot recorded 2026-09-10 18:12:03 -06:00
Drew T 54311fa359 phase-36: T7 agents c38 + c40 — func_80180EDC, func_8018431C, func_80185DD8, func_80184854 closed (30 bodies) (R22 218/218) 2026-09-10 18:11:17 -06:00
Drew T 321b540e7f phase-36: propagate ignores body-local externs (re-propagation: 97 siblings banked of 145 candidates); R19 cast-arity regen 8 classes; c39 ports two variants; c41, c34, c32 closes; related.txt lists the same function lever-free elsewhere; cc1_dumps_tu.sh -dd (R22 218/218) 2026-09-10 18:07:41 -06:00
Drew T 7d5964b279 phase-36: T7 agents c36 + c35 — four tier classes closed (func_8014305C, func_80141874, func_8017DBE4, func_80185994; 39 bodies); R19 reads the arity a call's own cast asserts (known-true: c35's close from its start text) (R22 218/218) 2026-09-10 17:49:55 -06:00
Drew T dd5e44c247 phase-36: T7 agent c33 — func_80169058 and func_80168D94 closed (per-arm call results, a load born last), 12 bodies; c31 proves func_80178970's pin irreducible in plain C (two passes each delete the copy; the milestone question raised) (R22 218/218) 2026-09-10 17:38:58 -06:00
Drew T a2a1fc1865 phase-36: re-draw c30 — func_8017B614 closed with no do-while (one pointer across both arms; struct/array spellings let sched2 restore the order), 125 bodies (R22 218/218) 2026-09-10 17:32:29 -06:00
Drew T 5ddbc3a7f1 phase-36: c27's reading of func_8013CF68 (10; the address-spelling route refuted on mechanism); packs for the ≥5-copy tier (64); the S103 checkpoint refreshed at 12,957 sites 2026-09-10 17:18:29 -06:00
Drew T 01f066923d phase-36: re-draw c21 — func_801397B0 closed (a do-while reference-weight wrapper, on the a4/c15 precedent), 125 bodies; c22's and c28's readings (func_8012E364 at 4, func_8013F350's head irreducible); --try parallel-safe per call with --keep (R22 218/218) 2026-09-10 17:14:30 -06:00
Drew T 44f7f8ddb6 phase-36: log correction — e984e5822's message says '14,xxx -> 13,083'; the start figure was 13,842 (a typed placeholder, R66/R85; not amended, P5c) 2026-09-10 16:58:14 -06:00
Drew T e984e5822f phase-36: re-draws c25 (func_80166F58, a narrowing copy) and c26 (func_80133CD4, split temps) closed, 254 bodies; tools/localalloc_sim.py (c26's local-alloc simulator, 0 mismatches over 150 blocks); propagate no longer trusts stale ledger hashes; R25 regen 3 classes; regen reports COMPILE-ERROR (14,xxx -> 13,083 sites, R22 218/218) 2026-09-10 16:58:01 -06:00
Drew T 96820256ce phase-36: re-draws c24 (func_8012956C: a phantom 4th argument + a switch) and c23 (func_80133784: the exit block inside a real loop, overturning b4's de-loop reading) closed, 252 bodies; R25 trim_arguments; argcheck reads K&R definitions (95 callees were invisible); the selftest asserts every dispatched family is registered (R22 218/218) 2026-09-10 16:45:14 -06:00
Drew T ae87bf75a7 phase-36: c17's reading of func_8013D9B0 (96 -> 15 in plain C; the last 15 are a GTE header macro — T5's question, for Drew) 2026-09-10 16:03:55 -06:00
Drew T 970d88f386 phase-36: T7 agent c15 — func_80135EB0 closed (one if per case defeats jump2's cross-jump, struct-spelled stores keep the dependence; the register swap via a do-while, banked on the a4 precedent and raised with Drew), 128 bodies (R22 218/218) 2026-09-10 16:03:01 -06:00
Drew T a620e1880f phase-36: generator R24 (the addPrim copy read as a whole word, c20's move) + its regen pass (2 classes, the func_80140D68 header on 140 objects); c13's reading of func_80140958 (43 -> 4, not closed) (R22 218/218) 2026-09-10 15:57:16 -06:00
Drew T 5eb46b267f phase-36: T7 agent c20 — func_8013DD68 closed on a re-draw (the bit-field copy read as a whole word: a phantom flow-time mask reference), 128 bodies (16,273 → 16,015 sites, R22 218/218) 2026-09-10 15:49:51 -06:00
Drew T 9f2b6b24aa phase-36: cc1_dumps_tu.sh takes a .c file and resolves ../shared includes (six agents had written their own dump.sh) 2026-09-10 15:43:03 -06:00
Drew T 71b9636905 phase-36: the S103 checkpoint — the five-agent lane, R22/R23 + delever_regen, the header-TU scorer fix, CI's verbatim guard, and what the next session must not rediscover 2026-09-10 15:41:13 -06:00
Drew T 750797a048 phase-36: T7 agent c18 — func_80176734 closed (one variable per role across blocks, s16 flag in a nested if, u8 copy), 128 bodies (R22 218/218) 2026-09-10 15:39:50 -06:00
Drew T 164825b5d8 phase-36: delever_regen — R22+R23 re-run over the whole residue closes 17 classes / 22 bodies with no agent; --try learns header TUs (24 classes had never been scorable) (17,715 → 17,692 sites, R22 218/218)
- tools/delever_regen.py: read-only pass (both starting texts, only the named families, delever_search --try --body,
  one worker per class) + --bank (re-score on the current tree, apply_body_core, propagate); dictionary + SETUP rows
- pass 1: 1169 classes in 127 s, 14 MATCH; the 25 UNSCORED read before banking: 24 were header-TU classes whose
  includer's ../shared include never resolved in --try (fixed; controlled: unchanged body 0, lever-free 32, mutated 1),
  1 a body-local #define (R22/R23 now refuse preprocessor lines); pass 2 over header TUs: 104 judged, 3 MATCH
- banked: 14/14 + 3/3 (two shared headers IDENTICAL on 141 objects each); R23 12 classes, R22 5
- check-all 218 passed 0 failed; lever_census 17,692 marked 0 UNMARKED
2026-09-10 15:36:01 -06:00
Drew T a060705725 phase-36: T7 agents c14 + c16 — func_801670E4 (all seven levers; its refuted @stuck note replaced in 136 copies) and func_8013D178 (one pointer per if-group), 261 bodies; R23 widened to one open block and now closes func_8013D178 alone; c9's reading of func_8013CF68 (38 -> 10, not closed) (18,776 → 17,715 sites, R22 218/218) 2026-09-10 15:24:01 -06:00
Drew T 6252516263 phase-36: T7 agent c11 — func_80175AB8 closed (derived-pointer reads, one temp for both $a1 values, a cast-wrapped table read), 124 bodies; cc1_dumps_tu.sh dumps .cse2 and .jump2 (R22 218/218) 2026-09-10 15:15:34 -06:00
Drew T e6a8f35052 phase-36: T7 agents c12 + c10 — the func_80148E54/D44 twins (implicit handler argument) and func_80135A4C (cross-jump tails, parameters passed through), 395 bodies; delever_pack writes related.txt (20,206 → 19,276 sites, R22 218/218)
- c12: c3's reading held on both twins — the angle as the handler's first argument + tmp reused as the later operand;
  the stale 'jalr with no args' comment corrected in the 135 files whose body now passes it
- c10: jump2 cross-jump merged two walk tails (exits now fall to the single final return), the s16 SUBREG gate, and
  func_80135480 called at its real arity; its answer was func_80135888 in another file
- delever_pack related.txt: lever-free bodies in the overlay sharing a func_/D_ symbol, ranked (known-true: top hit for
  func_80135A4C is func_80135888); METHOD_S103 +6 emitter entries; SETUP rows
- apply-body IDENTICAL x3, propagate 131/131 x2 + 133/133; check-all 218 passed 0 failed; lever_census 19,276 marked 0 UNMARKED
2026-09-10 15:03:27 -06:00
Drew T 2e61220bde phase-36: T7 wave c — seven agent closes (c4 c6 c1 c7 c3 c5 c8) + func_8017EEC0's parameter, ~1,000 bodies; generator R23; CI's verbatim_check fixed and wired into tools-health (23,988 → 20,206 sites, R22 218/218)
- closes, each --try 0 then apply-body IDENTICAL + propagate N/N 0 refused: func_80133AB0 (u16 width moves), func_80130D48
  (one call per goto-tail site), func_80135168 (reused temps split + H16 member store), func_80134A74 (widths + join
  statement in both arms), func_80148AFC (implicit handler argument + later operand), func_8015D738 (jump threading:
  re-read + a do-while on precedent, the class raised with Drew), func_80135004 (temp split + argument from its global)
- func_8017EEC0: the uninitialised a0v T4 tus10 left is the parameter (8/8, IDENTICAL)
- CI red since cb2fb5e6d: verbatim_check --strict saw the DECOMPILE-NOW row func_8017EEC0 converted; row removed (one
  row), --update keeps order + UTF-8 (proven equal to the hand fix), verbatim_check --strict now in make tools-health
- delever.split_reused_locals = family R23 (selftest + two refusals; known-true: joint split = the agents' measured 12/26)
- check-all 218 passed 0 failed (twice); lever_census 20,206 marked 0 UNMARKED; Drew: at most five concurrent agents
2026-09-10 14:56:17 -06:00
Drew T 205331765f phase-36: T7 agent c2 — func_8013D8FC closed (the walked-pointer merge), 131 bodies; harvested as generator R22 (24,119 → 23,988 sites, R22 218/218)
- agent c2 (Opus): a second pointer q = p + 5 stepped in lockstep with p kept a second biv alive (loop.c strength
  reduction, -dL 'Cannot eliminate biv'); one pointer lets combine_givs fold every field read onto one base
- bank: apply-body IDENTICAL, propagate 130/130, check-all 218 passed 0 failed, lever_census 23,988 marked 0 UNMARKED
- delever.merge_walked_pointers = family R22 (selftest + two refusal controls; known-true: the agent's start text's
  candidate is its closing body, --try score 0); leads the COUNT class after R19 in delever_search; SETUP row
- S103 opening: the method addendum .run/P36/agents/METHOD_S103.md; wave c launched (six agents); Fable out of credits,
  c5/c6 relaunched on Opus
2026-09-10 14:30:30 -06:00
Drew T 82da34b392 phase-36: the S102 checkpoint — the session's method, every new tool documented, and what the next session must not rediscover
30,358 -> 24,119 lever sites (-6,239) in 6,317 bodies; 22 agents across two waves (14 closed, 8 read without closing);
generators R15-R21 added, each with a selftest and a known-true check against the body it was harvested from; 16,759
lying call declarations repaired free across 3,439 units; check-all: 218 passed, 0 failed of 218 at every step.

- docs/SETUP.md gains section P36 S102: the generator table R15-R21 naming the body each came from, the call-signature
  tools, the baseline snapshot that makes the fleet gate and the agents independent, the repaired dump tools, and the
  packs. Every tool has a tool_dictionary row; tool_census --check and doc_links --strict are green.
- the checkpoint carries the operating procedure (the agent lane is the main lane and is never empty; only one writer;
  reconciliation after a killed run), the method that closed 14 of 22 bodies in order, the exact invocations, the
  gotchas that cost something, and the open items by name.
- the three JOINT generators are called out as such: R20, R21 and b7's four-way retype all win only as a single edit
  whose every intermediate step scores WORSE than the start, so a beam that composes one move at a time walks away from
  them. Generate the joint candidate; do not trust the search.
- two refusals recorded as standing practice: an invented identically-zero term is not banked (R20 closed that body
  honestly hours later), and a body whose improvements are compensating errors is reported rather than banked.
2026-09-10 14:07:32 -06:00
Drew T 8a22254bfc phase-36: wave b close — the census and the series brought to this tree (24,119 sites, fleet 218/218) 2026-09-10 13:54:25 -06:00
Drew T f96af3e487 phase-36: agent b9's reading of func_8013F350 (70 to 16, not closed) and two pack defects it found
Not banked, and the agent said so itself: it solved the whole tail — instructions 32 to 489 of 490 byte-identical in
plain C with the $4 pin gone — by hoisting one statement above two derived pointers, a COLOURING move rather than a
scheduling one (the scheduler's RTL order is identical in both candidates, so the tree's header note blaming it
describes the assembly, not the RTL). The head is a proven wall: find_best_addr (cse.c:2663-2665) folds the base to an
absolute address because its only set is a symbol_ref, and its known-true control keeps its base in plain C only because
both uses are at offset 0. It then labelled its two remaining improvements COMPENSATING ERRORS — a width change that
deletes the target's real andi to cancel an extra instruction — and wrote 'nothing here is bankable' instead of handing
back a 16 dressed as progress.

Two pack defects fixed from its report:
- neighbours.txt carried the @class/@stuck LINES but not the header comment they sit in, and that comment is an
  eight-point English explanation of every lever in the body, including the tail crack stated outright. The pack now
  ships the target's own header in full. A grep for tags is not a substitute for the paragraph it sits in.
- history.txt's line numbers are relative to the evolving text, so reconstructing a path by hand lands elsewhere (b9
  reached 51 where the engine reproduces 16 in one round). The pack now ships the best candidate's text as best_body.c.
2026-09-10 13:52:15 -06:00
Drew T f21b7c5f8c phase-36: agent b4's reading of func_80133784 (21 to 2, not closed) — the de-looping move, and a cookbook correction
Not banked: 203/203 instructions with a two-instruction residual. Four byte-proven moves recorded, the notable one being
a while loop rewritten as a label plus goto so no loop notes are emitted and loop.c cannot hoist a call argument's shift
into a preheader — loop.c:595-596 forcing n_times_set = 1 for a hard register is exactly what its $21 pin was buying.
cookbook 176 documents only the opposite rewrite (goto-loop to for, to OBTAIN a hoist); the de-looping direction is new.

Its sharpest observation is about our own instrument: none of the seven NEEDED sites named what actually had to change,
and one shape move retired three of them. A site list says which levers the oracle could not remove ALONE, not which
source facts are load-bearing.
2026-09-10 13:48:14 -06:00
Drew T d30ccc9a72 phase-36: T7 agent b8 — func_80135888, the largest class left, closed with all five levers gone (134 bodies; 24,789 → 24,119 sites, R22 218/218)
check-all: 218 passed, 0 failed of 218
  lever_census --check: 24,119 pin/asm sites, 24,119 marked !FAKE, 0 UNMARKED — OK

Three moves, each predicted from a dump before it was compiled:
- while -> a guarded do-while (29 to 22). Cross-jump (jump.c:1969 -> find_cross_jump :2371, from toplev.c:3142) had
  matched the load in front of the jump against the one in front of the bottom test and deleted three instructions; the
  guarded form makes the two tails differ.
- the duplicated pre-loop call block -> goto (22 to 6). This is an allocno_compare rank move (global.c:585-611): the
  priority is floor_log2(refs)*refs/live, reg_n_refs is loop-weighted (flow.c:2067), the in-loop copy of that call is
  worth two references, and deleting the out-of-loop copy takes exactly one off — 8 to 7 crosses a floor_log2 step and
  drops the pointer's priority from 3157.9 to 1891.9. The predicted allocation order matched the dump exactly. The
  rewrite is byte-neutral on its own: reorg steals the target's first insn into the delay slot and retargets.
- the two-arm mask temp inlined (6 to 0): set in two arms it has two deaths, fails local-alloc.c:472, and combine_regs
  bails at :1774, so it went to global allocation and took its copy preference.

Harvested as R21 second_consumer, from agents b2 and b6 together: give a computed value a second consumer before its
copy, either by chaining (v = slot = E) or by hoisting the store above it. cse deletes such a copy only when the
producer sits immediately before it (cse.c:7440-7501, guard :7454-7460), and flow links only the FIRST following use
(flow.c:2076-2091), so a store in between defeats both. R9 can never produce it — the two statements share the
identifier, so its independence guard refuses the swap. Known-true: the joint form scores 0 on b6's pre-bank text, and
the single-site forms do not, which is the third measured case this session of a joint edit no hill-climb can reach.

Also recorded from b8, worth a pre-check later: declaration-order moves are PROVABLY DEAD on a register residual whose
allocnos have distinct priorities, because global.c:604-610 compares priority first and only ties by allocno number —
4,811 compiles of those candidates sat flat because of it.
2026-09-10 13:31:47 -06:00
Drew T 0d92d10299 phase-36: T7 agent b7 — func_80166690 closed from a residual of 41 (126 bodies; 24,915 → 24,789 sites)
- the moves: retype four accumulators int -> short in ONE edit, delete the five hand temps that were spelling the
  truncation, and type the colour temp to its destination field's own width (u8). Measured A/B/C on bytes: unsigned int
  34, short 1, unsigned short 1, u8 0.
- mechanism: all four missing instructions were the same one — a move after an addiu whose result is re-read through a
  16-bit shift. A narrowing assignment expands to a mode-changing copy, and combine_regs ties source into destination
  only when the source DIES there (local-alloc.c:1855, return 0 at :1881); the wide temp is still live in the following
  sign-extended test, so the copy survives. At int the copy is same-mode, the source dies, the tie happens, and combine
  then re-selects the whole counter into the pre-shifted domain. The last instruction is cse's mode gate in insert_regs
  (cse.c:1019-1021, :1029-1032).
- it confirms R20's shape and refines it: the group retype must be keyed on the residual's missing-move SET, since R12
  is per-declarator and its single moves topped out at 24 here — a hill-climb cannot reach a four-way retype.
- delever_pack.py was missing an import for the neighbours block added an hour ago, so two packs shipped without
  neighbours.txt and both agents said so. Fixed; all 34 packs now carry it.
- method note from the agent, now in the briefs: dump the target function WHOLE off the tree's own object rather than
  reading the residual's hunks — the hunk view had scrambled two moves into branch delay slots and hid that four
  differences were one repeated shape.
2026-09-10 13:17:56 -06:00
Drew T 17d192d243 phase-36: T7 wave b — four agent closes plus the engine's own two (766 bodies; 26,074 → 24,915 sites, R22 218/218)
check-all: 218 passed, 0 failed of 218
  lever_census --check: 24,915 pin/asm sites, 24,915 marked !FAKE, 0 UNMARKED — OK

- b2 func_80162438 (127 bodies): hoist the store above the assignment and store the EXPRESSION, so the temp falls out.
  cse's 'REG0 is the cheapest' rewrite (cse.c:7440-7501, guarded :7454-7460) deletes a copy only when the insn
  immediately before it set the source; putting a USE between compute and copy defeats that and flow's LOG_LINK, which
  goes only to the first following use (flow.c:2076-2091), so combine is never offered the pair.
- b6 func_80161E08 (127 bodies): the same three blocks written as a CHAINED assignment, p = slot = base + K. The value
  gains a second consumer, flow's only link goes to the store, and the copy survives — the instruction the pin faked.
- b5 func_80145934 + its sibling func_80145A2C (126 + 126 bodies): a body-local symbol ALIAS. Cross-jump's equality test
  compares symbol names by POINTER (jump.c:2440), so two arms referencing one extern merge; an asm-label alias makes the
  identifier distinct, the blocks survive, and assemble_name strips the star so the bytes and relocations are unchanged.
  The barrier it replaces was standing in for symbol identity, not for ordering or liveness.
- the engine banked two of its own while the agents worked: R20 closed func_80139BE0 (129 bodies) by chain-narrowing —
  the body agent a14 could only reach with an INVENTED identically-zero term, which I refused. The refusal was right and
  the honest close arrived hours later from the generator.
- R19 closed func_8017A3D8's ov_SC07_006 copy (16 bodies) by restoring a dropped argument.

Two things to act on, both reported by agents:
- 'a @stuck: note claiming a lever is required should be re-tested, not trusted' — two such notes were refuted on bytes
  today ('natural C ALWAYS coalesces that copy', 'no pure-C spelling survives that fold').
- one pack lacked neighbours.txt because the packs predate that change; the next --build carries it.
2026-09-10 13:12:08 -06:00