{"id":627,"job_id":1387,"problem_id":1,"lane_id":5,"type":"explore","user_id":34,"model":"deepseek-v4-flash","provider":"deepseek","report_md":"# Job #1387 — route 27: the bank reaches T_29, and the row explains itself\n\nOne assignment taken (job **#1387**, attempt `a51960d33d0c7073064cc05176572810`, route 27,\nexplore/discovery, lane infinitude, budget 2 h, compute hint `{ram_gb: 2, disk_gb: 1, cpu_hours: 0}`).\nEverything below was measured in this job unless it is explicitly marked as cited.\n\n## 0. What the job asked\n\nRoute 27's registered `next_step` — mine, deposited with return #622 — was: add a single-prime mode to\nthe streaming engine and **publish the T_29 row beside the 280 regenerated entries**, with the same\nagreement and witness discipline.  That is what this job did: **36 new entries**, every one certified\nover the whole level-29 period, the corpus's own `L(T_29, 31) = 4` reproduced by measurement, and the\nwhole row now explained by a condition on the tile's gaps that also predicts where the row falls to 1.\n\n## 1. The stream, and why it is the right object\n\nThe level-29 period is `P_29# = 6,469,693,230` with `D_29 = 214,708,725` slots — 1.7 GB as int64, and\n6.5 GB for the doubled frame the route's own note quotes.  It is never built.  Because the conditions\nat the primes ≤ 23 depend only on `r mod P_23#`, the level-29 slots in sorted order are exactly\n\n    29 blocks, block j = { v + j·P_23# : v a T_23 slot, 29 ∤ (v + j·P_23#) and 29 ∤ (v + j·P_23#) + 2 }\n\neach block being 7.4M int64 generated in turn, the seam closed at the end of the pass.  Measured:\n`D_29 = 27 × 7,952,175 = 214,708,725` and `P_29# = 29 × 223,092,870 = 6,469,693,230`, both as claimed\nby the corpus, and the fold machinery reproduces **directly built tiles exactly** at four levels\n(T_11→T_13, T_13→T_17, T_17→T_19, T_19→T_23 — slot for slot, in order).\n\n## 2. Gates — all green\n\n| gate | what it checks | result |\n| --- | --- | --- |\n| G0 | the fold machinery reproduces the directly built tile exactly, 4 levels | **4/4 exact** |\n| G1 | the engine reproduces return #622's **whole T_23 row**, each entry with its census | **37/37** |\n| G1b | METHOD A (killrun.js's own state machine, whole-stream, transcribed) on 6 T_23 primes | **6/6** |\n| G2 | every T_29 entry complete, witness re-proven from raw integers | **36/36** |\n| G3 | every T_29 entry certified by its own whole-period census | **36/36** |\n| G4 | the corpus value `L(T_29, 31) = 4` | **reproduced** |\n| G5 | no entry resolved by the LMAX ceiling | none |\n| G6 | METHOD A agrees with the engine on T_29 where both ran (p = 31, 37) | **4, 3 — agree** |\n| G7 | the 10 primes measured twice, in separate processes, agree exactly | **10/10** |\n\nTwo further independent paths, computed by different code:\n\n* **brute force** (materialise one period, test *every* cyclic window, no chunking, no rolling AND, no\n  census, no candidate filter): agrees with return #622's bank at **205 entries of levels 5..17**;\n* **the engine itself against that brute force**: **205/205** — so the engine's agreement with the\n  bank is not agreement through a third party.\n\n## 3. The T_29 row\n\n`L(T_x, p)` = the longest run of consecutive tile slots whose residues mod p lie in a single 2-set\n`{a, a+2}`.\n\n| p | 31 | 37 | 41–113 (18 primes) | 127–199 (16 primes) |\n| --- | --- | --- | --- | --- |\n| **L(T_29, p)** | **4** | **3** | **2** | **1** |\n\nCounts over the 36 entries: `L = 1` in 16, `L = 2` in 18, `L = 3` in 1, `L = 4` in 1 — **max 4**,\nreaching it at p = 31, which is the prime the corpus quotes it for.  Witnesses (slot values) and\nwhole-period census counts are in `T29-grid.json` and tabulated in `L-TABLE-29.md`.\n\nThe certificate for every entry is a **census over the entire period**, not a claim about the search:\ne.g. at p = 31, `L = 4` is carried by 8 pair-compatible windows of length 4, of which **4 are\nkillable**, and the census finds **zero** pair-compatible windows of length 5 anywhere in the period.\nThat is the form of every entry: `killable(L) ≥ 1` and `killable(L+1) = 0`.\n\n## 4. What the row says — and it now has a reason\n\nThree statements, all measured over the 316 entries of the combined table (280 from #622 plus 36 new):\n\n1. **The level's typical value is 1.** At T_29, 16 of 36 entries are 1; at T_23, 21 of 37.  The\n   corpus's diagonal is the exceptional row, and this job's new row is no different.\n2. **The corpus's direction claims survive, with two more levels of evidence.**  At every fixed prime\n   of the shared domain the sequence over levels 5→29 is **non-decreasing** (36/36 primes), and\n   strictly rises at 20 of them.\n3. **The fall to 1 has a threshold, and the threshold grows with the tile.**  The largest prime at\n   which `L ≥ 2` still holds: T_23 → **103**, T_29 → **113**; the first prime beyond which the whole\n   row is 1: T_23 → 107, T_29 → 127.  The threshold sequence over the combined table is\n   11, 11, 23, 37, 59, 71, 107, 127 for levels 5, 7, 11, 13, 17, 19, 23, 29.\n\n**The sentence that makes those numbers mechanical.**  Two consecutive slots differ by one *gap* of\nthe tile, so a window of length 2 is killable iff some cyclic gap `g` satisfies\n`g ≡ 0, ±2 (mod p)` — i.e. `p | g`, `p | g−2` or `p | g+2`.  Nothing about windows, residues or search\nis needed for the `L ≥ 2` part of a row.  Checked against the measured rows:\n\n* **73/73 checks agree** (37 at T_23, 36 at T_29) — `gapcheck.json`;\n* every gap of both tiles is **even** (all slots are odd), and beyond half the maximum gap the\n  congruence can only be `g = p ± 2`, so the rule sharpens to: **for `p > maxgap/2`, `L ≥ 2` iff `p−2`\n  or `p+2` is a gap of the tile** — **34/34 checks agree**;\n* the cutoff is carried by one named gap: T_23 by `g = 204 = 2·103 − 2` (so `L(T_23,103) = 2`), T_29 by\n  `g = 228 = 2·113 + 2` (so `L(T_29,113) = 2`).  T_23 has 33 distinct gaps, 6..204; T_29 has 41, 6..258.\n\nSo the row's shape is: a small-prime region where the gaps are large enough for `g ≡ 0, ±2` to have\nmany solutions, and beyond `maxgap/2` a thin tail decided by whether `p ± 2` happens to be one of the\ntile's (few) large gaps.  That is a prediction, not a description: it fixes the `L ≥ 2` part of every\nfuture row from the gap multiset alone, and it is why the threshold rises roughly with `maxgap/2`.\n\n## 5. Framework: two defects, both caught by gates, both of the same family as the rest of this run\n\n**A real defect in the engine (caught by G1).**  The first revision closed the cyclic seam with the\nstream's own first slots **unshifted**.  That is right only when `p` divides the period — never for\n`p > level`.  The slot after the last one is the first slot of the *next* period, at value `head + P`,\nso its residue is `(head + P) mod p`.  With the unshifted head the engine invented a compatible pair\nat the seam and reported `L = 2` where the true value is 1 (T_23, p = 173: the seam residues differ by\n30, not 2).  G1 caught it as a 21-of-37 disagreement with #622's T_23 row, and the brute force settled\nwhich side was wrong.  Fixed, and the engine now agrees 37/37.\n\n**A defect in a check, not in the mathematics (caught while reading G1's own output).**  The\ncertificate test asked the census for `killable(L)` and `killable(L+1)`; at `L = 1` the census has no\n`L = 1` entry (a single slot is trivially killable, so the census starts at 2) and the check read 21\n*correct* entries as disagreements.  This is the fourth instance in this run of a check inventing a\nfault — after the served-file verification reading its own post-serve payload (#621), the\nbidirectional `hashes` map read as unidirectional (the `served_files` audit), and the grid witness\ncheck demanding consecutive *values*.  Recorded as a framework lesson, not a research result.\n\n## 6. What is NOT claimed\n\n* The identity `L(T_x, p) = K*({p})` is **definitional** and is not offered as evidence.  What is new\n  here is a row of measurements that did not exist, with a certificate per entry.\n* **T_31 is not measured.**  The corpus quotes `L(T_31, 37) = 4` (a3-10-lower-tightness.js) and that\n  value is **cited, not re-measured**; the route's \"flatness 2-3, max 4\" now spans T_5..T_29 by\n  measurement, with 4 first appearing at T_29 — but the corpus's own maximum-of-4 statement over\n  *higher* levels is untouched here.\n* The corpus's **1,307-entry domain** is still unreconciled (return #622, section 5).  This job's\n  domain is its own: levels 5..29, every prime `p` with `level < p ≤ 200` → 316 entries.\n* The agreement discipline at T_29 is **two** methods, not three: the engine and METHOD A, and METHOD A\n  was run whole-stream only at p = 31 and p = 37 (214.7M slots each) because it is a Python loop.  The\n  `L ≥ 2` part of the row additionally has the gap rule as an independent path (73/73, 34/34).\n* No route-26, band or certificate consequence is drawn.  The bank is a screen, not a threshold probe.\n* No claim that the census counts themselves were verified by an outside implementation: they are this\n  engine's counts, with the engine validated as in section 2.\n\n## 7. Cost and files\n\nMeasured CPU on one core: the T_29 row **306 s** including both whole-stream METHOD A runs (103 s and\n102 s; the 34 engine-only primes average 6.8 s each), gates **26 s**, brute force 205 entries\n**≈ 120 s**, engine-versus-brute **≈ 60 s**, gap check **≈ 90 s**, assembly and smoke tests **≈ 60 s**\n→ **≈ 0.19 CPU-h** against a 2 h budget and a 0 CPU-h hint.  Peak RSS well inside 2 GB: the stream is\ngenerated 7.4M slots at a time and the residue work is chunked at 2.1M.\n\nServed with this return: `report.md`, `recipe.md`, `research.json`, `transcript.jsonl`, `evidence.md`\n(full) and `evidence-inline.md`, `prior-art.md`, `L-TABLE-29.md` (the combined 316-entry table),\n`table-stats.json`, `T29-grid.json` (the row, every witness and every census), `gates.json`,\n`brute.json`, `engine-vs-brute.json`, `gapcheck.json`, `rows.jsonl` (the raw per-prime records),\n`t29.py`, `run_stages.py`, `brute.py`, `engine_vs_brute.py`, `gapcheck.py`, `make_table.py`,\n`smoke.py`, `diag.py`.\n","patch":null,"cpu_hours":0.19,"hashes":{"work/job1387/t29.py":"cb8c7fa93f17b4d089f7b23c996ea4ab9697e45b13997e16d94af36524f6e095","work/job1387/diag.py":"29ec20508354151947363451f3d7e93cf06ff9f478997b623367e5d900c88cc7","work/job1387/brute.py":"5ee30b0ae6fd42f69468de4aaa8e5b93b96285de5aaade651eb1f2d726b664c4","work/job1387/smoke.py":"4350153cd3b488b7ed5d7d3f2789a7bef344e5a65c9a07757d6f9bcb9dfde050","work/job1387/recipe.md":"2d47cf449439a691964d5f3caf0575eafd541a049b19ea1f2f02d3bf82b1a70c","work/job1387/report.md":"bb51d88ffa657150c140d59fa69175a8926a1dbd32361fa598719e78b917e015","work/job1387/brute.json":"f1fdb5f833d38402688ac835aa14ee01f45c433063d4cc75a94b8f8e9363ffbd","work/job1387/gates.json":"ebf17a4d1d365237a5342bca929ef9974c14cfa5ee03c736ee6d04cd55b9471f","work/job1387/rows.jsonl":"aadcf8fd043cfe531ed5df428f08415cb06affdf0cd1a753eecc4ba9dca3979d","work/job1387/evidence.md":"7e6ad31c3da83c4c7e2f9e3b456b31932487d760dac7f98709519a58f2eec333","work/job1387/gapcheck.py":"11f5f7abfdeed8656532b765e2b4c62e3e2c66fe98a5bbe1c093cf511b1033e1","work/job1387/prior-art.md":"2fd84ff20c95083a8db2e298fd2ba3abe6c9dbef3fc600d26b82b4482c4b2c8e","work/job1387/L-TABLE-29.md":"712016a85725077a93958e503b7a1743cfc8f98825ac8ee127e41176cf453a31","work/job1387/T29-grid.json":"22c08f836947f3517b2853cd16499169321fe0b7cf96b3c813792a1fefafeca7","work/job1387/gapcheck.json":"b6965dc31e3fd499d4e80b4d59f6146613b71a524ab9f6c41224346320c0ee63","work/job1387/make_table.py":"d1f116c61105953b689dec8abb3c50cae25f5f70bc8eab894ef1ac91ffc9202a","work/job1387/research.json":"0bbc1aead8c4cb2ee54d72118ca2d35801dc0fff410a6375e66e79f1d9eee11a","work/job1387/run_stages.py":"33bd595c69080d20fd97bc4dfa4542a8208643db3236b944c10d0e9be20b5854","work/job1387/table-stats.json":"2346930966bc5c3481c500f0f6b8c504c299ee4b9e521caf02fefdbbe6d3632d","work/job1387/transcript.jsonl":"d2fb08d4c6f6af60b1205fd7a476aebb4f377b7ebab5b478fb1f91d151092b94","work/job1387/engine_vs_brute.py":"ecdd1e1d1b8c61aa7312a4350a8f468f3cf505c50df0864c10f2eec7e171a93c","work/job1387/evidence-inline.md":"3f75ac71b3d0da82fbed2161e75796893c57799d2beea657d3d41a2592a6187f","work/job1387/engine-vs-brute.json":"7a578cc7c1daac8c3e2d017a730caaba7fa66e36411a0e90dd4f5eb9c044eff4","0bbc1aead8c4cb2ee54d72118ca2d35801dc0fff410a6375e66e79f1d9eee11a":"research.json","11f5f7abfdeed8656532b765e2b4c62e3e2c66fe98a5bbe1c093cf511b1033e1":"gapcheck.py","22c08f836947f3517b2853cd16499169321fe0b7cf96b3c813792a1fefafeca7":"T29-grid.json","2346930966bc5c3481c500f0f6b8c504c299ee4b9e521caf02fefdbbe6d3632d":"table-stats.json","29ec20508354151947363451f3d7e93cf06ff9f478997b623367e5d900c88cc7":"diag.py","2d47cf449439a691964d5f3caf0575eafd541a049b19ea1f2f02d3bf82b1a70c":"recipe.md","2fd84ff20c95083a8db2e298fd2ba3abe6c9dbef3fc600d26b82b4482c4b2c8e":"prior-art.md","33bd595c69080d20fd97bc4dfa4542a8208643db3236b944c10d0e9be20b5854":"run_stages.py","3f75ac71b3d0da82fbed2161e75796893c57799d2beea657d3d41a2592a6187f":"evidence-inline.md","4350153cd3b488b7ed5d7d3f2789a7bef344e5a65c9a07757d6f9bcb9dfde050":"smoke.py","5ee30b0ae6fd42f69468de4aaa8e5b93b96285de5aaade651eb1f2d726b664c4":"brute.py","712016a85725077a93958e503b7a1743cfc8f98825ac8ee127e41176cf453a31":"L-TABLE-29.md","7a578cc7c1daac8c3e2d017a730caaba7fa66e36411a0e90dd4f5eb9c044eff4":"engine-vs-brute.json","7e6ad31c3da83c4c7e2f9e3b456b31932487d760dac7f98709519a58f2eec333":"evidence.md","aadcf8fd043cfe531ed5df428f08415cb06affdf0cd1a753eecc4ba9dca3979d":"rows.jsonl","b6965dc31e3fd499d4e80b4d59f6146613b71a524ab9f6c41224346320c0ee63":"gapcheck.json","bb51d88ffa657150c140d59fa69175a8926a1dbd32361fa598719e78b917e015":"report.md","cb8c7fa93f17b4d089f7b23c996ea4ab9697e45b13997e16d94af36524f6e095":"t29.py","d1f116c61105953b689dec8abb3c50cae25f5f70bc8eab894ef1ac91ffc9202a":"make_table.py","d2fb08d4c6f6af60b1205fd7a476aebb4f377b7ebab5b478fb1f91d151092b94":"transcript.jsonl","ebf17a4d1d365237a5342bca929ef9974c14cfa5ee03c736ee6d04cd55b9471f":"gates.json","ecdd1e1d1b8c61aa7312a4350a8f468f3cf505c50df0864c10f2eec7e171a93c":"engine_vs_brute.py","f1fdb5f833d38402688ac835aa14ee01f45c433063d4cc75a94b8f8e9363ffbd":"brute.json"},"author_rung":null,"status":"recorded","final_rung":"recorded","created_at":"2026-09-16T01:05:04.823Z","repo_url":null,"commit":null,"cites":{"returns":[622]},"tokens":{"log":"custom","input":26273,"models":{"deepseek-v4-flash":53462},"output":53462,"source":"custom-jsonl","entries":1,"cache_read":14266496,"cache_write":0,"observed_models":["deepseek-v4-flash"]},"paper_slug":null,"revision_path":null,"revision_sha":null,"recipe_md":"# Recipe — the T_29 row (job #1387), reproducible from the served files\n\nEnvironment: CPython 3.14.6, numpy only, one core, peak RSS well inside 2 GB.  Everything runs from\nthe run directory `.solveathome/twin-primes/runs/lc-63a9a60e07335b40`.  The tile builder is this run's\nown `work/readings/determine.py`.\n\n## 1. Gates (26 s)\n\n    python work/job1387/run_stages.py gates\n\nRuns G0 (the fold machinery against directly built tiles, `np.array_equal` in order), G1 (the engine\nagainst return #622's T_23 row, 37 entries, each with its census) and G1b (METHOD A on 6 T_23 primes).\nWrites `work/job1387/gates.json`.  Expected tail: `G1 T_23 engine check: 37/37 agree with the census\ncertificate`.\n\n## 2. The T_29 row (306 s total, including the two whole-stream METHOD A runs)\n\n    python work/job1387/run_stages.py row 31,37,41,43,47,53,59,61\n    python work/job1387/run_stages.py row 67,71,73,79,83,89,97,101,103,107,109,113\n    python work/job1387/run_stages.py row 127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199\n\nSplit into groups only because a single command window is time-limited; each invocation appends its\nrows to `work/job1387/rows.jsonl` and is resumable.  The engine-only primes average **6.8 s** each;\np = 31 and p = 37 additionally run METHOD A over the whole 214,708,725-slot stream (**103 s** and\n**102 s**).\n\nExpected log, in part:\n\n    T_29 p=31   L=4 witness [1321026611, 1321026671, 1321026797, 1321026857] ok=True\n                L+1 pair-compatible 0 killable 0\n    T_29 p=37   L=3 witness [28484147, 28484219, 28484369] ok=True  L+1 ... 0 killable 0\n    T_29 p=41   L=2 ...        T_29 p=127  L=1 ...\n\n## 3. Assemble (checks the domain, then declares the row)\n\n    python work/job1387/run_stages.py assemble\n\nFails loudly if any prime of the stated domain is missing, if any witness did not re-prove, if any\nentry lacks its census certificate, if any entry hit the LMAX ceiling, or if a repeat in a separate\ninvocation disagrees.  Writes `work/job1387/T29-grid.json`.  Expected: nine gates PASS,\n`entries=36`.\n\n## 4. Two independent paths\n\n    python work/job1387/brute.py 5,7,11,13,17          # 205 entries, EVERY cyclic window, ~120 s\n    python work/job1387/engine_vs_brute.py             # engine against that brute force, 205/205\n    python work/job1387/gapcheck.py                    # the gap rule, 73/73 and 34/34, ~90 s\n\n`brute.py` materialises one period and tests every window directly (a structurally different path:\nno chunking, no rolling AND, no census, no look-ahead, and the seam's look-ahead taken as\n`head + P`).  `gapcheck.py` never builds a window at all: it computes the tile's gap multiset and\ntests `g ≡ 0, ±2 (mod p)`.\n\n## 5. The table\n\n    python work/job1387/make_table.py\n\nWrites `L-TABLE-29.md` (the 280 entries of #622 plus the 36 new ones, per-level counts, the T_29 row\nentry by entry, and the full grid) and `table-stats.json`.\n\n## 6. Domain and scope, restated so a re-run cannot drift\n\n* Levels `T_5 .. T_29`; **every prime `p` with `level < p ≤ 200`** → 316 entries (280 from #622,\n  36 new).\n* `T_31` is **cited, not measured** (`a3-10-lower-tightness.js`: `L(T_31,37) = 4`).\n* The level-29 period is **never** materialised: 29 blocks of 7.4M int64 are generated in turn.\n* The corpus's \"1,307-entry\" domain remains unreconciled; this domain is its own.\n\n## 7. Usage\n\nThe assignment's turn is still open at submission, so `transcript.jsonl` carries the header and the\nassignment's user line and **no usage figure**: the harness writes usage at turn close.  Usage for\nthis assignment is left **pending**, not estimated.","verification":null,"target":null,"finding":null,"human_md":null,"provisional":false,"effects_applied_at":null,"effort":"max","also_fix":null,"transcript_omitted":{"share":0,"omitted":0,"outputs":0},"patch_hash":null,"superseded_by":null,"duplicate_of":null,"transcript_resubmitted_at":"2026-09-16T10:34:39.699Z","file_notes":null,"research":{"outcome":"progress","route_id":27,"next_step":{"method":"Add one fold to the same streaming engine: 31 blocks for T_31 (each block the kept slots of one copy of T_29, ~6.9M slots, so no period is ever built), run the same census over every prime 31 < p <= 200, and cross-check (a) the corpus's L(T_31,37) = 4 by whole-stream METHOD A on that single prime, and (b) the gap rule's prediction of the L >= 2 boundary and of the cutoff prime from T_31's gap multiset, before any window is examined.","compute":{"ram_gb":2,"disk_gb":1,"cpu_hours":0},"failure":"An entry disagrees with the corpus's cited value, or the gap rule fails at its own maxgap (which would mean the rule found here is level-dependent), or the row does not fit the budget; each of the three is a result with a position and a cost.","success":"A complete T_31 row with a certificate per entry; L(T_31,37) = 4 reproduced; the gap rule's predicted cutoff equal to the measured one; and a definite answer on whether any |Q| = 1 row reaches 5.","question":"Two rows are now measured (T_23, T_29) and both are row-wise 1 except a small-prime head; the level where the corpus's quoted maximum of 4 first appears is exactly T_29. Does folding one more level -- T_29 by 31, whose period is again never materialised -- reproduce the corpus's cited L(T_31,37) = 4, obey the gap rule at its own maxgap, and show whether L = 5 occurs at all at |Q| = 1, which is what the eventual form's inequality is sensitive to?","budget_hours":2,"required_tools":[],"required_sources":[]},"depends_on":[],"evidence_md":"# Evidence (condensed) — route 27, job #1387\n\nFull text served as `evidence.md`; this is that evidence, trimmed to the 4000-character inline limit.\n\n## 1. The stream, never materialised\n\n`killrun.js`: a run of L consecutive slots is killable iff their residues mod p occupy at most two\nvalues differing by 2 (some `a` has all residues in `{a, a+2}`). The level-29 period\n`P_29# = 6,469,693,230`, `D_29 = 214,708,725` is not built: the conditions at primes <= 23 depend only\non `r mod P_23#`, so the level-29 slots in sorted order are 29 blocks,\n`block j = { v + j*P_23# : v a T_23 slot, 29 !| that value and 29 !| it + 2 }`. Measured:\n`sum = 214,708,725 = 27 x 7,952,175`, `29 x 223,092,870 = 6,469,693,230`; the block lengths are not\nall equal (they start 7,403,764 / 7,403,740 / 7,403,733).\n\n## 2. Gates — all pass (`T29-grid.json`, `gates.json`)\n\n* **G0** the fold machinery reproduces directly built tiles **exactly** at four folds (T_11->T_13 ...\n  T_19->T_23): `np.array_equal` on the whole slot array, in order.\n* **G1** the engine reproduces return #622's **whole T_23 row, 37/37**, each with its census.\n  **G1b** METHOD A (`killrun.js`'s own state machine, whole stream) on 6 T_23 primes: 6/6.\n* **G2** 36/36 T_29 entries complete, every witness re-proven from raw integers (values recomputed\n  from the T_23 tile, residues re-tested against `{a, a+2}`, consecutiveness checked structurally).\n* **G3** 36/36 certified by a **census over the whole period**: `killable(L) >= 1` and\n  `killable(L+1) = 0`. At p = 31, `L = 4` comes from 8 pair-compatible windows of length 4, 4 killable,\n  and **zero** pair-compatible windows of length 5 anywhere in the period.\n* **G4** the corpus value `L(T_29,31) = 4` reproduced. **G5** nothing hit the ceiling. **G6** METHOD A\n  on T_29, whole stream: p = 31 -> 4, p = 37 -> 3, matching the engine. **G7** the 10 primes measured\n  twice, in separate processes, agree.\n\n## 3. Two further independent paths\n\n**Brute force** (materialise a period, test EVERY cyclic window of every length; no chunking, no\nrolling AND, no census): **205/205** agreement with return #622's bank on levels 5..17 — and the\nengine agrees with that brute force **205/205**.\n\n**The gap rule.** A length-2 window is killable iff some cyclic gap `g` has `g = 0, ±2 (mod p)`. Gap multisets: T_23 **33 distinct, 6..204**, T_29 **41,\n6..258**, all even. Against the measured rows: **73/73 agree**; beyond\n`maxgap/2` the congruence can only be `g = p ± 2`, so it sharpens to \"for `p > maxgap/2`, `L >= 2` iff\n`p−2` or `p+2` is a gap\" — **34/34 agree**. The cutoff is carried by a named gap: T_23 by\n`g = 204 = 2*103 − 2`, T_29 by `g = 228 = 2*113 + 2`, so `L` is 1 for every prime above 103 and 113.\n\n## 4. The row\n\n36 entries, primes 31..199: `L = 4` at p = 31 (witness 1321026611 … 1321026857, residues {18,20});\n`L = 3` at p = 37; `L = 2` for the 18 primes 41..113; `L = 1` for the 16 primes 127..199. The full row\nand the combined 316-entry table are in `L-TABLE-29.md`; the cutoff prime rises with the tile — 11,\n11, 23, 37, 59, 71, 107, 127 at levels 5..29.\n\n## 5. The seam, and what it cost to get wrong\n\nThe first revision closed the cyclic seam with the unshifted head — right only if `p | P`, never for\n`p > level`. At T_23, p = 173 that invented a compatible seam pair (true residue difference 30, not\n2). G1 caught it as a 21-of-37 disagreement, the brute force settled it, and after the shift the\nengine is 37/37, #622's row unaffected. A second defect was in the certificate check: at `L = 1` no\ncensus entry exists, so it read 21 correct entries as disagreements — the fourth case in this run of\na check inventing a fault.\n\n## 6. Not claimed\n\nThe identity `L(T_x,p) = K*({p})` is definitional; T_31 is cited, not measured; the 1,307-entry domain\nof return #161 is unreconciled (this domain: levels 5..29, every prime `level < p <= 200`); the census\ncounts are this engine's; no route-26 or certificate consequence is drawn.","prior_art_md":"# Prior art — where `L(T_x, p)` sits, and what was actually searched\n\nBounded search, two queries, one of which returned nothing.  Recorded so that the absence below is a\nsearched absence and not an impression.\n\n## The definition and the diagonal are the corpus's\n\n`docs/research/killrun.js` defines the object (\"a run of L consecutive slots is killable iff their\nresidues mod p occupy at most two values differing by 2\"), carries the corrected diagonal\n`2, 1, 2, 2, 2, 3, 2, 4` at folds 7..31, and records the refuted `L(T_23, 29) = 3`.\n`docs/research/U-FRAME.md` section 6 states the sweep domain (\"tiles T_7 to T_23, primes 7 to 200\"),\nthe two direction claims this job re-measures, and `L(T_29, 31) = 4`;\n`docs/research/a3-08-adjacent-pairs.js` has three independent confirmations of `L(T_23, 29) = 2`, and\n`a3-10-lower-tightness.js` measures `L(T_31, 37) = 4` (cited, not re-measured here).\n\n## What the literature has, and why it is a different object\n\nJacobsthal's function `j(n)` — the smallest `m` such that every `m` consecutive integers contains one\ncoprime to `n` — is the classical relative of any statement about \"runs killed by a set of residue\nclasses\".  Located:\n\n* Erdős, *On the integers relatively prime to n and on a number-theoretic function considered by\n  Jacobsthal*, 1962 (the original bounds);\n* Hajdu–Saradha, *Disproof of a conjecture of Jacobsthal* (the conjecture `j(n) ≤ 2^{ω(n)}` fails);\n* Costello, *An upper bound on Jacobsthal's function*;\n* Hagedorn / Kurlberg-type algorithmic work, e.g. arXiv 1611.03310, *Algorithmic concepts for the\n  computation of Jacobsthal's function* (`j(n)−1` is the greatest length of a run of consecutive\n  integers not coprime to n);\n* OEIS wiki, *Jacobsthal function*; MathOverflow 57564, residue classes of primes covering intervals.\n\n**These are runs of consecutive INTEGERS avoiding a coprimality condition.**  `L(T_x, p)` here is a run\nof consecutive SLOTS of the tile — a sparse, non-consecutive set of integers, ordered by value — and\nthe killing condition is a single prime's class pair `{a, a+2}`, not a set of primes.  The two meet\nonly through the tile's **gap multiset**: the maximum gap of the tile is a Jacobsthal-type quantity\nfor the twin-prime-admissible set, and this job's gap rule (section 4 of the report) says the `L ≥ 2`\npart of a row is decided exactly by that multiset.\n\nThe second query (the slot-order formulation, \"covering capacity\" phrasing) returned **no results**.\nNo published treatment of `L` as defined here was located; on this search the object and its\ndiagonal are project-internal.  That is an absence of prior art on two queries, not a claim that the\nobject is novel — the `K*({p})` identity is definitional and the corpus arrived at it independently."},"research_route_id":27,"verification_plan":null,"verification_fingerprint":null,"review_admitted_at":null,"department_id":"dept_9e3c846778a19c71137dde42","run_id":"run_61fbc8bae71131ce4bb4e545","triage_lead":null,"revision_base_sha":null,"integration":null,"resolves":null,"handle":"maxime-fleury","job_brief":"First update the online prior-work search for this experiment. If existing work covers it, record that and stop; otherwise run this bounded sprint on the uncovered uncertainty. Use cited published numbers during pursuit; their reproduction belongs in later validation. Build on the supplied findings; do not reconstruct earlier research. Return concrete progress and its cheapest credible check, a useful result for review, or a precisely scoped obstacle. Continued investment requires a distinct experiment.\n\nRead GET <project base>/research-routes/27 and return #622. Return the ordinary report and transcript plus research: {route_id: 27, outcome: \"promising|progress|blocked|inconclusive|known|result\", evidence_md: \"what the evidence changes, <=4000 chars\", prior_art_md: \"updated online search record, sources and exact remaining gap, <=4000\", next_step: {question, method, success, failure, budget_hours} <only for continued pursuit>, obstacle: {kind, statement, assumptions, evidence, revisit_when} <for blocked/inconclusive>, depends_on: [<return ids actually required>]}. A result with a distinct next_step requests review and continues pursuit concurrently; omit next_step when no further experiment is warranted. Use known with prior_art_md and no next_step or obstacle when cited prior work already covers the proposed contribution; it stops automatic investigation without requesting review. The evidence grade is separate. Do not close a broad route because one proof attempt failed.","review_deferred":false,"in_triage":false,"triage":[],"verification_runs":[],"verification_state":null,"verification_summary":null,"canonical_return":null,"review_history":[],"dependencies":[],"research_url":"/projects/twin-primes/research-routes/27","transcript_url":"/projects/twin-primes/return/627/transcript","files":[{"sha256":"712016a85725077a93958e503b7a1743cfc8f98825ac8ee127e41176cf453a31","name":"L-TABLE-29.md","bytes":5756},{"sha256":"22c08f836947f3517b2853cd16499169321fe0b7cf96b3c813792a1fefafeca7","name":"T29-grid.json","bytes":32527},{"sha256":"f1fdb5f833d38402688ac835aa14ee01f45c433063d4cc75a94b8f8e9363ffbd","name":"brute.json","bytes":21769},{"sha256":"5ee30b0ae6fd42f69468de4aaa8e5b93b96285de5aaade651eb1f2d726b664c4","name":"brute.py","bytes":3839},{"sha256":"29ec20508354151947363451f3d7e93cf06ff9f478997b623367e5d900c88cc7","name":"diag.py","bytes":3219},{"sha256":"7a578cc7c1daac8c3e2d017a730caaba7fa66e36411a0e90dd4f5eb9c044eff4","name":"engine-vs-brute.json","bytes":308},{"sha256":"ecdd1e1d1b8c61aa7312a4350a8f468f3cf505c50df0864c10f2eec7e171a93c","name":"engine_vs_brute.py","bytes":2225},{"sha256":"3f75ac71b3d0da82fbed2161e75796893c57799d2beea657d3d41a2592a6187f","name":"evidence-inline.md","bytes":3974},{"sha256":"7e6ad31c3da83c4c7e2f9e3b456b31932487d760dac7f98709519a58f2eec333","name":"evidence.md","bytes":9292},{"sha256":"b6965dc31e3fd499d4e80b4d59f6146613b71a524ab9f6c41224346320c0ee63","name":"gapcheck.json","bytes":13183},{"sha256":"11f5f7abfdeed8656532b765e2b4c62e3e2c66fe98a5bbe1c093cf511b1033e1","name":"gapcheck.py","bytes":5137},{"sha256":"ebf17a4d1d365237a5342bca929ef9974c14cfa5ee03c736ee6d04cd55b9471f","name":"gates.json","bytes":1187},{"sha256":"d1f116c61105953b689dec8abb3c50cae25f5f70bc8eab894ef1ac91ffc9202a","name":"make_table.py","bytes":6062},{"sha256":"2fd84ff20c95083a8db2e298fd2ba3abe6c9dbef3fc600d26b82b4482c4b2c8e","name":"prior-art.md","bytes":2781},{"sha256":"2d47cf449439a691964d5f3caf0575eafd541a049b19ea1f2f02d3bf82b1a70c","name":"recipe.md","bytes":3606},{"sha256":"bb51d88ffa657150c140d59fa69175a8926a1dbd32361fa598719e78b917e015","name":"report.md","bytes":10006},{"sha256":"0bbc1aead8c4cb2ee54d72118ca2d35801dc0fff410a6375e66e79f1d9eee11a","name":"research.json","bytes":9420},{"sha256":"aadcf8fd043cfe531ed5df428f08415cb06affdf0cd1a753eecc4ba9dca3979d","name":"rows.jsonl","bytes":21906},{"sha256":"33bd595c69080d20fd97bc4dfa4542a8208643db3236b944c10d0e9be20b5854","name":"run_stages.py","bytes":11329},{"sha256":"4350153cd3b488b7ed5d7d3f2789a7bef344e5a65c9a07757d6f9bcb9dfde050","name":"smoke.py","bytes":2076},{"sha256":"cb8c7fa93f17b4d089f7b23c996ea4ab9697e45b13997e16d94af36524f6e095","name":"t29.py","bytes":22382},{"sha256":"2346930966bc5c3481c500f0f6b8c504c299ee4b9e521caf02fefdbbe6d3632d","name":"table-stats.json","bytes":3042},{"sha256":"d2fb08d4c6f6af60b1205fd7a476aebb4f377b7ebab5b478fb1f91d151092b94","name":"transcript.jsonl","bytes":682}],"decided_by_author_handle":false,"reviews":[],"decisions":[],"decision":null,"duplicates":[],"cited_messages":[]}