Repository navigation
research: restructure manuscript, add Ethier-Steinman 3D solves, a 2D H100 representation/execution ablation, C36 studies, and CI - #2
Open
0z5a wants to merge 55 commits into
Conversation
Restructure the October 13 draft without changing any measured value, acceptance gate, seed or evidence file: - Shorter abstract, explicit contribution list and a terminology table. - Related-work section with five verified additional references (Forward Laplacian, Taylor-mode AD in JAX, Griewank and Walther, NSFnets, Neural Conservation Laws). - TikZ method figure; the two pgfplots plots are now plain TikZ so the PDF builds with pdfLaTeX on a stock TeX Live 2020. - New subsection on what the 2D solve times measure: v relative L2 is the binding gate for all nine methods, and the appendix closure counts include the 4,000 Adam evaluations (2,208-5,259 L-BFGS evaluations). - Diagnosis of the failed C36 acceptance; execution and provenance records moved to an appendix. Also update evidence-index.json for the new tex/pdf hashes, fix the stale "GPU results pending" line in the C36 README, add a naming table to the README, and add a CI workflow that verifies the evidence index, runs the package tests (non-blocking until first green run) and the 19 C36 CPU regression tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The first run passed 233 tests with 2 skips. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Run the frozen Ethier-Steinman protocol v4 once on two H100 GPUs: six formal seeds x three arms (FlashNS C17, A24 full spatial-jet reference, naive 35-monomial ablation), FP64, unchanged eight gates, 400 L-BFGS blocks. All 18 solves pass both validators. Paired setup-plus-optimization speedups of C17 are 3.602x over A24 (3.353-4.284) and 6.957x over naive Q35 (6.750-7.436). The independent NumPy audit passes 1,512 comparisons (max abs discrepancy 1.78e-14). - research/ethier-3d: executed source, data, protocol v4, driver, audit, result and audit JSON, analytic-source verification and a release map (public copies differ only in a site activation path and a hardware label). - Manuscript: new Section 7, abstract, contributions, terminology, discussion, conclusion and appendix records; evidence index pins the new result, audit, protocol and release map. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
State that the Ethier ratios measure the contracted state and the explicit parameter transpose together, add paired per-evaluation cost ratios (3.537x and 7.034x), record Torch 2.4.0a0 / NumPy 1.26.4, say "full spatial-jet" for A24, and note the 8 macOS metadata archive members. No measured value changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add the C36 v2 development protocol and its batch sources, frozen before any GPU run (results pending): - protocol-v2-development-20261014.json: the v1 problem, data, model, Adam schedule, L-BFGS settings, seeds, training limits and physical gates, with only the L-BFGS budget raised from 20 to 800 calls (closure cap 520 -> 20,800). Both engines (packed analytic and packed-forward parameter AD, each compiled with CUDA Graph replay) train both observed v1 seeds, so the run is a reachability study, not a formal time-to-accuracy claim. A decision rule (a/b/c) is pre-registered. - potential_train_v2.py: training child with qualification against the preserved native reference and dense parameter AD, periodic full-gradient checks, scheduled checkpoints in the v1 format and the first training-gate closure. - run_c36_v2.py / entry_c36_v2.sh: run-once cluster driver with lane locks, compiler smoke, budgeted physical observations under the allocation deadline, an independent NumPy reader and a verified archive. - read_c36_v2.py: reader that rechecks every saved comparison, hash and event count and pairs the engines per seed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Job 70 ran the frozen C36 v2 development protocol once on one 4-GPU H100 node: two engines (compiled packed analytic, packed-forward parameter AD) x two v1 seeds, only the L-BFGS budget raised from 20 to 800 calls. - All four runs pass the training gate (loss <= 1e-4, |g|inf <= 1e-3) at L-BFGS calls 85-92 and end at loss 1.3-2.3e-6. Every complete gradient check passes (max 1.16e-5 of the original budget). - On these observed seeds the analytic engine reaches each loss threshold from 1e-2 to 1e-5 1.30-1.33x sooner than parameter AD. - Final-checkpoint physics: uniform field gate, initial/boundary values and trajectory refinement pass; stratified velocity error falls 15x from v1, analytic endpoint error is 0.00097 / 0.00107 against 0.001. Stratified corrected pressure (0.0021-0.0033 vs 0.001) fails in every run, largest in the box plateau. Parameter-AD observations were stopped at the allocation end and are reported as partial. - Registered decision rule: branch (b). Adds paper Section 6.7, result and reader JSON, the C36 README section and README summaries; the evidence index pins 24 files. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Quote the registered conditions verbatim. The reader's mechanical
classification is (b), but its trend condition ("physical errors stop
falling") could not be evaluated: only final checkpoints were observed,
and every reported physical error fell 7-31x per seed relative to v1.
- Section 6.6: attribute the 6.4-8.7x stratified/uniform pressure ratio to
holdout composition (4,033 of 4,096 uniform points lie outside the box
support) instead of claiming cutoff localization.
- The parameter-AD observations were stopped by the batch's own time
guard so the reader and archive could finish, not by the allocation end.
- Disclose that the v2 physical metrics are the observer's own output and
were not re-read independently, and that the shared dense-AD checks bias
the engine time ratios toward one.
No measured value changes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…atches Sources and protocol frozen before their GPU runs (results pending): - observer_calibration.py / run_c36_observe.py / entry_c36_observe.sh: run-once batch that calibrates the observer chunk size, observes every unique C36 v2 checkpoint (46) on all physical holdout planes with the unchanged observer, re-reads each observation with the unchanged independent NumPy reader, and checks reproduction of earlier observations. - schedule_family.py + test_schedule_family.py: temporal-smoothness family of the box problem, s_w(t) = switch(t/w - (1/(2w) - 1/2)); w = 1/2 is the original problem bit for bit. Tests check bitwise identity, w^-k derivative scaling, zero value targets, and agreement of both engines with an independent native coordinate-AD oracle at w = 3/4. - protocol-v3-smoothness-development-20261015.json, potential_train_v3.py, run_c36_v3.py, read_c36_v3.py, entry_c36_v3.sh: continuation schedules C1/C2 that train on smoother motion and finish on the original problem with the v2 budget, paired with the v2 analytic runs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The first v3 smoothness batch failed in all four lanes at the Adam100 dense-AD check: capture() keeps only the graph and its outputs, and the trainer held the analytic engine in a stage-local variable, so replays after stage entry read freed buffers (negative losses from update 2). Keep the engine with its replay, re-check every stage after garbage collection and allocator churn, reject negative losses, and make the CPU self-test replay hold only a weak reference to the engine so the same lifetime error fails the self-test (verified by a negative control). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ess continuation Four run-once observation batches observe every saved C36 development checkpoint (46 parameter vectors) and 26 continuation checkpoints on all data planes: 72 observations, each re-read by the independent reader (8,424 checks, all PASS). No checkpoint passes physical acceptance. The physical errors fall with the loss and are still falling at the end of the budget, so the trend condition of the registered branch (b) does not hold; stratified pressure inside the moving box stays 1.9-3.3x above its limit. The temporal-smoothness continuation (protocol v3, motion-schedule width w = 1 -> 3/4 -> 1/2, same budget) reaches the training gate in all four runs. C1 needs 8-36% fewer evaluations to every registered loss threshold but is not always faster in seconds; C2 is later everywhere and is harmful under the registered rule, although it meets the gate with 0.61-0.69x the baseline's stratified pressure. Neither schedule changes which acceptance test fails. Paper: new Sections 6.8-6.9 and Figure 4; Section 6.7, discussion, conclusion and appendix updated; evidence index pins the new protocol, results, records, release map and generator scripts (31 pages). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…fix release-map keys Section 6.9 now quotes the registered helps/no-effect/hurts clauses: the continuation does not help, C2 meets the hurts clause through its thresholds and C1 meets no clause cleanly. The gate caption states both training limits. The trend rank correlations (0.95-0.96 pressure, 0.99-1.00 velocity) are computed from the published observation record by tools/c36_rank_correlations.py and pinned. The release map keys its executed packets by the short names its file entries use. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ng L-BFGS) Protocol v4 resumes the C2 runs and the paired v2 baseline runs from their final checkpoints (equal prior budgets) and adds 4,000 L-BFGS calls on the original problem with a fresh history. Primary question: does the budget reach physical acceptance; secondary (underpowered, <32% not interpreted): does the C2 start reach it sooner. The registered decision is implemented in box376.decide_c36_v4 with six mutually exclusive outcomes and synthetic tests (now in CI). The trainer verifies the start checkpoint and parameter hashes (a tampered start is refused), qualifies the original-problem engine against the native reference, re-checks the resume point after allocator churn, requires continuity with the source final loss, and restarts its counters so the observer indexes its own events (checked in the CPU self-test). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The resumed design restarted the L-BFGS history at a loss of about 1e-6, where it falls into an overshoot/backtrack cycle (0.2-0.7% loss decrease in 100 calls versus about 32% in the source runs' last 100 calls). The attempt was cancelled after 13.5 minutes on optimizer progress alone, before any physical observation; its partial outputs are archived. The source runs' last 50 calls show the baseline still descending while the continuation runs have stalled at 1.1-1.4e-6. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…GS calls) Replaces the cancelled v4 resumed design: one continuous run per (seed, engine) with the unchanged v2 trainer and driver and the L-BFGS budget extended from 800 to 4,800 calls, so the L-BFGS history never restarts. The smoothness arm is dropped because its source runs had stalled by call 800 (user decision). The registered decision (box376.decide_c36_v5, five mutually exclusive outcomes) and its synthetic tests are added to CI. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… cancelled v4 attempt The development recipe with six times the L-BFGS budget (4,800 calls, both engines, two seeds) stalls soon after call 800: the loss falls only 3-12% over the extra 4,000 calls and stratified pressure changes by under 4%, ending at 2.2-3.0x its limit. 24 all-plane observations (reader 2,808 checks PASS) give the registered outcome E5: no run passes and both engines stopped falling, so no formal claim follows and the remaining gap needs a changed problem definition, not more budget. Paper: new Section 6.10 (cancelled v4 resumed design, v5 design and results, Table 16); Section 6.8, discussion, conclusion and appendix updated (33 pages). The evidence index pins the v4/v5 protocols, the v5 results and decision, and the extended release map (all executed sources byte-identical to the repository). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The v5 observation archive and the registered decision now have verified copies on persistent project storage as well as cluster scratch; the appendix and the C36 README say so. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Answers the external review's main 2D question by separating the GL8 representation from the execution: compact Q10 versus compact GL8 under the same Inductor + CUDA Graph execution, GL8 compiled versus the same GL8 layout with native pointwise islands, both representations eager, and the explicit transpose versus generic autograd on the same GL8 state. Scales the comparison over 2k-64k interior points and four extra width/depth topologies, adds untimed profiles for the kernel breakdown and development solves on the six formal seeds. The protocol states the prior A100 result (GL8 not faster than Q10 under Inductor) and commits to reporting the outcome either way. The plan (244 tasks, core decomposition first), driver, reader and the width/depth wrapper around the unchanged bench_gpu are included; CPU checks and a four-lane driver self-test pass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…t guard) Attempt 1 failed in all 244 tasks at start-up: bench_gpu records `git rev-parse HEAD` and the source tree had been copied without git metadata. Attempt 2 clones the pinned commit (byte-identical tree), the driver checks that commit at admission, and a fail-fast guard stops starting tasks when the first eight finished tasks all fail. Protocol and plan are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The pre-registered ablation (244 fresh-process measurements, attempt 2; attempt 1 failed at start-up before any timing) separates the GL8 state from its execution on the 2D objective: - execution: native pointwise kernels make the same GL8 computation 1.53-1.83x faster at every size, with identical cuBLAS GEMM time; - representation: the GL8 state alone is 1.09x at the original 2,048 points, where the registered A/A gate failed (1.057), and 1.63-1.66x from 16,384 points on; - explicit transpose versus generic autograd: 1.03x at 2,048 points, 1.31x from 16,384 points on; - solves at 2,048 points: optimizer overhead (2.5-3.8 ms per evaluation) absorbs the 1.71x faster gradient, optimization alone 0.95x; the H20 solve-level gain is device-specific. Paper: new Section 5.6 with Tables 8-9; contributions, attribution and replay-versus-solve discussion and the conclusion updated (35 pages). Results, post-hoc checks and a release map (all published sources byte-identical to the executed copies) are pinned in the evidence index. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The ablation showed that at 2,048 points native GL8's 1.71x faster gradient does not shorten a solve on H100, because the L-BFGS phase costs about 6.5 ms per evaluation in every cell (post hoc split of the archived solves; stop checks are small). This study runs complete solves of cells A, B and C on the six formal seeds at 16,384 and 65,536 interior points (new problem instances, unchanged optimizer program and acceptance) with a mechanical solve-level decision rule and stated predictions (about 1.4x and 2.0x for A/C). Admission checks the pinned commit and the frozen data/initialization hashes of both sizes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
phase_split_2048.py applies the solve-scale reader's phase split to the 18 archived ablation solves (post hoc, labelled as such). L-BFGS costs 6.3-7.2 ms per evaluation in every cell against 0.17-0.28 ms of gradient replay; Adam costs 0.25-0.39 ms per evaluation. The README now cites this file instead of an unpinned figure. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The pre-registered solve-scale study (170412b) ran once: 36 complete solves of cells A, B and C at 16,384 and 65,536 interior points on the six formal seeds, all accepted. The registered rule finds a solve-level gain for every pair at both sizes (6/6 favourable each). Native GL8 over compiled Q10 is 1.48x (16,384) and 1.88x (65,536) in optimization alone; the protocol expected about 1.4x and 2.0x. Post hoc, each L-BFGS evaluation costs 5.9-7.1 ms beyond gradient replay at 2,048, 16,384 and 65,536 points in every cell, while the Adam phase adds only 0.05-0.12 ms. The H100 solve-level gain is therefore a matter of problem size. The paper's 2,048-point explanation, the replay-versus- solve discussion and the conclusion no longer call it device-specific. Setup depends on per-lane compiler-cache state set by queue order. The ablation's 2,048-point Q10 setups (4.7-5.8 s) were warm-cache values, so setup-plus-optimization ratios are not attributed to the cells. Adds Table 10, the reader output, post-hoc outputs and scripts, and the release map (12 files byte-identical, archive 430ee078). The evidence index pins 58 files, and the PDF is 36 pages. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
At 2,048 points every Q10 solve had a warm compiler cache, so that setup comparison is warm against warm, and warm Q10 setup (4.7-5.9 s) is still slower than native (0.3-1.4 s): a real difference between the cells. What queue order decides is which seeds at 16,384 and 65,536 points paid a cold compile. That widens the per-seed setup-plus-optimization ranges and lifts the 65,536-point C/A value above optimization alone. The paper, the READMEs and the summary no longer say setup ratios reflect only batch order. The ablation README gains a forward pointer to the solve-scale refinement. PDF rebuilt (36 pages); index re-pinned. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Exact zero-gate constant folding is qualified on CPU only. This batch measures it on one H100 with the unchanged graph-timing protocol and runner: both the analytic candidate and the parameter-AD control are folded and compiled. The primary statistic is the runner's paired ratio with its bootstrap interval, classified mechanically: lower bound above 1.03 is an analytic advantage, an interval inside [0.97, 1.03] is no effect. An unfolded control run follows on the same GPU if at least 45 minutes remain. It gives a descriptive per-arm folding factor (expected at most about 1.7 from 4,999/2,933 rows) and a replication of the unfolded 1.324x. The driver is derived from the 2026-10-13 node driver, whose batch was cancelled before it ran: - timeouts come from the allocation deadline; - the control runs whether or not the folded run passed, provided the compiler smoke and CPU folding regressions passed; - every outcome is archived and verified, and locks are released. The reader applies the registered gates and classification using only the standard library. Self-tests on the login node: - full stub run (7 stages, archive 124 members verified); - control skipped when time is short; - admission failure still archives and releases the lock; - real runtime: runner imports, and 4 folding regressions pass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The row count (4,999/2,933 = 1.70) is the factor that cost proportional to rows would give, not a bound. Counted in 128-row chunks it is 1.74, and folded rows need not cost the same as active ones. The paper, the READMEs and the summary now say so. The C36 README also notes that the public driver reads NODE_LOCAL_SCRATCH and USER. PDF rebuilt (37 pages); index re-pinned. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Runs the paper's 2D H20 solve campaign unchanged on one H100 node: - four lanes: public methods (36 solves), NVIDIA methods (24), representation (18) and memory/replay (30); - the same 460 source/adapter/snapshot files, frozen inputs, six initialization byte strings, optimizer budget and acceptance gates. The batch was prepared on 2026-10-13 and cancelled while pending, so it never ran; only the Slurm job name changes. The primary analysis is the unchanged audit_h20.py. A supplementary reader, registered now, adds optimization-only and per-evaluation ratios, the Adam/L-BFGS phase split and each solve's compiler-cache state. The expectation follows from the solve-scale study: a fixed ~6 ms L-BFGS cost per evaluation compresses GL8's advantage over cheap-gradient baselines at 2,048 points. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The review asked for FP32/TF32 measurements. Compiled Q10 and native GL8 run in FP64, FP32 and FP32 with TF32 matrix products: - replay accuracy against the FP64 oracle and replay speed at 2k, 16k and 64k points; - complete solves at 2k and 64k on the six formal seeds. The optimizer program is unchanged. Stop checks and acceptance always run in FP64 on the FP64 problem. The pinned 2D source accepted only FP64. fp32-dtype.patch relaxes the dtype checks only (28 lines, eight modules). On CPU, in both local and batch runtimes, FP64 gradients stay bit-identical to the unpatched source, and FP32 gradients differ from the FP64 oracle by 1.5e-7 to 3.2e-7. Registered rules: - training sufficiency: 6/6 FP64-accepted solves; - solve speed: optimization-only geometric mean > 1.03 with >= 5 of 6 jointly accepted pairs favouring the reduced arm; - replay effects: bootstrap interval outside [0.97, 1.03]. The driver self-test passes: admission, 162 stub tasks, reader and a verified archive. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The review asked for an external 3D baseline. C36 has no accepted solve, so the accepted Ethier-Steinman benchmark is used, keeping the v4 data, seeds, objective, optimizer and acceptance. Two external arms are added; neither uses FlashNS code: - nested scalar-coordinate PyTorch autograd, the ordinary PINN implementation; - Dangel et al.'s public jet (collapsed Taylor mode) for the spatial derivatives and Laplacian. C17 reruns beside them in the same batch and runtime, on one four-GPU node, all arms as CUDA Graph replay. Before submission: - both arms match independent scalar AD within the v4 budget on CPU in the batch runtime; - the driver self-test (18 CPU smoke cases, audit, archive) passes, after removing a jet cache keyed on a reused object id. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
FP64/FP32/TF32 on H100 (pre-registration dbb6d33): 138 of 162 tasks passed; the failures are exactly the 24 TF32 solves. - FP32 suffices: gradient error 1.4-2.7e-7, and all 24 FP32 solves pass the unchanged FP64 acceptance. - TF32 does not: error 1.5-2.2e-4, 0/24 solves accepted. Post hoc, L-BFGS makes about one iteration per block. - FP32 gives no solve gain at 2,048 points. At 65,536 points it shortens optimization 1.53x (Q10) and 1.36x (GL8), and GL8 stays 1.67x faster than Q10. Paper Section 5.7 and Table 11. External 3D derivative baselines on Ethier-Steinman (pre-registration e2e5108): all 18 solves accepted; audit passes 1,512 comparisons. - C17 is 1.90x faster than nested PyTorch autograd and 1.08x faster than the public collapsed Taylor-mode jet package. - A post-hoc phase split puts the Adam-phase gap at 1.37x and 3.62x; the fixed ~6 ms L-BFGS cost per evaluation compresses both. Paper Section 7.4 and Table 22. The abstract, 3D discussion, scope, limitations and conclusion are updated. The C36 external-baseline item stays open. READMEs, the summary, release maps (precision 11/12 byte-identical plus one normalized result; 3D 17/17) and the evidence index (78 files) are updated. The PDF is 39 pages. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 3D: no arm was compiled, whereas the 2D baselines used their faster qualified variant. The 1.08x against the collapsed jet is now given as a paired ratio with its range (0.98-1.19): one seed favours jet, and no gain rule was registered. Abstract, discussion, conclusion, READMEs and the summary are updated. - Precision: FP32 sufficiency is stated for these 1-2% gates. Every solve stops at the gates, so tighter accuracy was not tested. "Every TF32 solve fails acceptance" replaces "fails every gate". "Many PINN codes" replaces "most". PDF rebuilt (39 pages); index re-pinned (78 files). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The unchanged H20 campaign (pre-registration ffd597e) ran once on one H100 node. - All 78 solves were accepted and rechecked by CPU scalar AD. - cuEquivariance native failed qualification: there is no double-backward formula for its fused tensor product. - Compiled variants won for ED, collapsed Taylor, torch AD, PhysicsNeMo and cuDNN. GL8 still beats every baseline, but the ratios compress against H20: - Q10: 1.66 -> 1.22 - collapsed Taylor: 1.73 -> 1.37 - ED / torch AD / STDE: 2.31-3.37 -> 1.29-1.90 In optimization alone, Q10 (1.02) and ED (1.09) are nearly level. The registered supplementary reader shows the cause: L-BFGS costs 6.3-9.0 ms per evaluation in every backend except cuDNN. The chunk memory trade-off reproduces (85% lower setup peak at 16,384 points). Paper Section 5.8 and Table 12 are new. The abstract and conclusion now give the H100 ratios beside the H20 ones, unpooled. Later tables renumber by one, and doc references are updated. The release map has 8/10 files byte-identical, plus the normalized driver and audit. The evidence index pins 85 files; the PDF is 40 pages. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Abstract cut to 195 words (review item P3). It keeps the H100 compression of the H20 ratios, and the 3D external clause now says the arms are uncompiled. - Section 5.8: the remaining Q10 gap is warm-cache setup, not a compile. The larger H20 ratios are "consistent with" a larger gradient share; the H20 L-BFGS cost was not measured. - Section 7.4 and limitations: the 2D H100 retest shows compiling makes collapsed Taylor, ED and torch AD replays 3.2x, 5.0x and 2.3x faster, so a compiled jet could match or beat C17 on Ethier. Compiled external 3D arms are listed as open. - READMEs and the summary are mirrored, and the summary's H20 headline table gains the H100 retest row. PDF rebuilt (40 pages); index re-pinned (85 files). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The uncompiled 3D batch left C17 only 1.085x ahead of the collapsed jet. In the 2D H100 retest, compiling made public packages' replays 2.3-5x faster. This batch asks whether compiling changes the 3D comparison. - Arms: six (C17, nested torch AD, collapsed jet; each graph-only and compiled) on the six formal seeds. Data, objective, optimizer, qualification and acceptance are unchanged. The compiled path traces the whole loss/gradient with make_fx over a model aliasing the solver's parameters, then torch.compile and one CUDA Graph. - Variant selection: each lane first runs every arm warm-only on dev seed 642201. Each method's variant is chosen by median warm-up replay time before any formal solve is read. - Primary statistic: selected external / selected C17, setup+optimization (secondary: optimization only). Rule: > 1.03 with >= 5 of 6 favourable pairs. - Caches: all compiler and JIT caches live under the batch root. Checks so far: - CPU preflight in the batch runtime: all three compiled paths match scalar AD before and after an in-place update. - Self-test: 60 smoke cases, audit and reader pass, archive verified, home caches unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The pre-registered compiled batch (7e803c0) ran once; audit and reader passed. - C17's compiled variant failed CUDA Graph capture in all ten attempts ("Attempt to trace generator" on recompilation; cause not found), so C17 ran graph-only. - Warm-up replay selected compiled jet (0.85 ms, vs 3.45 ms graph) and compiled nested AD (2.39 ms, vs 9.76 ms). - All 30 solves of the five qualified arms were accepted. Registered decisions (selected external / C17 graph): - compiled nested AD: setup+opt 1.59 (6/6), C17 faster; optimization only 1.01, no decided difference. - compiled collapsed jet: setup+opt 1.05 (3/6), no decided difference; optimization only 0.81 (0/6 favour C17), external faster. The cache caveat does not apply. The graph arms reproduce 1.11 and 1.92. Post hoc, the compiled jet's Adam-phase evaluation costs 0.39x eager C17's. The abstract (199 words), 3D discussion, limitations and conclusion now state that compiled public collapsed Taylor mode matches C17 in whole solves and optimizes 1.23x faster. They note that C17 has no native execution layer, unlike 2D GL8; a compiled or native C17 is listed as open. Section 7.4 gains Table 24 and keeps the uncompiled batch as measured. READMEs, summary, release map (11/11 byte-identical) and index (92 files) are updated; the PDF is 41 pages. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Attempt 1 lost every compiled C17 case at CUDA Graph capture. A one-GPU diagnostic (committed under diagnostics/, labelled as not a result) reproduces the failure for make_fx-based routes. Compiling a function that takes the six parameter tensors as explicit arguments survives capture and matches eager C17 after in-place updates. Attempt 2 keeps the arms, data, seeds, warm-up, selection rule, statistics and decision rule of attempt 1. Changes: - external2.py: the new compiled C17 builder; the external methods are unchanged; - a gate: formal cases of an arm whose warm-up failed on every lane are skipped. Attempt 1 stays reported. The abstract follows the latest registered decision. Self-test: 60 smoke cases, gate empty, audit and reader pass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The pre-registered attempt 2 (b391841) ran once. - The repaired compiled C17 qualified on every lane; every method selected its compiled variant; all 36 solves were accepted. - Audit passes 3,024 comparisons; the reader exits 0. Registered decisions (compiled external / compiled C17): - nested AD: setup+opt 1.68 (6/6) and optimization only 1.17 (5/6), both C17 faster. - collapsed jet: setup+opt 1.13 (0.99-1.20, 5/6), C17 faster; optimization only 0.96 (5/6 favour jet), external faster. The two jet decisions differ because of setup. Compiled C17 reuses its compile cache across seeds (3.5-4.0 s). The jet builder recompiles part of its graph every solve (10.7-10.9 s). Per evaluation the jet is 5% faster. The abstract (200 words) and conclusion follow this latest decision, as fixed before the attempt. Section 7.4 gains Table 25 and keeps both earlier batches. The discussion and limitations are updated (a native C17 remains open). The release map is 12/12 byte-identical; the index pins 100 files; the PDF is 41 pages. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The single-box velocity and force vanish identically outside the motion window t in (1/4, 3/4). During the motion the box plateau carries an affine velocity with zero Laplacian and a gradient force; the rotational forcing lies in the cutoff layers. A CPU check of the frozen source (check_source_structure.py) confirms both to rounding. Section 6.1 now states them, and the rest-slice sentence of Section 6.8 notes that the exact velocity and force vanish at those slices. No training or observation is rerun. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The branch history from the C36 zero-gate pre-registration onward was rewritten to remove an account-specific path from one line of the pre-registered driver. Every rewritten commit keeps its author, committer dates and tree, except that line in the pre-registration commit itself. The six pre_registration_commit fields and the zero-gate release map now cite the rewritten commits, and the evidence index re-pins the six release maps. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
0z5a
force-pushed
the
claude/flashns-review-iter-20261014
branch
from
October 18, 2026 06:07
a474655 to
69ee10b
Compare
A post-hoc decomposition of the saved native states of the four v5 finals reproduces every recorded regional and global corrected-pressure value exactly. Within the motion window the plateau error is 4.4-6.6x the limit, 27-70% of it a per-time offset. The cutoff layers carry 1.2-3.4x the limit; with the plateau error set to zero they alone would leave 1.5-1.9x, so plateau-only weighting or sampling cannot pass. At eta = 1/16 the layer force RMS is 4-5x and the force-gradient RMS 9-11x smaller. Section 6.10 gains this paragraph; the tool and its output are pinned (104 files). No observation is rerun. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The v2 recipe on a different single-box instance with the cutoff width doubled from 1/32 to 1/16. The Section 6.10 post-hoc shows the layers alone keep the 1/32 problem over its pressure limit; at 1/16 the layer forcing is 4-5x (force) and 9-11x (force gradient) smaller. The decision applies within this instance only, in order: F1 pass, F2 near miss (<= 1.5x every limit), F0 incomplete (a run lacks a complete final observation; no scientific reading), F3 fail (all four finals complete). - The original calibration generator and its mpmath oracle are added byte-identical. Cutoff-width copies of the calibration and training generators reproduce the frozen 1/32 inputs to 2.8e-14 of each array maximum, with identical sampled weights, regions, ids and targets. - The new 1/16 inputs pass the 80/160-digit source checks. The geometry agrees with native coordinate AD on 88 region-stratified points, and the gate is exactly zero at every value point. - The v6 trainer is the v2 trainer with fresh subset native AD and dense-AD checks in place of the 1/32 native reference, which now supplies only the stored initial parameters. At 1/16 the native subset covers every region. The observer wrapper binds the unchanged observer to 1/16. The driver adds the registered decision. - Component self-tests pass in both runtimes. The login node ends the full CPU trainer self-test, but the driver control flow, reader, decision and archive complete. - CI runs six synthetic decision tests. The index pins 115 files. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The pre-registered wider-cutoff batch (eta 1/16, v2 recipe, 800 L-BFGS calls) ran once on one H100 node from the git archive of 7671c3f. - Every start-up check passes (at most 9.8e-7 of the budget), and all 116 saved checks are within 1.7e-5. - All four runs reach the training gate after 110-152 L-BFGS calls and end at losses of 2.8-4.2e-6. - At the final checkpoints stratified pressure stays 2.0-2.9x its limit. It is the only failing test in three runs; the fourth also misses the trajectory endpoint by 9%. - Registered outcome: F3. The best final is 2.04x its worst limit and all four finals are complete. - Doubling the cutoff lowered the layer forcing 4-5x but not the normalized pressure error. The layers alone would still leave 1.7-2.2x the limit (post-hoc decomposition, which reproduces every recorded value). The paper gains Section 6.11 and Table 22; later tables move up by one. Section 6.10, the discussion, the conclusion and the C36 appendix are updated, along with the C36 and manuscript READMEs and the summary. The pressure tool gains --eta and --runs; with its defaults it reproduces the published v5 decomposition, now also recording eta. The index pins 121 files; the PDF has 43 pages. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The exact pressure vanishes, so grad p = R - dI pointwise, where R is the observed momentum residual and dI the inertia error of the learned velocity. A decomposition of the saved v5 and v6 final states reproduces the observer's regional values and checks the identity and its divergence to 4e-12. - The pressure gradient is not forced by the velocity error. Its cosine with -dI is -0.05 to 0.07 in every region, at the noise floor. - dI dominates the residual at 3-15x the pressure gradient. The pressure carries 4-11% of the residual energy in the plateau and 0.5-1.3% in the layers; the plateau holds 0.6-2.5% of the momentum energy. - The remaining pressure error is an independent component that the loss weights at about one percent. Section 6.11 gains this paragraph, as do the C36 README and the summary. The tool and both outputs are pinned (124 files). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The original eta 1/32 instance and the v2 recipe, with the L-BFGS phase replaced by the dense self-scaled Broyden method. The attribution shows the remaining pressure error is a component weighted at about one percent, which L-BFGS does not resolve before it stalls near 1.3-1.6e-6. - The SSBroyden update follows Urban et al. 2025, Eqs. (10) and (13)-(23), which agree with Kiyani et al. Eq. (15). It keeps an FP64 inverse Hessian (20.6 GB) on the GPU, starts from H0 = I and uses a strong-Wolfe line search (c1 1e-4, c2 0.9) with one matvec per iteration. Unit tests cover the textbook BFGS limit, an independent tau/theta/phi computation, the secant condition, SPD, the carried product, a quadratic and Rosenbrock. - Two arms with the compiled analytic engine. "fresh" runs Adam 4000 then SSBroyden; "continue" starts from the hash-verified v5 analytic finals with a start-loss continuity check. - The decision uses the v6 outcomes (F1/F2/F0/F3). Secondary readouts compare with v5 at matched evaluations, report the continue-arm loss ratio, and run the post-hoc pressure attribution. Registered caveats: rank-2 updates in a 3 h window, the restart at loss 1e-6, and network size. - The component self-test drives the real eager C36 objective through the trainer's callbacks. CI runs 49 C36 tests; the index pins 134 files. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The allocation behind the regular QoS is exhausted, and the user instructed the interactive QoS, whose limit is 2 h on one node. - The training guard falls from 6,600 to 4,000 s and the deadline reserve from 900 to 400 s; v6's reader, decision and archive took about 25 s. - With measured overheads, the final observation still starts with about 460 s of margin. - The optimizer keeps about 60% of the planned budget, roughly 11,000-13,000 iterations. This is added to the registered caveats. Nothing has run under v7. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ohort v7 GH200 fresh development batch (pre-registered in c34ed33), two runs: - Dense SSBroyden after the unchanged 4,000 Adam updates trains to losses of 1.7-2.9e-13 within the 4,000 s guard. - Both final observations pass every physical test; stratified pressure is about 1e-3 of its limit. The registered outcome is F1. - Registered secondary readout: 0.26-0.30 of v5's evaluations at 3e-6 (counts, not time). - The original four-lane H100 v7 batch stays unresolved. Formal five-seed TTA cohort (pre-registered in 5083508): - Four runs pass physical acceptance at the first inspection, with candidate TTAs of 5,228-5,581 s. The fifth was cancelled during its observation. - All four frozen audits fail on the spatial residual gradient (rtol 1e-10), so the registered outcome is not qualified (0/5). - A post-hoc CPU diagnosis finds every difference within 4 ulp of summands up to 1.4e5 that cancel to about 1e-2, and within the standard rounding bound. The cause is the auditor's tolerance. Paper Sections 6.12-6.13 and Tables 23-24 are new; the Ethier tables move up by two. Two references are added. The abstract, contributions, discussion and conclusion are updated. The PDF is rebuilt with TeX Live 2026 (46 pages). The evidence index checks 147/0. The C36 README and the Chinese summary are updated.
…e review The GH200 packets were written from the committed files of their registration commits, not by git archive; the appendix and the C36 README now say so. Page 1 and pages 30-32 were rendered and read.
…d auditor The first cohort is not qualified because its frozen auditor rejected cross-architecture rounding of cancelled sums. The second cohort changes three things only: - five new seeds from the v1 rule with a new label, excluding every seed seen before; - a new holdout seed; - auditor revision 2. It bounds the four summed raw arrays by the a-priori 2*gamma_16*sum|terms|, and the metrics built from them by the triangle-inequality consequence. Every other check is unchanged. The output directory is explicit, so cohorts never share audit files. Before registration, revision 2 passed end to end on the four complete v1 archives. This exercised every check beyond the v1 failure point on ARM-produced data for the first time. The largest margins are 0.08 and 0.0014 of the bound. The v1 outcome is unchanged. The driver is the v1 driver bound to the new protocol. The batch script is a template without site paths. Five CPU tests are added to CI; the C36 regression passes 57/57 on an x86 login node. The evidence index checks 155/0.
The cohort was pre-registered in 1fd2bc6 and ran once as five independent one-GPU GH200 jobs. - All five runs pass physical acceptance at the first inspection, after about 1,003 active training seconds. Stratified pressure is 0.19-0.30 of its limit. - All five independent audits (revision 2) pass. The registered outcome is FORMAL_COHORT_PASS, 5/5 (Wilson 95% 0.57-1). - Time to verified accuracy: median 5,074 s, range 4,825-6,019 s, of which about 1,006 s is training and 2,612-3,757 s the native-AD physical observation. - There is no baseline, so this is an absolute time, not a speedup. Paper Section 6.14 and Table 25 are new; the Ethier tables are now 26-29. The abstract, contributions, discussion, conclusion and appendix are updated (47 pages). The cohort record comes from tools/c36_tta_publish.py, which now takes --protocol-name. The C36 README, the manuscript README and the Chinese summary are updated. The evidence index checks 156/0.
…on protocol This commit adds the code for a paired analytic vs parameter-AD engine cohort. It is not a registration: the formal protocol is a draft until the parameter-AD engine is qualified on GH200. - potential_train_pair: the TTA trainer with the engine as an argument, the native subset only where requested, and stopping at the first accepted SSBroyden iterate at or below a loss threshold. The threshold checkpoint is observed once. - run_c36_pair, finalize_c36_pair and start_c36_pair.sbatch: both arms run sequentially on one GPU in one job, in a registered order. - audit_c36_pair: the revision-2 audit per arm, plus threshold consistency checks. - decide_c36_pair: the registered paired decision (margin 1.03, at least 4 jointly accepted pairs, at least 4 agreeing). - protocol-pair-qualification-20261021.json: a short run of both engines on development seed 361901. It covers compile, capture, the dense inverse Hessian and per-evaluation timing, with no observation and no result. Eight CPU tests (paired trainer fixtures on both engines, finalizer, decision) pass with the existing TTA control tests on an x86 login node, and are added to CI. The existing trainers and drivers are unchanged.
…r AD) The parameter-AD engine passed a GH200 qualification run on development seed 361901 (pair-gh200-qualification-20261021.json): - Both engines' eager, compiled and graph objectives agree with dense parameter AD within the original budget. - With the 20.6 GB inverse Hessian resident, both peak at 20.9 GB allocated. - Parameter AD costs 1.25x per Adam evaluation and 1.21x per SSBroyden evaluation. The registered prediction for the primary ratio is therefore about 1.23 (1.18-1.28). The paired auditor passes on the qualification archive. Fix before any formal run: when the threshold is reached, inspect() now saves the threshold checkpoint and its complete check exactly once. Before this fix they were written twice, and the second write would have broken the first record's hash. The CPU fixtures now run the reader and assert unique tags. The qualification run never reached the threshold, so it is unaffected.
…ster) The paired cohort was registered in aaea603 and ran once as five one-GPU GH200 jobs, with both engines on the same card in alternating order. - All ten arms reach a training loss of 1e-8, pass physical acceptance (stratified pressure 0.22-0.29 of its limit) and pass the independent audit. - The registered outcome is analytic faster: 5/5 pairs, geometric mean ratio 1.257 (1.249-1.269), inside the predicted 1.18-1.28. - Evaluation counts match (0.99-1.01), so the gain is per evaluation: 1.26-1.28x per Adam evaluation and 1.24-1.25x per SSBroyden evaluation. - The first audit submission stopped at argument parsing before any check: the generated wrapper passed the three hashes as one argument. That record is kept, and the audits then ran once with correct arguments. Paper Section 6.15 and Table 26 are new; the Ethier tables are now 27-30. The abstract, contributions, discussion, conclusion and appendix are updated (48 pages). The record comes from tools/c36_pair_publish.py. The C36 README, the manuscript README and the Chinese summary are updated. The evidence index checks 170/0.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Restructures the October 13 research draft after an external review. It also adds the first accepted 3D solve comparison, run on the transient Ethier–Steinman benchmark. Earlier measured values, gates, seeds and the 15 pinned result reports are unchanged.
Accepted Ethier–Steinman 3D solves (new:
research/ethier-3d, paper Section 7)Frozen protocol v4:
1671ffc5…80dd41) is verified on cluster scratch, persistent project storage and locally.release-source-map.jsonlists both hashes.2D representation versus execution on H100 (paper Section 5.6,
research/2d-ablation)Purpose. This is a pre-registered ablation answering the review's main 2D question: how much of GL8's speed is the derivative state, and how much is execution?
Cells. All six run the same FP64 Kovasznay objective, the unchanged 2D source at its pinned commit and the unchanged
bench_gpumethod (fresh process, dense-Q10 oracle check, 7×100 CUDA Graph replays):Prior evidence. The protocol stated beforehand that A100 had found compiled GL8 no faster than compiled Q10 at 2k points.
Attempt 1 failed at start-up in all tasks, before any timing: the source tree had been copied without git metadata. It is archived. Attempt 2 cloned the pinned commit, with a fail-fast guard; the protocol and plan are unchanged.
Validity. 244/244 tasks completed, and the 226 timed processes pass the oracle (≤ 8.0e-15). Drift is within 0.6%. The registered A/A gate passes at 16k (1.0002) but fails at 2k (1.057): processes at 2k fall into two states about 6% apart. That bimodality is a post-hoc observation, not clock-related and unexplained.
Findings.
2d-ablation-result-20261016.json(registered reader),2d-ablation-posthoc-20261016.json(labelled post hoc) andrelease-source-map-20261016.json(all published sources byte-identical to the executed copies).2D solves at larger point counts on H100 (paper Section 5.6, Table 10,
research/2d-solve-scale)A second pre-registered study tests whether the solve-level gain returns when the gradient is a larger share of each evaluation. The protocol, plan, driver, reader and solve wrapper were committed in
170412bbefore the batch ran.solve-scale-result-20261016.json(registered reader),phase-split-2048-20261016.jsonandsolve-scale-posthoc-20261016.json(both labelled post hoc),release-source-map-20261016.json(12 files byte-identical to the executed copies).C36 zero-gate folding on H100 (paper Section 6.3, Table 13)
The CPU-only limitation is now closed by a pre-registered batch: protocol, driver and reader were committed in
c5de0adbefore it ran. It runs once on one exclusive H100 node and uses one GPU, for timing isolation. The unchanged runner and graph-timing protocol run twice, one after the other, on the same GPU: first the folded comparison, then an unfolded repeat.zero-gate-folding-gpu-result-20261016.jsonandrelease-source-map-zero-gate-20261016.json. The public driver reads the node-local cache root from the environment; this normalization is recorded in the map.The H20 campaign on H100 (paper Section 5.8, Table 12,
research/2d-h100-retest)The H20 campaign runs unchanged on one H100 node: the same 460 source/adapter/snapshot files, frozen inputs, six initializations, optimizer budget and acceptance. Pre-registration
ffd597ewas pushed before submission. The plan was prepared on 10-13 and never ran; only the job name changed.FP64 / FP32 / TF32 on H100 (paper Section 5.7, Table 11,
research/2d-precision)This answers the review's FP32/TF32 request. The protocol, plan, wrapper and patch were committed in
dbb6d33before the batch ran.FP64 replay for reference: A 0.281 / 2.920 / 11.440 ms, C 0.164 / 1.165 / 4.343 ms.
precision-result-20261016.json,precision-posthoc-20261016.jsonand the release map. The result's failure tracebacks have their batch path normalized.External 3D derivative baselines (paper Section 7.4, Table 28,
research/ethier-3d)The review asked for an external baseline on C36. C36 has no accepted solve, so this uses the accepted Ethier–Steinman benchmark; the C36 item stays open. The protocol, external arms and drivers were committed in
e2e5108before the batch ran.jetpackage. Neither uses FlashNS code.jetjet, and no gain rule was registered.jetcould match or beat C17 in 3D. C17 is also uncompiled. Compiled external arms remain untested in 3D.Compiled 3D external baselines (paper Section 7.4, Table 29) — C17 loses its lead
The question was whether compiling changes the 3D comparison. Pre-registration
7e803c0, pushed before submission. Each method runs graph-only and compiled. Each lane first runs every arm on a development seed without training, and the faster qualified variant on that warm-up replay is selected before any formal solve is read.jet(0.85 ms replay, vs 3.45 ms graph) and compiled nested AD (2.39 ms, vs 9.76 ms). All 30 solves of the five qualified arms are accepted.jetjet's Adam-phase evaluation costs 0.39× eager C17's. A public Taylor-mode package compiled bytorch.compileevaluates the gradient faster than the eager C17 contract.Compiled C17, second attempt (paper Section 7.4, Table 30)
research/ethier-3d/diagnosticsand labelled as not a result, reproduced the capture failure formake_fx-based routes. Compiling a function that takes the six parameter tensors as explicit arguments (the 2D engine's pattern) survives capture.b391841: only the C17 builder changes, plus a warm-up gate. All 36 solves are accepted, and every method selects its compiled variant (replay C17 1.20 ms, jet 0.86, nested AD 2.41).jetC36 v2 development run (paper Section 6.7)
The protocol is frozen in
protocol-v2-development-20261014.json.266aa8d2…) is verified on cluster scratch and persistent project storage.C36 all-plane observations and temporal-smoothness continuation (paper Sections 6.8–6.9)
Six new run-once batches ran on single 4-GPU H100 nodes: two smoothness training attempts and four observation batches.
Observations (Section 6.8).
Physical acceptance. No checkpoint passes; 171/360 acceptance tests pass.
Trend. Physical errors fall with the loss and are still falling at the end of the budget.
Smoothness continuation (Section 6.9,
protocol-v3-smoothness-development-20261015.json).s_w(t) = σ(t/w − 1/(2w) + 1/2). w = 1/2 is the original problem bit for bit.e9789fb, with a retention check and a weak-reference self-test replay; a negative control without the fix fails the self-test. Attempt 2 changes only the trainer, and all four runs reach the training gate.Records.
c36-observations-20261015.jsonholds every observation with all planes and reader results, generated bytools/c36_publish_observations.py.tools/c36_trend_figure.py) and the rank correlations (tools/c36_rank_correlations.py) are both computed from that record.c36-v3-smoothness-result-20261015.json,c36-v3-smoothness-batches-20261015.json(both attempts),c36-v3-baseline-curves-20261015.jsonandc36-schedule-field-distance-20261015.json.release-source-map-20261015.json: every executed packet manifest. All published sources are byte-identical to their executed copies, except the attempt-1 trainer.C36 with a larger L-BFGS budget (paper Section 6.10)
Cancelled v4 (
protocol-v4-combination-development-20261015.json).v5 budget study (
protocol-v5-budget-development-20261015.json).box376.decide_c36_v5, outcomes E1–E5, synthetic tests in CI) was pushed before submission.c36-v5-observations-20261015.json,c36-v5-decision-20261015.json,c36-v5-training-curves-20261015.jsonandc36-v5-budget-result-20261015.json. The release map lists every executed packet; all sources are byte-identical to the repository.C36 source structure (paper Sections 6.1 and 6.8; CPU only, no rerun)
A CPU check of the frozen single-box source (
box376/check_source_structure.py, outputsource-structure-check-20261018.json) confirms two properties of the instance to rounding:t ∈ (1/4, 3/4), the exact velocity, force and all their derivatives vanish identically, including at the rest slicest = 0, 1/4, 3/4, 1. Only 0.89% of uniform space-time points carry a nonzero exact velocity.U = ċ + Ly, with zero Laplacian. BecauseLis diagonal, the forcef = c̈ + (L̇ + L²)yis a gradient. The rotational forcing lies in the cutoff layers.Section 6.1 now states both properties. Section 6.8 notes that the four rest slices, which pass at every checkpoint, are slices where the exact velocity and force vanish. No pressure-mechanism claim is made from this.
Where the remaining C36 pressure error lies (paper Section 6.10; CPU post-hoc)
tools/c36_pressure_structure.pydecomposes the stratified corrected-pressure error of the four v5 finals from their saved native states. It reproduces every recorded regional and global value exactly. Output:c36-pressure-structure-20261018.json.C36 v6: a wider-cutoff instance (paper Section 6.11, Table 22; pre-registered in
7671c3f; registered outcome F3)protocol-v6-eta16-development-20261018.jsonkeeps the v2 recipe and changes one thing: the cutoff width doubles from 1/32 to 1/16. It is a different, easier instance, not a repair of the 1/32 problem.Results. The batch ran once on one four-GPU H100 node from the git archive of
7671c3f, so every executed source is byte-identical to the repository. Start-up checks pass at ≤ 9.8e-7 of the budget, and all 116 saved checks are within 1.7e-5.c36-v6-observations-20261018.json,c36-v6-development-result-20261018.jsonandc36-v6-decision-20261018.json(the last two byte-identical to the executed outputs),c36-v6-pressure-structure-20261018.jsonandrelease-source-map-v6-20261018.json. The archive (396 members) is verified on cluster project storage.grad p = R − dIpointwise:Ris the observed momentum residual anddIthe inertia error of the learned velocity.tools/c36_pressure_attribution.pydecomposes the v5 and v6 final states; it reproduces the observer's values and checks the identity to 4e-12.−dIis −0.05 to 0.07 in every region, at the noise floor, so the pressure error is not forced by the velocity error.dIdominates the residual at 3–15× the pressure gradient. The pressure carries 4–11% of the residual energy in the plateau and 0.5–1.3% in the layers.C36 v7: a dense self-scaled Broyden optimizer (pre-registered in
4e0f669, amended in72474fbbefore any run)The pressure attribution shows that the remaining error is a component the loss weights at about one percent, and L-BFGS stalls before resolving it.
protocol-v7-ssbroyden-development-20261019.jsonkeeps the original η = 1/32 instance and the v2 recipe and replaces only the L-BFGS phase.box376.ssbroyden) with an FP64 inverse Hessian (20.6 GB) on the GPU, following Urbán, Stefanou and Pons (J. Comput. Phys. 2025), Eqs. (10) and (13)–(23); they agree with Kiyani et al. (arXiv:2501.16371), Eq. (15).72474fb). The regular allocation is exhausted, so the batch runs on a 2 h interactive allocation. The training guard falls from 6,600 to 4,000 s and the deadline reserve from 900 to 400 s. The optimizer keeps about 60% of the planned budget (roughly 11,000–13,000 iterations), which is a registered caveat.C36 v7 on GH200: two fresh development runs (paper Section 6.12, Table 23; pre-registered in
c34ed33; registered outcome F1)The optimizer, trainer, 4,000 s guard, reader and rules are unchanged; the decision covers these two runs. A platform qualification first compared eager, compiled and graph objectives with the preserved full native reference and with dense parameter AD (32 comparisons, at most 2.3e-6 of the original budget) and allocated the full inverse Hessian.
C36 formal time-to-accuracy cohort (paper Section 6.13, Table 24; pre-registered in
5083508; registered outcome: not qualified)Five previously unused seeds ran as independent one-GPU GH200 jobs. Each run is inspected first after 1,000 active training seconds, and again at the guard if it does not pass. TTA runs from trainer entry to the first passing physical report, and a pass is valid only after an independent CPU audit of the sealed archive.
audit_c36_tta.pyline 206, anallclose(rtol=1e-10, atol=1e-13)on the spatial residual gradient recomputed on x86 against the value saved on the ARM GPU host.COHORT_NOT_FULLY_QUALIFIED: 0/5, Wilson 95% interval 0–0.43, no median.tools/c36_tta_audit_rounding.py). The array sums terms up to 1.4e5 that cancel to about 1e-2. Every difference is at most 4 ulp of the largest term and within the standard rounding bound, at most 0.13 of it. The cause is the auditor's tolerance, not the physics. This does not change the outcome. A qualified cohort needs a new registration with fresh seeds and a tolerance scaled by the summed terms.c36-v7-gh200-development-result-20261021.json,c36-v7-gh200-decision-20261021.json,c36-tta-cohort-20261021.json(fromtools/c36_tta_publish.py) andc36-tta-audit-rounding-20261021.json.Second C36 TTA cohort (paper Section 6.14, Table 25; pre-registered in
1fd2bc6; registered outcome: qualified, 5/5)The second cohort changes only three things: five new seeds (the v1 SHA-256 rule with a new label, excluding every seed seen before), a new holdout seed, and auditor revision 2 (
box376.audit_c36_tta_v2).2*gamma_16*sum|terms|; the metrics built from them use the bound implied by the triangle inequality. Every other check is unchanged.audit-v2-development-validation-20261021.json), with margins of 0.08 and 0.0014 of the bound. This is development use; the v1 outcome is unchanged and nothing is pooled.test_audit_tta_v2adds five CPU tests, also in CI.FORMAL_COHORT_PASS, 5/5 (Wilson 95% 0.57–1).c36-tta-v2-cohort-20261021.json.Paired C36 engines to verified accuracy (paper Section 6.15, Table 26; registered in
aaea603; outcome: analytic faster)Five new seeds, each running the analytic and the parameter-AD engine one after the other on one GH200, in alternating order. Each arm stops at a training loss of 1e-8, and its threshold checkpoint is verified physically. A short qualification run on a development seed measured per-evaluation ratios of 1.25 (Adam) and 1.21 (SSBroyden), giving the registered prediction of 1.23 (1.18–1.28).
ANALYTIC_FASTER: 5/5 pairs, geometric mean 1.257, inside the prediction.c36-pair-cohort-20261021.json.Manuscript (
research/manuscript/flashns.tex,flashns.pdf, now 35 pages)Repository
evidence-index.json: new tex/pdf hashes, with the previous hashes kept.scripts/verify_evidence_index.py: stdlib-only check of the 17 pinned files..github/workflows/cpu-regression.yml: evidence-hash job, package tests and the C36 CPU regression tests (25 after addingbox376.test_schedule_family).History note (2026-10-18). The branch history from the C36 zero-gate pre-registration onward was rewritten to remove an account-specific path from one line of the pre-registered driver. Every rewritten commit keeps its author, committer dates and tree, except that line; commit SHAs cited here and in the release maps are the rewritten ones.
Test plan
verify_evidence_index.py: 170 files, 0 failures.verify_evidence_index.py: 156 files, 0 failures.test_audit_tta_v2(x86 host); auditor revision 2 passes end to end on the four complete v1 archives;verify_evidence_index.py: 155 files, 0 failures.verify_evidence_index.py: 147 files, 0 failures.python scripts/verify_evidence_index.py: 17 files, 0 failures. A tampered pin fails with exit 1.6393255).verify_evidence_index.py: 48 files, 0 failures.stage0-retained.decide_c36_v5outcome E5.jetcache keyed on object id; audit PASS.verify_evidence_index.py: 124 files, 0 failures.verify_evidence_index.py: 121 files, 0 failures.verify_evidence_index.py: 115 files, 0 failures.verify_evidence_index.py: 104 files, 0 failures; CI green on the rewritten head.source.pyhashes to the provenance value. pdfLaTeX build at 41 pages; pages 17 and 23 were rendered and inspected.verify_evidence_index.py: 102 files, 0 failures.verify_evidence_index.py: 100 files, 0 failures. Earlier: 40, 39 and 37 pages;verify_evidence_index.py: 64 files, 0 failures. Earlier: 36 pages after the setup wording fix; Section 5.6 with Table 10, the discussion and the conclusion were rendered and inspected.verify_evidence_index.py: 58 files, 0 failures.New GPU experiments: the Ethier v4 batch, the C36 v2 development batch, two v3 smoothness training attempts, four all-plane observation batches, the cancelled v4 combination attempt, the v5 budget training and its observation batch, the 2D H100 ablation (attempt 1 failed at start-up; attempt 2 complete), the 2D H100 solve-scale study (36 solves, run once), the C36 zero-gate folding batch (one H100, run once), the 2D precision study (162 tasks), the external 3D baselines (18 solves), the 2D H100 retest under the H20 protocol (131 attempts, 78 accepted solves), the compiled 3D external baselines (24 warm-ups, 36 solves), a one-GPU compile diagnostic, the second compiled attempt (24 warm-ups, 36 solves), the C36 v6 wider-cutoff batch (4 runs, 8 observations), a one-GPU GH200 platform qualification, the C36 v7 GH200 fresh batch (2 runs, F1) the first five-seed GH200 TTA cohort (not qualified), the second (qualified, 5/5), a one-GPU pair qualification, and the paired engine cohort (analytic faster, 1.257). No external C36 baseline is claimed.