Interlock · Experiment E2실험 E2
Two agents, one file: do their branches still merge?두 에이전트가 같은 파일을 고칠 때, 브랜치가 그대로 병합되는가
E4 replayed commit histories. E2 runs two live Claude Code agents in separate git worktrees and merges their branches with real git merge: does Interlock stop the edits that would conflict, and only those?
E4는 커밋 기록을 재현했습니다. E2는 실제 Claude Code 에이전트 둘을 서로 다른 git 워크트리에서 돌리고 두 브랜치를 실제 git merge로 합칩니다. Interlock이 충돌할 편집만 정확히 막는지 확인했습니다.
Run on 2026-10-18 with Interlock V3.0.0 and real Claude Code 2.1.302 sessions: 32 trials, 64 sessions.2026-10-18, Interlock V3.0.0과 실제 Claude Code 2.1.302 세션으로 실행. 시행 32회, 세션 64개. Raw results (JSON)원자료 (JSON)
Method방법
- Agent A, in its own worktree, sets
TIMEOUTto 60 insrc/config.pyand ends its session. Its claims are released; its branch is not merged.에이전트 A는 자기 워크트리에서src/config.py의TIMEOUT을 60으로 바꾸고 세션을 끝냅니다. 점유는 풀리고, 브랜치는 병합 전입니다. - Agent B, in another worktree, then makes one of four edits to the same file: the same line, the next line, a line further away, or a different function. Git conflicts on the first two and not on the last two.이어서 에이전트 B가 다른 워크트리에서 같은 파일에 네 가지 편집 중 하나를 합니다. 같은 줄, 바로 다음 줄, 떨어진 줄, 다른 함수입니다. 앞의 둘은 git이 충돌로 판정하고, 뒤의 둘은 충돌이 아닙니다.
- Judged by git: both branches are merged with real
git merge. Claude Code headless, Sonnet 5.5, four runs per cell, with and without Interlock.판정은 git: 두 브랜치를 실제git merge로 합칩니다. 헤드리스 Claude Code, Sonnet 5.5, 칸마다 4회, Interlock 있음·없음 두 조건.
Results결과
| B's editB의 편집 | Git conflicts?git 충돌 여부 | No Interlock: merge conflictsInterlock 없음: 병합 충돌 | Interlock V3: merge conflictsInterlock V3: 병합 충돌 | Interlock V3: B refusedInterlock V3: B 거부 |
|---|---|---|---|---|
| Same line같은 줄 | Yes예 | 4/4 | 0/4 | 4/4 |
| Next line다음 줄 | Yes예 | 4/4 | 0/4 | 4/4 |
| A line further away떨어진 줄 | No아니오 | 0/4 | 0/4 | 0/4 |
| A different function다른 함수 | No아니오 | 0/4 | 0/4 | 0/4 |
- Without Interlock, every edit git cannot merge became a merge conflict: 8 of 8.Interlock이 없으면 git이 합칠 수 없는 편집은 모두 병합 충돌이 됐습니다: 8번 중 8번.
- With Interlock, none did. B's edit was refused before it was written, even though A's session had already ended, because the check reads A's unmerged branch, not A's live claims.Interlock이 있으면 한 번도 없었습니다. A의 세션이 이미 끝났는데도 B의 편집은 쓰기 전에 거부됐습니다. 검사가 A의 살아 있는 점유가 아니라 병합 전 브랜치를 보기 때문입니다.
- Edits that git merges cleanly were never refused (0 of 8).git이 문제없이 합치는 편집은 한 번도 거부되지 않았습니다(8번 중 0번).
What to watch주의할 점
- Interlock prevents the conflict; it does not resolve it. In all 8 refused runs, B left the line unchanged and reported that the edit was blocked and why. Here the two edits cannot both stand, so stopping is correct, but B's task waits for a person or for A's branch to merge.Interlock은 충돌을 막을 뿐 해결하지는 않습니다. 거부된 8번 모두 B는 그 줄을 바꾸지 않고, 편집이 막힌 사실과 이유를 보고했습니다. 두 편집이 함께 성립할 수 없는 경우라 멈추는 것이 맞지만, B의 작업은 사람이 정하거나 A의 브랜치가 병합될 때까지 남습니다.
Limits한계
- One small file and four runs per cell, so the confidence intervals are wide.작은 파일 하나, 칸마다 4회라 신뢰구간이 넓습니다.
- E2 ran before the line rule switched to the histogram diff that git's merge uses. Same-line and next-line edits are judged the same by both diffs.E2는 줄 규칙을 git 병합과 같은 histogram diff로 바꾸기 전에 실행했습니다. 같은 줄·다음 줄 편집은 두 방식의 판정이 같습니다.
- E2 is 64 of the 560 live Claude Code sessions in our experiments. The Interlock source and the experiment harness are not public.E2는 전체 실험의 실제 Claude Code 세션 560개 중 64개입니다. Interlock 소스와 실험 도구는 공개하지 않습니다.