Add AC1a reproduce-artifacts and AC1b reproduce with a comparison artifact - #19
Merged
Merged
Conversation
…ifact Split AC1 in docs/PLAN.md: AC1b keeps the original definition, AC1a rebuilds everything offline from the Release artifacts. Record the 2026-09-29 decision, the frozen AC1b pass criteria and the budget rule. Output roots can be moved (RESULTS_ROOT, CHECKPOINT_ROOT, README_OUT), so a full rerun writes under reproduction/<id>/ and never over results/ or README.md. The rerun is compared with the committed results; only a failed flow or a failed AC2 fails it, other differences are marked REVIEW REQUIRED.
…rison scope Every step records HEAD, the SHA-256 of uv.lock and configs/, and the Python, torch and transformers versions; a reproduction directory started under another identity is refused instead of resumed, and the comparison lists the commit each step ran at. Before the first AC1b run, the judged scope adds the README router table and the OOS ablation comparison; latency, training time, peak memory and the cost model are listed but not judged (docs/PLAN.md 5.1). check-originals also compares a snapshot of every file under results/, gitignored ones included; a failing git in preflight is a problem, not a clean tree; the AC1a workflow runs on more paths; the README notes the shared Hugging Face cache.
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.
What
Splits AC1 as Drew decided on 2026-09-29 and adds the code for both levels. This PR does not run AC1b; the status stays "RQ1 to RQ5 complete; Tier 1 acceptance not complete".
make reproduce-artifacts(AC1a):release.pylists the 76 Release files from the committed manifests, downloads each to a temporary name and moves it into place only after its SHA-256 matches; then verify-logits, verify-llm, analysis, llm-latency, cost, figures, report, and a final check thatresults/andREADME.mdare byte-identical to HEAD. CPU latency is not remeasured (machine-dependent). New workflowreproduce-artifacts.yml: weekly, on demand, and on PRs touching the files it exercises; not a required check; actions pinned by full SHA;permissions: contents: read.make reproduce(AC1b): AC2, pilot-lr, pilot-steps, baselines, both curves, OOS ablation, verify-logits, Haiku (MAX_USD=5), verify-llm, analysis, bench-cpu, llm-latency, cost, figures, report, then a check that the originals are untouched. Everything goes underreproduction/<HEAD[:12]>/through newRESULTS_ROOT,CHECKPOINT_ROOTandREADME_OUTMakefile variables (location fields only, so run identities are unchanged). Preflight: clean tree, HEAD merged into origin/main,uv sync --locked, API key present (recorded as true/false only), 8.8 GiB free. Each step passes only on its whole completion line(s) and exit 0; the first failure stops the run and still writes the comparison. Resumes: passed steps whose outputs keep their SHA-256 are skipped until one step reruns.reproduction/<id>/comparison.{json,md}): per-step flow result, AC2 per seed against 95.7%, Haiku rows, identity, spend, per-row prediction differences on (split, index) and parse failures, the two budgets side by side, pilot choices, the 14 README first-screen numbers, 8-way accuracy and OOS recall at every k for both encoders, and every threshold-diagnostic statistic. Outside the original mean ± std isREVIEW REQUIRED; with no spread (single run, std 0 or null) any difference is. Verdict FAIL only when the flow or AC2 fails.Checks
make lint,make test(632 passed),make smoke: pass locally.make reproduce-artifactsrun twice in a fresh clone:verified 76/76 release files, thenresults/andREADME.mdbyte-identical to HEAD. In CI it first ran on ubuntu-latest: every JSON file, report.md and the README were identical but the four PNGs were not, so the workflow runs on macos-15 (the platform the committed figures came from) and passes there.make reproducewithout a key on this unmerged branch: stops in preflight (NOT STARTED), no step runs.Review fixes (R1 to R6)
uv.lockandconfigs/, Python, torch, transformers). A reproduction directory started under another identity is refused in preflight (NOT STARTED, asks for a newREPRO_ID) and again inrun_steps; the review's case (same id, one more empty commit) now runs no step. The comparison lists the commit of every step (flow.commitsand a column in the flow table).ablation_comparison(22 rows) are judged. Latency, k=100 training time and peak memory, and the cost model are listed with differences but never judged (LISTED, NOT JUDGED).check-originals --snapshotalso compares every file underresults/, gitignored ones included, with a snapshot taken before the run (AC1b before the first step, AC1a after verify-llm). R5: a failinggit statusorgit rev-parsein preflight is a problem, not a clean tree. R6: README notes the shared Hugging Face cache andHF_HOME.LISTED, so that change does nothing (an equivalent mutant). The mutation that would matter, judging those rows, is caught.