Interlock · Experiment E4실험 E4

Needless refusals on real commit histories실제 커밋 기록에서 불필요한 차단

A coordination layer for AI coding agents is only useful if it blocks real conflicts and lets everything else through. E4 measures the second part on real code. AI 코딩 에이전트 조정 도구는 진짜 충돌만 막고 나머지는 통과시켜야 쓸모가 있습니다. E4는 그 두 번째를 실제 코드로 측정했습니다.

Run on 2026-10-18 with Interlock V3.0.0.2026-10-18, Interlock V3.0.0으로 실행. Raw results (JSON)원자료 (JSON)

Method방법

  • Source: the commit histories of five public repositories: httpx, click, requests (Python) and zod, ky (TypeScript).대상: 공개 저장소 5개의 커밋 기록. httpx, click, requests(Python), zod, ky(TypeScript).
  • Pairs: two consecutive commits that change the same file are replayed as two agents starting at the same time from the first commit's parent. Up to 1,500 pairs per repository; 438 pairs that could not be replayed were skipped.쌍: 같은 파일을 연달아 고친 두 커밋을, 앞 커밋의 부모에서 동시에 출발한 두 에이전트의 작업으로 재현했습니다. 저장소당 최대 1,500쌍, 재현할 수 없는 438쌍은 제외했습니다.
  • Ground truth is git itself: independent pairs are merged with real git merge (merge-ort, via git merge-tree). All 3,535 independent pairs merged without conflict, so any refusal of them is needless. Pairs where the second commit was built on the first (1,817) cannot be replayed as concurrent work and are counted as conflicts, an approximation.정답은 git: 독립 쌍은 실제 git merge(merge-ort, git merge-tree)로 합쳤고, 3,535쌍 모두 충돌 없이 합쳐졌습니다. 따라서 이 쌍을 막으면 불필요한 차단입니다. 뒤 커밋이 앞 커밋 위에서 만들어진 1,817쌍은 동시 작업으로 재현할 수 없어 충돌로 분류했습니다(근사치).
  • Rules compared: a file lock (one agent per file); a symbol lock (Interlock V2: refuse when changed functions or classes overlap); and the Interlock V3 line rule (refuse when the second change would make a merge conflict with the first one's changed lines).비교한 규칙: 파일 잠금(파일당 에이전트 하나), 심볼 잠금(Interlock V2: 바뀐 함수·클래스가 겹치면 차단), Interlock V3 줄 규칙(뒤 변경이 앞 변경의 줄과 머지 충돌을 일으킬 때만 차단).

Results결과

Repository저장소 Language언어 Commit pairs커밋 쌍 Counted as conflicts충돌로 분류 File lock: needless파일 잠금: 불필요 Symbol lock: needless / missed심볼 잠금: 불필요 / 놓침 Interlock V3: needless / missedInterlock V3: 불필요 / 놓침
httpxPython1,4994331,066313 / 360 / 0
clickPython47115731479 / 250 / 0
requestsPython701358343129 / 190 / 1
zodTypeScript1,499535964594 / 90 / 1
kyTypeScript1,182334848594 / 50 / 0
Total합계5,3521,8173,5351,709 / 940 / 2
  • File locking would have needlessly blocked 3,535 edits that git merges cleanly.파일 잠금은 git이 문제없이 합치는 편집 3,535건을 불필요하게 막았을 것입니다.
  • Symbol locking cut that to 1,709 but missed 94 conflicts whose changed symbols did not overlap.심볼 잠금은 이를 1,709건으로 줄였지만, 바뀐 심볼이 겹치지 않는 충돌 94건을 놓쳤습니다.
  • Interlock V3 blocked no edit needlessly in any repository and missed 2 of the 1,817 pairs counted as conflicts.Interlock V3는 다섯 저장소 모두에서 불필요한 차단이 0건이었고, 충돌로 분류한 1,817쌍 중 2쌍만 놓쳤습니다.

Limits한계

  • This is a replay of commit histories, not agents writing code. Our experiments with live agents used 560 real Claude Code sessions: E1 192, E2 64, E6 66, E8 84, E9 43 and E10 60, each on its own page, plus 51 in E3 (a signature change and a new call merged together) and E5 (what agents do when Interlock is down), which are in our internal report and not yet published as pages.에이전트가 직접 코드를 쓴 것이 아니라 커밋 기록을 재현한 실험입니다. 실제 에이전트 실험에는 Claude Code 세션 560개를 썼습니다. E1 192개, E2 64개, E6 66개, E8 84개, E9 43개, E10 60개는 각각 페이지로 공개했고, 나머지 51개는 E3(시그니처 변경과 새 호출이 함께 병합될 때)과 E5(Interlock이 멈췄을 때 에이전트의 동작)로, 내부 보고서에만 있고 아직 페이지로 공개하지 않았습니다.
  • Pairs counted as conflicts were not merged, so the "missed" column is approximate.충돌로 분류한 쌍은 실제로 합치지 않았으므로 "놓침" 수치는 근사치입니다.
  • The Interlock source and the experiment harness are not public.Interlock 소스와 실험 도구는 공개하지 않습니다.