Skip to content

smoke-test: persist each checkpoint's result to the manifest as it lands - #229

Merged
OwenPriceSkelly merged 1 commit into
mainfrom
smoke-test-incremental-manifest
Sep 11, 2026
Merged

OwenPriceSkelly merged 1 commit into
mainfrom
smoke-test-incremental-manifest

Conversation

@OwenPriceSkelly

Copy link
Copy Markdown
Member

Problem

rootstock smoke-test accumulated results in memory and wrote them to manifest.json only once, after the last checkpoint and the custom-weights legs. Two 12 h Delta nightly runs on 2026-08-13 (SLURM 21119813, 21119858) hit their wall-time limit mid-run and left nothing: no stamps on disk, no push seen by the dashboard.

Change

  • Each checkpoint's outcome (its VerificationRecord plus its weight-file capture) is written to {root}/manifest.json as soon as it is known, in a short locked read-modify-write (_persist_outcome). A run killed by the scheduler keeps every verified/failed stamp it reached, and they ride along with the next successful push from that install.
  • The custom-weights legs persist the same way. They still take passed_keys, baselines and base_captures from the in-memory main loop; that logic is untouched.
  • The batched end-of-run apply is removed. The end-of-run update_and_push_manifest remains the single push.
  • New optional --push-every N: also push after every N recorded results, to bound how much a killed run leaves unpushed. Default 0 keeps today's one push. --no-push suppresses every push, periodic ones included. The nightly recipes are unchanged.
  • JSON/text output, --no-push, checkpoint-first selection and the shared-install clusters projection (schema v6) are unchanged.

Tests

New tests in tests/cli/test_smoke_test.py simulate a wall-time kill by raising a BaseException from the verify stub mid-run and assert the manifest on disk already holds the earlier stamps (canonical loop, weight files, and custom legs), that a concurrent manifest write made during a verification survives, that the default run pushes exactly once, and the --push-every / --no-push interaction.

uv run pytest      # 985 passed, 3 skipped
uv run ty check    # clean
uv run ruff check / format --check   # clean

Docs

docs/nightly-smoke-testing.md now describes when the manifest is written versus pushed, what a wall-time kill leaves behind, and --push-every. CLAUDE.md usage line updated.

🤖 Generated with Claude Code

Results used to accumulate in memory and reach manifest.json only after
the last checkpoint and custom-weights leg. Two 12 h Delta nightly runs
on 2026-08-13 (SLURM 21119813, 21119858) hit their wall-time limit
mid-run and left nothing: no stamps on disk, no push.

Each outcome (verification record plus its weight capture) is now
written to {root}/manifest.json the moment it is known, via one short
locked read-modify-write per checkpoint, so a killed run keeps every
verified/failed stamp it reached. The custom-weights legs persist the
same way; they still take passed_keys/baselines/base_captures from the
in-memory main loop. The backend push stays a single end-of-run push
(the backend replaces the whole manifest), with a new optional
--push-every N that also pushes after every N results. --no-push still
suppresses every push. JSON/text output, checkpoint-first selection,
and the shared-install clusters projection are unchanged.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@OwenPriceSkelly
OwenPriceSkelly force-pushed the smoke-test-incremental-manifest branch from 55bd6e9 to 7cd38fe Compare September 11, 2026 16:53
@OwenPriceSkelly
OwenPriceSkelly merged commit 9700aa4 into main Sep 11, 2026
5 checks passed
@OwenPriceSkelly
OwenPriceSkelly deleted the smoke-test-incremental-manifest branch September 11, 2026 16:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant