昼の便と夜の便

昼と夜で同じサイクルが動く一日

昼は10分おき、夜は22時に、同じサイクルが動きます。違うのは起動のスケジュールだけで、承認や上限の止め金は昼も夜も同じです。

一日のシミュレーター

昼の便では、Issueを何本か承認してから時計を進めてください。毎時3分から10分おきにai_pickが動き、その時点で承認済みのIssueをまとめて拾います。夜の便を選ぶと、夕方に承認した3本を22時3分に拾う流れになります。

13:00

承認済み0

実装中0

MRを人が読む0

止まった0

マージ済み0

MRの札の「読んでマージ」と、止まった札の「直して流し直す」は、人がする操作です。実装にかかる時間は目安で、昼の便は10月2日の試走(1本1分前後)、夜の便は9月30日の試走(広めのIssueで約20ターン)をもとにしました。Runnerの枠は8本で、あふれた分は順番を待ちます。

ラベルの移り変わり

Issueの状態は、ラベルで受け渡します。人が付けるのはai::approvedだけで、残りはパイプラインが付け替えます。

ラベルなし書いたところ
→人が付ける
ai::approved承認
→ai_pick
ai::running実装中
→MRを出した
ai::doneMRあり
→人がマージ
ClosedIssueが閉じる
↓止まった
ai::stopped理由のコメント
←人が本文を直して外す
  1. Issueを書いたばかりのときは、状態のラベルがありません。この間、AIは何もしません。
  2. 人がai::approvedを付けると、承認になります。付けるのは人だけで、パイプラインはこのラベルを付けません。
  3. ai_pickが拾うと、ai::runningが付きます。次の起動は、この印のあるIssueを拾いません。
  4. 実装ジョブがMRを出すと、ai::doneに替わります。Issueには、MRのURLとターン数と費用のコメントが付きます。
  5. 人がMRを読んでマージすると、Issueは自動で閉じます。
  6. 曖昧な受け入れ条件、決まっていないこと、外れた承認、25分の打ち切りのどれかに当たると、ai::stoppedに替わります。理由はコメントに残ります。
  7. 人が本文を直してai::stoppedを外すと、ai::approvedだけが残ります。次の便で、もう一度拾われる仕組みです。
  8. Community Editionでは、同じai::の印でもラベルが並んで付きます。そのためai::approvedは、最後まで付いたまま残ります。

スケジュールの決まり

スケジュール書いた間隔実際に動く時刻有効にする期間
AIサイクル(午後の研修)*/10 * * * *毎時3分、13分、23分のように10分おき10月6日の昼休みの終わりから、夜に回す節の前の休憩まで
AIサイクル(夜間)0 22 * * *22時3分10月5日の夕方から、10月7日の朝まで

GitLabがスケジュールを見回る仕組みは、10分おきの枠(3-59/10)で動いています。そのため、書いた時刻のあとの最初の枠で起動します。スケジュールは作った人の権限で動くので、mainで実行できるrootで作りました。

昼の便を夜に回す節の前に外すのは、受講者が今夜の分として承認したIssueを、その場で拾わせないためです。外し忘れると、夜の便を待たずに昼の便が拾ってしまいます。

昼の便と夜の便の違い

項目昼の便夜の便
起動10分おきのスケジュールと、講師のNew pipeline22時3分のスケジュール
承認ラベルai::approved同じ
上限30ターンと25分同じ
pushジョブのスクリプトだけが行う同じ
人がいるかいる。MRをその場で読むいない。翌朝にまとめて読む
止まったときその場で本文を直し、次の便で流し直す翌朝に直し、昼の便か次の夜に載せる

夜の実装ジョブは、確認を求める設定(ask)を置いても、朝まで待ち続けるだけです。そのため夜のClaudeにはpushの権限を渡さず、許可の外の操作は確認なしで拒否します。