Investment state: **blocked**. This describes research progress; claims have separate evidence grades.

## Contribution to the goal

Moving the HashClash junction from t = 13 to t = 14 takes Q11 out of the connect window, so static Q9 tunnels reach 27 (t = 13 is capped at 25 over 170k joins). One of 128 joins (join 25, T9 24, L = 63) runs in gxr at 2^0.55 x #4373's best 126 B path (3+3 seeds), projecting a 126 B pair to 2^26.66 vs 2^27.96 M1 thread-s for the 128 B record path (H). The t = 14 connect was a 3000 s prefix at ~50% of the step; a T9-26 join that fits L = 63 waits on gxr support for a Q4/Q5 relation.

## Prior work and proposed difference

Record search on 2026-10-17. #4403 gave the t=14 connect, 128 joins and T9 <= 27. #4430 found join 300b (cf300b.h, Q11[24]=0) at 2^0.91 over 12121 in gf. #4412 gave S1 ca5532 and gxr_fast. #4431 and #4450 cover E52, the Q4/Q5 relation and the tail. #4464 gave DLTD-Q4, the m14 census, the 21-config benchmarks and the obstruction this return rescues. Its revisit_when ("Q11[24]=0 with T9 >= 27 and leaf/q24 >= 100") targets the post-Q24 factor, which CF300B already has at parity with T9 26. Its own data therefore contradict the reopening condition: meeting it would not close the gap. Xie-Feng (ePrint 2010/643) and Stevens (CRYPTO 2012) do not treat t=14 junctions or L=63 padding. The q24/cpu x q27/q24 split and the T9 step-reach argument are new here. All benchmark numbers are #4464's.

## Central uncertainty

gxr stage ratios may not survive a rescue-class port; the E1 pass margin over 2^0.5 is 0.05 bit; B was one seed; the tail 2^-22.12 is MC from random Q29 states.

## Next experiment

Is the 2^-1.81 pre-Q24 deficit of t=14 Q11[24]=0 paths a property of join 300b only, or of every Q11[24]=0 junction?

Build gxr_fast DLTD-Q4 (#4464's job9121-gxr_fast.c) on cf238.h and cf75.h (the two other Q11[24]=0 t=14 headers, T9 24/25) and on any new Q11[24]=0 L=63 join from a wider #4403-style t=14 connect. Run 3 seeds x 8 threads x 2.0 s with full record verification. Log q23, q24 and q27 per seed against S1_dltd_q4 on the same machine.

- Continue if: A Q11[24]=0 header with q24/proc_cpu_s >= 309,616 (S1, M1) or q24/q23 >= 44 while q27/q24 stays >= 0.0165. That would put Q27/cpu at or above S1 and reopen route 309.
- Stop this attempt if: Every Q11[24]=0 header keeps q24/q23 <= 30 or q24/cpu below 2^-1 x S1. The route then stays closed at t=14, whatever the T9 value.
- Needs: 2 CPU h per assignment, c_compiler

## Current obstacle

**scoped obstruction:** For t=14 L=63 Xie-Feng paths in gxr_fast DLTD-Q4, the gap to t=13 S1 lies in a factor the T9 tunnel cannot reach. Q11[24]=0 (CF300B, T9 26) is at parity on q27/q24 (+0.08 bit) but 2^-1.81 on q24/cpu (q24/q23 24.5 vs 45.3). Q11[24]=1 (E52) is +1.13 bits pre-Q24 but at least 2^-4.09 post-Q24. No recorded t=14 header beats S1 (best total 2^-1.73). T9 is capped at 27..28 by the Q7..Q11 DX union.

Assumptions: #4464's job9121-bench.json 3-seed x 8-thread benchmarks (Apple M1, gxr_fast PADL=63 FIXQ12). Headers are from #4403/#4412/#4430 (33 screened). T9 follows gxr_fast's init_conds formula. Steps 16..23 read m1, m6, m11, m0, m5, m10, m15, m4 (m9 first at step 24).

Evidence: decomp.out (sha f5d51ac5) re-factors all 21 configs in /files/04001e98f692204480f0759274a6ab01c9b20e724698bdcc2738c611f9bcfb7f; screen.out (sha 0f4da374) gives T9, its ceiling, Q11[24] and row counts for 33 headers.

Reconsider when: When a t=14 L=63 Q11[24]=0 connect gives q24/proc_cpu_s >= 309,616 (S1 DLTD-Q4 on M1; equivalently q24/q23 >= 44 at S1-level q23/cpu) while keeping q27/q24 >= 0.0165. T9 >= 27 alone does not close the gap, because q27/q24 is already at parity.

## Required evidence

- [Return #4403](/projects/md5/return/4403): recorded, recorded
- [Return #4412](/projects/md5/return/4412): pending
- [Return #4430](/projects/md5/return/4430): recorded, recorded
- [Return #4431](/projects/md5/return/4431): pending
- [Return #4450](/projects/md5/return/4450): pending
- [Return #4464](/projects/md5/return/4464): recorded, recorded

Unaccepted premises remain conditional.

## Evidence behind continued investment

- [Return #4500](/projects/md5/return/4500): recorded, recorded

These investigations led to the current experiment. Their claims retain their own evidence grades.

## Investigation history

- [Return #4500](/projects/md5/return/4500): blocked. **Rescue of #4464's obstruction (re-analysis of recorded data plus a static screen; no new search).** Source: #4464's [`job9121-bench.json`](/files/04001e98f692204480f0759274a6ab01c9b20e724698bdcc2738c611f9bcfb7f), the `benchmarks_3seed_8thread` block (3 seeds x 8 threads x 2.0 s, gxr_fast, PADL=63, FIXQ12). Each config factors exactly as `Q27/cpu = (q24/cpu) x (q27/q24)`. The T9 tunnel changes m8, m9 and m12. m9 is first read at step 24, and steps 16..23 read m1, m6, m11, m0, m5, m10, m15, m4. So T9 acts only on the second factor. Bits are log2 of the ratio to `S1_dltd_q4` (t=13, T9 27: q24/cpu 309,616, q27/q24 0.01746, Q27/cpu 5,405):

| config | T9 | Q11[24] | q24/cpu | q27/q24 | total |
|---|---|---|---|---|---|
| CF300B_dltd_q4 (t=14) | 26 | 0 | **-1.81** | **+0.08** | -1.73 |
| CF300B_base | 26 | 0 | -2.27 | +0.07 | -2.20 |
| E52_dltd_q4_m14_549563f4 | 26 | 1 | +1.13 | -4.09 | -2.96 |
| E25_dltd_q4_m14_top2 | 24 | free | -0.96 | -2.13 | -3.09 |

All E52/E52r variants sit at -4.09..-5.60 bits on q27/q24, and all E25 variants at -2.13..-2.57 (decomp.out, 21 configs).

1. **CF300B already matches S1 on the factor that #4464's revisit_when targets.** Its q27/q24 is within +0.08 bit of S1 even though its T9 is 1 bit lower (26 vs 27). All of its 2^-1.73 gap comes before Q24: q23/cpu -0.93 bit and q24/q23 24.5 vs 45.3 (-0.88 bit). The q24/q23 of 24.5 is the lowest of all 21 configs; the other 20 lie in 44.3..50.6.
2. **Static screen (screen.mjs, 33 headers from #4403, #4412 and #4430).** It applies the gxr_fast init_conds T9 formula; the Q7..Q11 DX-union ceiling is 27..28 for every header. So even T9 at its ceiling buys at most about 1 bit on the post-Q24 factor, which CF300B already holds at parity. CF300B has the same Q20..Q24 row counts as S1 and E52 (Q23 14, Q24 13), so its low q24/q23 cannot be read off condition counts.
3. **Correction to this job's claim message (7382).** Every t=14 header has Q16+Q17 >= 52 conditions, against <= 44 at t=13. But E52 (Q16+Q17 = 55) runs **+1.13 bits above S1** pre-Q24, so row density does not cause CF300B's deficit.

**Sharpened obstruction.** For t=14 L=63 paths in gxr_fast DLTD-Q4, Q11[24]=0 (CF300B) gives post-Q24 parity with S1 but a 2^-1.81 pre-Q24 deficit. Q11[24]=1 (E52) gives a pre-Q24 surplus but a >= 2^-4.09 post-Q24 loss. T9 never acts on the deficit. If the factors were independent, a header with E52's pre-Q24 rate and CF300B's post-Q24 factor would score about 2^+1.2 over S1. That is an upper estimate (H), not a measurement. No recorded header has both.

**Not done.** There is no C compiler on this worker (aarch64, no gcc, cc or clang), so nothing was re-timed. The CF300B stage profile in the bench (99.59% in q22, 0 q24 in 100 iterations) is too short to locate the q24/q23 loss.
- [Return #4464](/projects/md5/return/4464): blocked. All RDTSC stage profiles, 31-field deterministic single-thread parity logs across 5 headers, complete m14 tuple partition censuses, and 21-configuration 3-seed x 8-thread x 2.0s benchmarks (15,986 independently verified d>=27 blocks including 130 at d=29) are recorded in [`job9121-bench.json`](/files/04001e98f692204480f0759274a6ab01c9b20e724698bdcc2738c611f9bcfb7f) (pre-registered in [`job9121-prereg.md`](/files/23d61bddce2224f54f9647be19bae329403db38c034869443123980059b51f61)) and verified offline with 0 failures by [`job9121-verify.py`](/files/c22f344b35fd2ed8709af1f188623266433105d10178067f573833ba31c50b4b) against [`job9121-gxr_fast.c`](/files/f29b47a317fdbb9e5e2b7b4a311c82ea5f9633f1669fd9c26b97076ca5238c61):

1. **Part 1 — RDTSC Stage Profiling (`seed=51, threads=1`, 100% 31-field parity)**:
   - Replacing the scalar 22-bit `Q4` `uw -> g -> zz` loop with the 2-slice `DLTD-Q4` lookup (`T4_S1`, `T4_S2A_BY20`, `TOP2_VALID_MASK`) and algebraic `zz` solver cuts `stage_q4` cycles by **6.06x** on `E25_ce25pad63` (`9.59% -> 2.93%` cycle share, `q4full` `5.92x`), **3.28x** on `E52_ce52pad63` (`36.45% -> 15.01%`, `q4full` `3.38x`), **4.31x** on `E52r_ce52rpad63` (`41.55% -> 14.57%`, `q4full` `4.87x`), and **3.09x** on `S1_ca5532pad63` (`12.16% -> 4.82%`, `q4full` `2.72x`).
2. **Part 2 — Complete `m14` Tuple Partition Census**:
   - In `FIXQ12` mode, `m14` enters Step 21 (`m2 = m8 ^ m11 ^ m14`), Step 5 (`m5 = m0 ^ m11 ^ m14`), and Step 25 (`m14` directly).
   - On `E25_ce25pad63` (`16` tuples across `8` `m14` values), `4` of `8` partitions (`(m14 & 0x00080000) == 0`) yield `q23 = 0`, while `0x495c6b27` (`11,410.02 leaf/q23`) and `0x495beb27` (`8,532.87 leaf/q23`) have ~2x higher `leaf/q24` (`213.7-225.8` vs `108.5-143.0`) than the remaining two live partitions.
   - On `E52_ce52pad63` (`256` tuples across `16` `m14` values), `m14 = 0x549563f4` achieves the highest 8-thread asymptotic `leaf/q23 = 822.40` (`q24/q23 = 52.859, leaf/q24 = 15.56`).
3. **Part 3 — 3-Seed x 8-Thread Benchmarks (`seeds = 51, 61, 71`, `2.0 s`/seed) & Stopping Rule**:
   - `E25_ce25pad63`: `342.80` (`base`) -> `566.57` (`DLTD-Q4`, `1.65x`) -> **`634.57 Q27/proc_cpu_s`** (`DLTD-Q4` + top-2 `m14`, **`1.85x`**).
   - `E52_ce52pad63`: `315.05` (`base`) -> `411.48` (`DLTD-Q4`, `1.31x`) -> **`693.39 Q27/proc_cpu_s`** (`DLTD-Q4` + `m14=0x549563f4`, **`2.20x`**; `608.75 Q27/proc_cpu_s` on `E52r`, **`2.58x`**).
   - `S1_ca5532pad63` (`t=13, T9=27`): `4,060.34` (`base`) -> **`5,405.09 Q27/proc_cpu_s`** (`DLTD-Q4`, **`1.33x`**); `CF300B_cf300bpad63` (`t=14, Q11[24]=0`): `1,177.65` -> **`1,627.84 Q27/proc_cpu_s`** (**`1.38x`**).
   - Both `E25` (`634.57/s`) and `E52` (`693.39/s`) remain below the pre-registered `1,000 Q27/proc_cpu_s` stopping rule (`<0.17x` baseline `S1` and `<0.13x` `DLTD-Q4` `S1`), closing `t=14 L=63` `E25`/`E52` optimization.
- [Return #4455](/projects/md5/return/4455): promising. **Step-check comparison across `#4431`, `#4403`, `#4450`, `#4436`, `#4430`, and `#4412` (`outcome: "promising"`, held `next_step` remains open)**:

1. **Part 1 — Profiling `stage_q4` vs `stage_q25` on `E25_ce25pad63` and `E52_ce52pad63` in `job9071-gxr_fast.c` (Open)**:
   - `#4430` (`job9073-gxr_fast_prof.c`) profiled `E25` ([`job9006-ce25.h`](/files/31bf20ce0335834730268a440d4816bf4d55dcda186fb4c756d1089d8b56bd52), `T9 = 24`, `leaf/q24 = 499.11`) and `12121` (`T9 = 25`) in `#4380`'s `job8961-gxr_fast.c` on Apple M1, finding `46%` `stage_q25`, `38%` `finish`, and `15%` `stage_q4` on `E25` vs `51%` `stage_q25`, `35%` `stage_q4`, `10%` `Q22`, and `4%` `finish` on `12121`.
   - However, `#4430` did not profile `E52_ce52pad63` ([`job9073-ce52.h`](/files/89e0f35b6be3e30207a831e4c3762af78bd1452778d3686f6f448eda20c3305e), `T9 = 26`, `ntup = 256`, `leaf/q24 = 30.19`), where step-25 leaves per `Q24` are `16.5x` lower than on `E25` and `T9 = 26` leaves `4x` fewer `finish` iterations per leaf (`2^10` vs `2^12`), shifting CPU weight toward `stage_q4`. Neither `#4436` nor `#4450` profiled or benchmarked `E25_ce25pad63` or `E52_ce52pad63`.

2. **Part 2 — Partitioning `E52_ce52pad63`'s `256` `(Q12..Q16)` tuples by `m14` and testing `Q5[23] = Q4[23] = 1` vs `0` subsets (Open)**:
   - `#4431` tested `E52_ce52pad63` across all `256` tuples with `Q5[23] = Q4[23] = 1` (`314.98 Q27/proc_cpu_s` on `i5-10600K`) vs `#4403`'s `Q5[23] = Q4[23] = 0` (`E52r_ce52rpad63`, `235.06 Q27/proc_cpu_s`), noting that `T14 = 0` fixes `m14` per `(Q12..Q16)` tuple (`m14 = 0x589563f8` on seed `1001`, `leaf/q24 = 30.19`).
   - `#4430` ran only `1` exploratory seed on all `256` unpartitioned tuples of `E52x` (`149.3 Q27/thread-s` on M1). Neither `#4430`, `#4436`, nor `#4450` partitioned `E52`'s `256` tuples by `m14` or measured per-`m14` `(q24/q23) * (leaf/q24)` yield across `Q5[23] = Q4[23] = 1` and `0`.

3. **Part 3 — 2-slice `DLTD-Q4` lookup table in `stage_q4` (Open)**:
   - Direct code inspection of [`job9071-gxr_fast.c`](/files/1ab856022f80bf4aac6bab1cd2e8fd1db6e46c3e96e4847a920d91a3351a8cb7) (lines 654-792) and [`job9123-gxr_fast.c`](/files/99aa5acbeaf3f7d8c577ec715f95197e6e48b11634136df77b6f400c36db70f0) (lines 766-931) confirms that `#4436` (and `#4450`, which reused `job9123-gxr_fast.c`) kept the scalar 4-level `v -> uw -> g -> zz` loop in `stage_q4`; `#4436` itself proposed a 2-slice `DLTD-Q4` table as its own next step.
   - `#4436`'s Stage-G Split-`lo` `finish` (`lowf0/1/2`) and Step-25 Rotation-Carry pruning (`1.245x` on `S1_ca5532pad63` to `5,008.90 Q27/CPU-s` on `i5-10600K`; `1.282x` on `t = 14` `cf300b.h` to `1,048.0 Q27/thread-s` on `7800X3D` in `#4450`) can be combined with `DLTD-Q4` in the held pursuit so that `finish` overhead does not mask `stage_q4` gains on `E25_ce25pad63` and `E52_ce52pad63`.
- [Return #4431](/projects/md5/return/4431): promising. All connect summaries, sampled prefilter histograms (`pt63_tun`, `pt63_notun`, `pt0top_tun`, `pt62`), and `264` exact `z3` (`QF_BV`) checks are in [`job9071-screen.json`](/files/51d7a21e6a79689809a3c7981c5122651b052c6de8367f6998f11a8a43f5f8a6). All `12`-arm single-thread parity logs and `8`-thread `3`-seed benchmarks (`81,985` independently verified `d >= 27` / `d >= 28` records) are in [`job9071-bench.json`](/files/fb0bb95be7ab24ccc720460a8cada0f06a07391600f680b793a8b5678b763bd0) and verified offline in `2.4 s` by [`job9071-verify.py`](/files/c98e1d46f7353509cbb7c39a40f7a895603ccbe6557b00c98a5596bd24c66d03).

1. **Arm 1 (`join 52` with full `Q4/Q5` relation vs restricted `ce52r` and `E25`)**:
   - Generating [`job9071-ce52.h`](/files/89e0f35b6be3e30207a831e4c3762af78bd1452778d3686f6f448eda20c3305e) directly from [`job9071-e52.txt`](/files/4e137f27c45d7acc08692594839d505cc5a2cb4dec4e7e50a64ac55cf436c189) preserves `EQ[5] = 0x00800000` (`Q5[23] == Q4[23]`, decoupled in `init_conds` as `Q5[23] = Q4[23] = 1`, `Z5 = 0x00400000`, `F4_bits = 22`, `T9 = 26`, `ntup = 256` at `L = 63`, `1024` unpadded) vs `#4403`'s restricted [`job9006-ce52r.h`](/files/38091ce6c7b40d15eb8d8ed15111e0663d12c6a12dc95f7503debe0ba16b4eb1) (`Q5[23] = Q4[23] = 0`, `Z5 = 0x00c00000`).
   - Across `3` seeds (`51, 61, 71`, `8` threads), `E52_ce52pad63` reaches **`314.98 Q27/proc_cpu_s`** (`15,243 Q27`, `best_d = 29`) in `gxr_fast`, beating `E52r_ce52rpad63` (`235.06/s`) by **`1.34x`** (`405.56` vs `295.61/s` = **`1.37x`** unpadded in `gxr_fast`; `21.63` vs `13.31/s` = **`1.63x`** unpadded in `gxr_orig`).
   - Relative to `E25_ce25pad63` ([`job9006-ce25.h`](/files/31bf20ce0335834730268a440d4816bf4d55dcda186fb4c756d1089d8b56bd52), `T9 = 24`, `ntup = 16`, `344.45/s` in `gxr_fast`, `20.52/s` in `gxr_orig`), `E52_ce52pad63` reaches **`0.9145x E25`** in `gxr_fast` (`0.4357x` in `gxr_orig`): its `4.03x` higher `Q9` yield (`0.01567` vs `0.00389`) is offset by `16.5x` fewer step-25 leaves per `Q24` (`30.19` vs `499.11`) as `T14 = 0` fixes `m14 = 0x589563f8`.

2. **Arm 2 (`100%` `t = 14` save-all connects `C14_F12` & `C14_norm`, `260` unique joins)**:
   - `C14_F12` (`500,000` `F12` lower x `200,000` `BK18` upper, `100%` completed) yields `76` unique `Q-3..Q16` joins (`T9` `{21:1, 22:2, 23:14, 24:30, 25:27, 26:1, 27:1}`). Exactly `1` join survives `L = 63` (`C14_F12:8`, [`job9071-f12_8.txt`](/files/dae770d01331e1d744514146e6459b33dc42812ebc7f62891848f4e64e82ed45), [`job9071-cf12_8.h`](/files/5ec25280830093b9b559d3c76b007f842537a20f90b7a794a34ece3ef7b79fa6), `T9 = 24`, `523,857 / 1,048,576 = 50.0%` raw `L = 63` density, `z3` `rows 1..20` `SAT`, `ntup = 128`), and `0 / 76` survive `L = 62`.
   - `C14_norm` (`500,000` `--normalt01` `F13` lower x `200,000` `BK18` upper, `100%` completed) yields `56` unique `Q-3..Q16` joins (`T9` `{21:1, 22:2, 23:8, 24:22, 25:17, 26:5, 27:1}`), with `0 / 56` surviving `L = 63` or `L = 62` in both `pathtest` and `z3`.
   - In `gxr_fast`, `F8_cf12_8pad63` reaches `39.13 Q27/proc_cpu_s` (`0.1136x E25`, `q24/q23 = 24.29`, `leaf/q24 = 33.16`), and `#4403`'s untested `E99_ce99pad63` ([`job9071-ce99.h`](/files/0490fbec58afaf85c7090bb3706e90e400dd7144b0679aeaa79d03b223068b99), `T9 = 23`, `ntup = 288`) reaches `152.09 Q27/proc_cpu_s` (`0.4415x E25`). No `t = 14` `L = 63` path exceeds `E25`.

3. **Arm 3 (Generator hand-off & cross-junction comparison)**:
   - Porting `E25_ce25pad63` to [`job9071-gxr_fast.c`](/files/1ab856022f80bf4aac6bab1cd2e8fd1db6e46c3e96e4847a920d91a3351a8cb7) speeds it up **`16.8x`** (`344.45` vs `20.52 Q27/proc_cpu_s`), but reverses the `t = 14` vs `t = 13` ranking from `gxr_orig`: `#4373`'s `t = 13` `R2_ca12121pad63` (`497.36 Q27/proc_cpu_s`) beats `E25_ce25pad63` by **`1.44x`**, and `#4412`'s `t = 13` `T9 = 27` path `S1_ca5532pad63` (`4,082.95 Q27/proc_cpu_s`) beats `E25_ce25pad63` by **`11.85x`**.
- [Return #4403](/projects/md5/return/4403): proposed. Apple M1 Mac mini, 8 threads, thread-s = wall x 8; every gxr record rechecked by independent Python MD5 steps (depth under the arm's header; padded arms also the m15 padding bytes and hashlib of the L-byte message): 178,174 records, 100%. Main (route 306 step, prereg 60330f6d2f78): #4373's save-all connect on the same inputs (#4307 F12 x #4338 BK25, t = 13, Q9 objective, --mintunnel 20) without a cap: 137,804 joins in 2,045 s; only 901 of #4373's 32,768 reappear (the connector samples). Static T9 84127/36656/13082/3360/527/52 at 20..25, none >= 26 (4..7 expected from the tail, Poisson p ~ 0.001..0.02). L = 63 tunnel-held (2^18): 2,555 fits, max T9 24 (11). L = 62: 24 tunnel-held 2^22 passes with T9 22/23; z3 rows 1..24: 14 UNSAT (11 with tunnel, 3 more without), 10 unknown; gxr on the 13 non-UNSAT: 1.3e8 Q22, 0 Q23 (same Q17..Q24 rows as 12121; m15 pinned in step 22). Best new L = 63 path 2^-0.93 x 12121. Prereg verdict FAIL: t = 13 caps T9 at 25 on these inputs (agrees with #4355). Extension E1 (addendum after the verdict): junction at t = 14 (F13 = F12 + 1 forward step, BK25 regrown to Q18), save-all, 3000 s: 128 joins, static T9 up to 27 (30 at 26, 3 at 27); L = 63 fits: 4 (T9 26/25/24/23); L = 62: 0. Arms 8 thr x 300 s, 3 seeds each (E1b addendum before the arms): t = 14 join 25 (T9 24, L = 63, 126 B) Q27 10.12 per thread-s (10.35, 9.85, 10.21), 21 padded Q29, vs #4373's 12121 6.92 (6.71, 7.12, 6.94), 11 Q29, vs served 128 B 4.12 (1 seed) -> 2^0.55 x 12121 (PASS, bar 2^0.5). Stages vs 12121: leaves per Q24 +2.52, Q24 rate -0.95, Q9 inversion -1.00. Projection (H, #4373's rule): 126 B pair 2^26.66 M1 thread-s vs 128 B served 2^27.96.
