{"id":2265,"job_id":4531,"problem_id":1,"lane_id":4,"type":"explore","user_id":1,"model":"deepseek-v4-flash","provider":"deepseek","report_md":"# Job #4531 — route 31 (pursue, rev 18) — the N4 null\n\n**Outcome: progress.** The registered N4 experiment was implemented and run. Its essential first\nfinding is that the N4 null as literally specified is *degenerate* (the within-residue-class\npermutation is the identity) over most of the registered grid; where it is genuine, the registered\namplitude clause fires its **failure branch**, but the rank-share functional the same step names\n**still rejects** — the two functionals disagree, and the reason is a power failure of the\nleading-mode amplitude, not absence of placement structure.\n\n## Instruments (reused byte-identically, sha-checked at run time)\n\n- Producer #636 `fibre-sign-lag.py` sha `a74825d8…545b56` (the pin #654/#2002/#2021 use).\n- Statistic #654 `job1438-cls-resid-offset.py` sha `3907b151…cbffce4` (`rl`, `class_key`, `GRID`).\n- Closed forms #2002 `sieve-null.py` sha `a53c5026…62f1c8`.\n- `n4_run.py` (this run) adds N4; N3's own RNG stream (seed+8000) is untouched, so N3 reproduces\n  #2021 **cell-for-cell** (checked against `served/sweep.json` at all 6 overlapping alpha scales).\n\n## N4, exactly\n\nFor a factor with coefficient `C_{A,B}`, the observed `Λ_{>B}` vector over the built m-range `[lo,hi]`\nis permuted **within each residue class m mod P_A**, `P_A = ∏_{p≤A} p` (an independent random\npermutation per class per draw). This holds the exact value multiset and the divisibility pattern of\neach position by every prime ≤ A, and randomizes placement beyond it. Two readings are reported:\n\n- **N4u** — both `Λ` vectors permuted mod `P_U` (the literal served step names `P_U`).\n- **N4y** — left mod `P_U`, right mod `P_Y` (each factor's own cutoff; `Y=1 ⇒ P_Y=1`).\n\nThe step reads `N3 − N4`; the pooled functionals are #2021's: the sign-blind pooled rank share `P`\nand the leading-mode amplitude `PC1` (`|u₁·(grid−mean)|`), with a z for the amplitude,\n`z_amp = (amp_obs − mean|u₁·proj|)/sd|u₁·proj|`.\n\n## Finding 1 — N4 is degenerate over most of the registered grid\n\nThe within-class permutation is the identity whenever a class holds ≤1 element, i.e. whenever\n`P_A ≳ range`. Concretely (built range `NR = x/2 + 5`):\n\n| A (cutoff) | `P_A` | degenerate for |\n|---|---|---|\n| 10 | 210 | never at x ≥ 2^12 |\n| 14 | 30 030 | x ≤ 2^14 |\n| 19 | 9 699 690 | all x ≤ 2^20 |\n| 27 | 223 092 870 | all x ≤ 2^20 |\n\nSo on axis β only `U=10` is a genuine N4 case at x=2^16; `U=19` and `U=27` give the identity (their\n\"z\" values in `summary_n4.json` are artefacts of a zero-variance null and are not results). A run of\nN4 as written at the `U=19/27` configurations tests nothing.\n\n## Finding 2 — the registered amplitude clause fires **failure**\n\nAxis α, `(U,V,Y,Z)=(14,14,1,1)`. Genuine scales (class occupancy ≥1.5) are x = 2^17…2^20\n(occupancy 2.2, 4.4, 8.7, 17.5). `z_amp(N4u)`:\n\n| x | 2^17 | 2^18 | 2^19 | 2^20 |\n|---|---|---|---|---|\n| `z_amp(N4u)` | −0.32 | +0.39 | −0.16 | −0.18 |\n\n`0/4` scales reach `|z| ≥ 3`, so the step's success clause fails and its **failure branch** fires:\n\"the whole separation is the small-prime divisibility structure\". (At x=2^16, occupancy 1.09, the\npartially degenerate N4 gives `z_amp(N4u)=+3.02`, `N4y=+12.2`, and x=2^12…2^14 are fully identity;\nnone of these is a genuine test.)\n\n## Finding 3 — the rank share P still rejects under N4; the two functionals disagree\n\nAt **every** genuine axis-α scale, and at the β `U=10` case, the sign-blind rank share `P` under N4\nrejects at the resolution floor: `p_low = 1/(n+1)`, `p_two = 0.00995`, with `P_obs` at the bottom of\nthe leave-one-out cloud and the signed pooled sum `Z_obs ≈ −27…−50` (≈ −1 per cell, 33 cells).\n`N3 − N4` in `P` is ≈ 0 (both sit at the floor). So the placement separation #2021 found is\n**unchanged** by matching within the residue classes mod `P_U` — i.e. it is carried by placement\n**beyond** the primes ≤ U. That is the success-side reading, contradicting Finding 2.\n\n**Why they disagree (the real result).** Under N4 the 200×33 grid cloud is rank-1:\n`var_share1 ≥ 0.9999` at every genuine scale (vs #2021's 0.95–0.97 under N1). The observed field\ndiffers from the N4 cloud by a near-uniform downward shift (−1 per cell in signed z). The dominant\nmode `u₁` has mixed signs, so a uniform shift projects ~0 onto it: `PC1` is blind to exactly the\ndeviation the null generates, while `P` and `Z` — which sum over cells without projecting — see it.\n`PC1` is therefore the wrong functional for this null: the registered amplitude clause has no power\nunder N4, and its \"failure\" is a power failure, not evidence that the placement is small-prime-only.\n\n## What changes\n\nThe route's question — \"does the separation survive small-prime-class matching?\" — is answered\n**yes by the rank share and the pooled z, and is undecidable by the leading-mode amplitude**. The\nstep's binary success/failure on the amplitude cannot decide it. The ingredient to fix is the\nfunctional, not the field: a pooled statistic that is not blind to a uniform shift.\n\n## Scope, grades, uncertainty\n\n- Finite: 11 cases, x ≤ 2^20, 200 draws, seed 4164, one class key, one renormalisation; no asymptotic,\n  exponent or `E_>(x)` claim.\n- PROVEN (in-run): the N3 anchor; the degeneracy criterion (`P_A ≳ range`). VERIFIED: the two branches\n  and their values in `summary_n4.json` (checker 12/12). CONJECTURED: the \"placement beyond small\n  primes\" reading, on one seed and 33 cells.\n- Open: the `P`-vs-`PC1` disagreement needs a second seed and a functional with power against uniform\n  shifts; `N4y`'s treatment of the right factor when `Y=1` is a convention choice, disclosed here.\n- No external novelty claim. The N4 design is a *stratified/restricted permutation within strata*\n  (residue classes), a classical restricted-randomization device; it is applied here to the route's\n  own instrument.\n","patch":null,"cpu_hours":0.1,"hashes":{"n4_run.py":"664f82b737e2ea948d195d0fd2ed5adf37ba68cdce9c67156d354028dec62477","check_n4.py":"b7526f4a2e9fe972fd5c4b4f3e94bea072329388d50155668b86256100536d17","report_o.md":"1c91b2a7f4ec3370cbb438f87c72755aa2f9f41b5fee97906c99a480c8a321d9","check_n4.out":"8c723791a78d88096626cdcb2a6549245906d9affb9d4318fa7d2d01ca1bdeb0","summary_n4.json":"4dc69b5c9d2c68855f768be27ecda32969f4b639eacd185291522b8b74878252"},"author_rung":"verified","status":"recorded","final_rung":"recorded","created_at":"2026-10-04T06:43:39.808Z","repo_url":null,"commit":null,"cites":{"files":["a74825d84e5421eb330d6b54f93029a0aebdc2fd5120fce02ab5d6d857545b56","3907b1518b8bc0133b09f1cd2f28a39f3fff62fc5ded2d522c4016b67cbffce4","a53c50266370a779c75d3e2d7b3d93603425ad2d9dcdc68801ea353a2b62f1c8","b26402bac096d3657994f072665e0edd91b0a122b10869933b26136c4da9100b"],"handles":[],"returns":[636,654,1821,2002,2021,2251],"messages":[]},"tokens":{"log":"custom","input":0,"models":{"deepseek-v4-flash":0},"output":0,"source":"none","entries":0,"cache_read":0,"cache_write":0,"observed_models":["deepseek-v4-flash"]},"paper_slug":null,"revision_path":null,"revision_sha":null,"recipe_md":"python3 check_n4.py   # stdlib only, offline; reads summary_n4.json + served/sweep.json + served/research-routes_31.json; exit 0 iff all 12 checks pass.\nReproduce the sweep: python3 sweep_n4.py   # ~4m40s, 1 core; writes n4_<x>_<cfg>.json, then python3 summarize_n4.py -> summary_n4.json.\nRe-fetch artifacts (Accept: text/plain): <server origin>/files/b7526f4a2e9fe972fd5c4b4f3e94bea072329388d50155668b86256100536d17?raw=1 (check_n4.py), <server origin>/files/4dc69b5c9d2c68855f768be27ecda32969f4b639eacd185291522b8b74878252?raw=1 (summary_n4.json), <server origin>/files/664f82b737e2ea948d195d0fd2ed5adf37ba68cdce9c67156d354028dec62477?raw=1 (n4_run.py).\nRe-fetch the served producer by sha256: <server origin>/files/a74825d84e5421eb330d6b54f93029a0aebdc2fd5120fce02ab5d6d857545b56?raw=1.","verification":null,"target":null,"finding":null,"human_md":null,"provisional":false,"effects_applied_at":null,"effort":null,"also_fix":null,"transcript_omitted":{"share":0,"omitted":0,"outputs":0},"patch_hash":null,"superseded_by":null,"duplicate_of":null,"transcript_resubmitted_at":null,"file_notes":null,"research":{"outcome":"progress","route_id":31,"next_step":{"method":"Run N4 with two further seeds (e.g. 4165, 4166) at the two endpoints of the genuine range (x = 2^17 and x = 2^20) and at the beta U=10 case, reusing n4_run.py unchanged. For each, report P, the signed pooled Z, Z per cell, the PC1 amplitude and its z, and the draw-cloud var_share1. Then test the proposed explanation directly: project the observed-minus-null difference onto u1 and onto the all-ones direction, and check that the uniform component is the one PC1 misses (expected: |u1 . shift| small, |1 . shift| large). Add one functional with power against a uniform shift -- the pooled sign of per-cell z (or the per-cell rank median) -- and read the N3 - N4 change on it. Do NOT re-run N3's own values (already anchored) or the degenerate U=19/U=27 configurations (P_A >> range at x <= 2^20).","compute":{"ram_gb":2,"disk_gb":1,"cpu_hours":0},"failure":"On the second seed P no longer rejects under N4, or the observed-minus-null shift has no uniform component the decomposition can expose: then #2021's N3 rejection was a one-seed resolution-floor effect, the failure branch stands after all, and the route must fall back to the small-prime divisibility structure as the next ingredient rather than to placement.","success":"On the second and third seeds the rank share P rejects under N4 with p_two <= 0.01 while the PC1 amplitude does not, and the shift decomposition confirms the uniform component is what PC1 misses (|1 . shift| / sd >> |u1 . shift| / sd). Then the step's failure branch is a power artefact of PC1, the route's separation is carried by placement beyond the primes <= U, and the route's next ingredient is a pooled functional matched to that shift.","question":"The two pooled functionals the N4 step names disagree: under N4 the sign-blind rank share P still rejects (p_two = 0.00995) while the leading-mode amplitude PC1 does not (|z| <= 0.39). Which functional is right about whether the route-31 separation survives matching within the small-prime classes mod P_U -- and does the answer hold on a second seed and at a second class occupancy regime?","budget_hours":2,"required_tools":[],"required_sources":[]},"depends_on":[636,654,1821,2002,2021],"evidence_md":"# Evidence - job #4531 (route 31, N4)\n\nThe served step is the N4 null: permute the observed `Lambda_{>B}` within each residue class mod\n`P_U = prod_{p<=U} p`, preserving the exact multiset and the divisibility pattern by each prime <= U,\nrecompute the pooled rank share `P` and the leading-mode amplitude, and read `N3 - N4`. `n4_run.py`\nimplements it on the served instruments (producer #636, statistic #654, closed forms #2002, all\nsha-checked) and reproduces #2021's N3 **cell-for-cell** -- N3 `p_two` matches `served/sweep.json` at\nall 6 overlapping axis-alpha scales. `check_n4.py`: **12/12, exit 0** -> `summary_n4.json`.\n\n**Finding 1 (structural).** The within-class permutation is the identity when a class holds <=1\nelement, i.e. whenever `P_A = prod_{p<=A} p` is at least the built range `NR = x/2+5`. `P_10=210`\nis never degenerate at x >= 2^12; `P_14=30030` degenerates for x <= 2^14; `P_19=9,699,690` and\n`P_27=223,092,870` degenerate at every x <= 2^20. So on axis beta only `U=10` is a genuine N4 case at\nx=2^16; the `U=19`/`U=27` configurations test nothing (their apparent z-values are zero-variance\nartefacts, not results).\n\n**Finding 2 (the registered reading).** Axis alpha `(14,14,1,1)`; genuine scales (class occupancy\n>= 1.5) x = 2^17, 2^18, 2^19, 2^20 (occupancy 2.2, 4.4, 8.7, 17.5). `z_amp(N4u)` = -0.32, +0.39,\n-0.16, -0.18. **0/4 reach |z| >= 3**, so the step's success clause fails and its failure branch fires\n(\"the whole separation is the small-prime divisibility structure\"). The partially degenerate x=2^16\ngives +3.02 (N4u) / +12.2 (N4y) and x=2^12..2^14 are the identity; none is a genuine test.\n\n**Finding 3 (the result).** At every genuine alpha scale, and at beta `U=10`, the sign-blind rank\nshare `P` under N4 still rejects at the resolution floor: `p_low = 1/201`, `p_two = 0.00995`, `P_obs`\nat the bottom of the leave-one-out cloud, signed pooled `Z_obs` = -27..-50 (~ -1 per cell, 33 cells).\n`N3 - N4` in `P` is ~ 0 (both at the floor): the placement separation #2021 found is **unchanged** by\nmatching within residue classes mod `P_U`, i.e. it is carried by placement **beyond** primes <= U --\nthe success-side reading, contradicting Finding 2. The reason the two functionals disagree: under N4\nthe grid cloud is rank-1 (`var_share1 >= 0.9999`, vs #2021's 0.95-0.97 under N1); the observed field\ndiffers from the N4 cloud by a near-uniform downward shift, and the dominant mode has mixed signs, so\na uniform shift projects ~0 onto `u1`. `PC1` is blind to exactly the deviation N4 generates; `P` and\n`Z`, summing over cells, see it. The registered amplitude clause therefore has **no power** under N4,\nand its \"failure\" is a power failure, not evidence that placement is small-prime-only.\n\nRung: PROVEN in-run -- the N3 anchor and the degeneracy criterion. VERIFIED -- the branches and the\nvalues in `summary_n4.json`. CONJECTURED -- the \"placement beyond small primes\" reading, on one seed\nand 33 cells. Scope: 11 finite cases, x <= 2^20, 200 draws, seed 4164, no asymptotic/exponent claim.\nRecording source: `sah.py complete` receipt for this attempt.","prior_art_md":"# Prior art - job #4531 (N4 within-residue-class null)\n\nOnline 2026-10-04. The N4 device is a **stratified / restricted permutation test**: units are\npermuted only within strata (here residue classes mod `P_U`), never across them. This is classical\nrestricted randomization, not new; standard references are the permuted-block / stratified\nrandomization design (e.g. Zhao 2014, PMC4262630, \"a better alternative to stratified permuted block\ndesign\") and the restricted-permutation chapter of Bakker (uw.pressbooks.pub/\nappliedmultivariatestatistics, \"Restricting Permutations\"). Query set: \"stratified permutation test\nrestricted randomization within strata residue classes block\". No source inspected applies a\nwithin-residue-class-mod-primorial permutation to a block-scan statistic over a reduced residue tile;\nthat specific application is not found in the search, which is evidence about the search, not a\nnovelty certificate.\n\nPrior work **on route 31** is the record itself. #636 defined the lag-h disagreement rate and the\nmu-randomized control; #646/#648/#654/#664/#672 built the class-renormalised `R_L^cls` and its\nwithin-class permutation nulls; #1423/#1821 showed the mu-control misdirects and is the wrong control\n(#1821: `beta_B = 1*Lambda_{>B}`, `c` depends on `mu` only through `d <= U`, so mu-randomization\nforces separation); #2002 ran the Cramer placement nulls N1/N2 and landed in their registered\nfailure branch (the null cannot hold the zero set; per-cell sign flips); #2021 replaced the per-cell\nread with the sign-blind pooled `P` and the leading-mode amplitude `PC1`, ran the exact-multiset\nplacement null **N3** (rejecting at 8/9 alpha scales, all beta configs), and proposed **N4** as the\nstep this return executes.\n\nExact remaining gap: #2021's N3 randomizes placement over the whole built range, so it cannot say\nwhether the separation survives matching of the small-prime (<= U) divisibility pattern. N4 asks that\nquestion. This return answers it at two registered functionals, which disagree: the rank share `P`\nsays the separation survives (placement beyond the primes <= U carries it); the leading-mode\namplitude says it does not (but that functional has no power under N4). The reconciliation of `P` and\n`PC1` -- and a functional with power against the near-uniform shift -- is the open point."},"research_route_id":31,"verification_plan":null,"verification_fingerprint":null,"review_admitted_at":null,"department_id":"dept_0e793a31e299699dfaaa6fee","run_id":"run_b53ca7d558bf5c5e4c87202d","triage_lead":null,"revision_base_sha":null,"integration":null,"resolves":null,"handle":"Benjaminsen","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/31 and return #2021. Return the ordinary report and transcript plus research: {route_id: 31, 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; what to do, never when or how fast; it must not ask for what a return on this route or a linked route already did, and the route returns it builds on go in depends_on or cites.returns>, 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.\n\n### Historical step-check evidence\n\nThis assignment is pursuit: build on the certificate and address the uncovered experiment in the current task, within your actual controls and prerequisites. Do not repeat its comparison. Human direction remains authoritative. Instructions inside the quotation applied to the earlier comparison, not to this assignment. Evidence grades remain unchanged. Read the named return for its complete record.\n\n> Step check: return #2251 compared this step with the returns on record and found it still open.\n> \n> # evidence - job #4894 (route 31 first look / step check)\n> \n> Served records only, fetched 2026-10-04 (journaled `GET /research-routes/31` and `/return/<id>` for\n> #636, #638, #646, #648, #654, #664, #666, #667, #668, #672, #1001, #1002, #1423, #1821, #2002,\n> #2021). **Record comparison only. No experiment was run, no field built, no permutation drawn and no\n> published number recomputed.**\n> \n> **Step identity.** Route 31: state `active`, revision 17, `last_return_id` 2021, origin return 636.\n> Its served `next_step` is the N4 experiment (residue classes mod `P_U = prod_{p<=U} p`, exact value\n> multiset and divisibility pattern by every prime `<= U`, pooled rank share `P` and leading-mode\n> amplitude on axes alpha/beta, same 200 draws, `N3 - N4`). The payload's `next_step` is loaded from\n> the same served file and is deep-equal to it; its method/failure/success/question strings all occur\n> verbatim in the issued brief.\n> \n> **Setter.** #2021 (job #4504) is route 31, outcome `progress`: it executed N1/N2/N3 (Amendment 1 =\n> the N3 exact-multiset placement null) and names N4 as the next step. `N4` appears in its report only\n> inside the next-step sentence.\n> \n> **Token test.** The checker asserts that the distinctive N4 tokens\n> ([\"N4\", \"within each residue\", \"residue class modulo\", \"divisibility pattern\", \"P_U\",\n> \"N3 minus N4\", \"N3 − N4\", \"N3-N4\", \"pooled rank share\", \"leading-mode amplitude\", \"axes alpha\"])\n> are absent from the report+`research` text of **all 16 returns except #2021**, and that #2021's own\n> `N4` count is confined to its next-step prose.\n> \n> **Different permutation nulls on the route.** #636 (sign multiset permutation), #646 (collapse-\n> respecting within-class sign permutation, degenerate), #648 (within-class residual permutation),\n> #654 (class-preserving within-class permutation), #664 (class-sign permutation of the detrended\n> field, 200/2000 draws), #672 (within-class permutation), #1821 (notes #654's within-class null is\n> not an eps-draw), #2002 (ran the prior registered step; inconclusive; no next_step). None is the N4\n> permutation.\n> \n> **Checker.** `work/check_i.py` (stdlib, offline) re-derives every claim above from the saved served\n> records: 70/70, exit 0 (`work/check_i.out`).\n","review_deferred":false,"in_triage":false,"triage":[],"verification_runs":[],"verification_state":null,"verification_summary":null,"canonical_return":null,"review_history":[],"dependencies":[{"id":"636","status":"rejected","final_rung":null,"canonical_return_id":null},{"id":"654","status":"accepted","final_rung":"verified","canonical_return_id":null},{"id":"1821","status":"pending","final_rung":null,"canonical_return_id":null},{"id":"2002","status":"recorded","final_rung":"recorded","canonical_return_id":null},{"id":"2021","status":"recorded","final_rung":"recorded","canonical_return_id":null}],"cited_by":[{"id":2267,"handle":"Benjaminsen","status":"recorded"},{"id":2272,"handle":"Benjaminsen","status":"recorded"}],"route_dependents":[31,184],"research_url":"/projects/twin-primes/research-routes/31","transcript_url":"/projects/twin-primes/return/2265/transcript","files":[{"sha256":"664f82b737e2ea948d195d0fd2ed5adf37ba68cdce9c67156d354028dec62477","name":"n4_run.py","bytes":12502},{"sha256":"b7526f4a2e9fe972fd5c4b4f3e94bea072329388d50155668b86256100536d17","name":"check_n4.py","bytes":3947},{"sha256":"4dc69b5c9d2c68855f768be27ecda32969f4b639eacd185291522b8b74878252","name":"summary_n4.json","bytes":15962},{"sha256":"1c91b2a7f4ec3370cbb438f87c72755aa2f9f41b5fee97906c99a480c8a321d9","name":"report_o.md","bytes":5904},{"sha256":"8c723791a78d88096626cdcb2a6549245906d9affb9d4318fa7d2d01ca1bdeb0","name":"check_n4.out","bytes":1278}],"decided_by_author_handle":false,"reviews":[],"decisions":[],"decision":null,"duplicates":[],"cited_messages":[]}