# files/cy3-banana — changes

## 2026-09-11 — cy3-banana-evaluate.py gains three derivation tiers: `--derive` (the direct linear decomposition of the transported (1,1,1,1,16) holomorphic period onto the full local Frobenius basis at s = 0, all six coordinates with the K3 (1,1,1,9) control), `--hankel` (the analytic Hankel-tail derivation of c_{5/4}, c_{7/4} and the Bessel-moment identities behind the unipotent data), `--planted` (the planted-operator control); direct_linear_extract.py, threshold_hankel_tail.py, calpha_rings.py and fixtures/ served beside it, pinned by sha256 (the threshold-banana bundle's bytes); MANIFEST.sha256 and this changelog created

- cy3-banana-evaluate.py (sha256 be688a5946c4413f…, was 8e78f21279c228b5…): the default path -- the closed forms of c_{5/4}, c_{7/4} at --dps against the Arb and Route-A literals, the K3 control, the dps-doubling check -- is untouched: the fenced default run of the served bytes and of the successor print 28 / 28 identical program lines with the wall-time line masked (walls 0:00.43 before, 0:00.38 after, under the fence: CPUQuota 200%, MemoryMax 8G, nice 10); under the strings-masked AST the units agree_digits, sig_digits, f, main and the five literals are identical, the docstring and the `__main__` block changed, 30 units added (the tier code and six imports), none removed.  NEW `--derive [--bits B]` (B >= 1400, default 1400; the pair is B and B/2+100): the exact multinomial-squared series of (1,1,1,1,16) annihilated EXACTLY by the Picard-Fuchs operator of record (order 6, read from the fixtures by pin; residual 0 over 200 coefficients), the exact seed jet with the rigorous tail bound, the ball-arithmetic Taylor transport along the path of record [s_b=100, +i 20, s_dec=1/4] (43 steps) at both precisions, the exact-Q Frobenius blocks (threshold exponents with multiplicities 1 (x2), 5/4, 7/4, 2 (x2)), one 6x6 solve -- the units of direct_linear_extract.py imported from beside this file; the resonant rho = 1 block converted to the canonical basis by x_{s^2} = a_1(0) x_{1,0} + a_1'(0) x_{1,1} + x_{2,0}, x_{s^2 log s} = a_1(0) x_{1,1} + x_{2,1} (a_1(0) = -35/72, a_1'(0) = 935/108).  At 1400 bits (pair 800): alpha_1^(s) = -0.1120550985970953580290963625043713123923480504270… (two-precision 231.6 d), alpha_2^(s) = -0.0016409479454593962445974656185208411621943864325… (230.2 d), alpha_1^(t) = -alpha_1^(s) and alpha_2^(t) = alpha_2^(s) in the t = e^{-i pi} s basis (Phi_1 = t + O(t^3), Phi_2 = t^2(1+O(t))); the logarithmic coefficients ell_1 (s log s) and ell_2 (s^2 log s) bounded below 10^-234.0 / 10^-234.1 at the lower precision (the radii of the ball solve; the transport is midpoint arithmetic, so the lower-precision line is the measure); c_{5/4}, c_{7/4} two-precision 232.1 / 231.3 d, vs the closed forms (this file's f(), live) 412.0 / 411.7 d, vs the Arb literals 295.5 / 295.1 d; the (1,1,1,9) control in the same code path: A_0 vs sqrt(3) log(24)/(12 pi) 413.2 d (two-precision 231.7 d), A_1 vs -sqrt(3)/(24 pi) 412.7 d, A_2 below 10^-237.7, c_{3/2} vs -sqrt(3)/(36 pi) 412.6 d and vs ROUTEA_C32 74.8 d; DERIVE VERDICT: PASS; wall 0:36.20 (60192 kB).  `--derive --bits 2000` (pair 1100): alpha_1^(s), alpha_2^(s) two-precision 321.4 / 319.9 d, c_{5/4}, c_{7/4} vs the closed forms 591.8 / 593.1 d, ell_1 below 10^-324.2, A_0 593.5 d; PASS; wall 1:09.58 (63184 kB); the leading 52 characters of alpha_1^(s) at the two settings agree.  NEW `--hankel [--dps N]` (N >= 50, default 60): threshold_hankel_tail.py --check --family CY3 called from beside (the (1,1,1,1,16) tuple: the exact tail objects r_n = 1, 15/32, 745/2048, 25925/65536, the closed STRUCTURE of c_{5/4} and c_{7/4} EQUAL to the record (2 lines), the record strings at their certified lengths, the identities c_{9/4}/c_{5/4} = -149/2560 and c_{11/4}/c_{7/4} = -5185/75264 EQUAL (exact) to the operator's Frobenius coefficients; CHECK: PASS), then the Bessel moments I_F = int_0^oo y F dy and M_F = int_0^oo y ln(y) F dy, F = prod J_0(m_i y), by a tanh-sinh head and the K-term Hankel-expansion tail over the 2^N sign patterns (the k = 0 group's exact cancellations skipped per order, relative to the pre-cancellation magnitude at that order), at the settings (Y, K, dps) = [(36, 64, 48), (46, 90, 60)]: (1,1,1,9) I_F vs sqrt(3)/(12 pi) 34.6 d / 43.4 d, M_F vs -sqrt(3)(ln 12 + gamma_E)/(12 pi) 34.5 d / 43.3 d, A_0 from the moments vs sqrt(3) log(24)/(12 pi) 34.5 d / 43.3 d, the planted target (ln 13 for ln 12) 1.6 d / 1.6 d FAIL as planted; (1,1,1,1,16) int_0^oo y J_0(y)^4 J_0(4y) dy = 0 to 37.3 d / 45.8 d (absolute) and the log-moment identity alpha_1^(s) = int_0^oo y ln(y) J_0(y)^4 J_0(4y) dy to 35.8 d / 44.3 d against the direct linear solve's alpha_1^(s) (1400 bits, two-precision 231.6 d; M_F two-setting agreement 35.8 d); HANKEL VERDICT: PASS; wall 2:42.43 (100152 kB).  `--hankel --dps 72` (settings [(36, 64, 60), (46, 90, 72)]): (1,1,1,9) 34.6 d / 43.4 d / 34.5 d / 43.3 d; (1,1,1,1,16) I_F = 0 to 37.3 d / 45.8 d, M_F = alpha_1^(s) to 35.8 d / 44.3 d (two-setting 35.8 d) -- the same digits as at dps 60: the agreement is set by the (Y, K) tail truncation, not by the working precision; PASS; wall 2:51.98 (108432 kB).  NEW `--planted`: `CY3 [1, 1, 1, 1, 16] planted (2,1,1): exact annihilation over 200 coefficients -> 191 nonzero residuals: REFUSED by name (annihilation FAIL, the module's exit 3) as planted`; `K3 [1, 1, 1, 9] planted (2,1,1): exact annihilation over 200 coefficients -> 195 nonzero residuals: REFUSED by name (annihilation FAIL, the module's exit 3) as planted`; `PLANTED CONTROL: FAILED BY NAME as planted -> exit 3`, rc 3 (wall 0:01.74).  `--derive --bits 1000` prints `usage: --bits must be >= 1400 (the bit floor of direct_linear_extract.py, whose --direct-linear refuses fewer bits; the two-precision pair is B and B/2 + 100): exit 2`, rc 2: direct_linear_extract.py refuses fewer than 1400 bits by name and this file keeps that floor rather than lowering it.  The tiers read the five files below from beside this file, pinned in VENDORED_PINS by sha256 and imported by explicit path after the check: on a copy of the bundle whose calpha_rings.py carries one appended byte `REFUSED (exit 4): vendored file calpha_rings.py sha256 c8708bfe8fd88d0b... is not the pin f31b186255d2aa1f...`, rc 4; on a copy without fixtures/hankel_tail_fixtures.json `REFUSED (exit 4): vendored file fixtures/hankel_tail_fixtures.json is absent beside cy3-banana-evaluate.py`, rc 4; the evaluator with the five files alone under a scratch root (no project tree above) runs --planted to the same exit 3.
- NEW direct_linear_extract.py (sha256 601735c6fa4e1b32…), threshold_hankel_tail.py (350d3808cd85efe7…), calpha_rings.py (f31b186255d2aa1f…), fixtures/direct_linear_fixtures.json (c3bb23092d1367f9…), fixtures/hankel_tail_fixtures.json (3aca127c00cb0dd9…): byte-identical to the threshold-banana bundle's copies of the same five files (one analytic derivation, two bundles; asserted against that bundle's served bytes at staging).  Run from this directory with only the files beside them: threshold_hankel_tail.py --check --family ALL --dps 60 CHECK: PASS (4 STRUCTURE EQUAL lines; wall 0:00.13, 31908 kB), --selftest SELFTEST: PASS (wall 0:00.14); direct_linear_extract.py --selftest `clean CY3: PASS; c_{5/4} two-prec 232.1 d, vs records [198.0, 72.0, 75.0], vs closed 412.0; c_{7/4} two-prec 231.3 d, vs records [197.0, 71.0, 75.0], vs closed 411.7`, SELFTEST: PASS (wall 0:40.16, 57740 kB); calpha_rings.py `CALPHA_RINGS SELFTEST PASS (25/25, 0 skipped)` (wall 0:00.12).  The fixtures' record strings labelled cy3-banana-evaluate.REF_C54 / .REF_C74 / .ROUTEA_C54 / .ROUTEA_C74 (6 copies) carry as their source this evaluator's earlier bytes (8e78f21279c228b5…), from which they were copied; the literals did not move, and every tier and the manifest generator check the copies against the evaluator's literals BY VALUE (all EQUAL).  Of the fixtures' other source entries only the operator sources are ever opened (sha256-checked when the project tree is above the file, the pinned copy in the fixtures used otherwise); the rest are project-relative provenance pointers with sha256.
- cy3-banana-expression.md (sha256 df26557f4b88c353…, was b251202d0454059c…): a 'Derivation tiers' paragraph appended (the three tiers, the figures above, the identities); every earlier line unchanged (+31/-0 lines).
- _snippet.md (sha256 35140eac6a386831…, was c1accb0501ee65dc…; an unpinned companion): one sentence appended to the downloads line naming `--derive` and `--hankel` (+1/-0 lines).
- NEW MANIFEST.sha256 (sha256 5168e75c5fdfbaa7…) by gen_cy3_banana_manifest_v1.py, the bundle's first manifest in the threshold-banana form: 7 rows (the evaluator, the expression file, the three modules, the two fixtures), sha256sum -c 7 OK; header: the PRODUCER line with the `date -u` stamp, one role line per pinned file asserted against the file at emission (VENDORED_PINS equal to the files beside, the modules' own pins, the bit floor, the literal copies by value), the unpinned companions CHANGES.md and _snippet.md named.
- NEW CHANGES.md (this file): the title line and this first entry; later entries append below it (append_changes.py, which refuses a base whose sha256 is not the one named and a heading already present).
- Not part of this entry: the site page's sentence naming the tiers; the served directory's stray __pycache__/ (cy3-banana-evaluate.cpython-312.pyc), which is no download and is listed nowhere; threshold_hankel_tail.py's `--check --masses 1,1,1,1,16` form runs the tuple under the name 'custom' without the record comparisons, so --hankel calls `--check --family CY3` (the same tuple), which carries them; py_compile of every .py file in the bundle: 4 / 4 OK.
- sha256: cy3-banana-evaluate.py be688a5946c4413f… (was 8e78f21279c228b5…); cy3-banana-expression.md df26557f4b88c353… (was b251202d0454059c…); _snippet.md 35140eac6a386831… (was c1accb0501ee65dc…); MANIFEST.sha256 5168e75c5fdfbaa7…; direct_linear_extract.py 601735c6fa4e1b32…; threshold_hankel_tail.py 350d3808cd85efe7…; calpha_rings.py f31b186255d2aa1f…; fixtures/direct_linear_fixtures.json c3bb23092d1367f9…; fixtures/hankel_tail_fixtures.json 3aca127c00cb0dd9….
