From d3ab56bbe0c829d6c8d037260e22f65a255b8432 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Fri, 11 Sep 2026 14:13:06 -0600 Subject: [PATCH] =?UTF-8?q?phase-36:=20S105=20=E2=80=94=20f7=20landed=206/?= =?UTF-8?q?6=20(5=20plain=20C=20+=201=20minimum-lever),=20R22's=20two=20mo?= =?UTF-8?q?re=20blind=20spots=20fixed=20(+1=20header=20bank),=20R22=20218/?= =?UTF-8?q?218,=20census=204,065=20/=200=20unmarked=20(exit=200);=20Drew:?= =?UTF-8?q?=20no=20new=20agents;=20METHOD=20step=2020;=20checkpoint=20refr?= =?UTF-8?q?eshed=20|=20=F0=9F=9B=91=20T7=20RUNNING?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .run/P36/agents/METHOD_S103.md | 21 ++++++++ .run/P36/census/lever_census.json | 80 +++++++++++++++---------------- .run/P36/census/lever_census.txt | 18 +++---- docs/lever-progress.tsv | 1 + docs/levers.md | 6 ++- phase-ends/CURRENT_PHASE.md | 30 ++++++++++-- 6 files changed, 101 insertions(+), 55 deletions(-) diff --git a/.run/P36/agents/METHOD_S103.md b/.run/P36/agents/METHOD_S103.md index bde6607bf..f0344ca24 100644 --- a/.run/P36/agents/METHOD_S103.md +++ b/.run/P36/agents/METHOD_S103.md @@ -271,3 +271,24 @@ (func_8018FAE0, func_8018FC38 which even spells the record as a struct) closed packs 4–7 on the first `--try` each. - The strip must not leave a READ of the pinned variable (`-a1v` after `register a1v __asm__("$5")` is gone): the free body's score is garbage until the argument is restored (f4 pack 5's "best 13" was measured on an uninitialised local). +20. **S105 f7 (`ov_SC01_077_jr_8017AE2C`, 6 of 6 at 0: 5 plain C, 1 minimum-lever):** + - **STEP 0 — ablate each lever SEPARATELY** (`--try` the tree body minus one lever at a time) before any reading: dead + keepalives and barriers exist in the tree (func_8017EF50's keepalive scored 0 without it). + - **A pin unreachable by priority:** `find_free_reg` (`local-alloc.c:2073-2160`) takes the LOWEST register free over the + quantity's [birth, death); when the pinned register lies ABOVE the block's first free register with nothing occupying the lower + ones in the pre-alloc range, no priority order reaches it — decide from `.lreg` (~650 enumerated bodies said the same), bank + the minimum-lever body with the pass on the marker. + - **The giv-base law:** an offset-0 access is never a giv (`find_mem_givs`, `loop.c:4193-4196`), so a secondary pointer `q = p + K` + with a `q[0]` read becomes a THIRD stepped register; write every access as `*(T *)(p + K ± c)` off the real biv (R22 does it now + — it had refused every body with a `*(T *)q = v` store or a base sibling that does not itself step). + - **The per-arm store / per-arm call** (c6's mechanism, two bodies here): duplicate the single consumer of an if/else-assigned + local into both arms — jump1's `x = b; if (…) x = a;` merge (`jump.c:698-760`) needs one common pseudo, post-reload cross-jump + (`jump.c:2371`) re-merges the tails; detect by a `li ` in the branch delay slot, or a pseudo "set in 2 blocks" whose + join temp took its register (`global.c:945-990`). As a call ARGUMENT the `ior`/`and` temps are block-local and copy-suggested + (`combine_regs`, `local-alloc.c:1722`); a function-scope result puts the `and` into a global pseudo and the tie is refused (`:1774`). + - `x = E % K; … y += x` expands the quotient AND the remainder into `x`'s pseudo (`expand_divmod`, `expmed.c:2787-2790`, + `:3653-3667`; dies twice → global) — write `c = E; y += c % K;` with no target variable; two statements keep fold's + re-association (`fold-const.c:3685-3760`) from merging `(lhu - 320) + rem`. + - The ORDER of a block's independent constant stores sets a birthing load's LIFE (`schedule_select`, `sched.c:2614-2660`: the + load is "blocked for 1 cycle" behind every store issued the cycle before) and so its `qty_compare_1` rank — permute the stores; + the sched1 trace, not the allocation table, is the instrument (36 of 120 orders close, exactly those with the 0xdc store first). diff --git a/.run/P36/census/lever_census.json b/.run/P36/census/lever_census.json index ccbd1b126..eaa50e810 100644 --- a/.run/P36/census/lever_census.json +++ b/.run/P36/census/lever_census.json @@ -53,7 +53,7 @@ }, "kinds": { "asm-body/direct": 13, - "barrier/direct": 248, + "barrier/direct": 247, "gte-lever/direct": 357, "gte-lever/via-macro": 94, "gte-unsigned/direct": 270, @@ -61,7 +61,7 @@ "gte/via-macro": 6158, "instruction/direct": 202, "instruction/via-macro": 22, - "keepalive/direct": 333, + "keepalive/direct": 331, "launder/direct": 578, "launder/via-macro": 42, "verbatim-body/direct": 2682 @@ -115,36 +115,36 @@ }, "classes": { "A": { - "bodies": 1349, - "distinct_bodies": 518, + "bodies": 1343, + "distinct_bodies": 512, "file_scope": 0, - "in_bodies": 2188, + "in_bodies": 2179, "kinds": { - "pin": 2188 + "pin": 2179 }, - "marked": 2188, - "sites": 2188, - "tus": 1076, + "marked": 2179, + "sites": 2179, + "tus": 1075, "unmarked": 0 }, "B": { - "bodies": 4609, - "distinct_bodies": 675, + "bodies": 4606, + "distinct_bodies": 673, "file_scope": 13, - "in_bodies": 11183, + "in_bodies": 11180, "kinds": { "asm-body": 13, - "barrier": 248, + "barrier": 247, "gte": 6355, "gte-lever": 451, "gte-unsigned": 270, "instruction": 224, - "keepalive": 333, + "keepalive": 331, "launder": 620, "verbatim-body": 2682 }, - "marked": 2373, - "sites": 11196, + "marked": 2370, + "sites": 11193, "tus": 1425, "unmarked": 8823 }, @@ -250,9 +250,9 @@ "coverage": { "asm": { "comment_dead": 6781, - "live": 15028, + "live": 15016, "macro_block": 194, - "raw": 22003 + "raw": 21991 }, "attribute": { "comment_dead": 0, @@ -268,9 +268,9 @@ }, "register": { "comment_dead": 8574, - "live": 2238, + "live": 2229, "macro_block": 18, - "raw": 10830 + "raw": 10821 }, "volatile": { "comment_dead": 2607, @@ -280,7 +280,7 @@ } }, "coverage_ok": true, - "elapsed_s": 22.5, + "elapsed_s": 22.0, "generated": "2026-09-11", "gte_levers": { "direct": 357, @@ -291,15 +291,15 @@ "via_macro": 94, "what": "GTE ops whose clobbers exceed the canonical macro's (a scheduling steer): class-B levers INSIDE the headline number since T5 (2026-09-09), marked, 0 at the close" }, - "head": "4a503fce1", + "head": "d85a4e387", "headers": 3181, "levers_AB": { - "asm": 1889, - "bodies": 2009, - "distinct_bodies": 703, - "marked": 4077, - "pins": 2188, - "sites": 4077, + "asm": 1886, + "bodies": 2003, + "distinct_bodies": 697, + "marked": 4065, + "pins": 2179, + "sites": 4065, "unmarked": 0, "what": "register pins + asm statements excluding GTE ops: the classes the phase drives to 0" }, @@ -442,21 +442,21 @@ "$13": 6, "$14": 5, "$15": 1, - "$16": 78, + "$16": 77, "$17": 29, "$18": 26, "$19": 17, - "$2": 761, + "$2": 757, "$20": 7, "$21": 5, "$22": 3, "$23": 6, "$25": 1, "$3": 159, - "$4": 491, - "$5": 377, + "$4": 490, + "$5": 375, "$6": 60, - "$7": 26, + "$7": 25, "$8": 23, "$9": 21, "7": 1, @@ -464,29 +464,29 @@ "a1": 2, "v0": 2 }, - "sites": 2188, + "sites": 2179, "sp": 0, "spelling": { - "__asm__": 2165, + "__asm__": 2156, "asm": 23 }, "volatile_qualified": 0, "zero": 54 }, - "src_stamp": "b40650c8497ee9fa", + "src_stamp": "38f4f9771c81f665", "tus": 4121, "unclassified": 0, "union_AD": { - "bodies": 5774, + "bodies": 5768, "by_kind": { "main": 124, "md": 105, - "ov": 5379, + "ov": 5374, "resident": 6, - "shared": 160 + "shared": 159 }, "copies_in_multi": 4849, - "distinct_bodies": 1035, + "distinct_bodies": 1029, "multi_copy_classes": 110 }, "verbatim_excluded": { diff --git a/.run/P36/census/lever_census.txt b/.run/P36/census/lever_census.txt index da78d81fa..eab3b38d2 100644 --- a/.run/P36/census/lever_census.txt +++ b/.run/P36/census/lever_census.txt @@ -1,26 +1,26 @@ lever_census: 218 binaries · 4,121 TUs + 3,181 headers · coverage OK · unclassified 0 · verbatim excluded 13 fn / 14 sites (manifest 13) - coverage asm raw 22003 = live 15028 + macro-block 194 + comment/dead 6781 - coverage register raw 10830 = live 2238 + macro-block 18 + comment/dead 8574 + coverage asm raw 21991 = live 15016 + macro-block 194 + comment/dead 6781 + coverage register raw 10821 = live 2229 + macro-block 18 + comment/dead 8574 coverage volatile raw 4372 = live 1683 + macro-block 82 + comment/dead 2607 coverage builtin raw 599 = live 445 + macro-block 0 + comment/dead 154 coverage attribute raw 76 = live 76 + macro-block 0 + comment/dead 0 class sites in-bodies file-scope bodies distinct TUs marked unmarked kinds - A pins 2188 2188 0 1349 518 1076 2188 0 {'pin': 2188} - B asm 11196 11183 13 4609 675 1425 2373 8823 {'gte': 6355, 'gte-lever': 451, 'gte-unsigned': 270, 'barrier': 248, 'launder': 620, 'instruction': 224, 'asm-body': 13, 'keepalive': 333, 'verbatim-body': 2682} + A pins 2179 2179 0 1343 512 1075 2179 0 {'pin': 2179} + B asm 11193 11180 13 4606 673 1425 2370 8823 {'gte': 6355, 'gte-lever': 451, 'gte-unsigned': 270, 'barrier': 247, 'launder': 620, 'instruction': 224, 'asm-body': 13, 'keepalive': 331, 'verbatim-body': 2682} C volatile 1589 1437 152 495 94 609 14 1575 {'decl-body': 58, 'decl-file': 152, 'cast': 1377, 'param': 2} D register 50 50 0 47 47 6 0 50 {'register': 50} E asm-label 7800 1368 6432 1099 160 2090 0 7800 {'asm-label': 7800} F builtin 445 445 0 428 27 302 0 445 {'builtin': 445} G attribute 76 1 75 1 1 40 0 76 {'attribute': 76} - UNION A–D: 5,774 bodies · 1,035 distinct (addresses normalized) · 110 multi-copy classes holding 4,849 bodies · by kind {'ov': 5379, 'main': 124, 'shared': 160, 'md': 105, 'resident': 6} - THE PHASE'S NUMBER (pins + asm statements, GTE excluded): 4,077 sites in 2,009 bodies (703 distinct) · marked !FAKE 4,077 · UNMARKED 0 + UNION A–D: 5,768 bodies · 1,029 distinct (addresses normalized) · 110 multi-copy classes holding 4,849 bodies · by kind {'ov': 5374, 'shared': 159, 'main': 124, 'md': 105, 'resident': 6} + THE PHASE'S NUMBER (pins + asm statements, GTE excluded): 4,065 sites in 2,003 bodies (697 distinct) · marked !FAKE 4,065 · UNMARKED 0 orphan !FAKE markers (no pin/asm site on the line nor below): 0 marked ordinary-C fakes kept by Drew's S104 ruling (a) (`do { } while (0)`, dead initialisers; NOT levers): 50 GTE levers (clobbers beyond the canonical macro's): 451 sites (94 via a variant macro, 357 direct) · marked 451 · UNMARKED 0 · unsigned GTE statements 270 per-TU asm macro definitions outside the GTE header: 314 {'gte': 150, 'launder': 154, 'instruction': 9, 'barrier': 1} (GTE variants 64) - pins: 2,188 · $0 54 · $sp 0 · with initializer 203 · volatile-qualified 0 · bare-name 8 · spellings {'__asm__': 2165, 'asm': 23} + pins: 2,179 · $0 54 · $sp 0 · with initializer 203 · volatile-qualified 0 · bare-name 8 · spellings {'__asm__': 2156, 'asm': 23} whole-body asm routines in C shells, manifest PERMANENT (hand asm, NOT levers): 22 routines · 2,682 sites (2,660 private copies + 22 shared headers); asm-bodies NOT permanent (levers): 13 site(s) ['func_8001E378:DECOMPILE-NOW', 'func_80020F34:DECOMPILE-NOW', 'func_800249F0:DECOMPILE-NOW', 'func_80025CBC:DECOMPILE-NOW', 'func_80026514:UNCERTAIN', 'func_800268D0:UNCERTAIN', 'func_80027058:DECOMPILE-NOW', 'func_80027200:DECOMPILE-NOW', 'func_800CBA44:DECOMPILE-NOW', 'func_8017D810:DECOMPILE-NOW', 'func_8017E26C:UNCERTAIN', 'func_80184440:DECOMPILE-NOW', 'func_801A3BCC:DECOMPILE-NOW'] - asm kinds: {'asm-body/direct': 13, 'barrier/direct': 248, 'gte/direct': 197, 'gte/via-macro': 6158, 'gte-lever/direct': 357, 'gte-lever/via-macro': 94, 'gte-unsigned/direct': 270, 'instruction/direct': 202, 'instruction/via-macro': 22, 'keepalive/direct': 333, 'launder/direct': 578, 'launder/via-macro': 42, 'verbatim-body/direct': 2682} + asm kinds: {'asm-body/direct': 13, 'barrier/direct': 247, 'gte/direct': 197, 'gte/via-macro': 6158, 'gte-lever/direct': 357, 'gte-lever/via-macro': 94, 'gte-unsigned/direct': 270, 'instruction/direct': 202, 'instruction/via-macro': 22, 'keepalive/direct': 331, 'launder/direct': 578, 'launder/via-macro': 42, 'verbatim-body/direct': 2682} instruction mnemonics: {'la': 136, 'addiu': 22, 'addu': 22, 'RTP_SND': 22, '.section': 7, 'lui': 3, 'lh': 3, 'and': 2, 'mult': 1, 'mfhi': 1, 'sll': 1, 'li': 1, 'lw': 1, 'nop': 1, 'srl': 1} gte mnemonics: {'gte_ldv0': 758, 'gte_stlvnl': 593, 'gte_stsxy': 448, 'gte_rtps': 439, 'gte_stflg': 415, 'gte_rtpt': 352, 'gte_SetRotMatrix': 253, 'gte_stsxy3': 236, 'gte_SetTransMatrix': 231, 'gte_rtv0tr': 228, 'gte_ldv3c': 184, 'gte_ldv3': 177, 'gte_stsv': 161, 'lwc2': 158, 'gte_stsz4': 149, 'gte_stsz3': 147, 'gte_stszotz': 134, 'gte_dpcl': 134, 'gte_stclmv': 114, 'gte_stsxy3_f3': 111, 'gte_nclip': 108, 'gte_stopz': 108, 'gte_stsxy3c': 108, 'gte_rtir': 81, 'gte_stsxy3_ft3': 79, 'gte_ldclmv': 78, 'gte_avsz4': 56, 'gte_stotz': 52, 'gte_ldrgb': 30, 'gte_nccs': 25} asm-bearing macro definitions: 314 (20 names, 3 with >1 text) kinds {'gte': 150, 'launder': 154, 'instruction': 9, 'barrier': 1} @@ -29,4 +29,4 @@ lever_census: 218 binaries · 4,121 TUs + 3,181 headers · coverage OK · unclas src/shared/ov/func_80178004.h pins got 8 expected 26 N-A ov_SC03_006 func_80184034 bare-name pins got 0 expected 3 N-A engine_prelude.h asm sites (a macro definition only) got 0 expected 0 OK - elapsed 22.5 s + elapsed 22.0 s diff --git a/docs/lever-progress.tsv b/docs/lever-progress.tsv index 1263b2ab9..ef9f53301 100644 --- a/docs/lever-progress.tsv +++ b/docs/lever-progress.tsv @@ -69,3 +69,4 @@ date milestone head sites_AB pins asm bodies_AB distinct_AB marked unmarked gte_ 2026-09-11 S105 f1 (4) 389373f6d 4125 2212 1913 2025 719 4125 0 451 314 1589 50 7800 445 76 2026-09-11 S105 f3 (4 + 1 proven) cadb6cacc 4111 2203 1908 2021 715 4111 0 451 314 1589 50 7800 445 76 2026-09-11 S105 f4 (5) + f5 (7) 4a503fce1 4077 2188 1889 2009 703 4077 0 451 314 1589 50 7800 445 76 +2026-09-11 S105 f7 (6) + R22 regen (1) d85a4e387 4065 2179 1886 2003 697 4065 0 451 314 1589 50 7800 445 76 diff --git a/docs/levers.md b/docs/levers.md index 0f25b6c56..a198ad816 100644 --- a/docs/levers.md +++ b/docs/levers.md @@ -115,6 +115,7 @@ counted, not marked). E, F and G belong to the canonical type layer and are the | 2026-09-11 | S105 f1 (4) | 2212 | 1913 | **4125** | 2025 | 719 | 451 | 314 | 1589 | 50 | 7800 | 445 | 76 | `389373f6d` | | 2026-09-11 | S105 f3 (4 + 1 proven) | 2203 | 1908 | **4111** | 2021 | 715 | 451 | 314 | 1589 | 50 | 7800 | 445 | 76 | `cadb6cacc` | | 2026-09-11 | S105 f4 (5) + f5 (7) | 2188 | 1889 | **4077** | 2009 | 703 | 451 | 314 | 1589 | 50 | 7800 | 445 | 76 | `4a503fce1` | +| 2026-09-11 | S105 f7 (6) + R22 regen (1) | 2179 | 1886 | **4065** | 2003 | 697 | 451 | 314 | 1589 | 50 | 7800 | 445 | 76 | `d85a4e387` | ### The campaign — every batch, from the ledger (derived on every render) @@ -418,7 +419,10 @@ counted, not marked). E, F and G belong to the canonical type layer and are the | `s105_f3` | 2026-09-11 | E | 0 | 0 | 0 | 14 | 4 | | `s105_f4` | 2026-09-11 | E | 0 | 0 | 0 | 13 | 5 | | `s105_f5` | 2026-09-11 | E | 0 | 0 | 0 | 20 | 7 | -| **total** | | | **17,122** | **20,778** | **283** | **30,348** | **10,737** | +| `s105_f7` | 2026-09-11 | E | 0 | 0 | 0 | 9 | 5 | +| `s105_f7_minlever` | 2026-09-11 | E | 0 | 0 | 0 | 2 | 0 | +| `s105_r22b` | 2026-09-11 | E | 0 | 0 | 0 | 1 | 1 | +| **total** | | | **17,122** | **20,778** | **283** | **30,360** | **10,743** | *Generated by `tools/lever_progress.py --render` from `.run/P36/census/lever_census.json` and `.run/P36/delever/ledger.jsonl`; the series lives in `docs/lever-progress.tsv` (R75: published numbers are generated, never typed).* diff --git a/phase-ends/CURRENT_PHASE.md b/phase-ends/CURRENT_PHASE.md index e0d7128b1..9a87d92a8 100644 --- a/phase-ends/CURRENT_PHASE.md +++ b/phase-ends/CURRENT_PHASE.md @@ -2023,17 +2023,37 @@ accumulate here as the phase produces them.** `4a503fce1` → `lever_census --check: 4,077 pin/asm sites, 4,077 marked !FAKE, 0 UNMARKED — OK` (exit 0) → snapshot (4,111 → **4,077**; 2,188 pins + 1,889 asm in 2,009 bodies). **Session so far: 25 of 25 drawn classes at 0 (21 plain C, 4 minimum-lever), 4,152 → 4,077.** -## 🛑 SESSION CHECKPOINT — S105 (2026-09-11, LIVE — refreshed at every landing): T0–T6 ☑, **T7 RUNNING at Drew's cap of TWO agents**. 4,152 → **4,077 sites** so far; f1–f5 landed (25/25), f6 + f7 IN FLIGHT; generators **R44–R46** + the R22 `&&` blind-spot fix; R22 `check-all: 218 passed, 0 failed of 218` at `4a503fce1` | `lever_census --check` exit 0 (4,077 marked, 0 UNMARKED, 0 orphans) +- **S105 — f7 landed: 6 of 6 at 0 (5 plain C, 1 minimum-lever); two more R22 blind spots fixed and one free header bank; R22 + 218/218; 4,077 → 4,065 sites.** f7 (`ov_SC01_077_jr_8017AE2C`, ≈353k tokens, 44 min): `func_8017EB2C` 9 → 0 (`y += c % K` with no + target variable — `expand_divmod` puts quotient and remainder in the named pseudo, `expmed.c:2787`), `func_8017F5BC` 12 → 0 (two + independent stores swapped: the order sets a birthing load's life, `sched.c:2614-2660`; 36 of 120 orders close), `func_80180590` + 13 → 0 and `func_8017F114` 41 → 0 (per-arm store/call — c6's mechanism; a goto chain → `for`; 4 pins → 0), `func_8017FD14` 37 → 0 + on the first `--try` (every access off the real biv — the giv-base law, `loop.c:4193-4196`), `func_8017EF50` (×2, its twin in + ov_SC02_000 propagated) 10 → 0 only with its two pins — the keepalive was DEAD (ablated alone: 0), the pins are `find_free_reg`'s + lowest-free rule (`local-alloc.c:2073`), unreachable by any priority order (~650 bodies + `localalloc_sim` 0 mismatches) → **minimum-lever + 3 → 2**. `bank_list.sh`: `IDENTICAL … KEPT` ×6, `--propagate: 1 of 1` (`3d2949e3a`…`d62cb1170`). **Harvest — R22 had two more blind spots** + (R14 — read from the agent's first-try close that the S105 regen had judged NO-CANDIDATE): it took the LITERAL base of `q = E + c1` + (`prim`, which never steps) and stopped instead of trying the same-base sibling that does (`pp = prim + 0xC`), and its assigns scan + read `*(u16 *)fp = v;` as an ASSIGNMENT to `fp` (the `)` before the name — R44/R45 shared the scan). Fixed (`bb2012f78`), selftest + case, SETUP; **known-true: R22 alone now reproduces f7's close of func_8017FD14, 37 → 0.** Regen `s105_r22b` (R22 R44 R45): `603 of + 603 classes judged in 25 s — MATCH 1` → **`src/shared/ov/func_80146B9C.h` banked, IDENTICAL on 141 objects** (`d85a4e387`). Three + R22 defects in one session (`&&`, the literal base, the cast store) — every pre-S105 R22 refusal was suspect and has now been + re-judged. METHOD step 20. R22 (`.run/P36/s105/r22_e.log`) **`check-all: 218 passed, 0 failed of 218`** (80 s) → baseline at + `d85a4e387` → `lever_census --check: 4,065 pin/asm sites, 4,065 marked !FAKE, 0 UNMARKED — OK` (exit 0) → snapshot (4,077 → **4,065**). + **Drew (mid-turn): *"dont start any new agents at this time. let the current ones finish"*** → no draw after f8; f6 and f8 finish and are + banked; the session then checkpoints. + +## 🛑 SESSION CHECKPOINT — S105 (2026-09-11, LIVE — refreshed at every landing): T0–T6 ☑, **T7 RUNNING at Drew's cap of TWO agents**. 4,152 → **4,065 sites** so far; f1–f5 + f7 landed (31/31), f6 + f8 IN FLIGHT — **Drew: no new agents after these**; generators **R44–R46** + the R22 `&&` blind-spot fix; R22 `check-all: 218 passed, 0 failed of 218` at `d85a4e387` | `lever_census --check` exit 0 (4,065 marked, 0 UNMARKED, 0 orphans) ### 0. How to use this block — READ THIS FIRST A fresh session reads CLAUDE.md's load order, replays this block verbatim, confirms the effort (S105 runs at `/effort high` on Opus 5 1M; every agent on Opus) and executes §2. **Drew's cap is TWO concurrent agents (S105 open).** What may be in flight when this is read: **f6** (`src/ov_SC07_007/ov_SC07_007_jr_8017BEBC.c`: func_8018122C, func_80180FA4, func_8017F584, func_80181F4C, func_80182184, -func_8017DFB8) and **f7** (`src/ov_SC01_077/ov_SC01_077_jr_8017AE2C.c`: func_8017EB2C, func_8017EF50, func_8017F5BC, func_80180590, -func_8017FD14, func_8017F114). A dead session's agents leave `body.c` + `mechanism.md` in +func_8017DFB8) and **f8** (`src/ov_SC02_005/ov_SC02_005_jr_80185E80.c`: func_8018622C, func_80186424, func_8018A6A0, func_8018CA74, +func_8018D270). **Drew (S105, mid-turn): no new agents after these — let them finish.** A dead session's agents leave `body.c` + `mechanism.md` in `.run/P36/agents/__/` (R67): `--try` each `body.c`; a 0 banks via `.run/P36/s105/bank_list.sh` (one line per body `TU FN FILE LABEL MSG`; a `*minlever*` label adds `--allow-residue`); anything else is a reading to record. Briefs for the NEXT draws are -written and their packs built: `.run/P36/s105/BRIEF_f8.md` (ov_SC02_005_jr_80185E80, 5 classes); `.run/P36/s105/mkbrief.py ` builds the packs + brief for any TU of `pick.json` — launch each as a general-purpose Agent whose prompt names the brief file (the f1/f3 prompts are the +written and their packs built: `.run/P36/s105/BRIEF_f9.md` (ov_SC02_027, 6 classes), `BRIEF_f10.md` (ov_SC06_006, 4); `.run/P36/s105/mkbrief.py ` builds the packs + brief for any TU of `pick.json` — launch each as a general-purpose Agent whose prompt names the brief file (the f1/f3 prompts are the pattern). First commands: ``` git log --oneline -1 && git status --short | grep -v '^??' | wc -l @@ -2049,7 +2069,7 @@ git log --oneline -1 && git status --short | grep -v '^??' | wc -l - The free sweep is SPENT: every residue class has been judged by every family R2–R46 (S105 `s105_r43_*`, `s105_r44r22`, `s105_r45r46`). ### 2. NEXT -1. Land f6/f7 (§0) → launch f8, then `mkbrief.py f9 ` … (two at a time) → then draw the next TUs from `pick.py` (ov_SC01_077 6 cls, then the +1. Land f6/f8 (§0); on Drew's word, launch f9, f10, then `mkbrief.py f11 ` … (two at a time) → then draw the next TUs from `pick.py` (ov_SC01_077 6 cls, then the 5-class TUs), one brief per TU, 4–7 classes each, skipping ARG-ONLY (`$4`–`$7`-only pins = the missing-parameter shape → structs phase) and the park list (S104 §2.4 + f2's func_800385C0 signature change). 2. The 21 UNSTRIPPABLE classes (`.run/P36/s105/unstrippable.json`: 6 comment-boundary strips, 6 macro-carried launders, 5 instructions