結論
scheduler.py は、タスク実行、Promise、待機関係、外部完了、並行数制御、効果の振り分けを一つの巨大な関数内で所有しています。個別の不具合修正を安全に続けるため、公開動作を変えずに状態の所有権ごとへ分割します。
確認できた事実
2026-07-16 の main (b69f77b7) で再検証しました。
なぜ技術的負債か
ある状態の更新規則を変更すると、同じ関数内の別の状態機械へ暗黙に影響します。局所的な修正でも、取消、待機解除、外部完了、deadlock 判定の組合せを再検証する必要があり、変更範囲と責任範囲が一致していません。
目標とする責務境界
少なくとも次の所有者を、明示的な型または内部 module として分けます。
- task / Promise registry
- ready queue と再開規則
- waiter graph と deadlock 判定
- external completion の登録・解決・取消
- semaphore と並行数制御
- effect routing と handler 呼出し
scheduler.scheduled() は、これらを組み合わせる小さな調停層にします。
完了条件
結論
scheduler.py は、タスク実行、Promise、待機関係、外部完了、並行数制御、効果の振り分けを一つの巨大な関数内で所有しています。個別の不具合修正を安全に続けるため、公開動作を変えずに状態の所有権ごとへ分割します。
確認できた事実
2026-07-16 の
main(b69f77b7) で再検証しました。packages/doeff-core-effects/doeff_core_effects/scheduler.pyで、約1,488行です(src/doeff/scheduler.pyという path は存在しません。初版の記載誤りを 2026-07-16 の監査で訂正しました)。scheduler は root の doeff package ではなく doeff-core-effects package が所有しています。なぜ技術的負債か
ある状態の更新規則を変更すると、同じ関数内の別の状態機械へ暗黙に影響します。局所的な修正でも、取消、待機解除、外部完了、deadlock 判定の組合せを再検証する必要があり、変更範囲と責任範囲が一致していません。
目標とする責務境界
少なくとも次の所有者を、明示的な型または内部 module として分けます。
scheduler.scheduled() は、これらを組み合わせる小さな調停層にします。
完了条件