assign_splits's own non-empty-val guarantee doesn't fire when every real task hashes into test
メンテナーはふだん 6 日以内に返信
@kaluli123123 がすでに取り組んでいます。
2026年9月8日 から。
評価
調査の方向性
skillopt_sleep/mine.py の assign_splits と _promote_one から始め、引用されている val_fraction=0.10 と test_fraction=0.80 のケースで問題を再現してください。期待される警告形式を確認するため、consolidate.py の holdout_leaked のロギングを読んでください。train と val が空のバッチが意図された non-empty-val の処理を受け、通常のハッシュ割り当てを変更せず、異常なケースを観測できれば完了です。
索引モデルが issue の本文から書いたものです。
説明
assign_splits in skillopt_sleep/mine.py says right in its own comment "Guarantee val (the gate) is non-empty when we have >=2 real tasks", but there's a gap: _promote_one only pulls from train (to top up val) or from val (to top up train), never from test. If every real task's hash bucket lands in [val_cut, test_cut), both train and val start empty, so both guarantee calls have nothing to promote and silently no-op. A nightly batch mines N real tasks, all go to test, and run_sleep_cycle finishes with gate_action='reject', edits=0, no error, no warning, holdout_leaked doesn't flag it either.
Not contrived: for a small nightly batch (2-5 tasks is realistic for a solo user's session), any test_fraction above roughly 0.5 makes this a matter of when, not if. Confirmed on 79124b37: 5 tasks with val_fraction=0.10, test_fraction=0.80 all land in test, val and train both come back empty.
I think I see why it's shaped this way. #235 replaced the old unconditional real[-1].split = "val" fallback (append-order-unstable, could demote an already hash-assigned test task) with the current from-train/from-val-only _promote_one, to stop reassigning hash-assigned test tasks per that review. That fixed the instability and reopened this as a side effect.
An additive fix, only reach into test for the promotion when train and val are both empty, and log it the way consolidate.py already logs holdout_leaked, would keep the stability guarantee for the normal case and only touch the pathological one. Wanted to check that's the right shape before sending a PR, since it's touching the val/test tradeoff #235 just settled.
- 主要言語
- Python
- スター
- 18.2k
- フォーク
- 1.7k
- 平均マージ
- 6日 18時間
- マージ済み PR(30日)
- 12
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
microsoft/SkillOpt のほかの issue
-
Same unconfined `predictions/<item_id>` path pattern remains in four benchmark rollouts対応中かも @adongwanai が 4 日前に担当しました。 オープン
難易度 3/5 1〜2日 初心者へのやさしさ 72/100
メンテナーはふだん 6 日以内に返信
-
项目还在迭代嘛?オープン
難易度 5/5 1週間以上 初心者へのやさしさ 10/100
microsoft/SkillOpt#291 · コメント 1 件 ·
メンテナーはふだん 6 日以内に返信
-
Release cut for the Aug adopt/webui hardening + 2 residual staging gaps対応中かも @RohithPariki が 21 日前に担当しました。 オープン
難易度 5/5 1週間以上 初心者へのやさしさ 42/100
microsoft/SkillOpt#288 · コメント 2 件 ·
メンテナーはふだん 6 日以内に返信
-
skillopt-sleep Codex harvest ingests its own headless replay sessions対応中かも @kaluli123123 が 22 日前に担当しました。 オープン
難易度 3/5 1〜2日 初心者へのやさしさ 72/100
microsoft/SkillOpt#286 · コメント 3 件 ·
メンテナーはふだん 6 日以内に返信
-
難易度 5/5 1週間以上 初心者へのやさしさ 28/100
microsoft/SkillOpt#283 · コメント 1 件 ·
メンテナーはふだん 6 日以内に返信
microsoft/SkillOpt の issue をすべて見る
似ている issue
-
難易度 1/5 1〜3時間 初心者へのやさしさ 87/100
adri0/scadustats#128 ·
メンテナーはふだん 1 日以内に返信
-
`TIMESTAMP`, `TIMESTAMP_NTZ`, `TINYINT` and the other `TypeDecorator`s don't declare `python_type`オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
-
RPBCオープンawaiting policy acceptance precheck-passed
難易度 1/5 1時間未満 初心者へのやさしさ 78/100
Bioconductor/BiocContributions#240 · コメント 1 件 ·
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 1 日以内に返信
-
documentation good first issue launch
難易度 2/5 1〜3時間 初心者へのやさしさ 83/100
FlologixAI/etchwork#4 ·