결과부터 말한다. 1일차가 짜 둔1년치 작업 계획 'D365'(60단계 = 4분기 × 3개 마일스톤 × 5일)을, 그 계획을 단계마다 자동으로 실행하는 프로그램d365-runner가16시간 13분 동안 62번 커밋(저장)하며60단계 전부(60/60) 완주했다. 이 하루로 얻은 것 — AI 도우미가 제대로 동작하는지 찔러 보는 행동 테스트(probe)가8→9종, 사람 없이 스스로 끝내는 정도인 자율성(autonomy) 지표는처음으로 측정 시작(0.38), 스스로 규칙을 고치는 self-improve에는과거로 되돌아가는 오류를 막는 관문 신설, 쌓아 둔 규칙(rule)은서로 얽힌 정도를 실제 측정, 바깥에 공개하는 지표판 2개(D365 Scoreboard · 1년 결산 리포트), 그리고다음 해 계획 15일치 확정. 각 단계는 '정말 끝났는지' 검사하는 관문(verify)을 통과해야만 완료로 인정되고(실패하면 exit 2 신호로 막힘), 코드 반영은 매번 다른 AI 모델(Codex)의 트집 잡기 적대 리뷰(131회)를 통과해야 저장소에 올라간다. D365의 D1~D60은 날짜가 아니라순서대로 밟는 작업 단계다. 계획을 '어디까지 했는지 기억하는 상태 기계'로 만들었기에, 1년치를 한 번의 작업 세션(한 번 켜서 끝까지 이어간 작업) 안에 실행할 수 있었다.
이번 한 번의 작업(세션)이 이 하네스—AI가 '다 했다'고 거짓말 못 하도록 증거를 강제하는 자동화 장치—에 남긴 변화를 전부 모았다. 왼쪽이 실행 전, 오른쪽이 실행 후이고, 각 행의 근거는docs/d365/폴더의 결과 리포트·증거 파일·스크립트로 되짚을 수 있다. '좋아졌다'는 느낌 대신항목별 전 → 후 수치로 적었다. 측정하지 못한 값은 억지로 채우지 않고 NA(값 없음)로 남긴다 — 실패를 숨기지 않는다는 원칙(fail-loud)이다.
항목
실행 전
실행 후
근거 파일·스크립트
에이전트 행동 테스트(probe)
8 PASS
9종 통과 · 새 항목 10종 선정 + 정답 기준(gold label) 부여
q3m2-agent-selection · fp-audit
자율성(autonomy) — 사람 없이 스스로 끝낸 정도
NA — 지표 자체가 없었음
0.38로 측정 시작 · 무인 완료율 집계 경로 구축
q3m3-autonomy-schema · q4m1
self-improve(스스로 규칙 보강)의 되돌이 오류 차단
없음
행동 테스트 관문 신설 — 실제 1건을 exit 2로 막은 것 확인
self-improve-probe-gate.sh
비용 관리(거버넌스)
추적 안 함
7일 토큰 비용 24.8k→28.4k로 경고선 도달 감지 · 모델 분산으로 아낀 건 아직 없음을 그대로 기록
q4m3-cost-baseline
예측타당성 ρ(지표가 실제 성과를 예측하는지)
개념뿐
같은 입력이면 같은 값을 내는 계산기 마련 + 'ρ가 0.5 넘을 때만 지표를 판단 근거로 쓴다'는 원칙 · 이번엔 표본이 8개뿐(<12)이라 판정은 NA
d365-rho.sh · q1m1-validity
규칙(rule)의 물갈이 상태
감(느낌)뿐
관계 그래프로 실측 — 규칙 94개 · 서로 참조하는 연결 70개 · 아무도 안 쓰는 고아 규칙 25개(26.6%) · 삭제 0개(한 번 근거로 지우지 않는 원칙)
d365-rule-graph.sh · q1m2
하네스를 바깥에 보여주는 창구
없음
D365 지표판(Scoreboard) + 1년 결산 리포트 자동 발행(표 파일 tsv → HTML)
d365-dashboard · yearly-report
다른 곳에 옮겨 심을 수 있나(이식성)
가설 단계
이식 설치 도구 마련 + 조건부 통과(구조는 바로 이식 OK · 측정 부분은 F1~F6 항목 재설계 후)
substrate-install.sh · q2m1
다음 해 계획
없음
v2 15일치 확정 — 겪은 마찰의 근거 파일 링크 · 우회 불가한 검사(HARD verify) · 적대리뷰 통과
v2/plan.draft.json · q2m3
지표만 통과시키는 편법(game-vector) 차단
검사가 단순 문자열 대조라 눈속임 가능(자체 점검에서 발견)
변화 검증 가드 신설 — 일부러 만든 실패 사례를 exit 2로 막음
d365-delta-guard.sh
곁들여 나온 것 — 새 스크립트 16개 · 결과 리포트 35개 · 증거 폴더 23개 · 분기 관문 4/4 통과(재계획 근거 기록) · 같은 입력=같은 결과(replay) 100% 유지
Quarter by Quarter
어떻게 개선했나 — 분기별로 실제 한 일
60단계는 4개 분기로 나뉘고, 각 분기의 할 일은 앞 분기에서 실제로부딪힌 마찰(문제)이 결정했다. 분기와 분기 사이에는 관문(게이트)이 있어서,왜 이렇게 다시 계획했는지에 대한 기록(revision_log)을 반드시 요구한다. 그 근거가 없으면 다음 분기의 '임시(provisional)' 계획이 확정으로 풀리지 않는다. 관문 4개를 전부 통과했다. 아래는 분기마다 실제로 한 일이다.
D365 4개 분기 흐름 — 각 분기의 마찰이 다음을 결정. 분기 관문이 '왜 다시 계획했는지'를 강제로 기록시킴(4건 전부)
Q3-2026전환 흡수 — 측정의 기준점 만들기15/15 done
1단계 기준값·재측정 — 먼저 기준값을 고정(같은 입력=같은 결과 100% · 행동 테스트 9/9 통과 · 죽은 검사 0개)한 뒤 다시 측정해 봄: 옮겨 심을 대상 8종 모두 delta 0 차이 0. 같은 입력이면 같은 결과가 나온다는 것(결정론)을 실제로 확인
2단계 행동 테스트 확장 — 기존 5종에 더해 새로 10종 선정 + 정답 기준(gold label)(user-proxy·test-writer·supabase·보안 등 도우미별) · 잘못 통과(오탐) 감사로 걸러냄
3단계 자율성 지표 신설 — '자율성'을 측정 형식과 기준선으로 잴 수 있는 지표로 정의 (실제 값은 다음 분기에 측정)
자체 점검이 편법 소지 1건 발견 — D3 단계 검사가 단순 문자열 대조라 눈속임 가능 → d365-delta-guard.sh로 차단(일부러 만든 실패 사례를 exit 2로 막음)
관문① — 5가지 추세 관측(재현성 그대로 · 행동 테스트 8→9 · 비용 24.8k→28.1k↑)을 근거로 Q4 확정 · 재계획 근거 기록
Q4-2026자동화 심화 — 사람 없이 어디까지 가능한가와 관문15/15 done
1단계 무인 한계선 — 사람 개입 없이 끝낸 비율 1.0으로 측정(단, 표본이 2건뿐임을 그대로 밝힘) · 상시 무인 전환은 보류(표본 30건에 못 미쳐 판단 보류 — 성급한 자동화 금지)
2단계 되돌이 오류 관문 — 행동 테스트 결과가 나쁘면 self-improve의 규칙 변경을 막는 self-improve-probe-gate 관문 신설 · 실제 1건을 exit 2로 막음 · 학습용/평가용 심판 분리 · '연결만 해둔 것 ≠ 실제로 돌아가는 것'이라는 점을 기록으로 남김
3단계 비용 관리 — 비용 기준값 확정 · 값싼 모델로 돌려 아끼는 효과 분석: 저비용 모델(sonnet) 위임이 0.6%뿐이라 절감 효과 없음을 부풀리지 않고 그대로 기록
관문② — 비용이 경고선에 도달 · 자율성 집계 경로 첫 가동을 근거로 Q1 확정 · 재계획 근거 기록
Q1-2027측정 장치 — 지표가 믿을 만한지까지 검증15/15 done
1단계 예측타당성 — 지표가 실제 성과를 예측하는지 재는 방법(ρ) 설계 + d365-rho.sh로 같은 입력=같은 값 계산 · 결과는 모든 지표 NA(판정 불가)(표본이 8개로 12개에 못 미침) — ρ가 0.5를 넘기 전에는 지표를 판단 근거로 삼지 않는다는 원칙 확정
2단계 규칙 물갈이 — d365-rule-graph.sh로 실측: 규칙 94개 · 서로 참조하는 연결 70개 · 요약에서 파생된 연결 54개 · orphan 25(26.6%) · 삭제 후보 0개(여러 번 반복 근거 없이 한 번 신호로는 지우지 않는 원칙)
3단계 D365 지표판 발행 — weekly-scoreboard.tsv 표를 → HTML로 자동 변환해 공개 · 7일 넘게 안 바뀌면 '낡음' 경고 · NA는 그대로 보존 · 데이터가 줄어드는 갱신은 거부하는 안전장치
관문③ — Q1 실측(ρ=NA · 고아 규칙 25 · 지표판 자동 발행)을 근거로 Q2 15일 확정 + ρ 재계산 반영 · 재계획 근거 기록
Q2-2027확장 + 결산 — 옮겨 심고, 되돌아보고, 다음을 정한다15/15 done
1단계 이식성 — d365-substrate-install.sh(여러 번 돌려도 같은 결과 · 기존 파일 안 지움 · 심링크 눈속임 차단) 설치 도구 구축 · 판정은 조건부 통과: 규칙·관문 같은 구조는 바로 옮겨도 OK, 평가·측정 부분은 개인 데이터와 얽혀 있어(F1~F6) 재설계 후에
2단계 1년 재측정 — 같은 측정 도구로 1년치 변화 산출(행동 테스트 +1 · 규칙 +2 · 비용 +3.6k · 자율성은 측정 시작) · v2에 넣을 마찰 묶음 확정(지표 변동 없음 · 44주치 데이터 빠짐 · 이식 마찰 F1~F6)
3단계 v2 계획 — 5개 주제 후보 중 4개 채택 + 1개 보류(T4는 근거가 한 번뿐이라 보류) · 15일 확정 · 적대리뷰를 통과한 우회 불가 검사로 잠금
1일차에 세운 작업 방식(판단 → 규칙으로 굳히기 → 다른 모델의 트집 검증 → 다시 측정)은5일짜리 짧은 집중 작업(스프린트)이었다. 2일차는 같은 사이클을 60단계로 늘렸는데, 핵심은 '많이 했다'가 아니라상태가 계속 살아남는다는 점이다. 지금까지의 진행 상태를 파일(state.json)에 정본으로 저장해 두어, 실행기가 언제 다시 호출돼도 멈췄던 지점부터 이어간다. 계획이 '읽고 마는 문서'가 아니라 '언제든 다시 시작할 수 있는 상태 기계'였기에, 1년치가 한 번의 세션 안에 들어갔다.
1일차의 5일 방식을, 상태를 보존하는 다리를 통해 D365 60단계로 확장. 확장의 본질은 분량이 아니라 '이어서 다시 할 수 있음'
'60/60 완주'가 그냥 말뿐이 아닌 이유 — 각 단계의 '완료'는세 겹의 강제 검사를 통과해야만 인정된다. 별도로 띄운 독립 검증 AI(subagent)가 프로그램 종료 신호(exit code)로 재현까지 확인했다: ① 순서를 건너뛰면 실패(exit 2), ② 검사(verify)가 실패하면 완료 차단(exit 2), ③ 검사 명령은 계획 파일(plan.json)이 저장소의 최신 상태(git HEAD)와 일치할 때만 실행된다 — 즉 검사를 몰래 바꾸려면 커밋을 해야 하고, 그 커밋은 적대리뷰를 거쳐야 반영된다.
'완료' 요청은 순서·출처확인·검사 세 관문을 모두 통과해야 완료로 인정 — 독립 검증 AI가 종료 신호로 재현 확인(편법 방지의 핵심)
Adversarial Convergence
다른 AI 모델의 적대리뷰가 실제로 잡아낸 것
모든 코드 반영(push)은 다른 AI 모델 Codex가 독립적으로 트집 잡는 적대리뷰를 통과해야 저장소에 올라간다. 이번 세션에서 이 리뷰는131회 돌았다. 초반에는실제 결함(저장소 밖 파일을 건드리는 경로 탈출·프로그램 멈춤·색인 오염 같은 위험)을 잡아냈고, 후반에는 단순 문자열 검색(grep)만으로는 '뜻'까지 검증할 수 없는 한계에 다다랐다. '좋아진 것 같다'가 아니라재현 → 근본 원인 수정 → 다시 재현해 확인의 순서로만 통과시킨 기록이다.
반영→Codex→발견→근본수정→다시 반영 루프. 결함 0이 되거나 문자열 검색의 한계를 인정할 때까지 반복 — 사람 개입 없이
스크립트
잡힌 결함 (치명·중대)
근본 수정
rule-archive
경로 파고들기(traversal) — ../victim 로 저장소 밖 파일까지 옮김
파일 이름만 쓰도록 강제 + 재현 사례 차단
scoreboard-render
--publish 옵션이 색인 전체를 커밋해 무관한 파일까지 오염
git 기능 제거 → 그리기만 하는 도구로 (발행은 별도 흐름이 담당)
substrate-install
심링크로 위장한 하위 경로(.claude)를 타고 폴더 밖에 쓰기
심링크를 따라가지 않는 안전한 파일 열기로 교체(동시 접근 차단)
substrate-install
값 분해 오류로 멈춤 · 미리보기(dry-run) 시 대상 없으면 멈춤
안전한 값 접근·존재 확인으로 수정 (종료 신호로 재검증)
v2 plan.json
검사가 전부 test -s 방식(파일만 있으면 통과 = 편법 소지)
15일치 전부 내용·형식까지 우회 불가 검사로 교체
v1 plan.json
33일치가 test -s 뿐 — 빈 파일만 만들어도 통과되는 허점
핵심 문구 2개 확인 grep -qF 방식으로 + 33일치 재검사 통과
D365 Scoreboard
D365 지표판 — 하네스가 스스로를 측정한다
Q1의 세 번째 마일스톤이 만든D365 Scoreboard은 주간 지표를 쌓아 둔 표 파일weekly-scoreboard.tsv(8개 시점, 덧붙이기만 함)을 바탕으로자동으로 그려지는 공개 지표판이다. 데이터가 7일 넘게 갱신 안 되면스스로 '낡음(STALE)' 경고를 띄우고(실패를 숨기지 않음), 측정 못 한 값은 가짜로 채우지 않고 NA로 둔다. 아래는 가장 최근 스냅샷(2026-07-03T03:34:19Z) 기준이다 — v2가 실행되면 그 진행도 이 지표판이 똑같이 측정한다.
실행 산출물 지도 — 지표판·연간 리포트는 표 파일에서 자동으로 그려지고, 이식 도구·v2는 다음 주기용 자산. 양이 아니라 실제로 도는 장치
지표
현재값
의미
재현 일치(replay)
100.0 %
같은 입력을 다시 넣으면 같은 결과(결정론)
강제 관문 수(conf_enf)
5
실제로 exit 2를 내며 막는 관문의 수
probe_pass
9
에이전트 행동 테스트 통과 수
dead hook
0.0 %
한 번도 안 걸리는(죽은) 검사 비율
rules_n
93
살아 있는 규칙 수(양이 아니라 관리 대상)
commits_7d
235
최근 7일간 저장(커밋) 횟수
cost_7d
28440
최근 7일 토큰 비용(경고선 도달)
autonomy
0.38
자율성 — 초기 설정을 벗어나 실제 측정 시작
지표판은 표 파일→HTML로 그리기만 함(git 안 건드림) · 데이터 줄면 거부·NA 보존·중간에 깨지지 않게 통째 교체하는 안전장치 내장 · 7일 낡음 감지
Yearly Re-measurement
1년의 재측정 — 한 해 동안의 변화(delta)
Q2의 두 번째 마일스톤이 만든D365 1년 결산 리포트는 D365 실행 구간 전체를같은 지표판 도구로 다시 측정한 변화량이다 — '좋아진 것 같다'가 아니라 숫자로 보여준다. 게다가 그 숫자가 무엇을못말하는지('숫자가 말해주지 못하는 것')까지 같은 페이지에 정직하게 남겼다.
항목
시작
최신
Δ
재현 일치 %
100.0
100.0
0.0
friction
22
23
+1
강제 관문 수
5
5
0
probe_pass
8
9
+1
rules_n
91
93
+2
cost_7d
24809
28440
+3631
autonomy
NA
0.38
측정 시작
예측타당성 진단의 변화 — '표본 부족'(Q1)에서 '지표가 안 움직임'(Q2)으로. 행동 테스트→마찰 한 쌍만 이상값(표본 적어 보류). 성공으로 위장 0건
Closed Loop
v1 마찰이 v2 15일을 결정했다
'되먹임 고리(폐루프)'가 진짜 돌았다는 증거는 말이 아니라링크가 실제 파일로 연결되는가다. v2 계획의 각 주제는 v1이 실제로 부딪힌 마찰과, 그 마찰이 적힌 파일을 가리킨다 — 독립 검증이 그 링크가 진짜 증거 파일로 이어짐을 확인했다. 직감만으로 넣은 주제는 0건. 근거가 한 번뿐인 항목(T4)은 정식 채택하지 않고 보류로 남겼다(나중에 같은 논쟁을 다시 벌이지 않도록).
되먹임 고리 실증 — v2 주제가 각각 v1 마찰 파일로 연결됨. 독립 검증이 링크 실재 확인. 근거 한 번뿐이면 보류
채택한 주제 4개는 v2의마일스톤 3개(15일)로 묶었다. 초안은 이미 적대리뷰를 통과해, 파일만 있으면 통과되던test -s 방식 대신 우회 불가한 검사(HARD verify)로 잠갔다. 실행되면 그 진행은 위D365 Scoreboard가 자동으로 측정한다.
M1
예측타당성 방법론 재설계 (T2+T5)
값이 변하는 지표 중심 평가 · 데이터 축적 주기 · ρ 측정 절차 · 합성 데이터 검증 — v1의 ρ=NA 문제 해결
M2
측정 이식성 (T1)
평가의 데이터 출처를 갈아끼울 수 있게 · 시험 프로젝트에 다시 이식 — 구조뿐 아니라 측정까지 이식
M3
리뷰 수렴 효율 실험 (T3)
적대리뷰 반복 횟수를 지표로 · 첫 커밋 점검표 · 적용/미적용 비교 실험
Stage & Remaining
어디까지 도달했고, 무엇이 남았나
지금까지 — v1은60단계 전부 완주(60/60), v2는초안 완성 · 적대리뷰 통과까지 왔다. v2는 아직 실행 전이다 — 되먹임 고리의 다음 한 바퀴가 곧 v2 실행이다. 도달한 것과 남은 것을 부풀리지 않고 정직하게 나눈다.
v1 완주 + v2 초안까지 도달. v2 실행은 다음 한 바퀴. ρ 측정 불가·문자열 검색 한계는 숨기지 않고 남은 과제로 명시
01
완료 = 파일 60개가 아니라 되먹임 고리가 닫혔는가
양이 아니라 '마찰이 다음 계획을 실제로 결정했는가'로 완료를 판정
02
검사(verify)는 느슨해지지 않고 강해지기만 한다
독립 재검증이 '파일만 있으면 통과'하던 허점을 발견 → 핵심 문구 2개 확인으로 강화(우회 아님)
03
측정 못 하면 NA, 빠진 데이터는 빠졌다고
ρ 이상값은 보류·44주치 빠짐 명시 — 가짜 성공으로 위장 0건
04
진짜 관문은 AI가 건드릴 수 없는 바깥에 있다
문자열 검색은 1차 거름망일 뿐, 뜻의 검증을 강제하는 건 다른 모델의 적대리뷰
"완료는 파일 60개가 아니라, 되먹임 고리가 닫혔는가다."
2일차에 진짜로 남은 것도 코드가 아니라판단을 규칙으로 굳힌 것이었다. 다음 분기에 무엇을 넣을지, 어떤 검사가 편법으로 뚫릴 수 있는지, 어떤 마찰이 v2를 결정하는지 — 결국 사람의 판단이 병목이었다. 그 판단을상태 기계 · 관문 · 적대리뷰로 굳혀, 다음 주기가 그대로 이어받게 만들었다. 1일차가 '판단을 인프라로 바꾸기'였다면, 2일차는'그 인프라가 1년치를 실행해낼 수 있는가'에 대한 실증이다.