purpose
brake 1 の operational-copy 窓と、ライブ .claude/ を複製する規則効果測定とが同時に走れない構造を作るかどうかを決める。
#1901 実装後まで保留。 #1901 の印(ディスク上のマーカー)が入れば重なりは格段に短くなるため、排他が依然として必要かは印の実装後に測ってから判断する。いま実装に進めると、#1901 と同じファイルに競合する変更を入れることになる。
observation
2026-09-06、二つのセッションが同一 workspace で、それぞれ正当な手順に従って動いた結果、共有 .claude/ の上で衝突した。
どちらの手順も違反していない。 窓の内側で腕 2 本が materialize された(窓開始 23:55:03 に対し 23:55:39 と 23:56:44)。書き込みとの時間的重なりは無く、対象ファイルが測定対象の発火判定に効く経路も無かったため、その回の測定自体は有効だった。
危険の性質
- 内容の混入 — 腕が draft 版を読む。この回は対象ファイルが測定対象と別だったため影響は小さかったが、一般には成立しない。
- 引き裂き — 書き込み途中に複製が走り、壊れた本文が腕に入る。低確率だが静かに起きる。腕が複数あるとき、どれが汚染されたか事後に判定できない。この回は発生していない。
汚染が無かった場合でも、窓の内側で読まれた本文を事後に確定できない限り、測定の記録に「実行中に共有 .claude/ が別セッションから書き換えられていた可能性」という但し書きが必要になり、測定の価値が下がる。この事後確定の穴は #1901 が扱う。 本 issue に残るのは、重なりそのものを構造で禁じるかどうかの軸。
採らなかった手段 ―― 窓の最小化
本 issue の初版はこれを本命としていた。skills/evolution-parallel-agent-eval/SKILL.md Procedure step 5 の復元位置を「そのラウンドの全 spawn 完了直後」へ前倒しする案である。
根拠は今も正しい: 注入は subagent の spawn 時点で行われるため(同 SKILL.md Constraint, Character_Instance non-inheritance の literal)、step 2 が要求しているのは「spawn の時点でディスクに draft が在ること」であり、それ以降ディスク側を保持する意味は無い。前倒しの条件が「最初の spawn の直後」ではなく「そのラウンドの全 spawn 完了直後」であることも、step 7 Re-run と N>1 構成から導かれる。実際 PR #1899 の brake 1 は 3 ラウンドとも spawn 直後に閉じ、評価者は正常に動作した。
誤っていたのは、そこから「窓の最小化が収束である」と続けた部分。 同日中の実測で、同じ窓が 4 時間半にわたり閉じられないまま残った ―― ラウンド 2 の評価者が spawn 直後に API 429 で早期終了し、続いて spawn 元セッションでコンテキスト圧縮が挟まったため。窓の長さを決めているのは手順ではなく、書いた手が次に動ける瞬間であり、それは手順の外にある。前倒しは窓の期待値を縮めるが、分散を縮めない。
結論だけを残すと後から読む主体が同じ案をもう一度立てるため、経緯ごとここに残す。前倒しは本 issue の対象外。
対象外
target files(候補、#1901 実装後に確定)
| ファイル |
箇所 |
skills/evolution-parallel-agent-eval/SKILL.md |
Procedure step 2〜5(窓の区間) |
skills/evolution-rule-effect-measurement/SKILL.md |
Running stage 2(ライブ .claude/ 複製の前提) |
前提(検証済み)
- 両手順の literal は 2026-09-06 に作業ツリー上で直接確認。
- 窓の開閉の一致は sha256 で確認(両セッションが独立に当てた。開いた版
e0c11e45… / 復帰先 89529a17…)。
- 腕の複製時刻は
~/.claude/projects/ に残ったセッション記録から確定。
関連
purpose
brake 1 の operational-copy 窓と、ライブ
.claude/を複製する規則効果測定とが同時に走れない構造を作るかどうかを決める。#1901 実装後まで保留。 #1901 の印(ディスク上のマーカー)が入れば重なりは格段に短くなるため、排他が依然として必要かは印の実装後に測ってから判断する。いま実装に進めると、#1901 と同じファイルに競合する変更を入れることになる。
observation
2026-09-06、二つのセッションが同一 workspace で、それぞれ正当な手順に従って動いた結果、共有
.claude/の上で衝突した。skills/evolution-parallel-agent-eval/SKILL.mdProcedure step 2 は、対象がrules/**のとき operational copy の適用を必須としている。すなわち.claude/rules/operations/main-agent-procedures.mdを draft 版へ書き換える。step 5 がそれを戻す。この開いている区間が「窓」。skills/evolution-rule-effect-measurement/SKILL.mdRunning stage 2 の腕は、ライブの.claude/を複製して構築される。どちらの手順も違反していない。 窓の内側で腕 2 本が materialize された(窓開始 23:55:03 に対し 23:55:39 と 23:56:44)。書き込みとの時間的重なりは無く、対象ファイルが測定対象の発火判定に効く経路も無かったため、その回の測定自体は有効だった。
危険の性質
汚染が無かった場合でも、窓の内側で読まれた本文を事後に確定できない限り、測定の記録に「実行中に共有
.claude/が別セッションから書き換えられていた可能性」という但し書きが必要になり、測定の価値が下がる。この事後確定の穴は #1901 が扱う。 本 issue に残るのは、重なりそのものを構造で禁じるかどうかの軸。採らなかった手段 ―― 窓の最小化
本 issue の初版はこれを本命としていた。
skills/evolution-parallel-agent-eval/SKILL.mdProcedure step 5 の復元位置を「そのラウンドの全 spawn 完了直後」へ前倒しする案である。根拠は今も正しい: 注入は subagent の spawn 時点で行われるため(同 SKILL.md Constraint, Character_Instance non-inheritance の literal)、step 2 が要求しているのは「spawn の時点でディスクに draft が在ること」であり、それ以降ディスク側を保持する意味は無い。前倒しの条件が「最初の spawn の直後」ではなく「そのラウンドの全 spawn 完了直後」であることも、step 7 Re-run と N>1 構成から導かれる。実際 PR #1899 の brake 1 は 3 ラウンドとも spawn 直後に閉じ、評価者は正常に動作した。
誤っていたのは、そこから「窓の最小化が収束である」と続けた部分。 同日中の実測で、同じ窓が 4 時間半にわたり閉じられないまま残った ―― ラウンド 2 の評価者が spawn 直後に API 429 で早期終了し、続いて spawn 元セッションでコンテキスト圧縮が挟まったため。窓の長さを決めているのは手順ではなく、書いた手が次に動ける瞬間であり、それは手順の外にある。前倒しは窓の期待値を縮めるが、分散を縮めない。
結論だけを残すと後から読む主体が同じ案をもう一度立てるため、経緯ごとここに残す。前倒しは本 issue の対象外。
対象外
skills/evolution-parallel-agent-evalstep 5 の位置を動かすこと(上記「採らなかった手段」)target files(候補、#1901 実装後に確定)
skills/evolution-parallel-agent-eval/SKILL.mdskills/evolution-rule-effect-measurement/SKILL.md.claude/複製の前提)前提(検証済み)
e0c11e45…/ 復帰先89529a17…)。~/.claude/projects/に残ったセッション記録から確定。関連