背景
スケジューリング最適化(OR-Tools CP-SAT)が humancompiler_api 内に直書きされており、調整・差し替え・テストが難しい。
直近のPRで humancompiler_optimizer サブパッケージへ移し、API側は必要情報を config + 変数で渡す形に整理した。
ゴール
- 最適化バックエンドを
humancompiler_api から疎結合に保つ(DB/HTTP/Sessionへの依存を持たせない)
- 調整ポイント(重み・制約・タイムアウト等)を外部から安全に変更できるようにする
- バックエンド差し替え(OR-Tools/ヒューリスティック/将来の別ソルバー)を現実的な工数で可能にする
提案する進め方(チェックリスト)
1) API境界の固定(契約)
2) 依存の分離(OR-Toolsをoptional化)
3) 調整ポイントを外部化(Config設計)
4) 観測性・デバッグ容易性
5) 将来の分離(別パッケージ/別プロセス)に備える
オープンな論点(決めたいこと)
- 日次の依存関係(タスク/ゴール依存)の扱いを「ソルバーの制約」として強制するか、現状通り「API側のフィルタリング+順序制約」で良いか
- OR-Tools無し環境でのプロダクト要件(落ちても良い/フォールバック必須/機能制限をUIに出す 等)
- 日次/週次で「最適化」定義が違う(割当 vs 選択)。将来的に統一した抽象(backend interface)を作るか
受け入れ条件(Done)
humancompiler_api から最適化バックエンドが疎結合である(DB/HTTP/Sessionに非依存)
- 調整が
Config 変更で試せる(コード直書きでない部分が増えている)
- OR-Toolsの有無で挙動が明確で、テストで担保されている
🤖 Generated with Claude Code
背景
スケジューリング最適化(OR-Tools CP-SAT)が
humancompiler_api内に直書きされており、調整・差し替え・テストが難しい。直近のPRで
humancompiler_optimizerサブパッケージへ移し、API側は必要情報をconfig+ 変数で渡す形に整理した。ゴール
humancompiler_apiから疎結合に保つ(DB/HTTP/Sessionへの依存を持たせない)提案する進め方(チェックリスト)
1) API境界の固定(契約)
humancompiler_optimizerの「入力/出力/Config」を明文化(README or docstring)humancompiler_optimizerに最小限の契約テストを追加(入出力の型・必須フィールド・代表ケース)2) 依存の分離(OR-Toolsをoptional化)
extrasに分離(例:humancompiler-api[ortools]orhumancompiler-optimizer[ortools])3) 調整ポイントを外部化(Config設計)
DailySolverConfigに集約し、環境変数/設定から上書きできるようにするWeeklySolverConfigに集約し、同様に外部化4) 観測性・デバッグ容易性
5) 将来の分離(別パッケージ/別プロセス)に備える
humancompiler_optimizerを独立Wheelに切り出せる構造(依存・エントリポイント)を整えるオープンな論点(決めたいこと)
受け入れ条件(Done)
humancompiler_apiから最適化バックエンドが疎結合である(DB/HTTP/Sessionに非依存)Config変更で試せる(コード直書きでない部分が増えている)🤖 Generated with Claude Code