Commit gate redesign

門番が、仕事を
止めている。

commit gateの目的は「他人の変更を巻き込まないこと」。でも今は、他人の変更があるだけで、自分の開始も終了も止まります。守る単位をリポジトリ全体から自分が担当する差分へ変えるのが本筋です。

01

疑いは当たっていた

2026年9月17日のローカル実測。これは推測ではなく、現在のVaultで起きている状態です。

28mainの未コミット件数自分の作業ではない差分を含む。この状態だけでCodexの正規開始手順が拒否されました。
44登録worktree数今回の調査用を含む実測値。うち29 worktreeがdirtyでした。
0Claude active lockClaudeプロセスは複数動いている一方、共通判断に使えるactive session JSONは0件でした。
実際の自己閉塞: `--check` は「worktreeへ移れ」と拒否。その直後の `--prepare` は「mainがdirtyだからworktreeを作れない」と拒否。安全な場所へ移るための入口を、安全装置自身が塞いでいました。
02

間違っているのは、守る範囲

現行方式は「この部屋に物が一つでも残っていたら、誰も帰れない」。新方式は「自分が持ち込んだ物の行き先を説明できたら帰れる」です。

いま:全体clean方式

  1. mainに誰かの差分がある
  2. 新しいworktreeを作れない
  3. 終了時も全dirtyを自分の責任にされる
  4. 救出worktreeへ退避し、未回収が増える

これから:所有差分方式

  1. 開始時の状態をbaselineとして記録
  2. 担当pathを宣言して隔離開始
  3. 競合は同じpathが重なった時だけ止める
  4. 自分が増やした差分だけ閉じる
03

開始・実行中・終了を、3つに分ける

Fableとの設計レビューで合意した新モデルは「Task Lease + Baseline + Owned Paths」。言い換えると、作業札・開始写真・担当範囲です。

START / 作業札

誰が、何を触るか

agent・session・目的・HEAD・開始時status・担当pathを共通台帳へ登録。mainがdirtyでも、その状態を背景として記録して開始できます。

止める:担当pathが他のactive作業と重なる時
WORK / 見張り

越境だけを止める

実際に書いたpathとheartbeatを記録。CodexとClaude Codeが同じ台帳を見て、相手の担当範囲への書込みだけを止めます。

止める:所有path外への書込み・同一path競合
FINISH / 受け渡し

自分の差分だけ閉じる

開始baselineから増えた所有差分を確認。終了は committed / handed_off / no_change の3種類。worktree全体のcleanは要求しません。

止める:自分の差分が未説明の時だけ
04

残す安全策、変える安全策

commit gateを撤去する話ではありません。事故を防ぐ部分は残し、責任範囲が曖昧な部分だけを置き換えます。

そのまま残す

  • primaryをfeatureブランチへ切り替えない
  • commitは明示pathspecで範囲を限定
  • 他セッションの変更を戻さない
  • 同じpathを同時に触る時はhard block

所有差分方式へ変える

  • main dirtyをworktree作成拒否に使わない
  • Stop hookは全dirtyでなく自分の増分を見る
  • finish directの「tree全体clean」を外す
  • Claudeだけのsession registryを共通leaseへ統合
05

一気に替えず、観測から始める

作業を止めないための仕組みが、移行作業で作業を止めては本末転倒。まず新旧判定を並べて差を見るのが最も安い進め方です。

共通leaseを観測専用で追加

まだblockしない。Codex / Claude Codeの判定差だけをログに残す。

Codexの開始拒否をwarnへ変更

main dirtyでもHEAD基点のlinked worktreeを作れるようにする。

Stop / finishを所有差分判定へ変更

baseline以降、自分の担当pathに生じた差分だけを検査する。

Claude Codeを共通leaseへ接続

既存のpathspec guardは当面維持し、古いack方式を段階的に外す。

worktree清掃を別GCへ分離

作業完了と掃除を別責務にする。1週間観測後に旧dirty blockを停止。

THE BOTTOM LINE

「全部きれいだから安全」ではなく、
「誰の差分か分かるから安全」へ。