Fable Week - 2 Day · d365-runner · 2026-07-03

1년 로드맵 60단계,
한 세션에 완주

결과부터. 1일차가 남긴 D365 로드맵(60 작업 단계 = 4분기 × 3마일스톤 × 5일)d365-runner16시간 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년치를 하루에 실행할 수 있었다.

← Fable Week - 1 Day · 모델이 바뀌어도 하네스는 남는가
60/60
Verify-Gated Steps
16시간 13분
Wall Clock · 62 Commits
131
적대리뷰 실행
15
v2 로드맵 확정
무엇이 개선됐나 — 개선 delta 전체

이 세션이 하네스에 남긴 변화 전부다. 왼쪽이 실행 전, 오른쪽이 실행 후 — 각 행은 docs/d365/의 reports·evidence·스크립트로 추적된다. "좋아졌다"가 아니라 축별 before → after로 적는다. 못 잰 것은 NA로 남긴다(fail-loud).

실행 전실행 후근거 산출물
agent 행동 probe8 PASS9 PASS · 확장 10종 선정 + gold labelq3m2-agent-selection · fp-audit
autonomy(자율성) 축NA — 축 자체가 없음0.38 측정 개시 · 무인 완료율 파이프라인q3m3-autonomy-schema · q4m1
self-improve 회귀 차단없음probe 게이트 신설 — 차단 1건 exit 2 실증self-improve-probe-gate.sh
비용 거버넌스미추적cost_7d 24.8k→28.4k 경고라인 감지 · 라우팅 절감 미실현 정직 기록q4m3-cost-baseline
예측타당성 ρ개념만결정론 산출기 + ρ≥0.5 게이팅 원칙 · 판정은 NA(표본 8<12)d365-rho.sh · q1m1-validity
rule 신진대사감(느낌)그래프 실측 — rules 94 · 참조엣지 70 · orphan 25(26.6%) · archive 0(cross-batch)d365-rule-graph.sh · q1m2
하네스 공개 계기없음D365 Scoreboard + 연간 리포트 자동발행(tsv→HTML)d365-dashboard · yearly-report
이식성가설substrate 이식기 + 조건부 GO(구조 GO · 측정은 재설계 F1~F6)substrate-install.sh · q2m1
차년 계획없음v2 15일 확정 — 마찰 근거링크 · HARD verify · 적대리뷰 통과v2/plan.draft.json · q2m3
game-vector 봉쇄verify 문자열매칭 은폐 가능(self-audit 발견)delta-guard 신설 — negative fixture exit 2 실증d365-delta-guard.sh
부수 산출물 — 신규 스크립트 16 · reports 35 · evidence 23 디렉토리 · 분기 게이트(revision_log) 4/4 · replay 정합 100% 유지
어떻게 개선했나 — 분기별 실작업

60단계는 4분기로 나뉘고, 각 분기는 이전 분기의 실측 마찰이 결정했다. 분기 경계마다 게이트가 재계획 근거(revision_log)를 요구한다 — 근거 없이는 다음 분기의 provisional이 해제되지 않는다. 4개 게이트 전부 통과. 아래는 분기별로 실제 한 일이다.

Q3-2026 전환 흡수 baseline·재측정 delta 0 agent probe 확장 autonomy 축 신설 M1·M2·M3 15/15 Q4-2026 자동화 심화 무인 완료율 실측 회귀차단 게이트 비용 거버넌스 M1·M2·M3 15/15 Q1-2027 측정 인프라 예측타당성 ρ rule 관계그래프 Scoreboard 발행 M1·M2·M3 15/15 Q2-2027 확장 + 결산 이식성 조건부 GO 1년 재측정 delta v2 로드맵 확정 M1·M2·M3 15/15 게이트① 게이트② 게이트③ 게이트④ 분기 게이트 = 재계획 근거(revision_log) 없이는 다음 분기 provisional 해제 불가 4/4 게이트 통과 · revision_log 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로 잠금
게이트④ — v1 결산: 60/60 · 분기 게이트 4/4 · reports 35 · evidence 23 · 공개 계기 2 · 폐루프 1주기 완성
어떻게 실행됐나 — 1일차 규율 × 12, 상태머신으로

1일차의 규율(판단 → 결정화 → 적대검증 → 재측정)은 5일 스프린트였다. 2일차는 같은 사이클을 60단계로 확장하되, 핵심은 분량이 아니라 상태의 영속성 — 진행 상태(state.json)가 정본이 되어 러너가 언제 호출돼도 중단 지점부터 이어간다. 계획이 "문서"가 아니라 "다시 시작 가능한 상태 기계"였기에 1년치가 한 세션에 들어갔다.

1일차 — 5일 스프린트 D1 컨텍스트 · D2 검증자산 · D3 행동 eval D4 표면 · D5 전환 리허설 판단 → 결정화 → 적대검증 → 재측정 같은 규율 × 12 2일차 — D365 60단계 4분기 × 3마일스톤 × 5일 = 60 Q3 · Q4 · Q1 · Q2 단계마다 동일 사이클 반복 다리 = 상태 영속성 (state.json 정본) 러너가 언제 호출돼도 중단 지점부터 이어감 계획 = 문서가 아니라 "다시 시작 가능한 상태 기계"
1일차의 5일 규율 → 상태 영속성을 다리로 D365 60단계로 확장. 확장의 본질은 분량이 아니라 재개 가능성

"60/60"이 선언이 아닌 이유 — 각 단계의 done은 3중 강제를 통과한 상태 전이다. 독립 재검증(별도 컨텍스트의 subagent)이 exit code로 재현 확인: ① 순서를 건너뛰면 exit 2, ② verify가 실패하면 완료 차단(exit 2), ③ verify 명령은 plan.json이 git HEAD와 일치할 때만 실행 (변조된 verify는 커밋 = 적대리뷰를 거쳐야 실행 가능).

complete 단계 완료 요청 ① 순서 검사 current==첫 미완료? done==순차 prefix? ② provenance plan == git HEAD? 변조 verify 차단 ③ verify 재실행 전 명령 exit 0? 증거 없으면 불가 done · 다음 단계로 전부 통과할 때만 어느 하나라도 실패 → exit 2 (완료 차단 · 증거 없이 done 불가) 실측 재현: faked verify → exit 2 순서 위반 → exit 2 state 수기편집 → exit 2
complete는 순서·provenance·verify 3중 게이트를 전부 통과해야 done — 독립 subagent가 exit code로 재현 확인(anti-Goodhart 핵심)
교차모델 적대리뷰가 실제로 잡은 것

매 push는 Codex(교차모델)의 독립 적대리뷰를 통과해야 landing된다. 이 세션에서 리뷰는 131회 실행됐고, 초반엔 실제 결함(RCE성 경로 탈출·크래시·인덱스 오염)을 잡았고, 후반엔 grep의 의미검증 천장(정규식 형식)으로 수렴했다. "좋아진 것 같다"가 아니라 재현 → 근본 수정 → 재현 검증으로만 통과시킨 이력이다.

CRITICAL 잔존 시 반복 — 수렴(NO_CRITICAL) 또는 정직한 grep 천장 자인까지 push commit landing 게이트가 가로챔 Codex 리뷰 독립 · 교차모델 CRITICAL/HIGH 탐지 근본 수정 숨김/우회 금지 재현 픽스처로 실증 재검증 → 재push exit code 확인 landing까지 131회 실행 실제 결함 → 전부 근본 수정
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.jsonverify 전부 test -s(파일 존재 = Goodhart)15일 전부 content/schema HARD 검사
v1 plan.json33일이 test -s만 — touch-gameable2-마커 grep -qF + 33일 재verify PASS
D365 Scoreboard — 하네스가 자기를 측정한다

Q1.M3이 발행한 D365 Scoreboardweekly-scoreboard.tsv(8개 시점 append-only)에서 자동 렌더되는 공개 계기다. 데이터가 7일 넘게 낡으면 스스로 STALE 경고를 띄우고(fail-loud), NA는 가짜 값으로 대체하지 않는다. 아래는 최신 스냅샷(2026-07-03T03:34:19Z) — v2가 실행되면 그 진행도 이 계기가 그대로 측정한다.

scoreboard.tsv 주간 지표 8시점 d365-dashboard.html D365 Scoreboard · stale 7일 감지(fail-loud) d365-yearly-report.html 1년의 재측정 — 연간 delta · 예측타당성 진단 substrate-install.sh 최소 substrate 이식 · 멱등 · 비파괴 · 심링크 안전 v2 plan.draft.json 차년 로드맵 15일 · HARD verify · 적대리뷰 반영 reports 35 · evidence 23 · 스크립트 16 · 공개 페이지 2 — 전부 결정론(git 미접촉 렌더)
실행 산출물 지도 — Scoreboard·연간 리포트는 tsv에서 자동 렌더, 이식기·v2는 다음 주기 자산. 부피가 아니라 작동하는 계기
지표현재값의미
replay 정합100.0 %동일 입력 재실행 = 동일 결과(결정론)
conf_enf (강제 게이트)5실제 exit 2 로 차단하는 게이트 수
probe_pass9agent 행동 probe 통과
dead hook0.0 %발동 안 되는(죽은) hook 비율
rules_n93활성 rule 수(부피 아닌 관리 대상)
commits_7d235최근 7일 커밋
cost_7d28440최근 7일 토큰 비용(경고라인 도달)
autonomy0.38자율성 축 — 부트스트랩 벗어나 실측 개시
Scoreboard는 tsv→HTML 순수 렌더(git 미접촉) · 크기감소 거부·NA 보존·원자 교체 guard 내장 · stale 7일 감지
1년의 재측정 — 연간 delta

Q2.M2가 발행한 D365 연간 리포트는 D365 실행 구간 전체를 동일 scoreboard 계기로 재측정한 delta다 — "좋아진 것 같다"가 아니라 숫자로. 그리고 그 숫자가 무엇을 말하는지("숫자가 못 말하는 것")도 같은 페이지에 정직하게 남긴다.

시작최신Δ
replay 정합 %100.0100.00.0
friction2223+1
conf_enf (강제 게이트)550
probe_pass89+1
rules_n9193+2
cost_7d2480928440+3631
autonomyNA0.38측정개시
Q1 진단 — ρ = NA "표본이 8뿐(<12) → 판정 보류" 표본 부족이 원인이라고 봤다 MIN_N=12 미달 재검 Q2 재검 — 여전히 NA/PERVERSE MIN_N=2로 낮춰도 판정 불가 원인이 바뀌었다 → 지표 분산 부재 replay·conf_enf 상수 → 분산 0 → 상관 정의불가 교훈 — 예측타당성은 지표가 움직여야 잴 수 있다. 안정된 하네스는 변화가 없어 상관을 못 잰다
예측타당성 진단의 진화 — "표본부족"(Q1)에서 "분산부재"(Q2)로. probe_pass→friction 한 쌍만 PERVERSE(소표본 보류). 성공으로 위장 0건
v1 마찰이 v2 15일을 결정했다

폐루프의 증명은 서술이 아니라 링크가 resolve되는가다. v2 로드맵의 테마는 각각 v1이 실제로 부딪힌 마찰과, 그 마찰이 기록된 파일을 가리킨다 — 독립 재검증이 링크가 실제 evidence로 resolve됨을 확인했다. 직감으로 넣은 테마는 0건. 단발 근거(T4)는 승격하지 않고 보류로 기록했다(재litigate 방지).

v1 마찰 (실측) v2 테마 (결정됨) ρ=NA — Q1·Q2 두 분기 예측타당성 측정 실패 q2m2-trend-analysis.md T2 예측타당성 방법론 재설계 1순위 · v2 M1 파일럿 eval 전부 NA — 개인 데이터 결합 q2m1-portability-friction.md (F1~F3) T1 측정 이식성 (로직↔대상 분리) 1순위 · v2 M2 52주 중 44주 결측 — 표본 부족 Q2.M2.D1/yearly-data.tsv T5 데이터 축적 주기 보장 2순위 · v2 M1 통합 Scoreboard 9 · 설치기 5 fix 커밋 (적대리뷰 반복) friction·cost 상승과 상관 가설 T3 리뷰 수렴 효율 (라운드 지표화) 2순위 · v2 M3 실험 단일 라이터 전제 (F5, 단발 근거) cross-batch 미충족 T4 다중 라이터 — 보류(승격 안 함) 조직 실측 후 재평가 직감 테마 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)
라운드 수 지표화 · 첫 커밋 체크리스트 · 적용/미적용 비교 실험
어디까지 도달했고, 무엇이 남았나

도달 — v1 완주(60/60) + v2 초안·적대리뷰 통과. v2는 아직 실행되지 않았다 — 폐루프의 다음 주기가 v2 실행이다. 도달한 것과 남은 것을 정직하게 나눈다(fail-loud).

✓ 도달 — v1 완주 60/60 · 게이트 4/4 Scoreboard·리포트·이식기 공개 독립 재검증 통과(약점 근본수정) ◐ 도달 — v2 초안 15일 상세(HARD verify) 적대리뷰 반영 완료 아직 실행 전 ○ 남음 — 다음 주기 v2 실행(예측타당성·이식성) ρ 측정(표본·분산 확보 시) 조직 다중라이터 실측(T4) 정직한 한계 — ρ는 표본 8<12 + 분산부재로 여전히 측정불가(v2 M1 과제) grep verify는 스푸프 천장 존재 — 진짜 의미검증은 적대리뷰층(가짜 데이터 0, NA 유지)
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년을 실행할 수 있는가"의 실증이다.