# threshold-banana bundle — CHANGES

The standalone evaluator `threshold-banana-evaluate.py` and the files beside it (the (1,1,1,9) threshold banana, row 31 of
Table 2: the closed-form connection coefficient c_{3/2} = -sqrt(3)/(36 pi), its runtime derivation, and the Feynman-family
tier).  Entries in date order; `MANIFEST.sha256` is the bundle's integrity file (created with the first entry below).

## 2026-09-07 — threshold-banana-evaluate.py: `--family`, Table 2 row 31 — this integral run as a Feynman family: the exact operator identity three ways, the connection coefficient c_{3/2} from the IBP-derived operator, the leg-(III) points and the threshold bound as the record's; the vendor_row31_family/ directory; the bundle's first MANIFEST.sha256 and this CHANGES.md

- NEW `--family`: row 31 of Table 2 is this evaluator's own integral -- the three-loop banana at masses
  squared (1,1,1,9), whose maximal cut is the K3 period this file transports -- run after the fact as a
  Feynman family. The nine-propagator family BAN1119 is the equal-mass template with one changed line
  (m_4^2 = 1 -> 9; |Aut| = 6, the S3 of the three unit lines composed with p -> -p); its Kira reduction of
  record (seven masters, five in the top sector; the rules and masters files named by sha256,
  436ba5a873f19366 / 4aa6adfc05b9a23a, never re-run here) gives, by the cyclic vector on I[1,1,1,1] of the
  top-sector block at d = 2, an operator L_IBP = sum_j Q_j(z) theta_z^j of order four (z = -1/p^2; leading
  factor (4*z + 1)*(16*z + 1)*(36*z + 1)*(16*z**2 + 22*z + 1); indicial polynomials (r - 2)*(r - 1)**3 at
  z = 0 and 18432*r**3*(2*r - 1) at the threshold). This file already derives the Picard-Fuchs operator of
  the period at runtime (build_pf_exact + verify_annihilation, the exact-annihilation certificate), so the
  tier checks the identity THREE WAYS by exact rational arithmetic (sympy over QQ, no numerics): (a) L_IBP
  (`vendor_row31_family/operator/LEGI_OPERATOR_IDENTITY.json` 8857f2addb393c1e) vs the record's operator
  (`PF_119_EXACT.json` 62198a7a0a5b4bbd, verbatim): EQUAL at a = 1; (b) L_IBP vs the operator this file
  derives at runtime (233 series terms; build_pf_exact over 120 rows, verify_annihilation over 186 coefficients:
  order 4, z-degree 5, annihilation residual 0; 0.94 s): EQUAL at a = 1 -- the chart is the same variable
  (z = -1/s with s = p^2 here, z = -1/pp in the record; theta_z = z d/dz in both), both operators reduced to
  primitive integer coefficients with the top coefficient's leading term positive (the factor taken out of
  the runtime operator: 1); (c) the record's operator vs the runtime operator: EQUAL at a = 0,
  coefficient by coefficient (yes) -- the runtime derivation reproduces the record's operator, a
  served-side positive control. Measured on the delivered bytes: 2.22 s (1.71 s inside the tier), 75 MB; `--from-block`
  re-derives L_IBP from the 5 x 5 block first and finds the same polynomials (13.77 s (12.89 s inside the tier), 80 MB);
  `--planted 2,1,1` (the record operator's P_2 coefficient of z^1 shifted by +1, in memory) reads NOT EQUAL
  on legs (a) and (c) and exits 1; `--planted-ibp 2,1,1` (L_IBP's Q_2 coefficient of z^1 shifted) reads NOT
  EQUAL on legs (a) and (b) and exits 1; `--self-check` runs leg (a) as the record compared with itself
  (EQUAL at a = 0). The record's own connection-coefficient figures are printed from the vendored comparison
  object and labelled as the record's.
- HOST CORRECTION: the first cut of this tier sat on the row-19 equal-mass bundle (files/banana), the wrong
  page for row 31; re-hosted here on the (1,1,1,9) evaluator, where the runtime-derived operator makes the
  third comparator possible. The vendored objects are the same by sha256 (twelve of the first cut's
  seventeen files byte-identical; the two engines and the record-string object re-cut in the one string
  naming the host, masked-AST identical otherwise; README.md and FAMILY_MANIFEST.sha256 re-emitted).
- NEW `--family --c32 [--dps D]`: c_{3/2} -- the coefficient of the holomorphic period on the t^{3/2}
  threshold branch -- recomputed from L_IBP by the record's monodromy-projection move (Route A: the
  operator's own exact-rational Frobenius seed with c_1 = -12 = -(1+1+1+9), the one Feynman datum beyond
  the operator; the adaptive Taylor transport in s = p^2 from two anchors to s_dec = 0.15, 0.25, 0.35 through
  the upper half plane; the monodromy M_0 by the counter-clockwise loop; the projector -(M_0 - I)^3/8; the
  threshold branch on the lower sheet with the explicit e^{-i pi (rho + n)} phase), by
  `vendor_row31_family/engine/family_c32.py` (92c80c38d96aca69; the engine that recomputed the record's
  coefficient, every numeric unit byte-identical under the masked AST, its transport engine
  `transport_engine.py` the record's byte copy 9e232419746ff596), which never reads the record string; the
  front end gates |c_{3/2}| against the record's 195-digit string (`c32/c32_record.json`
  9986fe347ec94cb9) AND against this file's own closed form -sqrt(3)/(36*pi) (closed_form_c32(), the
  second comparator; the string and the closed form agree to 195.7 d) at bar 30, with the sign (negative on
  the lower branch), the s_dec-independence and the engine's own gates (seed convergence, two-anchor
  agreement, det M_0 = -1 and the eigenvalue -1, 4-row consistency) at the same bar. Measured on the
  delivered bytes at dps 50: 47.6 d vs the record's string, 47.6 d vs the closed form
  (s_dec-independence 46.7 d, sign -; 6:35.27 min:s (394.52 s inside the tier), 75 MB). The documented higher precision
  (`--dps 80`) and `--check` (dps 50 and 80 in one process, the two-precision pair) were measured on the
  first cut of this tier through the same engine units (family_c32.py differs in its docstring's host name
  only; transport_engine.py byte-identical): 77.5 d at dps 80 (991.75 s; capture 601ef7a2390b16fc), pair 47.6 d
  (1443.36 s; capture 9d6d4e5b1203895d). The record's figures on the same operator are 47.6 d at dps 50, 77.5 d at
  dps 80 and a pair of 47.6 d (vendored as `c32/LEGII_S1.json`, `LEGII_S2.json`, `LEGII_S4_COMPARE.json`; the
  digits of a Route-A run are its working precision less the transport's loss, not the string's 195). The
  c_1 = 0 solution's coefficient is printed as a finding.
- Controls: `--which planted` runs the move on the record's operator with the P_2 z^1 coefficient shifted
  by +1: 1.5 d vs the record and 1.5 d vs the closed form at dps 50, the gate FAILs by name, exit 1
  (6:32.82 min:s, 80 MB; the record's planted control read 1.5 d at its dps 40); `--which record` runs it on the
  record's own operator (the positive control): 43.9 d at dps 50 on the first cut's bytes (444.20 s; capture
  919b566bdde19af9; the record's own control read 35.4 d at ITS dps 40 -- the working precision, not the seed).
  On copies: a byte of a vendored file with the pin untouched exits 3 by name (the served default on the
  same copy still runs: it never reads the directory), a vendored file moved aside exits 4, a
  FAMILY_MANIFEST.sha256 whose rows disagree with FAMILY_PINS exits 3, a planted digit in the record string
  with the pins re-set passes the pin check and FAILs the c_{3/2} gate by name at dps 50 on the
  record-string comparator (29.2 d) while the closed-form comparator still reads 47.6 d -- the two
  comparators are independent -- and the identity and oracle tiers (which never read the string) stay PASS;
  an existing engine output file is refused (exit 2); `--c32`, `--oracle` or `--which` without `--family`,
  `--dps` below 20, `--family` with `--point`, `--msq`, `--derive` or a gate-demo flag, `--c32` with
  `--oracle`, a malformed `--planted` and two plants at once are refused (exit 2).
- NEW `--family --oracle`: the record's leg (III) and its III-a/III-b succession printed by object, no live
  claim: the four AMFlow solve_integrals points of the physical master I[1,1,1,1] and its six partners at
  d0 = 2 (pA, pp = -1/50; pB, pp = -80; goals 60 and 80; `vendor_row31_family/oracle/`, the out files
  verbatim), the two goals agreeing on every coefficient of the seven integrals to 71.4 d (pA) and
  71.0 d (pB) over 39 coefficients each -- recomputed here from the four out files: 71.4 / 71.0 d --
  the physical master finite at d = 2 at both points (eps^0 4.2991722908639580567842... at pA,
  2.8685135383055269172269... at pB); the layered completion of the six-layer state (III-a: residual floors
  33 / 43 d at the two goals, two-goal agreement of the solved layers 33 d) and the threshold
  transport (III-b: the physical master's half-integer threshold coefficient at d = 2 bounded by 3.79e-33
  (goal 60) / 1.97e-43 (goal 80), the log tower absent, loop residual floors 34 / 44 d, a planted
  1e-20 read back as 1.0e-20, a planted digit at 1e-25 raising the completion residual;
  `vendor_row31_family/threshold/`). 0.68 s (0.01 s inside the tier), 68 MB.
- The directory `vendor_row31_family/` (25 files, every one pinned in the script by sha256, FAMILY_PINS, and
  listed in its own FAMILY_MANIFEST.sha256 769b561d0350dcdf): the family definition (`family/`), the operator
  identity of record and the record's operator (`operator/`), the record's connection-coefficient objects
  and its string (`c32/`), the leg-(III) out files and the two-goal object (`oracle/`), the III-a/III-b
  receipt and its two run objects (`threshold/`), the engines (`engine/`) and a README. Every vendored
  object is the record's by object: the polynomials, the masters, the connection entries, every value string
  and every numeric leaf byte-equal to the source, with only the source's machine paths, host names and one
  receipt phrase re-cut (each source named by sha256 beside).
- Value path untouched: every unit of the served tiers is byte-identical under the masked AST (the module
  docstring and the __main__ block differ; 24 units added, none removed); the default, `--derive` (dps 60),
  `--point 2.5`, `--point 2.5 --msq 1,1,4,9`, the (1,1,1,1) ansatz refusal, the singular-point refusal and
  the gate-demo mass refusal are byte-identical before and after with stamps and walls masked (the designed
  difference: `--help`, which gains the eleven options).
- Walls (the pass-1 bytes -- the same units as the delivered bytes but for the docstring; the delivered bytes' --family 2.22 s is in the first bullet; 2026-09-07 on a shared 96-core host at loadavg 135-135, nice 10, CPUQuota 200%, GNU time, four such runs side by side): --family 2.83 s (1.83 s inside the tier; the own derivation 0.95 s), 76 MB; --family --from-block 12.87 s (12.32 s inside the tier; the own derivation 0.96 s), 83 MB; --family --self-check 2.13 s (1.49 s inside the tier; the own derivation 0.95 s), 76 MB; --family --oracle 0.70 s (0.01 s inside the tier), 70 MB; the served default 25.57 s, 74 MB; `--derive` at dps 60 3:31.52 min:s, 75 MB;
  `--family --c32` at dps 50 6:35.27 min:s (394.52 s inside the tier), 75 MB; `--which planted` 6:32.82 min:s, 80 MB.
- Not established (the record's own line, verbatim): NOT ESTABLISHED (by name): the four Frobenius coefficients a_0..a_3 of the eps^0 layer of the physical master at z = 0 (III-a; a particular-solution convention is required, the layered completion is done); row 32's seedling preflight price (no Kira census of the (1,1,1,1,16) family exists).
- MANIFEST.sha256 created by gen_threshold_banana_manifest.py (the bundle's first manifest, the sunrise form:
  a ROLES table asserted against the served files, the vendor group's rows read from FAMILY_MANIFEST.sha256
  and FAMILY_PINS, an unlisted served file refused by name); sha256sum -c OK on every row. This CHANGES.md is
  the bundle's first. threshold-banana-expression.md and _snippet.md are unchanged.
- sha256 of the cured script: threshold-banana-evaluate.py 6a761c270a979a4c… (was 474ebd8975cf5934…).

## 2026-09-09 — threshold-banana-evaluate.py: `--full` / `--digits N` — the stored Route-B value of record printed verbatim at its certified length (195 of the 196 stored significant digits) with its provenance line, after the default or --derive tier has passed; off by default, the served tiers unchanged (cure-queue #44)

- NEW `--full` (and `--digits N`): the evaluator carried its one numerical literal, the Route-B Arb value of
  record C32_ROUTE_B_STR (196 significant digits stored), and printed it nowhere in full -- the default tier
  prints the closed form at --dps and the --derive tier prints the transported value to 50 digits, the Route-B
  comparison line reads the literal only as a comparator.  `--full` now prints the literal itself, verbatim
  (the string's own characters, no re-rounding), to its certified length 195 -- the Arb ball of record
  (768-bit balls, 649 accurate bits, radius 6.06e-198) certifies 195 of the 196 stored digits, the last stored
  digit being the printed midpoint's inside the ball radius -- beside the closed form -sqrt(3)/(36*pi)
  evaluated to the same length and the measured agreement between them (195.7 d, the string's own cap 196 d),
  then the provenance line ORACLE_PROVENANCE (Route B: the Julia/Arb theta-companion transport of the same
  exact-rational Picard-Fuchs operator, chart z = -1/s, large clockwise-circle monodromy, s_dec = 7/20, the
  archived record C32_MONODROMY_B.json, identical at s_dec = 1/4; never used to seed or steer Route A; the
  same string as `vendor_row31_family/c32/c32_record.json` c_32_value).  `--digits N` prints the first N
  significant digits; N above the certified length is capped there and the cap printed by name (`--digits
  1000000` and `--digits 196` both print 195 digits with the line `CAPPED at ORACLE_CERTIFIED_DIGITS = 195 by
  name`).  The block follows the default or --derive tier and only after it has passed (fail-closed: a tier
  that raises prints nothing further); it enters no gate.  New constants ORACLE_CERTIFIED_DIGITS = 195 and
  ORACLE_PROVENANCE beside ORACLE_SIG_DIGITS; the unit print_oracle_record; the two options in the __main__
  block.
- Refused by name (exit 2): `--full` with `--digits`, `--digits 0` (or any count below 1), and `--full` /
  `--digits` with `--family` or `--point` (those tiers carry no such line).
- Value path untouched: every served unit is byte-identical under the masked AST (the module docstring and the
  __main__ block differ; three units added -- the two constants and print_oracle_record -- none removed).  The
  default, `--derive` (dps 60), `--dps 200`, `--point 2.5`, `--family` and `--family --oracle` are
  byte-identical before and after with stamps, walls and the fence's figures masked (the designed difference:
  `--help`, which gains the two options); `--family --c32` was not re-run -- its units are byte-identical
  under the masked AST and it never reaches the new code.
- Walls on the delivered bytes (one process, nice 10, a 2-CPU / 12 GB fenced scope on a shared host, GNU time;
  several runs side by side): the default 0:22.91 (22.91 s), 77492 kB (before the cure 0:23.34 (23.34 s),
  76744 kB); `--full` 0:22.31 (22.31 s), 77552 kB; `--digits 60` 0:23.30 (23.30 s), 76668 kB; `--digits
  1000000` 0:20.11 (20.11 s), 77612 kB; `--derive` 2:55.28 (175.28 s), 76708 kB (before 2:31.32 (151.32 s),
  78216 kB); `--derive --full` 2:31.80 (151.80 s), 76768 kB; `--dps 200 --full` 0:21.71 (21.71 s), 76688 kB;
  `--point 2.5` 0:46.95 (46.95 s), 68944 kB; `--family` 0:02.14 (2.14 s), 75396 kB; `--family --oracle`
  0:00.47 (0.47 s), 71364 kB.
- MANIFEST.sha256 re-emitted by gen_threshold_banana_manifest.py (the generator of record; the evaluator's row
  moves, the 26 other rows unchanged); sha256sum -c OK on every row.  threshold-banana-expression.md,
  _snippet.md and vendor_row31_family/ are unchanged.
- sha256 of the cured script: threshold-banana-evaluate.py 48b07751b0909162… (was 6c2f59469606a2df…).

## 2026-09-09 — frobenius_coefficients_rows31_32_20260909T042148Z.json: ancillary data file, Table 2 rows 31 and 32 — the Frobenius coefficients of the eps^0 layer of the physical master to 31 significant digits under the stated particular-solution convention; listed in MANIFEST.sha256 by gen_threshold_banana_manifest_v2.py (the generator of record, succeeding gen_threshold_banana_manifest.py by one ROLES row); no script byte changes

- NEW frobenius_coefficients_rows31_32_20260909T042148Z.json (sha256 12b90aea7709c452…, stamp
  2026-09-09T04:21:48Z): a JSON file served beside the evaluator, emitted by key (emit_r1_datafile.py
  b628339b7611fac7…, stamp source date -u) from the receipt R1_FROBENIUS_COEFFICIENTS_v2_20260909T041725Z.json
  (sha256 f367d80f571f5b4f…; the file names it under source_receipt with the full sha256).  It holds, for row
  31 (the (1,1,1,9) K3 banana) and row 32 (the (1,1,1,1,16) CY3 banana), the Frobenius coefficients a_k of the
  eps^0 layer f_0 of the physical master in the IBP operator's z = 0 Frobenius basis (z = -1/p^2, the IBP
  gauge of leg (I): L_IBP = L_record(theta_z -> theta_z - 1)) -- the 31-significant-digit strings of record
  served_31_digit_strings (row 31: a_0, a_2, a_3; row 32: a_0, a_1, a_3, a_4, a_5), the coefficient at the
  floor on each row as a bound (row 31 a_1: |a_1| <= 10^-31, |a_1|/|a_0| 2.1e-33 and 2.73e-44 on the two legs;
  row 32 a_2: |a_2| <= 10^-31, |a_2|/|a_0| 1.0e-33 and 1.06e-43), the two-precision members in full
  (members_full), the basis' first coefficients (basis_first_coefficients), the digit rule and, for row 31,
  the floor source.  The evaluator reads it in no tier; the printed footnote abbreviates these strings, the
  file carries them whole.
- The convention, verbatim from the file -- row 31: "f_0 = a_0 Pi_0 + a_1 Pi_1 + a_2 Pi_2 + a_3 Pi_3 + f_p
  with Pi_0 = z varpi_0 (varpi_0 = 1 - 12 z + ..., the operator's holomorphic solution in the Feynman
  normalisation), Pi_1 = Pi_0 log z + z h_1, Pi_2 = (1/2) Pi_0 log^2 z + z h_2 log z + z h_3 (h_i(0) = 0, no
  z^2 term in h_1, h_3), Pi_3 = z^2 (1 + O(z)), and f_p the particular solution whose z = 0 expansion has no
  z, z log z, z log^2 z or z^2 term"; row 32: "f_0 = sum_{k=0}^{5} a_k Pi_k + f_p with Pi_0 = z varpi_0
  (varpi_0 = 1 - 20 z + ..., the operator's holomorphic solution in the Feynman normalisation), Pi_k = Pi_0
  log^k z / k! + lower log powers (k = 1, 2, 3; the correction series start at O(z^2) relative, no z^2 or z^2
  log z term), Pi_4 = z^2 (1 + O(z)), Pi_5 = z^2 log z + ... (no z^2 term), and f_p the particular solution
  whose z = 0 expansion has no z log^j z (j = 0..3), z^2 or z^2 log z term".
- The digit count, from the file and the receipt: digits.served 31 on both rows = int(min) of the
  two-precision agreement over the counted coefficients (row 31: a_0 32.2, a_2 32.6, a_3 31.7, 3 compared, min
  31.7, int floor 31; row 32: a_0 32.0, a_1 33.7, a_3 33.3, a_4 33.2, a_5 32.7, 5 compared, min 32.0, int
  floor 31); the two members coincide at the served length.  Row 31's legs: the goal-60 AMFlow point at pB (pp
  = -80) + the goal-60 completed masters, read at dps 40 / N 175; the goal-80 point + the goal-80 completion,
  read at dps 50 / N 204.  Row 32's legs: the goal-60 AMFlow point at pB (pp = -80), all nine masters, read at
  dps 40 / N 472; the same point read at dps 50 / N 576 -- ONE landed point inside the disc (pB at goal 60):
  the pair is the read at two dps on the same object; the data's own two-goal agreement is the pA pair
  (LEG_III_ROW32_SECOND_POINTS two_precision_pair_pA.min_digits_int_floor 62), not repeated here.
- MANIFEST.sha256 re-emitted by gen_threshold_banana_manifest_v2.py, the generator of record succeeding
  gen_threshold_banana_manifest.py (sha256 1ef41b750d762fe5…) by ONE ROLES row for the data file (its role
  line's figures read from the file at emission: the coefficient names, the digit count, the source receipt's
  sha256 prefix) and the succession named in the PRODUCER header; the 3 role rows + the 25
  vendor_row31_family/ rows = 28 rows; sha256sum -c OK on every row (28 OK, 0 not OK); two emissions differ by
  the stamp line only.  The predecessor refused the served directory by name ("in the bundle but not listed")
  once the data file lay beside the evaluator; v2 refuses by name when the file is absent or its shape moves.
  threshold-banana-evaluate.py, threshold-banana-expression.md, _snippet.md and vendor_row31_family/ are
  unchanged.
- sha256 of the data file: frobenius_coefficients_rows31_32_20260909T042148Z.json 12b90aea7709c452… (new); the
  evaluator threshold-banana-evaluate.py is unchanged.

## 2026-09-11 — threshold_hankel_tail.py and direct_linear_extract.py served beside the evaluator (the threshold connection coefficients c_alpha of the K3 / CY3 / CY4 banana coalescences derived analytically from the Hankel-kernel tail, every step exact over Q, and extracted by one direct linear solve at 1400-bit ball arithmetic; calpha_rings.py and fixtures/ vendored and pinned by sha256); threshold-banana-evaluate.py: the s-chart singularities read per square-free factor of the leading symbol (a repeated root such as --msq 1,4,4,9 no longer stops mp.polyroots) and a --msq whose exact Picard-Fuchs ansatz does not close refused by name (exit 2), every (1,1,1,9) digit unchanged; threshold-banana-expression.md: the Hankel-tail provenance of -sqrt(3)/(36 pi) and the Route-A figures of record; MANIFEST.sha256 by gen_threshold_banana_manifest_v3.py (33 rows)

- NEW threshold_hankel_tail.py (sha256 350d3808cd85efe7…): the threshold connection coefficients of the banana coalescence sequence
  DERIVED, not fitted -- K3 (1,1,1,9) c_{3/2}, CY3 (1,1,1,1,16) c_{5/4} and c_{7/4}, CY4 (1,1,1,1,1,25) c_{3/2} -- from the
  non-oscillatory tail of prod J_0(m_i y) after the rotation of the Bessel representation to the Hankel kernel and the
  Mellin formula: c_{alpha_n} = 2^{1-L-n} pi^{-L/2} (prod m_i)^{-1/2} r_n cos(pi(L-2)/4 + n pi/2) Gamma(1-alpha_n)^2,
  alpha_n = L/4 + n/2 (L propagators, the largest root the sum of the others), every step exact over Q, the result
  reduced to the calpha_rings grammar (sign, rational, pi power, radicals, Gamma exponents).  The bytes are the module's
  bytes of record 20c29f02aa4dc6ad… with TWO code units changed under the masked AST (`_calpha_rings_default`: calpha_rings.py BESIDE
  the module is the first candidate, then the CALPHA_RINGS environment variable, then tools/coalescer/calpha_rings.py under
  BOOTSTRAP_ROOT or the tree above; `main`: a --masses tuple in which no root equals the sum of the others -- e.g. 1,4,4,9,
  whose roots split 1 + 3 = 2 + 2 -- is REFUSED BY DESIGN by name with the usage exit code before any number is printed:
  `--derive --masses 1,4,4,9` and `--check --masses 1,4,4,9` both print `REFUSED (exit 2): --masses 1,4,4,9: masses [1, 2, 2, 3]: no mass equals the sum of the others (no coalescence -> no fractional threshold branch); this tool derives the fractional threshold branch of a ONE-line coalescence only (the largest root the sum of the others)`, rc 2; on the
  bytes of record the same command ended in a traceback, `ValueError: masses [1, 2, 2, 3]: no mass equals the sum of the others (no coalescence -> no fractional threshold branch)`, rc 1), the pin
  FIXTURES_SHA256 naming the fixtures file served beside it (below; its comment names MANIFEST.sha256), and docstring notes
  ('L := number of propagators', matching the code's L = len(msq); the REFUSED-BY-DESIGN sentence; the reference sentence,
  which names an independent reference derivation of 2026-09-10 on file with the authors; the exit-code line); every other
  unit identical.  `--check --family ALL --dps 60` from the bundle with no environment variable set reads
  `calpha_rings.py calpha_rings.py sha256 f31b186255d2aa1f...; fixtures fixtures/hankel_tail_fixtures.json sha256 3aca127c00cb0dd9...`: the four recorded structures -sqrt(3)/(36pi), -1/(sqrt(2*pi)*Gamma(1/4)^2) = -Gamma(3/4)^2/(2*sqrt(2)*pi^(5/2)), -5*Gamma(1/4)^2/(384*sqrt(2)*pi^(5/2)), -sqrt(5)/(40pi^2) -- STRUCTURE EQUAL x4; the 7 record strings of the fixtures at dps 60:
  ROW31_ARB_VALUE_OF_RECORD.value_string 60.0 d (cap 60, bar 50); ROW31_route_A_record_printout 60.0 d (cap 60, bar 50); cy3-banana-evaluate.REF_C54 60.0 d (cap 60, bar 50); LEGII_CY3_ibp_dps80.sdec0.15.c_re 60.0 d (cap 60, bar 50); cy3-banana-evaluate.REF_C74 60.0 d (cap 60, bar 50); LEGII_CY3_ibp_dps80.sdec0.15.c_re 60.0 d (cap 60, bar 50); GATE_CY4.targets.3/2 60.0 d (cap 60, bar 50), all PASS; the four integer-relation pins derived from the structure EQUAL to the pinned vectors (relation residuals
  10^-60.0 / 10^-60.0 / 10^-59.9 / 10^-60.0 with the analytic value); the four identities c_{5/2}/c_{3/2} = -19/216; c_{9/4}/c_{5/4} = -149/2560; c_{11/4}/c_{7/4} = -5185/75264; c_{5/2}/c_{3/2} = -11/200 EQUAL (exact) to the record operators' Frobenius coefficients;
  CHECK: PASS; wall 0:00.14 (0.14 s under the fence; 97% of one CPU on a shared host under load), 30480 kB.  On a copy of the bundle with no project
  tree above it CHECK: PASS again, reading the copy beside it.  `--selftest --dps 60`: clean check PASS; planted a_1 = -1/7:
  FAILED BY NAME where planted; the conjugate pair's sign: FAILED BY NAME on all four; a record-string digit (CY4, digit 30): FAILED BY NAME on that string only;
  SELFTEST: PASS; wall 0:00.16 (0.16 s under the fence; 96% of one CPU on a shared host under load), 31264 kB.  `--derive --family K3 --dps 60` prints the
  K3 tail objects the expression file's provenance sentence quotes: r_1 = 1/3, cos_1 = -1, lambda_1 = -1, alpha_1 = 3/2, the structure
  -sqrt(3)/(36 pi) (sign -1, rational 1/36, pi^-1, 3^(1/2)) and c_{3/2} = -0.015314691539494223597536847175360262261… at 60 digits (tail
  coefficient 2^-3 (2/pi)^2 3^(-1/2) r_1 cos_1 = -sqrt(3)/(18 pi^2); Mellin factor 2^-3 Gamma(-1/2)^2 = pi/2).
- NEW direct_linear_extract.py (sha256 601735c6fa4e1b32…): the DIRECT LINEAR extraction of the same coefficients at >= 1400-bit ball
  arithmetic (python-flint) for K3 (1,1,1,9) and CY3 (1,1,1,1,16) -- the multinomial-squared period series generated exactly
  and annihilated EXACTLY by the record operator of the fixtures, the s-chart D-form, the seed jet above the threshold with a
  rigorous tail bound, a Taylor transport along the record's path at two precisions, the local Frobenius basis at s = 0
  exactly over Q, one r x r linear solve, the projector's digits of record printed beside.  The bytes are the module's bytes
  of record 7679c8c8a3b2658b… with NO code unit changed under the strings-masked AST: the docstring's reference sentence names an
  independent reference derivation of 2026-09-10 on file with the authors, two internal work-item labels are replaced by the
  objects they stood for (the separate ore_algebra oracle; threshold_hankel_tail.py), the closed-form comparison line
  prints `(threshold_hankel_tail.py, analytic)`, and the `--direct-linear` lower bound is refused with the sentence
  `direct_linear_extract.py: error: --direct-linear must be >= 1400 bits (the >= 100 working digits this extraction targets, with margin)` (`--family K3 --direct-linear 1000`: exit 2, the usage code, before any number is
  computed).  `--selftest` from the bundle: clean K3: PASS; c_{3/2} two-prec 234.8 d, vs records [195.0, 80.0, 77.0], vs closed 416.0;
  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; planted operator (theta^2, z^1, +1):
  REFUSED by name (annihilation FAIL, rc 3); planted record-string digit (K3, digit 30): FAILED by name on that string only; SELFTEST: PASS; wall
  0:41.63 (41.63 s under the fence; 99% of one CPU on a shared host under load), 58480 kB; the same tier on the bytes of record prints the identical
  report (9 / 9 lines with the stamp and timing lines masked, differing: none).  `--family K3 --direct-linear 1400 --sdec 1/4`
  on a copy of the bundle with no project tree above it (1 fixture source(s) reported 'not present here, the pinned copy in
  the fixtures used'): exact annihilation over 200 coefficients: residual EXACTLY 0; ROW31_ARB_VALUE_OF_RECORD.value_string 195.0 d (cap 195) PASS; ROW31_route_A_record_printout 80.0 d (cap 80) PASS; LEGII_S2.ibp.c1=-12.sdec0.15 77.0 d (cap 77) PASS;
  vs the closed form -sqrt(3)/(36*pi): 416.0 d; two-precision (1400 vs 800 bits) 234.8 d; VERDICT: PASS; wall 0:07.10 (7.10 s under the fence; 105% of one CPU on a shared host under load), 57848 kB.
- NEW calpha_rings.py (sha256 f31b186255d2aa1f…, verbatim; pinned inside threshold_hankel_tail.py as CALPHA_RINGS_SHA256 and named with
  the same sha256 by fixtures/hankel_tail_fixtures.json): the family / mass-tuple / ring table -- every recorded closed form
  a structure evaluated at run time, every expected integer relation derived from it.  `python3 calpha_rings.py` from the
  bundle: CALPHA_RINGS SELFTEST PASS (25/25, 0 skipped); wall 0:00.16 (0.16 s under the fence; 98% of one CPU on a shared host under load), 28236 kB.
- NEW fixtures/hankel_tail_fixtures.json (sha256 3aca127c00cb0dd9…; families K3, CY3, CY4; 7 record strings, the integer-relation pins, the Frobenius
  coefficients phi_1, each string copied by object with its source path and sha256): the fixture of record 130ff46cd2316a76… with ONE
  provenance block of family CY3 re-worded for the public copy -- an external reference value pair now carried as 'an
  independent reference computation of 2026-09-10 (a 1400-bit direct linear solve), on file with the authors' with its file's
  sha256 and no project path; every value, record string, pin and other source pointer byte-identical (a structural
  comparison of the two JSON objects differs in that one key only); the block is never read by threshold_hankel_tail.py.  NEW
  fixtures/direct_linear_fixtures.json (sha256 c3bb23092d1367f9…, verbatim; families K3, CY3; the record operators in theta form, the path of
  record, 9 record strings, the closed forms, the projector's digits of record; it names the served
  frobenius_coefficients_rows31_32_20260909T042148Z.json by its sha256 12b90aea7709c452…).  The sources that point inside this bundle
  (vendor_row31_family/operator/PF_119_EXACT.json, c32/LEGII_S2.json, c32/c32_record.json) carry the served bytes' sha256;
  the source paths are project-relative provenance pointers and are never opened when the file is absent (the pinned
  string is used as it stands).
- threshold-banana-evaluate.py (sha256 90255485dac07cc1…, was 48b07751b0909162…): TWO units changed under the masked AST (`build_ode_s`; the
  `__main__` block), nothing else.  (i) build_ode_s reads the s-chart singularities (s = -1/z over the roots of the leading
  symbol P_r(z)) per SQUARE-FREE FACTOR of the symbol (sympy sqf_list, then mp.polyroots factor by factor, each distinct root
  once).  A symbol with a repeated root -- `--msq 1,4,4,9 --pf-order 5 --pf-degz 11`, whose symbol is
  (4z+1)^2 (16z+1)(36z+1)(64z+1)(589824z^6+...-10) -- made the simultaneous iteration of mp.polyroots raise at the default
  dps 60 AFTER the exact-annihilation certificate had passed: `--msq 1,4,4,9 --pf-order 5 --pf-degz 11 --point -5` printed
  `[PF] exact operator (order 5, z-degree 11); annihilation residual over 354 coeffs = 0` and then `mpmath.libmp.libhyper.NoConvergence: Didn't converge in maxsteps=200 steps.`, rc 1, wall
  0:07.30 (7.30 s under the fence; 85% of one CPU on a shared host under load), 78504 kB.  With the cure the same command prints
  `[DE] singularities in s: [-43.2682, -6.1117, -6.1117, 0.0, 0.3734, 4.0, 6.1091, 6.1091, 16.0, 36.0, 64.0]` (s = 4 listed once),
  `[seed] seed point raised to s_b=160 (> max singularity 64 for msq=[1, 4, 4, 9])`, certifies the seed tail, transports along two
  homotopic paths and prints varpi_0(-5) = 0.32959510566158978513752017764389621897733329522663 with `two homotopic transport paths agree to
  56.9 d` (>= dps-10, the raising bar), rc 0, wall 2:20.77 (140.77 s under the fence; 96% of one CPU on a shared host under load), 68196 kB; at `--point 100` the
  direct seed series (|s| > 40) agrees with the transport to 48.6 d and the two paths to 59.2 d (varpi_0(100) = 1.269772818747437580157861996026…),
  wall 0:25.05 (25.05 s under the fence; 91% of one CPU on a shared host under load), 69012 kB.  A square-free symbol -- the (1,1,1,9) case,
  (4z+1)(16z+1)(36z+1)(16z^2+22z+1) -- takes the one mp.polyroots call on the same coefficient list as before, so every
  (1,1,1,9) digit is unchanged: the default tier before / after 13 / 13 output lines identical with the timing lines masked
  (Fast-default self-checks PASSED; walls 0:24.97 (24.97 s under the fence; 91% of one CPU on a shared host under load), 71368 kB before,
  0:24.57 (24.57 s under the fence; 93% of one CPU on a shared host under load), 72892 kB after); `--point 2.5` before / after 11 / 11 lines identical
  (varpi_0(2.5) = (-0.34049699119780256234965543663782361585838110590394 - 0.30026555995437568815589452235908762002126070670559j), two paths 58.2 d; wall 0:57.18 (57.18 s under the fence; 93% of one CPU on a shared host under load), 68328 kB after);
  `--derive` (the full Route-A derivation and its deep gates at dps 60) before / after 29 / 29 lines identical (`All gate checks PASSED`
  both times; walls 3:00.22 (180.22 s under the fence; 96% of one CPU on a shared host under load), 74408 kB before,
  2:56.32 (176.32 s under the fence; 96% of one CPU on a shared host under load), 70620 kB after); `--family` before / after 14 / 14 lines identical
  (`[gate] operator identity PASS three ways (EQUAL at a = 1 (a), 1 (b), 0 (c))`).  Planted repeated-root control (a script beside the delivery importing the
  evaluator by path; three calls of build_ode_s): (A) the evaluator's own (1,1,1,9) operator, `(A) singularities in s (6): ['0.0', '0.75304923', '4.0', '16.0', '21.246951', '36.0']` both
  before and after; (B) the same operator left-multiplied by (4z+1) -- the same solutions, the symbol now carrying (4z+1)^2 --:
  before `(B) mp.polyroots NoConvergence RAISED on the planted (4z+1)^2 symbol: Didn't converge in maxsteps=200 steps. -- the served defect`, after
  `(B) singularities in s (6): ['0.0', '0.75304923', '4.0', '16.0', '21.246951', '36.0']; equal to (A)'s to 1e-50: True; s = 4 listed 1 time(s)`; (C) the (1,4,4,9) symbol of
  record as the top coefficient alone: before `(C) mp.polyroots NoConvergence RAISED on the (1,4,4,9) symbol: Didn't converge in maxsteps=200 steps. -- the served defect`,
  after `(C) singularities in s (11 incl. 0): ['-43.268239', '(-6.1116801 - 5.880373j)', '(-6.1116801 + 5.880373j)', '0.0', '0.37341461', '4.0', '(6.1090924 - 3.664674j)', '(6.1090924 + 3.664674j)', '16.0', '36.0', '64.0']; s = 4 listed 1 time(s)`;
  control exit 5 before (NoConvergence RAISED), 0 after (PASS).  (ii) in --point mode a --msq whose exact Picard-Fuchs ansatz
  does not close at (--pf-order, --pf-degz) is refused by name with exit 2: `--msq 1,4,4,9 --point -5` at the default ansatz
  (order 4, z-degree 5) printed a traceback ending `AssertionError: nullspace dim 0 != 1 mod 2305843009213693951`, rc 1; it now prints
  `REFUSED: --msq 1,4,4,9: the exact Picard-Fuchs ansatz (order 4, z-degree 5) does not close on this mass vector (nullspace dim 0 != 1 mod 2305843009213693951); give the ansatz that does with --pf-order / --pf-degz (a two-two split coalescence such as 1,4,4,9 closes at --pf-order 5 --pf-degz 11): exit 2`, rc 2.
  The c_{3/2} demonstration, --derive, --full / --digits and the --family tiers with their controls are (1,1,1,9)-specific as
  before; --msq stays the --point mode's option.
- threshold-banana-expression.md (sha256 2f02d54d02e3acfe…, was 007951118dd8edb7…): three passages re-cut, the pairs applied verbatim from the record but for ONE token of (a),
  re-pointed here: the Hankel-tail derivation is cited as this bundle's threshold_hankel_tail.py (the module served beside,
  above) in place of a '--hankel tier' that threshold-banana-evaluate.py does not carry.
  (a) The 'Physical reading' of 36 and sqrt(3) is replaced by the provenance of the constants in the Hankel-tail derivation:
  the non-oscillatory tail of J0(y)^3 J0(3y) is -sqrt(3)/(18 pi^2) y^-3 + ..., with 1/sqrt(3) = (m1 m2 m3 m4)^(-1/2) and 1/pi^2
  from the four Bessel asymptotics, the Mellin transform of H0^(1) at lambda = -1 supplying 2^-3 Gamma(-1/2)^2 = pi/2, giving
  -sqrt(3)/(36 pi); the normal-threshold reading 36 = (sum_i sqrt(M_i))^2 is kept as the coincident second reading
  (threshold_hankel_tail.py `--derive --family K3` prints the same objects, above).  (b) Route A's two-base-point agreement
  95.9 d is labelled as such with its 110 working digits, and the re-run at 210 and 225 working digits agreeing to 204 d
  (internal floor 204 d) is added.  (c) The two-method figure A vs B, 80.7 d, is replaced by 195 d, every ball-certified digit
  of Route B, with the record's 80-digit printout cap named as the origin of the earlier figure.  The closed form, the
  195-digit certified value, the PSLQ relations and every other line are unchanged.
- Refusals by name, exercised from the bundle: threshold_hankel_tail.py with a fixtures file carrying one appended field ->
  `REFUSED (exit 3): fixtures <controls>/hankel_tail_fixtures_planted.json: sha256 8260b7cee43d28cc... is not the pin 3aca127c00cb0dd9...`, rc 3 (the new pin); a copy of the module with a
  calpha_rings.py carrying one appended line beside it -> `REFUSED (exit 3): calpha_rings.py at <a copy of the served module with the planted calpha_rings.py beside>/calpha_rings.py: sha256 8c9fccfcaf4bd4b3... is not the pin f31b186255d2aa1f... (pass --allow-unpinned to proceed loudly)`, rc 3 (the copy beside the module is
  the one read); direct_linear_extract.py with a fixtures file carrying one appended field -> `REFUSED (exit 3): fixtures sha256 39355a27f4fc5fe6 != pin c3bb23092d1367f9`,
  rc 3; the --masses and --msq refusals above.
- MANIFEST.sha256 re-emitted by gen_threshold_banana_manifest_v3.py, the generator of record succeeding
  gen_threshold_banana_manifest_v2.py (sha256 01cf77fe93c552d5…) by three ROLES rows (threshold_hankel_tail.py,
  direct_linear_extract.py, calpha_rings.py) and a fixtures/ group of two rows, each with shape assertions read from the
  served files at emission (the modules' FAMILIES, their in-code sha256 pins against the files beside them, the fixtures'
  in-bundle source pins against the vendored files, the served data file's sha256); the fixtures/ subdirectory admitted
  beside vendor_row31_family/.  6 role rows + 2 fixtures/ rows + 25 vendor_row31_family/ rows = 33 rows (sha256 148c34fdbae0a902…;
  was d759608936fd91fa…); sha256sum -c OK on every row (33 OK); against the previous manifest 26 rows byte-identical, 2 rows moved
  (threshold-banana-evaluate.py, threshold-banana-expression.md), 5 rows added; header: 9 comment lines kept, the PRODUCER
  line replaced, 5 added (three role lines, the fixtures/ group line, the pins comment); two emissions (the first --out under the work directory, the second in place) fell in the same second and are byte-identical.  v3 refuses the previous
  directory by name (`REFUSED: threshold_hankel_tail.py is not in the bundle`).
- Not part of this entry: _snippet.md, frobenius_coefficients_rows31_32_20260909T042148Z.json and every file under
  vendor_row31_family/ are unchanged; neither new module imports or reads the evaluator; reduced_statement.py (the row-34
  reduced statement, the third module of the same tool set) belongs beside the four-loop banana evaluator, not here; the
  --family --c32 tier still writes its json in the working directory by default (--out; an existing file is refused).
- sha256: threshold_hankel_tail.py 350d3808cd85efe7…; direct_linear_extract.py 601735c6fa4e1b32…; calpha_rings.py f31b186255d2aa1f…;
  fixtures/hankel_tail_fixtures.json 3aca127c00cb0dd9…; fixtures/direct_linear_fixtures.json c3bb23092d1367f9…; threshold-banana-evaluate.py 90255485dac07cc1…
  (was 48b07751b0909162…); threshold-banana-expression.md 2f02d54d02e3acfe… (was 007951118dd8edb7…); MANIFEST.sha256 148c34fdbae0a902… (was d759608936fd91fa…).
