결과부터. 1일차가 남긴 D365 로드맵(60 작업 단계 = 4분기 × 3마일스톤 × 5일)을
d365-runner가 16시간 13분, 62커밋에 60/60 완주했다. 얻은 것 —
agent probe 8→9, autonomy 축 측정 개시(0.38), self-improve 회귀차단 게이트 신설,
rule 관계그래프 실측, 공개 계기 2개(D365 Scoreboard · 연간 리포트), 그리고 v2 로드맵 15일 확정.
각 단계는 verify 게이트(exit 2)를 통과해야 done, 매 push는 교차모델 적대리뷰(131회)를 통과해야 landing.
D365의 D1~D60은 달력이 아니라 순차 작업 단계다 — 계획이 상태머신이었기에 1년치를 하루에 실행할 수 있었다.
이 세션이 하네스에 남긴 변화 전부다. 왼쪽이 실행 전, 오른쪽이 실행 후 —
각 행은 docs/d365/의 reports·evidence·스크립트로 추적된다. "좋아졌다"가 아니라
축별 before → after로 적는다. 못 잰 것은 NA로 남긴다(fail-loud).
60단계는 4분기로 나뉘고, 각 분기는 이전 분기의 실측 마찰이 결정했다.
분기 경계마다 게이트가 재계획 근거(revision_log)를 요구한다 — 근거 없이는 다음 분기의
provisional이 해제되지 않는다. 4개 게이트 전부 통과. 아래는 분기별로 실제 한 일이다.
D365 4분기 아크 — 각 분기 마찰이 다음을 결정. 분기 경계 게이트가 재계획을 강제(revision_log 4건 전부 기록)
Q3-2026전환 흡수 — 측정의 기준점 만들기15/15 done
M1 baseline·재측정 — baseline 고정(replay 100 · probe 9/9 · dead hook 0) 후 재측정 리허설: substrate 8종 전부 delta 0. 동일 입력 = 동일 결과, 결정론 실증
M2 agent probe 확장 — 기존 5종 외 신규 10종 선정 + gold label(user-proxy·test-writer·supabase·security 등) · false-positive 감사로 오탐 제거
M3 autonomy 축 신설 — "자율성"을 스키마·임계값으로 측정 가능한 축으로 정의 (다음 분기가 실측)
self-audit이 game-vector 1건 발견 — D3 verify가 문자열 매칭으로 은폐 가능 → d365-delta-guard.sh로 봉쇄(negative fixture exit 2 실증)
게이트① — 추세 5관측(replay 평탄 · probe 8→9 · cost 24.8k→28.1k↑) 근거로 Q4 확정 · revision_log 기록
Q4-2026자동화 심화 — 무인 경계와 게이트15/15 done
M1 무인 경계 — 무인 완료율 1.0 실측(표본 2 극소를 그대로 명시) · 상시 전환은 보류(표본 30 미달 — abstention, 성급한 자동화 금지)
M2 회귀차단 게이트 — probe 결과가 self-improve의 rule 변경을 막는 self-improve-probe-gate 신설 · 차단 1건 exit 2 실증 · train/eval judge 분리 · "배선 완료 ≠ 실운영" 자각을 기록으로 남김
M3 비용 거버넌스 — cost baseline 확정 · 라우팅 절감 분석: sonnet 위임 0.6%로 절감 미실현을 그대로 기록(성과 위장 없음)
게이트② — cost 경고라인 도달 · autonomy 파이프라인 첫 주입 근거로 Q1 확정 · revision_log 기록
Q1-2027측정 인프라 — 지표를 지표로 검증15/15 done
M1 예측타당성 — ρ 방법론 설계 + d365-rho.sh 결정론 산출 · 결과는 전 지표 NA(표본 8<12) — ρ≥0.5 전까지 지표를 의사결정 게이트로 쓰지 않는다는 원칙 확정
M2 rule 신진대사 — d365-rule-graph.sh 실측: rules 94 · 참조엣지 70 · 증류엣지 54 · orphan 25(26.6%) · archive 후보 0(cross-batch 원칙 — 단발 근거로 삭제 안 함)
M3 D365 Scoreboard 발행 — weekly-scoreboard.tsv → HTML 자동 렌더 공개 · stale 7일 감지 · NA 보존 · 크기감소 거부 guard
게이트③ — Q1 실측(ρ=NA · orphan 25 · Scoreboard 자동발행) 근거로 Q2 15일 확정 + ρ 재계산 개정 · revision_log 기록
Q2-2027확장 + 결산 — 이식하고, 재고, 다음을 결정15/15 done
M1 이식성 — d365-substrate-install.sh(멱등 · 비파괴 · 심링크 안전) 구축 · 판정은 조건부 GO: rule/게이트 구조는 즉시 이식 GO, eval/측정은 개인 데이터 결합(F1~F6)으로 재설계 후
M2 1년 재측정 — 동일 계기로 연간 delta 산출(probe +1 · rules +2 · cost +3.6k · autonomy 측정개시) · v2 입력용 마찰 패키지 확정(분산 부재 · 결측 44주 · 이식 마찰 F1~F6)
M3 v2 로드맵 — 테마 5 후보 중 4 채택 + 1 보류(T4 단발 근거) · 15일 확정 · 적대리뷰 통과한 HARD verify로 잠금
1일차의 규율(판단 → 결정화 → 적대검증 → 재측정)은 5일 스프린트였다.
2일차는 같은 사이클을 60단계로 확장하되, 핵심은 분량이 아니라 상태의 영속성 —
진행 상태(state.json)가 정본이 되어 러너가 언제 호출돼도 중단 지점부터 이어간다.
계획이 "문서"가 아니라 "다시 시작 가능한 상태 기계"였기에 1년치가 한 세션에 들어갔다.
1일차의 5일 규율 → 상태 영속성을 다리로 D365 60단계로 확장. 확장의 본질은 분량이 아니라 재개 가능성
"60/60"이 선언이 아닌 이유 — 각 단계의 done은 3중 강제를 통과한 상태 전이다.
독립 재검증(별도 컨텍스트의 subagent)이 exit code로 재현 확인: ① 순서를 건너뛰면 exit 2,
② verify가 실패하면 완료 차단(exit 2), ③ verify 명령은 plan.json이 git HEAD와 일치할 때만 실행
(변조된 verify는 커밋 = 적대리뷰를 거쳐야 실행 가능).
complete는 순서·provenance·verify 3중 게이트를 전부 통과해야 done — 독립 subagent가 exit code로 재현 확인(anti-Goodhart 핵심)
Adversarial Convergence
교차모델 적대리뷰가 실제로 잡은 것
매 push는 Codex(교차모델)의 독립 적대리뷰를 통과해야 landing된다. 이 세션에서 리뷰는 131회 실행됐고,
초반엔 실제 결함(RCE성 경로 탈출·크래시·인덱스 오염)을 잡았고, 후반엔 grep의 의미검증 천장(정규식 형식)으로 수렴했다.
"좋아진 것 같다"가 아니라 재현 → 근본 수정 → 재현 검증으로만 통과시킨 이력이다.
push→Codex→발견→근본수정→재push 루프. 수렴(NO_CRITICAL) 또는 grep 천장 자인까지 반복 — 사용자 개입 없이
스크립트
잡힌 결함 (CRITICAL/HIGH)
근본 수정
rule-archive
경로 traversal ../victim이 repo 밖 파일 이동
basename 강제(kebab-case) + 재현 차단
scoreboard-render
--publish가 인덱스 전체 커밋(무관 파일 오염)
git 제거 → 순수 렌더러(발행은 워크플로우)
substrate-install
심링크 자식(.claude)으로 tree 밖 쓰기
openat + O_NOFOLLOW + O_EXCL(레이스 차단)
substrate-install
튜플 언패킹 크래시 · dry-run 빈대상 크래시
entry[0] · lexists (exit code로 재검증)
v2 plan.json
verify 전부 test -s(파일 존재 = Goodhart)
15일 전부 content/schema HARD 검사
v1 plan.json
33일이 test -s만 — touch-gameable
2-마커 grep -qF + 33일 재verify PASS
D365 Scoreboard
D365 Scoreboard — 하네스가 자기를 측정한다
Q1.M3이 발행한 D365 Scoreboard는
weekly-scoreboard.tsv(8개 시점 append-only)에서 자동 렌더되는 공개 계기다.
데이터가 7일 넘게 낡으면 스스로 STALE 경고를 띄우고(fail-loud), NA는 가짜 값으로 대체하지 않는다.
아래는 최신 스냅샷(2026-07-03T03:34:19Z) —
v2가 실행되면 그 진행도 이 계기가 그대로 측정한다.
실행 산출물 지도 — Scoreboard·연간 리포트는 tsv에서 자동 렌더, 이식기·v2는 다음 주기 자산. 부피가 아니라 작동하는 계기
지표
현재값
의미
replay 정합
100.0 %
동일 입력 재실행 = 동일 결과(결정론)
conf_enf (강제 게이트)
5
실제 exit 2 로 차단하는 게이트 수
probe_pass
9
agent 행동 probe 통과
dead hook
0.0 %
발동 안 되는(죽은) hook 비율
rules_n
93
활성 rule 수(부피 아닌 관리 대상)
commits_7d
235
최근 7일 커밋
cost_7d
28440
최근 7일 토큰 비용(경고라인 도달)
autonomy
0.38
자율성 축 — 부트스트랩 벗어나 실측 개시
Scoreboard는 tsv→HTML 순수 렌더(git 미접촉) · 크기감소 거부·NA 보존·원자 교체 guard 내장 · stale 7일 감지
Yearly Re-measurement
1년의 재측정 — 연간 delta
Q2.M2가 발행한 D365 연간 리포트는
D365 실행 구간 전체를 동일 scoreboard 계기로 재측정한 delta다 — "좋아진 것 같다"가 아니라 숫자로.
그리고 그 숫자가 무엇을 못 말하는지("숫자가 못 말하는 것")도 같은 페이지에 정직하게 남긴다.
축
시작
최신
Δ
replay 정합 %
100.0
100.0
0.0
friction
22
23
+1
conf_enf (강제 게이트)
5
5
0
probe_pass
8
9
+1
rules_n
91
93
+2
cost_7d
24809
28440
+3631
autonomy
NA
0.38
측정개시
예측타당성 진단의 진화 — "표본부족"(Q1)에서 "분산부재"(Q2)로. probe_pass→friction 한 쌍만 PERVERSE(소표본 보류). 성공으로 위장 0건
Closed Loop
v1 마찰이 v2 15일을 결정했다
폐루프의 증명은 서술이 아니라 링크가 resolve되는가다. v2 로드맵의 테마는 각각 v1이 실제로
부딪힌 마찰과, 그 마찰이 기록된 파일을 가리킨다 — 독립 재검증이 링크가 실제 evidence로 resolve됨을 확인했다.
직감으로 넣은 테마는 0건. 단발 근거(T4)는 승격하지 않고 보류로 기록했다(재litigate 방지).
폐루프 실증 — v2 테마가 각각 v1 마찰 파일로 resolve. 독립 재검증이 링크 실재 확인. 단발 근거는 보류
채택된 테마 4개는 v2의 3개 마일스톤(15일)으로 편성됐다.
초안은 이미 적대리뷰를 통과해 test -s 없이 HARD verify로 잠겼고, 실행되면 그 진행은
위 D365 Scoreboard가 자동으로 측정한다.
M1
예측타당성 방법론 재설계 (T2+T5)
변동 축 중심 eval · 축적 주기 · ρ 프로토콜 · 합성 검증 — v1 ρ=NA 해소
M2
측정 이식성 (T1)
eval 데이터소스 파라미터화 · 파일럿 재이식 — 구조 이식성→측정 이식성
M3
리뷰 수렴 효율 실험 (T3)
라운드 수 지표화 · 첫 커밋 체크리스트 · 적용/미적용 비교 실험
Stage & Remaining
어디까지 도달했고, 무엇이 남았나
도달 — v1 완주(60/60) + v2 초안·적대리뷰 통과. v2는 아직 실행되지 않았다 —
폐루프의 다음 주기가 v2 실행이다. 도달한 것과 남은 것을 정직하게 나눈다(fail-loud).
v1 완주 + v2 초안까지 도달. v2 실행은 폐루프 다음 주기. ρ 측정불가·grep 천장은 숨기지 않고 남은 과제로 명시
01
완료 = 60개 파일이 아니라 폐루프가 닫혔는가
부피가 아니라 "마찰이 다음 계획을 결정했는가"로 완료를 판정
02
verify는 약화가 아니라 강화로만 움직인다
독립 재검증이 test-s 약점 발견 → 2-마커 grep으로 강화(우회 아님)
03
측정 불가는 NA, 결측은 결측
ρ PERVERSE 보류·44주 결측 명시 — 가짜 성공으로 위장 0건
04
진짜 게이트는 주소공간 밖에 있다
grep은 pre-filter, 의미검증의 강제는 교차모델 적대리뷰층
"완료는 60개 파일이 아니라 폐루프가 닫혔는가다."
2일차의 산출물도 코드가 아니라 판단의 결정화였다. 무엇을 다음 분기에 넣을지, 어떤 verify가 게임 가능한지,
어떤 마찰이 v2를 결정하는지 — 전부 판단이 병목이었고, 그 판단을 상태머신·게이트·적대리뷰로 굳혀
다음 주기가 이어받을 수 있게 했다. 1일차가 "판단을 인프라로"였다면, 2일차는 "그 인프라가 1년을 실행할 수 있는가"의 실증이다.