Repository navigation
research: B5b — scored wave 2 judged under gaussian_x3@2, catalogue + summary - #11
Merged
Merged
Conversation
11,770 gaussian_x3@2 rows (11,750 scored arrays 408348/408365/408366/408367 + the 20-run probe 408246) at the PyAutoFit pin df6d218f10cd, and the per-realisation references from 408244/408245/408346/408347 (blend and separated, numpy and JAX, realisations 2-5 and 1/3/4/5). Pulled as a parallel per-directory tar of RAL results/ (output/ not pulled: laptop disk). Also: the JAX blend realisation-1 Nautilus reference seed 1 (RAL task `run nautilus 1 1 ral_jax_cpu_fp64`) and that reference rebuilt to status complete from Nautilus seeds 0, 2 (laptop pilot) and 1 (RAL); and the NSS ln 3! constant-likelihood offset (task `constant nss 0 1`, validated: -1.728 vs -ln 3!), merged into constant_likelihood.json by run_constant_likelihood.py on RAL. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…logue and export (B5b) - searches/judge_wave2.py: admit/refuse every pulled wave-2 row (_wave2.admit), operational kills, accounting() per leg, checked against the planned split (11,750 scored + 20 probe + 980 remainder + 250 deferred); writes results/accounting/gaussian_x3_wave2.json; --check for lint. - tooling/write_probe_timeouts.py: TIMEOUT_RULE_V2 over the 20 probe rows -> results/calibration/gaussian_x3_wave2_probe.json (NSS 50-step 600 s, Zeus JAX 1168 s); _wave2.cells() reads it after the wave-1 timeouts (never overriding one). - plan_wave2.py: submit_wave2_remainder (980 runs, 20 tasks, --partition=ral, same exclude/pin guards); the as-run B5a submits are byte-identical. - build_catalogue.py: a gaussian_x3@2 section (success rate + Wilson, expected wall per right answer + bootstrap, §7 censoring, ordering within one task and one dataset); the wave-1 section is byte-identical. - export_inference_summary.py: wave-2 records in inference-summary@1 with per-record protocol_id and a top-level protocols list (the full export validates against Insight); withheld from the committed summary on size (~84 MB) pending autofit_inference#10, with the wave-2 accounting carried. - _protocol.PILOT_NOT_REJUDGED: the 78 pilot @1 JAX blend rows stay not_assessed, "reference completed after the pilot (B5b)" (ruling 1). - build_readme.py: a scored wave-2 table; references keyed by realisation. - lint.yml runs write_probe_timeouts.py --check and judge_wave2.py --check. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Wave-1 pilot section byte-identical; the @2 section judges 11,770 rows at the pin df6d218f10cd. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…(B5b) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- catalogue @2 ordering: say it is the catalogue's sort key (not a §8 rule), carry each entry's Wilson and bootstrap intervals and mark entries whose bootstrap interval overlaps the previous one as tied (README shows =n); - probe-sourced legs close once every expected run has an admitted row (B5b-2); - document the frozen consumer-wall timeout comparison, per-cell closure, and the bootstrap over attempts (seed x realisation); - tests for operational kills, warm-start censoring and probe-leg closure. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ictory §8 clause (B5b re-review) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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
B5b of the search-extensibility epic. This PR pulls the scored wave 2 back from RAL, judges every row under
gaussian_x3@2at the pinned PyAutoFit revision df6d218f1, and publishes the results as agaussian_x3@2section of the catalogue. It also writes the timeouts for the probe-first cells and submits their remaining runs on RAL. Closes #10.Rows.
All 11,770 pulled rows are admitted by
_wave2.admit; none are refused. That is 11,750 from the scored arrays and 20 from the probe.judge_wave2.pywrites the accounting toresults/accounting/gaussian_x3_wave2.json. It adds up to the 13,000 expected runs:References.
complete: 2 datasets × 2 backends × 5 realisations. Each one uses only the Nautilus runs. On every reference the ln Z spread between DynestyStatic and Nautilus is 0.49–7.3 nat, which is recorded as a §6 limitation.ln 3!offset is validated (measured −1.728).Probe-first timeouts come from
TIMEOUT_RULE_V2applied to the 20 probe rows. They are written toresults/calibration/gaussian_x3_wave2_probe.json:cells()reads these after the wave-1 timeouts.plan_wave2.py --writegeneratedsubmit_wave2_remainder(20 tasks, 980 runs). The submit files B5a actually ran are byte-identical.Catalogue.
catalogue/search_catalogue.jsongains agaussian_x3@2section. For each leg (dataset × search × settings × backend, pooled over 5 realisations × 50 seeds) it gives:Legs are ordered only within one task and one dataset. The wave-1 pilot section is byte-identical to before (verified).
Summary.
dashboard/summary.jsonstaysinference-summary@1. It now carries aprotocolslist and the wave-2 accounting. The wave-2 records themselves are withheld because of file size; see decision 1.Commits, in this order:
18e439d.5c9e022.f2cf3be.cd4fc41.ee51ad5.0eba8d2(tooling),5b26b6a(catalogue),be2d148(docs),5d5f835(summary).49849e8.output/is never committed.Decisions taken (decide-and-flag)
dashboard/summary.json(question on research: B5b — pull, judge and publish scored wave 2 (gaussian_x3@2) #10).@1contract can carry a per-recordprotocol_id. The full export, with 223 + 11,770 records, per-recordprotocol_id: gaussian_x3@2and a top-levelprotocolslist, classifiesokagainstPyAutoInsight/insight/summary.py.records: withheldwith the reason.--wave2-records --output <path>writes the full export; it refuses to write the committed path.fitinstance moves toinference-summary@2(recommended); per-leg@1records; or commit the 84 MB file or put it in LFS.@2section is the catalogue's own sort key, not a protocol rule.=nin the README).run nautilus 1 1 ral_jax_cpu_fp64(output/reference/gaussian_x3_blend/ral_jax_cpu_fp64/nautilus_seed1/a7506fab…, pulled with a targeted rsync).local_jax_cpu_fp64/nautilus_seed1/a7506fab…is a pilot-era run with no row, so it is not used. It has the same hash because the identity is the same, but the builder reads the row'soutput_path.0dbf258(pilot) and seed 1 is at the pin.run_constant_likelihood.pymerges results in place, so the RAL file is exactly the committed file plusoffsets.nss.jax_cpu, and it was taken as-is._protocol.PILOT_NOT_REJUDGEDkeeps the 78 JAX blend pilot rowsnot_assessed, with the reason "reference completed after the pilot (B5b)". No other pilot record changes.submit_wave2_remainderandwave2/remainder.tsv) were copied withscpinto the RAL clone, which stays atf0b3eef; it was not pulled with git. Their sha256 matches the branch. The runner, the protocol values and the pin are unchanged by B5b. The throttle is %20, i.e. min(60, 20 tasks).openand unranked until all 250 of their runs have rows, which happens in B5b-2.total_wall_s, as frozen, even though a warm-start timeout was derived from the median attempt wall.Disk decision
The laptop root had 6.1 GB free at the start, down to 4.0–4.5 GB later (other sessions are using it too).
duwould not finish.du -d1 outputdid not complete in 15 minutes on the RAL NFS, so the size ofoutput/(11,770 run directories withsamples.csv) could not be shown to fit with 2 GB to spare.output/was not pulled.COMPLETEDwith exit 0, and the logs are not needed to judge.results/came over as a parallel tar. rsync ofresults/ran at about 0.16 files/s, so I ran a 12-way parallel per-directorytaron the login node instead, using only my own files in/tmp, removed afterwards. That gave a 19 MB tgz, 171 MB when extracted.output/brought back is the JAX blend Nautilus seed-1 reference directory (13 MB). Seeds 0 and 2 are symlinked to the canonical checkout's existing pilot outputs. The NSS constant-likelihoodoutput/was not needed, because the json carries both ln Z values.RAL
[0-19]%20:submit_wave2_remainder, 980 runs, on--partition=ralwith--exclude=euclid-ral-compute-[1-4], 2 CPUs and 6 GB per task, no gres, PyAutoFit pin guards. Running at hand-back. B5b-2 pulls it.Per-cell headline (
gaussian_x3@2)The
Statecolumn means:closed: every expected run has been judged.open: the cell's remainder is still running.deferred: not run, with the reason recorded.Heart RED override
This is quoted from #10. The live human answered the AskUserQuestion "Invoke the Heart RED development override for this batch?" with "Yes, override for development (Recommended)" on 2026-10-15. The answer covers tasks
search-ext-b5b-score,search-ext-a5-consumersandsearch-ext-b4b-dev-retire.These are the exact RED reasons at the door (Heart verdict, 2026-10-15):
Permitted: commit, push, PR-open. Merge stays a separate human act. There is no release or rehearsal, and this branch does not fix Heart.
Gate
--checkgates green. The reviewer re-ran these in a CI-like clean venv: 111 passed, 5 skipped, about 90 s.49849e8; that last change was not re-reviewed againReview dispositions:
Witness, item by item:
_wave2.admit, and the per-legaccounting()sums equal the expected counts: 11,750 scored + 20 probe, 250 deferred with reasons. 11,770 are admitted, 0 refused;judge_wave2.py --checkis green.gaussian_x3@2section whose success rates and walls per right answer come only from@2rows at df6d218f1. The section recordspyautofit_pinandpyautofit_commits_pulled= [df6d218f1…].dashboard/summary.jsonvalidates against the Insight contract andcheck --offlinepasses (Insight PR). However, the wave-2 records are withheld on size (decision 1), and thefitsnapshot can only refresh after this merges:--fromis a local read and writes no snapshot.status: completefrom three Nautilus seeds and passes §6.@2timeouts come from the probe medians by the frozen rule, and their remainder is submitted on--partition=ralas job 409930.cortex.py donemoved 408244–408367 into the log: cortex: autofit_inference — wave 2 judged under gaussian_x3@2, remainder 409930 (B5b) PyAutoCortex#65.export_inference_summary.py,plan_wave2.py,check_submits.pyandbuild_catalogue.pywith--check, plus the newwrite_probe_timeouts.py --checkandjudge_wave2.py --check.Test plan
python -m pytest -q scripts/misc/test: 118 passed.ruff check .andruff format --check ..build_catalogue.py --check,build_readme.py --check,export_inference_summary.py --check,plan_wave2.py --check,check_submits.py --check,write_probe_timeouts.py --check,judge_wave2.py --check.--wave2-recordsexport (84 MB) classifiesokagainstinsight.summary.linton this PR.Merge order (human /prm): this PR, then PyAutoLabs/PyAutoCortex#65, then the PyAutoInsight PR.
🤖 Generated with Claude Code