model-release-upgrade · claude-fable-5-1 · 2026-09-02

Fable 5.1 이 자기 하네스를
다시 읽고 고친 기록

신규 모델이 출시되면 그 모델이 직접 스킬·에이전트·절차서의 낡은 가정을 걷어내는 스킬, model-release-upgrade 의 첫 실행 결산이다. 3개월 사용 실적으로 고른 40개 항목을 fresh 워커가 편집했고, 결정론 재측정과 적대 반박으로 검증했다.

P0 → P6, 한 번의 패스

기준선 커밋 2873b3f45(05:29) 에서 결산 커밋 f032fbc3b(07:00) 까지 91분. 리드 세션은 Fable 5.1 이고, 항목마다 같은 모델의 fresh 워커를 띄워 편집시킨 뒤 리드가 커밋했다.

40대상 항목
41fresh 워커
39항목 커밋
195가정 카드
92결정론 이식
47사전등록
S3 stable재측정
model-release-upgrade — 7단계 · 리드 1 + 워커 41 LEAD · Fable 5.1 세션 · 2026-09-02 05:29 → 07:00 P0 감지 SessionStart 훅 P1 기준선 probe·replay·rules·HEAD P2 대상 90일 사용 조사 → 40 P3 가정 카드 195장 P4 편집 fresh 워커 41기 P5 검증 S3 · S4 · Codex P6 결산 리포트 · 원장 close WORKER · 항목당 fresh 스폰 · model: fable (1M) · 리드 서술 미주입 카드 verdict 축소·이식 verify rc prereg 리드 커밋 × 41 (병렬 wave) — 워커 완료 알림 뒤에 커밋 P5 가 regressed 면 항목 커밋을 git revert · stable 일 때만 P6 — 이번 패스: S3 3회(1차 regressed → 수리 → 2·3차 stable)
P4 워커 루프가 패스의 본체다. 워커는 리드의 사유를 받지 않고 카드·파일·기준만 받는다(blind). 커밋은 리드만 하고, prereg id 없는 커밋은 p4-commit 이 거부한다.
3개월 사용 실적에서 고른 40개

2026-06-02 ~ 09-02 세션 트랜스크립트를 분류해 스킬·에이전트 사용 실적을 셌다. 직접 쓰는 것, 그것이 스폰하는 것, 그 에이전트가 읽는 절차서까지 세 층을 한 패스에 넣었다.

21,139분류된 세션
317대화형
45,488서브에이전트 트랜스크립트
64Read 로 소비된 스킬
Tier 1

직접 사용 최상위

대화형 핵심(team · work-recheck · init-project · autoresearch), 무인 자동 루프(self-improve · loopy-era · cc-sync · auto-issue), 산출물 직결(hugh-viz · product-marketing · threads-post · higgsfield · product-planning · plan-design · harness-evolve). 무인 루프는 결함이 복리로 쌓인다.

15
항목
3,382
self-improve 세션
Tier 2

Tier 1 이 스폰하는 에이전트

planner · executor · QA 5종(qa-scenario-writer · qa-functional-runner · web-qa-tester · webapp-test-runner · qa-orchestrator) · bug-fixer · code-reviewer · harsh-critic · exhaustive-auditor · self-improve-analyst · trend-harvester · 기획 체인 8종. 새 모델을 상속(inherit)하는 핀은 0 이었다.

25
항목
1,074
analyst 스폰
Tier 3

에이전트가 Read 로 읽는 절차서

self-improve · loopy-era-trend-harvester · exhaustive-audit · harsh-critic · qa-functional · qa-scenario-gen · webapp-testing 의 PROCEDURE. 스폰 로그에는 안 보이지만 워커가 매 회 읽는다. 짝 에이전트 항목에 병합해 편집했다.

7
절차서
1,166
PROCEDURE 읽힘
제외

스폰 0 에이전트 41종은 개선이 아니라 은퇴 대상으로 분리했다(다음 섹션). 내장 명령·내장 에이전트(general-purpose · Explore · Plan)는 편집 불가, 측정기 3종(conformance · autonomy · integrity)은 대상이 아니라 패스의 계기, 프로젝트 스코프 에이전트는 user-scope 하네스 밖.

41종 은퇴, 그리고 되살아나지 않게

스폰 0 에이전트 41종을 비파괴로 옮겼다. 문제는 삭제가 아니라 전파였다. 동기화가 additive 라 정본에서 지운 파일이 미러에 남았다가 다음 apply 에서 부활하고, 다른 머신에서는 애초에 지워지지 않았다. 선언 정본(manifest)을 두고 양방향 스크립트가 그것을 읽게 했다.

retired-manifest — 삭제 선언이 양방향 동기화를 통과한다 retired-manifest.txt repo 정본 · 41 slug · append-only · union 병합만 LIVE ~/.claude/agents 78 → 37 이 머신의 실행 정본 MIRROR cc-sync/agents 90 → 49 git 백업 · 타 머신 배포원 sync.sh · 잔존 사본 이동 · --exclude · 좀비 제거 · manifest union apply.sh · 복사 직후 은퇴 slug 프루닝 · strict slug · no-clobber archive/retired-2026-09-02/ 41 파일 비파괴 보관 · 라이브·미러 동일 OTHER MACHINE · apply.sh 같은 manifest 로 프루닝 → retired-on-apply/ stale 머신의 낡은 manifest 는 선언을 지우지 못한다 (union) 은퇴하려면 manifest 에 한 줄 append — 삭제 명령은 어디에도 없다 검증: sync 픽스처(이동·제거·union·무효 slug 거부) PASS · apply 프루닝 픽스처 PASS·멱등 · mirror-zombie-lint CLEAN
rules-inactive 에 있던 은퇴 매니페스트 패턴을 agents 로 일반화했다. 보류 12종은 타 머신이 11일 전에 만든 에이전트라 이번 은퇴에서 뺐고, 은퇴 에이전트를 스폰하는 휴면 스킬 12곳은 별도 결정으로 남겼다.
기준선과 종료 상태가 같은 숫자를 낸다

P1 에서 고정한 결정론 지표를 P5 에서 같은 스크립트로 다시 쟀다. 판정은 스크립트의 exit code 다. regressed 면 항목 커밋을 되돌리고, stable 일 때만 P6 로 간다.

3S3 실행
1regressed (1차)
2stable (2·3차)
e8f35f46attestation state_hash
지표기준선 · 2873b3f45종료 · 6546b08bc델타
probe pass / fail6 / 36 / 3불변
replay_rate98.698.60.0
rules 개수 / 바이트104 / 333,801104 / 337,606+3,805 B — 같은 시간 trend-harvester cron 이 append, 패스 밖
대상 파일 총 바이트907,886941,457+33,571 B — 산문 −47,922 · 스크립트 +81,493 (다음 섹션)
잔존 FAIL probereplay-corpus-100 · hook-self-test · conformance-zero-gap동일 3건기준선부터
측정 갭conformance(interactive scope) · autonomy-eval · akm-eval 미실행정직 고지
1차 regressed 의 원인

replay 69 → 67. ① 워커가 qa-functional PROCEDURE 에 넣은 close --all 리터럴을 skill-security-scan 이 금지 명령으로 오탐 → 관례 표기 close [ALL] 로 수정(f98f87ea1) ② push-gate 매처 픽스처는 기준선부터 FAIL 이라 패스 밖. ①을 고치자 2·3차가 기준선과 같은 98.6 을 냈다.

줄어든 것은 서술, 늘어난 것은 exit code

총 바이트는 늘었다. 그러나 늘어난 곳은 판단을 스크립트로 이식한 항목이고, 줄어든 곳은 반복 서술·승격 서사·모델 리터럴을 걷어낸 절차서다.

항목별 바이트 수지 — 감소·증가 상위 8건씩 (41행 중) 산문이 줄었다 · 21항목 · −47,922 B 스크립트가 늘었다 · 20항목 · +81,493 B loopy-era-trend-harvester −12,357 self-improve −7,390 product-analyst −5,005 ux-researcher −4,663 web-qa-tester −3,655 quality-strategist −3,160 product-manager −2,266 trend-harvester −2,078 hugh-viz +17,221 check-page.py 신설 product-planning +16,636 check-planning-docs.py higgsfield-generate +13,598 check-result.py · check-catalog.py plan-design +5,308 auto-issue +5,111 · acceptance_contract.py product-marketing +3,900 · check-context-doc.sh cc-sync +3,189 exhaustive-auditor +3,187 총합 907,886 → 941,457 B (+33,571) — 새 스크립트 7종과 픽스처가 산문 감소분을 넘어섰다 파일 단위: self-improve PROCEDURE −23.0% · threads-post SKILL −28.2% · ux-researcher −32.8% · loopy-era PROCEDURE −11.5%
막대 길이는 바이트 절대값(260px = 17,221 B). 감소 상위는 전부 PROCEDURE·에이전트 정의의 서술 축소이고, 증가 상위 3건은 전부 exit code 스크립트 신설이다.
판단 서술 92건이 exit code 가 됐다

새 모델이 절차서를 읽으며 "이건 사람이 판단하라고 써 둔 문장인데 스크립트가 판정할 수 있다"고 본 곳을 이식했다. 새 표면은 최소로 — 이미 있는 강제자(hook·verify 스크립트)를 가리키는 포인터로 대체한 경우가 더 많다.

before — 산문 판단

SOFT · 읽는 사람이 판정

"압축이 지우고, 모델이 건너뛰는 문장"

  • "개선됨 → keep" (autoresearch 루프)
  • "time_budget×2 초과 시 kill"
  • "스크린샷 정상 · 콘솔 에러 없으면 PASS"
  • "문서가 완성됐는지 확인한다"
  • 승격 서사 블록 (2026-07-28 ①②) 반복
  • "200K 즉사" 모델 산문 3곳 복제
after — exit code

HARD · 스크립트가 판정

"되돌리면 FAIL 하는지 픽스처로 확인한 것만"

  • exit(0 if n<p …) direction 인지 + 줄 수 tie-break
  • perl -e 'alarm shift; exec @ARGV' rc 142 실측
  • ERR==0 ∧ OVER==false ∧ [ -s check.png ]
  • check-context-doc.sh → exit 0/2
  • PROCEDURE 헤더가 SSOT — 1문장 포인터
  • agent-model-1m-gate.sh 포인터 1개(신규 표면 0)
신규 스크립트스킬판정 대상exit
scripts/check-page.pyhugh-viz섹션당 시각화 · SVG 규격(var/font-size/rx/marker) · 태그 균형 · i18n leaf · 금지 API · THEME 정합 — 이 페이지도 이 검사기를 통과했다0 / 2
scripts/check-context-doc.shproduct-marketing필수 12섹션 · 플레이스홀더 8종 잔존 · 버전↔체인지로그 정합0 / 2
scripts/check-planning-docs.pyproduct-planningStage 1~4 완료(planning-meta · 필수 섹션 번호 · 불침투 · 고정 토큰 · 3.5 위임) + --selftest0 / 2 / 3
scripts/acceptance_contract.pyauto-issue착수 계약 check(출처 태그 · AC→TC · 4축 · plan AC 집합 동일성) / restore(이슈 코멘트에서 승계) — 픽스처 12케이스0 / 2 / 3
verify/procedure-contract.shloopy-era-trend-harvesterPROCEDURE 구조 계약 — Phase 헤더·5축·enum·WIRE 6단계·헬퍼 14종·rule-budget-gate 배선0 / 2
scripts/check-result.pyhiggsfield-generate생성 결과(status · result_url · HTTP · content-type · 바이트) — step 5 완료 조건0 / 2 / 3
scripts/check-catalog.pyhiggsfield-generate인용 job_type 존재 · 별칭 · 드리프트0 / 2 / 3
라우팅 분기self-improve · harness-evolvePhase 0 / S2 에 model_release pending 술어 → Skill(model-release-upgrade) — 다음 릴리즈부터 감지가 이 스킬을 부른다배선
반박이 두 번 성립했고, 두 번 고쳤다

harsh-critic 에게 리드의 사유 없이 diff 와 기준만 주고 "계약이 보존됐다는 주장을 반박하라"고 했다. 반박이 없었다면 "계약 보존"이 거짓으로 착지할 뻔한 결함 둘이 나왔다.

R1
성립 — 게이트가 빠진 채 계약이 두 값으로 갈렸다

④ SubagentStop 절차서 게이트(promoted-agent-skill-read-gate)가 08-07 등록부 사고로 사라진 상태에서, 워커 3파일은 "미등록 → SOFT" 로 강등하고 4파일은 HARD 로 남겨 같은 계약이 두 값이 됐다. ① 1M 게이트의 fable 예외 근거를 harness-evolve 서술이 부정하고 디스크 증거가 없었다. → SubagentStop 재등록(59→60 훅) · 3파일 HARD 정렬 · 증거 파일 착지(fable 스폰 24기 중 22기 200K 초과, 최대 507K).

R2
성립 — 수리가 짝을 빠뜨렸다

④ trend-harvester · self-improve-analyst 의 "미등록(SOFT)" 4줄이 R1 수리 범위 밖에 남았다. ① 은 증거 JSON 을 독립 재계산해 3/3 일치로 해소. → 2파일 정렬, 계약을 "HARD + 등록 확인 명령(grep -c promoted-agent-skill-read-gate ~/.claude/settings.json ≥ 1)" 단일값으로.

R3
불성립 — 결정론 grep 으로 대체 (정직 고지)

에이전트 전체에서 미등록/SOFT 잔존 0, 등록 grep promoted=1 · 1m=1. 적대 재스폰은 하지 않았다 — 판정 근거가 결정론 술어로 환원됐기 때문이지만, 3라운드가 LLM 반박이 아니라는 점은 기록으로 남긴다.

패스가 드러낸 하네스 결함증상수리커밋
agent-model-1m-gate 가 fable 별칭 차단harness-evolve 가 model:"fable" 스폰을 지시하는데 게이트가 200K 별칭으로 취급 — 이 패스의 워커 스폰 자체가 불가별칭 예외 + 실측 증거 파일(24기 컨텍스트 분포)00f254b41
agent-model-1m-gate PreToolUse 미등록08-08 자동 동기화 커밋에서 등록 소실 — 08-07 이후 발화 0(워커 2기 독립 보고)Agent|Task 매처로 재등록(hook-run.sh 래퍼 경유)721ccb899
promoted-agent-skill-read-gate SubagentStop 미등록같은 08-07 사고 — 절차서 미독 워커가 통과재등록 59→60 훅 + 의존 에이전트 5파일 HARD 정렬6546b08bc · f39e9ce97
auto-adversarial-review --files 가 미추적 파일 diff 불가Codex 마커 INCOMPLETE → work-recheck attestation 이 self_review 로 거부(90일 최대 실패 클래스의 한 원인)git diff --no-index -- /dev/null 추가 → FINDINGS 실측00f254b41
워커 유발: qa-functional PROCEDURE CRITICALenv 파일을 심링크·소유 무검사로 source · SKIP 만으로 PASS · dev.log 임의 URLQA_TMP 소유 가드 · -f ∧ !-L ∧ -O · localhost 정규식 · PASS≥1 · scope=full EXEC==PLAN(픽스처 5)762173b8d
워커 유발: skill-security-scan 오탐절차서의 close --all 리터럴이 금지 명령 매치 → replay 69→67관례 표기 close [ALL]f98f87ea1
예측을 먼저 적고, 결과는 그 예측에만 대조했다

항목마다 워커가 편집 전에 "무엇이 줄고 무엇이 남는가"를 원장에 고정했다. 사후 합리화가 불가능한 구조라 refuted 가 10건 나왔고, 그것이 이 원장의 존재 의의다.

사전등록 47건 — 예측 대비 판정 (2026-09-02) confirmed 34 · 72% refuted 10 inconclusive 2 open 1 refuted = 워커 자기 바이트 예측 미달 + critic 3회 복원(자기 예측 3회 미달 → 원본 복원) inconclusive = auto-issue · plan-design 바이트 예측 미달 · open = work-recheck 30일 창(미도래) 검증 4겹 — 입력이 서로 독립 S3 결정론 재측정 같은 스크립트 ×3 · exit code regressed → git revert S4 적대 반박 harsh-critic blind · 3라운드 · 2회 성립 성립 → 수리 → 재라운드 Codex 교차 리뷰 CRITICAL 1 → 0 · HIGH 3 잔존 마커 180분 신선도 · 미추적 diff 포함 work-recheck blind 리뷰어 ×3 PASS + attestation state_hash e8f35f46 · 23 paths
네 층 중 어느 하나도 리드나 워커의 자기채점이 아니다. S3 는 스크립트, S4 는 사유를 받지 않은 비평자, Codex 는 다른 모델, work-recheck 는 그 셋의 마커를 요구하는 게이트다.
고치지 않고 기록으로 남긴 것

수리하지 않은 것은 못 본 것이 아니라 이 패스의 범위 밖이라 판정한 것이다. 각 항목은 다음 패스 또는 별도 결정의 입력으로 남는다.

잔여내용분류
Codex HIGH 3qa-functional PROCEDURE — 호출자 제공 BASE_URL 미제한(SSRF 경계는 dev.log 자동 추출만 로컬 제한) · procedure-contract.sh 헤더 첫 등장만 검사(substring) · Phase 4 가 PASS≥1 만 요구(비-full 스코프에서 필수 시나리오 SKIP 가능)후속 항목
push-gate replay 픽스처push-gate-matcher-prefix-bypass 가 기준선부터 FAIL — 범용 마커를 제거해도 rc=0, 게이트 매처 결함 의심기존 결함
$HOME git 저장소.claude/ 154파일을 추적 중 — 은퇴 에이전트 삭제가 D 로 표시되는 세 번째 미러 표면. apply/sync 계약 밖구조
자동 동기화 선착지06:31 cc-sync 자동 동기화가 워커 편집 중 QA 에이전트 3파일을 먼저 커밋(3ae091b40, prereg id 없음) — 규율 위반이 아니라 타이밍. 다음 패스는 sync 일시 정지타이밍
code-reviewer frontmatterrules: 키 소실 — 은퇴 rule 대상이라 소비자 0무해
휴면 스킬 정적 참조 12곳은퇴 에이전트를 스폰하는 스킬(dependency-updater · qa-cycle · team-orchestrator 등) — 재호출 시 스폰 실패. 스킬 자체 은퇴는 별도 결정보류
repo 전용 에이전트 12종타 머신이 08-22 커밋, 3개월 스폰 0 — 생성 11일차라 은퇴 제외. manifest 에 append 만 하면 은퇴된다보류
모델 핀 제안 20건(8 대상)planner · qa-scenario-writer · critic 등 opus-4-8 → Fable 5.1 상속, 기획 체인 opus-5 → fable-5-1[1m], self-improve-analyst 핀 + machinery-lint C02 동시 갱신 — 전부 페어드 A/B 조건 명시. 카드로만, 에이전트 파일 핀 26/26 불변별도 결정
다음 모델이 왔을 때 이 스킬이 하는 일

이번 패스에서 도출한 전환 체크리스트. 감지부터 결산까지 사람이 시작 명령만 내리면 되게 만들었고, 이번에 헛디딘 곳은 단계 안에 박아 두었다.

0
감지 — SessionStart 훅이 model-registry 와 다른 모델 ID 를 보면 이벤트 파일을 쓴다
state/model-release/<model>.json · self-improve Phase 0 / harness-evolve S2 가 이 스킬로 라우팅
1
기준선 — integrity · probe · rules · HEAD 를 baseline.json 에 고정
conformance / autonomy / akm 갭은 측정 불가로 명시(clean 으로 처리 금지)
2
대상 — survey-usage.sh 재실행, 90일 창, retired_candidates 검토
스폰 0 은 개선이 아니라 manifest append
3
가정 카드 — 워커가 verdict 를 채우되 obsolete 근거는 verify 명령으로
이번 195장: obsolete 55 · still 85 · still-needed 8 · unknown 47
4
편집 — fresh 워커(model: fable) · 리드가 MODEL_RELEASE_PASS 선언 · 워커 완료 알림 뒤에 p4-commit
중간 커밋은 워커 후속 편집을 놓친다(market-researcher 실측) · 플러그인은 자기 repo 커밋 + 서브모듈 포인터 · sync 일시 정지
5
검증 — p5-remeasure(S3) → harsh-critic S4 → Codex AAR
regressed 는 git revert · AAR --files 는 미추적 파일도 diff
6
결산 — p6-report → prereg close → 이벤트 handled → 핀 원복 확인 → push → 텔레그램
work-recheck 는 패스 종료 시 1회(중간 attestation 은 워커 편집으로 즉시 stale)

"하네스 개선의 병목은 모델이 아니라, 새 모델이 낡은 가정을 읽어낼 수 있게 절차를 열어 두는 것이다."