Repository navigation
fix(sleep): keep train and val splits non-empty - #272
kaluli123123 wants to merge 1 commit into
Conversation
|
@microsoft-github-policy-service agree |
|
Reviewed Local Linux/Python 3.11 verification: 34 passed, comprising the split-hardening/wiring suites and two independent all-test / val-plus-test invariant checks. I have not reproduced an additional runtime defect in this focused review. For a reproducible acceptance record, please attach the command or small script used for the reported 6,300-case invariant sweep, with its seed/count/fraction/order ranges. That is an evidence request, not a request to add a large framework or perform paid-model experiments. Preserve the documented minimum-reassignment rule, warnings identifying the affected task IDs, and the distinction between stable hash assignment and the small-batch fallback. Please keep this as one coherent solution to #271 rather than stacking overlapping split fixes. Official CI for this exact head is still |
|
Thanks for the focused review. I reproduced the 6,300-case invariant sweep on commit
That is The command was run with |
|
Following up on this PR at head
If this fix is still wanted as the coherent solution for #271, could a maintainer please approve the pending CI run and provide the final review? The PR is currently mergeable and targets |
|
Jamie Magee (@JamieMagee) Yifan Yang (@Yif-Yang) Following up on the maintainer-side gate for this PR. The current head Could you please route or provide the final maintainer review, and approve the pending CI run if appropriate? If #272 is no longer the preferred vehicle for #271, please let me know so I can avoid keeping a stale PR open. |
|
Thank you for supplying the requested invariant sweep and following up on the maintainer-side CI gate. The requested 6,300-case sweep receipt is now satisfied, and I independently confirmed the one-batch invariants, minimum reassignment, and per-ID warnings. I also ran the full suite at 58522d7 and in a clean merge onto current main: 1,497 tests pass in each. A two-night integration check found a separate integrity gap. With seed 42 and val/test fractions 0.10/0.80, night 1 mines all-test-1 through all-test-5; the fallback sends all-test-2 to train and the optimizer uses it. On night 2, re-mining the same IDs plus one normal train-hash task and one val-hash task resets all-test-2 to test. The real cycle emits no warning, reports holdout_leaked=false, and includes that previously trained task in held_out_score. The archive contains its earlier train assignment, but the new split assignment does not consult persistent exposure history. All inputs, backend responses, and adopted files in this reproduction were synthetic. Please retain the useful one-night fallback while ensuring that a fallback-exposed task cannot later be reported as pristine held out. Persist split/exposure provenance or exclude previously exposed IDs and their derivatives; a fail-closed path is also acceptable when the required pools cannot be formed safely. Add a multi-night growing/shrinking-pool regression through the real cycle/archive path. This is new evidence beyond the earlier focused review, not a repeat of the completed sweep request. |
Summary
Why
assign_splitspromised a non-empty validation gate for at least two real tasks, but an all-test hash assignment left both train and validation empty. A val-plus-test assignment had the same invariant gap: topping up train from the only validation task emptied validation.The fallback now prefers spare train or validation tasks and reaches into test only when preserving both required pools is otherwise impossible.
Fixes #271
Validation
uv run --extra dev pytest -q tests/test_split_hardening_2x3.py tests/test_split_wiring.py— 32 passed.PATH=/Users/vam/.local/bin:/usr/bin:/bin:/usr/sbin:/sbin uv run --extra dev pytest -q— 1,499 passed, 11 skipped, 353 subtests passed.uv run --extra dev ruff check skillopt_sleep/mine.py tests/test_split_hardening_2x3.py— passed.git diff --check— passed.Baseline notes
With the normal host PATH, the full suite reports one unrelated failure because the installed Pi CLI resolves to
/opt/homebrew/bin/piwhiletests/test_backend_pi.py::test_default_model_from_envexpects the literal stringpi. The same failure reproduces on pristine upstreammain; excluding the installed Pi CLI from PATH gives the clean full-suite result above. Full-repository Ruff also reports pre-existing lint findings outside these two files; both changed files are clean.