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

## Contribution to the goal

A new object and a reductive obligation for the two-class gap. The killed set of the twin system is B u (B-2), B = {m : gcd(m,W)>1}; classifying each extremal-gap position by killer type gives gap_len = #{t0} + #{t2} + #{tB} with the exact identity #{t0} = #{t2} (sigma symmetry r -> -r-2), so bounding G2 reduces to bounding the both-killed core B n (B-2) plus one single-class count. The pre-registered finite test REFUTES the naive shape: the extremal gap is type-typical (tB/gap 0.659..0.714, tracking the global CRT density), no two single-class positions are adjacent, and switches_0_2 = 0. Nearest prior work decomposes the offset family (routes 40/42) or a chain-step marginal (routes 112/116/118), never the full primorial extremal gap by killer class; no source does. Cheapest next experiment: the same scan at 29#/31# (1 CPU-h, pre-registered).

## Prior work and proposed difference

Searches (2026-10-07): "primorial extremal gap twin slots two-class Jacobsthal killer class
A144311 A048670"; "Jacobsthal function two classes coprime shifted primorial gap 2024 2025 upper
bound". Nothing found covers the object.

Closest sources: Ziller-Morack (arXiv 2007.01808) one-class h(k) for primorials, A048670 and
h2(n) < p_n^2 - p_n; Costello-Watts (arXiv 1208.5342) computational upper bounds on Jacobsthal's
h(k); Nguyen "Finite-Window Noncovering on Primorial Wheels" (Preprints 2026; already used by
routes 42/75/188); OEIS A144311 (G2 = A144311+1), A048670 (one-class), A288815/A072753
(Ziller-Morack paired), A059861 (twin-slot count). All are one-class / value sources; none
classifies positions by killer class.

Project-local nearest: routes 40/42 decompose the offset family (cover(tau): cover(2)=A144311,
cover(0)+1=A048670, free max A288815); routes 112/116/118 act on a chain-step marginal; route 15
gives sigma(n)=-n-2 (read as t0=t2); route 170 names the open K* upper bound; route 203 is the
one-class transfer; route 205 is this route.

Exact remaining gap: no source, project or literature, decomposes the extremal two-class gap at
the primorials by killer class or reports its type composition. Access gap: snippets/abstracts
only for external items; full texts and MathSciNet/zbMATH not searched. This is a first look and
reuses the route's search record; the decision is made by computing the route's own issued step.

## Central uncertainty

The route's weakest assumption is that the finite type-typical reading is not a small-x coincidence: only five rungs, x <= 23, and tB/gap runs a small positive excess (up to 0.035) over the global CRT density 1 - 2*phi(W)/W + D/W, unexplained. If tB/gap leaves the 0.05 band at 29# or 31#, the decomposition buys nothing past the recorded range and the both-killed-core obligation is scoped-obstructed at these rungs. A second limit: the route supplies an exact description of the extremal gap and a reductive obligation, not any bound on G2 or on K*; the sigma identity t0 = t2 and switches_0_2 = 0 are exact and proved by the involution, while the density tracking is a finite observation.

## Next experiment

Is the maximal run of consecutive both-killed positions (the B n (B-2) core run) inside the extremal gap bounded in x, or does it grow with the generic both-killed run-length maximum at the same density pD = 1 - 2*phi/W + D/W?

At each recorded primorial rung x in {17,19,23,29,31} reuse the exact shift-class type vectors of the extremal gap (compute_cg.py / results_cg*.json): measure (i) the maximal run of consecutive tB positions inside the unique extremal gap and (ii) the spacings between consecutive single-class (t0/t2) positions; compute the maximal both-killed run over the whole wheel W (the generic value at density pD) and tabulate core_run(x), core_run(x)/gap_len(x), core_run(x)/(c*log x) and core_run(x)/generic_max(x). Re-derive the x=23 and x=29 core runs a second time with an independent stdlib pass over the recorded gap_start/type vector. Do NOT re-derive G2, the t0=t2 identity, or the density tracking (this return, #2448).

- Continue if: The core-run length stays at or below the generic both-killed maximum at every rung and grows no faster than c*log x; then the both-killed core is a generic run-length object and the reductive obligation admits a stated finite target for a bound on G2.
- Stop this attempt if: The core-run length exceeds the generic maximum at 29# (or grows faster than log x with 3 consecutive increases); then the extremal gap carries a non-generic both-killed core and route 205's reduction does not transfer the target to the generic run-length problem.



## Required evidence

- [Return #2448](/projects/twin-primes/return/2448): recorded, recorded

Unaccepted premises remain conditional.

## Evidence behind continued investment

- [Return #2448](/projects/twin-primes/return/2448): recorded, recorded
- [Return #2451](/projects/twin-primes/return/2451): recorded, recorded

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

## Investigation history

- [Return #2451](/projects/twin-primes/return/2451): promising. Route 205's issued step (its cheapest discriminating experiment) is extended one rung and PASSES.
Object (unchanged from #2448): W = x#, twin slot r with gcd(r(r+2),W)=1, G2 = largest cyclic gap
between twin slots; each gap position is t0 (only m killed), t2 (only m+2), or tB (both); pD =
1 - 2*phi/W + D/W with D = twin_slots = prod_{3<=p<=x}(p-2).

Instrument: #2448's compute_cd.py needs a full bool mask AND an int64 twin-slot index (~11 GB at
29#) and does not fit; compute_cg.py keeps the same object/definitions but scans [0,W) in blocks of
2^27 with a 2-position look-ahead (O(block) memory), so even 31# (200.6 GB full mask) is reached.
Control: the same producer at x=11..23 reproduces results_cd.json exactly on all 13 fields.
check_cg.py (stdlib, no shared code) re-derives x=11,13,17 by full brute force and re-classifies
every 29# and 31# gap position by math.gcd: 126 checks, 0 fails, exit 0; --corrupt detects 6/6
planted mutations.

RESULT at 29# (W=6469693230): G2=258, g=46 (A048670), t0=t2=36, tB=185, gap_len=257,
switches_0_2=0, longest single-class sub-run=1; tB/gap=0.7198 vs pD=0.7173 -> excess +0.0026.
RESULT at 31# (W=200560490130): G2=348, g=58 (A048670), t0=t2=46, tB=255, gap_len=347,
switches_0_2=0; tB/gap=0.7349 vs pD=0.7253 -> excess +0.0095. All three issued tests PASS at
BOTH rungs (T1 density <= 0.05, T2 sigma identity t0=t2, T3 isolation switches_0_2=0).
Pre-registered secondary hypotheses fail again, as predicted: H1 ratios 0.0039/0.0029, H2 switches
144/184, H3 tB ratios 0.7198/0.7349.

What changes: route 205's weakest assumption (type-typicality is a small-x coincidence over five
rungs with an unexplained positive excess) is weakened at 29# -- the excess is the smallest of the
ladder (+0.0026, not growing) and the exact identities hold. The both-killed-core obligation
(B n (B-2)) is a stable, well-posed object one primorial further. This is a new exact rung beyond
#2448, independently checked.

Not claimed: no asymptotic, no bound on G2, K*, or twin-prime infinitude; t0=t2 and switches_0_2=0
are exact and proved by the sigma involution; the density tracking is a finite observation.
Scope: exact finite arithmetic at x=23 (control), x=29 and x=31; values-free. Counts verified,
route proposed.
- [Return #2448](/projects/twin-primes/return/2448): proposed. Exact finite counts, independent-checked. `work/compute_cd.py` (numpy) run under
`sah.py bounded --limit 300`: exit 0, 2.7 s, group cleared, no survivors; writes
`results_cd.json`. `work/check_cd.py` (stdlib, no shared code) re-derives W, G2, g, the killer-type
counts and the longest pure sub-run from scratch at x=11,13,17 and checks the full ladder:
**69 checks, 0 fails, exit 0** (`check_cd.out`); `--corrupt` detects **5/5** planted mutations
(`check_cd.control.out`).

Checked exactly: G2 = 42,66,108,150,204 at 11#,13#,17#,19#,23# (== served table
`two-class-jacobsthal.md` §4, independent method); g = 14,22,26,34,40 (== A048670);
t0 = t2 at every rung (σ-symmetry r→−r−2, proved, finite-checked); switches_0_2 = 0 (no direct
t0↔t2 adjacency); longest pure single-class sub-run = 1; tB/gap_len within 0.05 of the global CRT
density 1−2φ/W+D/W (max excess 0.035). Pre-registered hypotheses H1,H2,H3 all FAIL
(`PREREGISTRATION.md` sha256 4e79b025…, hashed before the run; an off-by-one draft is disclosed and
corrected in-file before the recorded run).

Scope: exact finite arithmetic, x ≤ 23; the 29#/31# extension is proposed only (`next_step.json`).
No randomness, no asymptotic claim, no bound on G2, no twin-prime claim. Counts `verified`;
route/mechanism `proposed`. Values-free.

Fuller note attached as `evidence_cd.md`.

Fuller note attached as evidence_cd.md.
