Use this checklist before publishing the repository or cutting a release snapshot.
data/,artifacts/,ckpt/,runs/,wandb/, andmodels/are empty or absent.- No private paths, ad hoc local scripts, or machine-specific configs have been introduced.
- No secrets, tokens, or cached credentials are present.
Run the unified local gate on a CPU machine with the CPU tier installed. It needs no GPU and no checkpoints:
bash scripts/90_audit/release_gate.shThis gate currently runs:
python -m pip checkpytest -q tests, includingtests/contract/test_release_surface.py- fixture-based math smoke, with the CPU-tier import checks
- fixture-based code smoke
- dummy figure generation for the plotting path
- strict dataset manifest verification, when a prepared
data/is present - model registry resolution (
download_models.sh --dry_run 1) bash scripts/90_audit/pre_release.sh, which includes the prose scan- a check that the gate itself left no artifacts in the working tree
Step 6 is skipped when data/ is absent, which is the state of a clean checkout,
so a gate run that never prepared the datasets is a seven-step gate: prepare the
datasets first if you want the full one.
Together, pre_release.sh and release_gate.sh verify:
- Absence of hard-coded private paths
- Absence of obvious leaked secrets
- Absence of bundled datasets or generated release-surface artifacts
- English prose with no em or en dashes, and no CJK outside the functional allowlist
- Bash scripting syntax sanity
- Python compilation and test suite sanity
- That the gate itself leaves no artifacts in the working tree
Both scripts run on a CPU machine with the CPU tier installed. The same two stages run in CI on every push and pull request; see .github/workflows/ci-cpu.yml.
Run tests/contract/test_release_surface.py on its own when you only want the release
surface contracts:
pytest -q tests/contract/test_release_surface.pyEvery push runs the CPU tier on Python 3.11: install from requirements/cpu.lock.txt, a dependency
consistency check, the full unit suite, both fixture smoke tests, the prose scan, and the
pre-release audit. That is what the badges above report.
Two things are worth naming because a reader cannot see them from a green badge.
- The credit mechanism is checked without a GPU.
tests/mechanism/builds the paper's rollout tree by hand and compares the leave-one-out advantages against values computed on paper, so the arithmetic at the centre of the method can be confirmed on a laptop in seconds. - The GPU tier is installed and imported, not trained end to end, in CI. No hosted runner has
the hardware.
requirements/gpu.lock.txtrecords exactly which checks were run against it and which were not, andrequirements/gpu-paper.lock.txtpins the environment that produced the published numbers.
These are recommended before a public paper artifact release:
- Strict data verification:
bash scripts/10_data/prepare_all.sh --out_dir data --strict 1- The command lines of the three training recipes, and of the evaluation of record, printed without starting anything:
for R in main long a3; do
DRY_RUN=1 RECIPE=$R PRETRAIN=Qwen/Qwen3-4B-Instruct-2507 bash scripts/40_train/paper_train.sh
done
python scripts/70_rebuild/final_eval.py --policy Qwen/Qwen3-4B-Instruct-2507 --dry-run- Optional release gate with a real HF base model:
HF_BASE='Qwen/Qwen3-4B-Instruct-2507' RUN_SFT_EVAL=1 bash scripts/90_audit/release_gate.shpyproject.tomlcarries the release version, andCHANGELOG.mdhas an entry for it.requirements/cpu.lock.txtwas regenerated from a fresh virtual environment, and its header states when and how.requirements/gpu.lock.txtwas regenerated and its header lists what still needs a GPU to validate.requirements/gpu-paper.lock.txtis untouched. It is a historical record.
README.mdmatches the current release policy and entrypoints.docs/00_getting_started.mdmatches actual installation and smoke commands.docs/10_code_map.mdanddocs/20_implementation_audit.mdstill match the primary implementation path.docs/30_data_sources.mdandconfigs/data_manifest.yamlremain consistent.- Every relative documentation link resolves.
tests/contract/test_release_surface.pychecks this, so a moved file cannot slip through.
LICENSE,CITATION.cff, andTHIRD_PARTY_NOTICES.mdare up to date..github/workflows/ci-cpu.ymlstill matches the intended release gate, and its two jobs are green on the release commit.- Community files (
CONTRIBUTING.md,CODE_OF_CONDUCT.md,SECURITY.md) still describe the current workflow.