oh-my-customcode 1.1.76 → 1.1.78

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,7 +4,11 @@
4
4
 
5
5
  ## Core Rule
6
6
 
7
+ 검증 ladder: **결정론적 → cheap LLM → expensive LLM → human**. 저렴한 tier 통과 후 다음으로 진행.
8
+
9
+ <!-- DETAIL: Core Rule, original wording
7
10
  검증은 비용/속도 ladder로 구성한다: **결정론적 검사 → cheap LLM → expensive LLM → human**. 가장 저렴한 tier가 먼저 통과해야 다음 tier로 진행한다. 더 낮은 tier에서 잡을 수 있는 문제를 더 비싼 tier에 보내지 않는다.
11
+ -->
8
12
 
9
13
  ## Ladder Tiers
10
14
 
@@ -15,19 +19,30 @@
15
19
  | **3: Expensive LLM** | sonnet/opus skills (`deep-verify`, `adversarial-review`, `multi-model-verification`, `evaluator-optimizer`) | $$$ | 1-5분 | Pre-commit, PR review |
16
20
  | **4: Human** | maintainer review | time | hours-days | Final gate, contested decisions |
17
21
 
22
+ Tier 3 검증은 background agent로 실행될 수 있어 반환이 착수 신호일 뿐이다 — 통과 판정 전 실제 완료를 실측한다(R020).
23
+
24
+ <!-- DETAIL: v2.1.232 background-agent note, original wording
18
25
  > **v2.1.232+**: `/code-review`가 high·xhigh·max effort에서도 **background agent로 실행**됩니다(다른 레벨과 동일). 즉 Tier 3 검증 호출의 반환은 착수 신호이지 검증 결과가 아니므로, 다음 tier 진행이나 통과 판정 전에 background agent의 실제 완료와 결과를 실측합니다 — 구버전에서는 고effort 레벨만 전경 실행이라 "반환 = 결과"가 성립했고, 그 전제로 ladder를 진행하면 미완료 검증을 통과로 오판합니다(R020 "attempt ≠ outcome", cross-ref R010 non-teammate background 기본 실행).
26
+ -->
19
27
 
20
28
  ## Shift-left 원칙
21
29
 
30
+ 결정론적 단계가 잡을 수 있는 문제는 LLM에 보내지 않는다(예: schema 오류는 Tier 1이 차단, LLM 미전달).
31
+
32
+ <!-- DETAIL: Shift-left 원칙 examples and R013 cross-ref, original wording
22
33
  결정론적 단계가 잡을 수 있는 문제는 LLM에 보내지 않는다. LLM 검증은 ambiguous/semantic 문제에 집중한다.
23
34
 
24
35
  - **좋은 예**: JSON schema 오류 → Tier 1 hook이 차단 → LLM에 미전달
25
36
  - **나쁜 예**: 탭/스페이스 혼용 오류 → sonnet으로 전달 → 불필요한 비용 발생
26
37
 
27
38
  R013 (SHOULD-ecomode)의 출력 토큰 절약 원칙(Compact Output — 중간 단계·장황한 설명 생략)과 정합: ecomode는 출력 토큰을, R023은 검증 비용을 절약한다.
39
+ -->
28
40
 
29
41
  ## 기존 자산 매핑
30
42
 
43
+ T1: hooks, `mgr-sauron`, linters. T2: `dev-review`, `action-validator`, `pre-generation-arch-check`. T3: `deep-verify`, `adversarial-review`, `multi-model-verification`, `evaluator-optimizer`, `worker-reviewer-pipeline`. T4: maintainer review.
44
+
45
+ <!-- DETAIL: 기존 자산 매핑 table, original wording
31
46
  | Tier | 자산 | 역할 |
32
47
  |------|------|------|
33
48
  | **Tier 1** | `.claude/hooks/` (PreToolUse hooks) | 도구 호출 전 결정론적 차단 |
@@ -42,16 +57,24 @@ R013 (SHOULD-ecomode)의 출력 토큰 절약 원칙(Compact Output — 중간
42
57
  | **Tier 3** | `evaluator-optimizer` | 평가-개선 반복 루프 |
43
58
  | **Tier 3** | `worker-reviewer-pipeline` | 구현-리뷰 파이프라인 |
44
59
  | **Tier 4** | maintainer manual review | PR approval, final gate |
60
+ -->
45
61
 
46
62
  ## R021과의 관계
47
63
 
64
+ R021 (MUST-enforcement-policy)과 R023은 **직교**한다(서로 다른 차원):
65
+
66
+ <!-- DETAIL: R021과의 관계 intro, original wording
48
67
  R021 (MUST-enforcement-policy)과 R023은 **직교**한다. 두 규칙은 서로 다른 차원을 다룬다:
68
+ -->
49
69
 
50
70
  | 규칙 | 질문 | 차원 |
51
71
  |------|------|------|
52
72
  | **R021** | "어떻게 강제할 것인가?" | Hard block / Soft block / Advisory |
53
73
  | **R023** | "어떤 비용으로 검증할 것인가?" | Deterministic / Cheap LLM / Expensive LLM |
54
74
 
75
+ 같은 도구가 두 규칙에 속할 수 있다(`mgr-sauron`=R021 Advisory+R023 Tier1). R021=멈출지, R023=순서.
76
+
77
+ <!-- DETAIL: R021과의 관계 예시 목록, original wording
55
78
  같은 도구가 두 규칙에 동시에 속할 수 있다:
56
79
 
57
80
  - `mgr-sauron`: R021 관점에서 Advisory (PostToolUse hook), R023 관점에서 Tier 1 (구조 검증)
@@ -59,10 +82,15 @@ R021 (MUST-enforcement-policy)과 R023은 **직교**한다. 두 규칙은 서로
59
82
  - `.claude/hooks/` stage-blocker: R021 관점에서 Hard Block, R023 관점에서 Tier 1
60
83
 
61
84
  R021은 위반 시 어떻게 멈출지를, R023은 어떤 순서로 검증할지를 정의한다.
85
+ -->
62
86
 
63
87
  ## Fable 5 Over-Prescription Advisory (Origin: #1435)
64
88
 
89
+ Fable 5는 지시 장문화가 품질을 저하시킬 수 있다 — 신규 규칙/스킬은 간결성 우선.
90
+
91
+ <!-- DETAIL: Fable 5 Over-Prescription Advisory, original wording
65
92
  Fable 5 실행 에이전트/스킬은 지시(instruction) 장문화가 오히려 품질을 저하시킬 수 있다(too prescriptive). 신규 규칙/스킬 추가 시 간결성을 우선하고, Fable 5 실행 대상 문서의 과잉처방을 경계한다. 상세는 `guides/claude-code/16-fable5-prompting.md` 참조.
93
+ -->
66
94
 
67
95
  ## Self-Check
68
96
 
@@ -75,97 +103,183 @@ Fable 5 실행 에이전트/스킬은 지시(instruction) 장문화가 오히려
75
103
 
76
104
  ## Safety-Signal Rule Authoring — Carve-Out Pre-Check (shift-left)
77
105
 
106
+ <!-- DETAIL: Origin note
78
107
  > Origin: #1353 (인터럽트 룰 #1341의 후속 회고에서 발견된 R001 carve-out 누락) — 인터럽트 룰(R003/R020)을 작성할 때 R001 파괴적-작업 carve-out을 1차 작성에서 빠뜨렸고, Tier 3 적대적 검증이 release-blocking으로 포착해 보정했다. Tier 3가 잡았으나, 같은 결함을 Tier 1(작성 시점 결정론적 점검)로 시프트하면 비용이 낮다.
108
+ -->
79
109
 
110
+ 안전-신호 룰(인터럽트·halt·emergency-stop 등) 추가/수정 시, 작성 단계(Tier 1)에서 다음을 사전 점검한다:
111
+
112
+ <!-- DETAIL: Safety-Signal intro sentence, original wording
80
113
  런타임 안전-신호 동작을 정의하는 룰(인터럽트·취소·halt·중단·emergency-stop 등)을 추가/수정할 때, 작성 단계(Tier 1)에서 다음을 사전 점검한다 — Tier 3 적대적 검증에 의존하기 전에 (이 checklist 같은 메타-룰은 대상 아님):
114
+ -->
81
115
 
82
116
  - [ ] 이 룰이 R001 파괴적·비가역 작업(`git reset --hard`, `clean -fd`, `rm`, 터널/DNS/k8s/인프라 삭제) 컨텍스트에서도 안전한가? (fail-closed carve-out 필요 여부)
83
117
  - [ ] "진행/계속(proceed)" 류 지시의 대상이 파괴적 작업의 계속으로 오독될 여지가 없는가?
84
118
  - [ ] 안전-신호의 fail-safe 의미(emergency-halt)를 약화시키지 않는가? (stop-first ask-after 우선)
85
119
  - [ ] 기존 안전 규칙(R001/R002)과의 우선순위가 명시되어 있는가?
86
120
 
121
+ 불확실하면 carve-out을 먼저 명시하거나 Tier 3 적대적 검증 통과 후 release한다(R023 shift-left를 룰 작성 자체에 적용).
122
+
123
+ <!-- DETAIL: Safety-Signal trailing paragraph, original wording
87
124
  하나라도 불확실하면 **먼저 carve-out을 명시(Tier 1 우선 해결)**하고, 그래도 불확실하면 Tier 3 적대적 검증(`adversarial-review`, `multi-model-verification`)을 통과시킨 뒤 release한다 (ladder 순서 유지). 이는 R023 shift-left 원칙(저렴한 tier 우선)을 룰 작성 자체에 적용한 것이며, R016 룰 작성 워크플로우의 Tier-1 품질 게이트로 동작한다 (R016은 위반 후 룰 업데이트 소유, R023 carve-out은 안전-신호 룰 작성 시 사전 점검 — 직교). Closes #1353.
125
+ -->
88
126
 
89
127
  ## Deprecated-Platform-Feature Staleness Check (Origin: #1433 #3)
90
128
 
129
+ staleness 검증은 model ID/placeholder뿐 아니라 **폐기된 플랫폼 기능·절차 참조**도 스캔한다(R023 shift-left).
130
+
131
+ <!-- DETAIL: Deprecated-Platform-Feature Staleness Check paragraph, original wording
91
132
  staleness/audit 검증은 model ID·placeholder·TBD뿐 아니라 **폐기된 플랫폼 기능·설정·절차 참조**도 스캔해야 한다. 실례: CC v2.1.121에서 폐기된 `/tmp/*.sh` script bypass 절차가 9개 에이전트 본문에 잔존했으나(v1.1.0에서 제거) 감사 staleness dimension이 model-ID/placeholder에만 한정해 이를 놓쳤다. 감사·staleness 체크리스트에 "CC 특정 버전에서 폐기된 기능/설정/절차를 현행처럼 참조하는가"를 항목으로 추가한다. 이는 R023 shift-left(저렴한 결정론적 grep으로 폐기 참조 조기 탐지)와 정합한다.
133
+ -->
92
134
 
93
135
  | Anti-pattern | Required |
94
136
  |--------------|----------|
137
+ | staleness 스캔을 model ID/placeholder로만 한정 | 폐기된 플랫폼 기능/절차 참조도 grep 스캔 |
138
+
139
+ <!-- DETAIL: Deprecated-Platform-Feature anti-pattern table row, original wording
95
140
  | staleness 스캔을 model ID/placeholder/TBD로만 한정 | 폐기된 플랫폼 기능/절차 참조(deprecated CC feature/procedure)도 grep 스캔 |
141
+ -->
96
142
 
97
143
  ## Sample-Value Assembly Local Verification (Origin: #1455 #1)
98
144
 
145
+ 문자열 조립 위임 시 **순수 조립부를 Tier-1 로컬 결정론 검증으로 분리**한다 — 문법 검증만으로는 들여쓰기·형식 결함이 안 드러난다.
146
+
147
+ <!-- DETAIL: Sample-Value Assembly main paragraph, original wording
99
148
  워크플로우/스크립트 내 문자열 조립·템플릿 로직(heredoc, f-string, 다중라인 변수 삽입, 이슈 본문 조립 등)의 수정을 위임할 때, 위임 프롬프트는 **API/네트워크가 불필요한 순수 조립부를 Tier-1 로컬 결정론 검증으로 분리**하도록 명시해야 한다. 문법 검증(py_compile/YAML lint/`node --check`)은 통과해도 조립된 출력의 선행 들여쓰기·형식 결함은 드러나지 않는다 — 샘플 값(멀티라인 변수 포함)으로 출력을 실제 조립한 뒤 선행 들여쓰기·형식을 grep으로 검증해야 잡힌다.
149
+ -->
100
150
 
101
151
  | Anti-pattern | Required |
102
152
  |--------------|----------|
153
+ | "스모크 테스트=API 호출"로 협소 인식 → 순수 조립 검증을 실서버 Tier로 미룸 | 위임 첫 프롬프트부터 "샘플 값 조립 후 grep 검증" 필수 명시 |
154
+ | `textwrap.dedent(f"""...{multiline_var}...""")` 를 신뢰 | 0-indent 멀티라인 변수가 dedent를 무력화 → 리터럴 들여쓰기 잔존. concatenation 사용 |
155
+
156
+ <!-- DETAIL: Sample-Value anti-pattern table row 1, original wording
103
157
  | "스모크 테스트 = API 호출"로 협소 인식 → 키 불필요한 순수 문자열 조립 검증을 실서버 dispatch Tier로 미룸 | 위임 첫 프롬프트부터 "샘플 멀티라인 값으로 출력 실제 조립 후 선행 들여쓰기·형식 grep 검증"을 필수 항목으로 명시 |
158
+ -->
159
+
160
+ <!-- DETAIL: Sample-Value anti-pattern table row 2, original wording
104
161
  | `textwrap.dedent(f"""...{multiline_var}...""")` 를 신뢰 | 삽입 변수가 0-indent 멀티라인이면 dedent 공통 최소 들여쓰기가 0으로 계산되어 무력화 → 리터럴 들여쓰기 잔존. dedent 제거 후 명시적 문자열 concatenation 사용 |
162
+ -->
163
+
164
+ **키·해시 설계 위임서**: 완료 조건에 저장소 대표 편집 픽스처로 충돌 선확인을 포함한다(Tier 1 검증이 Tier 3 비용 절감).
105
165
 
166
+ <!-- DETAIL: 키·해시 설계 위임서, original wording
106
167
  **키·해시 설계 위임서 — 저장소 대표 편집 픽스처 선확인 (Origin: #1691 #1, v1.1.71)**: 편집·상태를 식별하는 키나 해시의 설계를 위임할 때, 완료 조건에 **이 저장소의 대표 편집 3종**(룰 노트 삽입, 카운트 범프 `115→116`, 버전 범프 `1.1.68→1.1.69`)을 픽스처로 넣어 충돌 여부를 먼저 확인하도록 명시합니다. v1.1.68에서 `<len>#<head80>#<tail40>` 키를 확정형으로 지시했다가, 120자 초과 Write에서 중간 구간만 바뀌는 동일 길이 편집(바로 그 카운트·버전 범프)이 충돌한다는 사실을 적대적 리뷰가 실증해 코드포인트 합을 추가했습니다 — 작성 단계(Tier 1)에서 대표 입력으로 검증하면 Tier 3 비용이 들지 않습니다.
168
+ -->
107
169
 
108
170
  | Anti-pattern | Required |
109
171
  |--------------|----------|
110
172
  | 키·해시 형식을 확정형으로 지시하고 충돌 사례를 열거하지 않음 | 저장소 대표 편집 3종 픽스처로 충돌 선확인을 완료 조건에 포함 |
111
173
 
174
+ <!-- DETAIL: Origin note
112
175
  Origin: #1455 #1 (Session 127 회고 찐빠 #1) — cc-release-monitor PR #1449 머지 후 workflow_dispatch 실검증에서 issue_body의 `<details>`·릴리즈 요약에 12칸 리터럴 들여쓰기 발견 → PR #1451 재작업. 첫 위임이 문법 검증만 지시하고 샘플 값 출력 조립 검증을 누락. `textwrap.dedent` + 멀티라인 변수 함정이 문법 검증만으로는 미노출. R020(문법 통과 ≠ 출력 정상)과 정합.
176
+ -->
113
177
 
178
+ **리서치 위임의 결론 수치는 표에서 재계산해 병기**: 결론 수치는 표에서 jq/awk로 재계산 후 병기하도록 완료 조건에 명시한다.
179
+
180
+ <!-- DETAIL: 리서치 위임 결론 수치 paragraph, original wording
114
181
  **리서치 위임의 결론 수치는 표에서 재계산해 병기 (Origin: #1707 #4 — v1.1.75)**: 리서치·계측 위임의 완료 조건에는 결론 문장에 등장하는 모든 수치를 산출물 자체의 표에서 jq/awk 등으로 재계산하고, 그 값을 결론 옆에 병기하도록 명시합니다. 원인은 "리서치 에이전트가 표를 먼저 쓰고 결론을 별도 산술로 작성(표에서 재계산하지 않음)"이며, 결론 문장의 합계(697)가 표(354)와 불일치한 산술 모순 사례가 실증입니다.
182
+ -->
115
183
 
116
184
  | Anti-pattern | Required |
117
185
  |--------------|----------|
118
186
  | 결론 문장의 수치를 표와 별도로 산술해 기재 | 결론 수치를 표에서 jq/awk로 재계산하고 결론 옆에 병기하도록 완료 조건에 명시 |
119
187
 
188
+ 배선: auto-dev.yaml deep-plan 스텝 (4사본), 「Delegated Verification Floor」와 동일 방식.
189
+
190
+ <!-- DETAIL: 배선 note, original wording
120
191
  배선: auto-dev.yaml deep-plan 스텝 description (4사본) — 「Delegated Verification Floor」 상한선 조항과 같은 방식입니다.
192
+ -->
121
193
 
194
+ **오케스트레이터가 전달하는 보고 수치도 재계산 의무**: 다음 위임서로 옮기기 전 재계산한다(`git diff --stat`/`grep -c` 등).
195
+
196
+ <!-- DETAIL: 오케스트레이터 재계산 의무 paragraph, original wording
122
197
  **오케스트레이터가 전달하는 에이전트 보고 수치도 재계산 의무 (Origin: #1709 찐빠 #5, v1.1.75)**: 위 조항은 리서치 에이전트 자신의 산출물 검증을 다루지만, **오케스트레이터가 한 에이전트의 보고 수치를 다음 위임서로 옮겨 적을 때도 같은 의무**가 적용됩니다 — 옮기기 전 `git diff --stat`/`grep -c` 등으로 1회 재계산한 뒤 기재합니다. v1.1.75 세션에서 문서 갱신 에이전트가 "20 new grouped rows"로 보고했으나 실제 diff는 21행이었고, 오케스트레이터가 그 수치를 검증 없이 후속 위임서에 그대로 옮겨 적어 후속 에이전트가 diff 계수로 재정정했습니다 — R016 「신설 조항의 동일 반복 self-check」의 수치 각도이기도 합니다.
198
+ -->
123
199
 
124
200
  | Anti-pattern | Required |
125
201
  |--------------|----------|
126
202
  | 에이전트 보고 수치를 재계산 없이 다음 위임서에 그대로 전달 | 옮겨 적기 전 `git diff --stat`/`grep -c` 등으로 1회 재계산 후 기재 |
127
203
 
204
+ 배선: auto-dev.yaml implement 스텝 (4사본).
205
+
206
+ <!-- DETAIL: 배선 note 2, original wording
128
207
  배선: auto-dev.yaml implement 스텝 표준 제약 블록 (4사본).
208
+ -->
129
209
 
130
210
  ## Delegated Verification Floor — CI 잡 목록에서 도출 (Origin: #1574)
131
211
 
212
+ **하한선은 CI가 실제로 돌리는 잡 전체**다 — 워크플로 YAML 잡의 로컬 대응 명령을 완료 조건에 포함한다.
213
+
214
+ <!-- DETAIL: Delegated Verification Floor lower-bound paragraph, original wording
132
215
  위임 프롬프트의 검증 항목은 "변경 파일의 영향 범위"만으로 정하면 부족하다. **하한선은 CI가 실제로 돌리는 잡 전체**다 — 워크플로 YAML의 잡 목록을 읽어 대응하는 로컬 명령(`lint` / `test` / `validate-docs` / sync 검사)을 열거하고, 그중 로컬 실행 가능한 것을 위임 완료 조건에 포함한다. 로컬에서 통과시키지 않은 CI 잡은 병합 시점에 halt로 돌아와 수정 에이전트 추가 발주를 강제한다.
216
+ -->
133
217
 
134
218
  | Anti-pattern | Required |
135
219
  |--------------|----------|
136
220
  | "변경분 영향 범위"만 보고 검증 항목을 정해 위임 → CI 전용 잡(lint 등) 누락 | 워크플로 잡 목록을 하한선으로 삼아 로컬 대응 명령을 완료 조건에 열거 |
137
221
 
222
+ **상한선**: 사전 실측 항목은 위임서에 **재실행 금지 목록**으로 열거한다(재실행 시 턴 예산 소진, R020).
223
+
224
+ <!-- DETAIL: 상한선 paragraph, original wording
138
225
  **상한선 — 오케스트레이터 사전 실측 항목은 재실행 금지 (Origin: #1655 제안 2)**: 하한선이 CI 잡 목록이라면 상한선은 "오케스트레이터가 이미 실측한 항목"이다. 검증 위임서에는 사전 실측 결과(테스트 pass/fail, lint·typecheck exit, 스크립트 exit, 미러 md5)를 **재실행 금지 목록**으로 열거하고 재실측 대상만 지정한다 — 서브에이전트가 전체 테스트를 재실행하면 턴 예산이 소진돼 판정 없이 절단된다. 실증: v1.1.61 세션 mgr-sauron 1차 위임(금지 목록 없음)은 `bun test` 재실행으로 25턴 절단, 2차 위임(금지 목록 + 15턴 내 판정 명시)은 16 tool_uses로 PASS 완주(R020 maxTurns 절단 누적 7건째). auto-dev.yaml deep-verify 스텝 description에 같은 문안이 배선돼 있다.
226
+ -->
139
227
 
228
+ <!-- DETAIL: Origin note
140
229
  Origin: #1574 (v1.1.44 세션 — 병렬 위임 3건 모두 `bun run lint`를 누락해 verify-build halt, 수정 에이전트 1회 추가 발주). 기존 `feedback_delegation_verify_scope_by_impact`("영향 범위 기준")의 하한선을 명문화한 것이다. Cross-reference: R020(완료 검증 — 선언 전 실제 게이트 통과 확인), R017(커밋 전 검증 게이트).
230
+ -->
141
231
 
142
232
  ## Conditional-Output Verification — Positive/Negative Pair Mandate (Origin: #1563 #2)
143
233
 
234
+ 조건부 출력 검증 위임 시, 완료 기준은 **양성/음성 입력을 짝으로** 지정한다 — 단일 프록시는 검증이 아니다.
235
+
236
+ <!-- DETAIL: Conditional-Output Verification main paragraph, original wording
144
237
  조건부로만 출력하는 대상(advisory 훅, 가드, 경고 emitter)의 동작을 검증하도록 위임할 때, 완료 기준은 **"출력이 나와야 하는 입력"과 "나오면 안 되는 입력"을 짝으로** 지정해야 한다. "stdout ≠ 0바이트" 같은 단일 프록시는 검증이 아니다 — 침묵이 정답인 입력에서도 통과를 요구하게 되어 기준 자체가 틀리고, 반대로 오탐(준수 턴에서 발화)을 통과시킨다.
238
+ -->
145
239
 
146
240
  | Anti-pattern | Required |
147
241
  |--------------|----------|
148
242
  | "지정 입력에서 stdout ≠ 0바이트"를 단일 완료 기준으로 위임 | 양성 케이스(발화해야 함)와 음성 케이스(침묵해야 함)를 짝으로 명시 |
149
243
 
244
+ <!-- DETAIL: Origin note
150
245
  Origin: #1563 찐빠 #2 — R007/R008 advisor 발화 검증에 단일 "0바이트 아님" 프록시를 제시했으나, advisor는 준수 턴에서 침묵하는 것이 정상 동작이라 기준이 성립하지 않았다. Cross-reference: R020(Proxy Signal vs Canonical Ground-Truth — 프록시로 상태를 특성화하지 말 것), 아래 Detection Guard Delegation Standard(positive-match vs negative-context 구분의 가드 설계 각도).
246
+ -->
247
+
248
+ **래퍼·재사용 스크립트 위임의 음성 픽스처**: 원본 제외 계열을 전부 열거하고 계열별 적용/미적용 판정 + 음성 픽스처를 요구한다.
151
249
 
250
+ <!-- DETAIL: 래퍼·재사용 스크립트 위임 paragraph, original wording
152
251
  **래퍼·재사용 스크립트 위임의 음성 픽스처 — 원본 전처리 필터 계열별 (Origin: #1688 — Iteration 4 #3)**: 기존 스크립트(훅·판정기)를 래핑하거나 그 판정을 재사용하는 스크립트를 위임할 때, 위임서는 **원본이 입력에서 제외하는 계열**(예: advisor의 `isSidechain` 레코드, `thinking` 블록, `agent_id` 세션 게이트)을 전부 열거하고 **계열별로 적용 또는 의도적 미적용을 판정해 사유를 기재**하도록 요구하며, **제외 계열마다 음성 픽스처**를 요구합니다. 양성/음성 짝이 있어도 제외 계열이 픽스처에 없으면 "1:1 재현" 주장은 검증되지 않은 것입니다 — v1.1.67에서 `scripts/count-r007-r008.sh`가 advisor의 사이드체인 필터를 누락해 사이드체인이 섞인 트랜스크립트에서 같은 턴을 이중 계상할 수 있었고, 픽스처가 전부 `isSidechain: false`라 적대적 리뷰 전까지 미탐지였습니다. 아래 Detection Guard Delegation Standard(positive/negative 문맥 구분)와 같은 계열입니다.
252
+ -->
153
253
 
154
254
  | Anti-pattern | Required |
155
255
  |--------------|----------|
156
256
  | 래퍼 스크립트 위임서에 경계 규칙만 지정하고 원본의 전처리 필터 미열거 | 원본 제외 계열 전수 열거 + 계열별 적용/미적용 판정과 사유 + 계열별 음성 픽스처 요구 |
157
257
 
258
+ **훅 옵션 검증은 합성 픽스처 + 실 트랜스크립트 1건**: 훅 옵션 변경 위임 시, 실 트랜스크립트 1건 계수 실측도 완료 조건에 포함한다.
259
+
260
+ <!-- DETAIL: 훅 옵션 검증 paragraph, original wording
158
261
  **훅 옵션 검증은 합성 픽스처 + 실 트랜스크립트 1건 (Origin: #1703 권장 2, #1704 #4 — v1.1.74)**: 트랜스크립트 블록 형상을 읽는 훅/advisor 옵션 변경을 위임할 때는, R023 양성/음성 합성 픽스처 짝 외에 이 프로젝트의 실 트랜스크립트 최소 1건에서의 계수 실측(건수만)을 완료 조건에 포함합니다. 합성 픽스처는 평문 `thinking` 텍스트로 통과했으나 실 트랜스크립트에서는 `thinking` 블록 86건 중 본문 있는 38건 가운데 announce 마커 매칭이 **0건**이었습니다(`scripts/count-r007-r008.sh --json`, env on/off 동일 결과) — 합성 픽스처만으로는 형상 불일치를 잡지 못합니다. 배선: auto-dev.yaml deep-verify 스텝 description.
262
+ -->
159
263
 
160
264
  ## Detection Guard Delegation Standard (Origin: #1438 #3)
161
265
 
266
+ 검출 가드 위임 시 positive-match와 negative-context를 구분한다(누락 시 자기모순 BLOCK).
267
+
268
+ <!-- DETAIL: Detection Guard Delegation Standard paragraph, original wording
162
269
  Tier-1 shift-left 검출 가드(예: deprecated-pattern grep 가드)의 설계·수정을 서브에이전트에 위임할 때, 위임 프롬프트는 **positive-match(genuine defect mandate — `MUST`/`MANDATORY` 인접 문맥)와 negative-context(deprecation note — "no longer"/"deprecated"/"불필요"/"폐기됨" 설명 문구)를 구분**하도록 명시해야 한다. 이를 누락하면 올바르게 수정된 파일의 폐기-설명 문구까지 과잉매칭하여 자기모순 BLOCK을 유발한다.
270
+ -->
163
271
 
164
272
  | Anti-pattern | Required |
165
273
  |--------------|----------|
274
+ | bare 패턴만 grep → "폐기됨/불필요" 설명 문구까지 오탐 | positive-match(MUST 인접) vs negative-context(deprecated 설명) 구분 기준 명시 |
275
+
276
+ <!-- DETAIL: Detection Guard anti-pattern table row, original wording
166
277
  | bare 패턴(`/tmp/*.sh` 등)만 grep하도록 위임 → 올바르게 수정된 파일의 "폐기됨/불필요" 설명 문구까지 오탐 | 위임 프롬프트에 positive-match(MUST/MANDATORY 인접) vs negative-context(deprecated/no longer/불필요 설명) 구분 기준을 명시 |
278
+ -->
167
279
 
280
+ <!-- DETAIL: Origin note
168
281
  Origin: #1438 (Session 125 회고 찐빠 #3) — deep-verify 가드 반전 위임 시 bare `/tmp/*.sh` 패턴이 올바르게 수정된 9개 파일의 "폐기됨/불필요" 설명 문구까지 오탐; mgr-sauron이 sha256 재계산으로 적발, 3-패턴(mandate/false-claim) 협소화로 정정.
282
+ -->
169
283
 
170
284
  ## Integration
171
285
 
@@ -178,11 +292,17 @@ Origin: #1438 (Session 125 회고 찐빠 #3) — deep-verify 가드 반전 위
178
292
 
179
293
  ## Workflow Prompt & Verifier Ground-Truth
180
294
 
295
+ <!-- DETAIL: Origin note
181
296
  > Origin: #1266 ③ (High) — a Workflow built the agent prompt as `await agent(prompt) + FACTS`, concatenating the guardrail fact-sheet onto the RETURN VALUE instead of the prompt. The writer never received the facts, hallucinated an in-cluster hostname (`secretary-mcp`), and the adversarial verifier couldn't catch it (the fact was in no source it had).
297
+ -->
182
298
 
183
299
  ### Prompt Completion Before Call
184
300
 
301
+ Workflow prompts MUST be assembled **before** the `agent()` call — post-call concat is a footgun.
302
+
303
+ <!-- DETAIL: Prompt Completion Before Call, original wording
185
304
  Workflow/agent prompts MUST be fully assembled into the prompt string **before** the `agent()` / Agent tool call. Post-call concatenation onto the return value is a footgun — the agent never sees the appended content.
305
+ -->
186
306
 
187
307
  | Anti-pattern | Required |
188
308
  |--------------|----------|
@@ -192,6 +312,15 @@ Workflow/agent prompts MUST be fully assembled into the prompt string **before**
192
312
 
193
313
  Before invoking a Workflow script, deterministically verify:
194
314
 
315
+ | Check | Why |
316
+ |-------|-----|
317
+ | No unresolved placeholders remain in any agent prompt string | Unfilled placeholder reaches agent verbatim → garbled task |
318
+ | Assemble-before-call (see above) | Post-call concatenation silently drops content |
319
+ | Script parses — balanced braces/quotes, valid JS | Syntax error aborts entire run after partial work |
320
+ | 셸 변수 `${...}`가 `\${...}`로 이스케이프됐는지 grep 확인 | 미이스케이프 시 JS가 표현식으로 평가 → 런타임 `ReferenceError`; `node --check`는 못 잡음 |
321
+ | `args`가 문자열/객체 방어를 거치는지 확인 | 문자열로 인코딩되면 `args.<field>` undefined로 즉시 실패 |
322
+
323
+ <!-- DETAIL: Workflow Script Sanity Check table, original wording
195
324
  | Check | Why |
196
325
  |-------|-----|
197
326
  | No unresolved placeholders (`{phase1_summary}`, `TODO`, `<...>`, `{{ }}`) remain in any agent prompt string | An unfilled placeholder reaches the agent verbatim → garbled task |
@@ -199,7 +328,11 @@ Before invoking a Workflow script, deterministically verify:
199
328
  | Script parses — balanced braces/quotes, valid JS | A syntax error aborts the entire run after partial work |
200
329
  | 프롬프트 문자열 내 셸 변수 `${...}`(`$?`, `${PIPESTATUS[0]}`, `$(...)` 등)가 `\${...}`로 이스케이프되어 있는지 사전 grep 확인 | JS 템플릿 리터럴 안의 이스케이프 안 된 셸 `${...}`를 JS가 JS 표현식으로 평가 → 런타임 `ReferenceError`(예: `PIPESTATUS is not defined`). `node --check`는 문법만 검사하여 이 런타임 오류를 못 잡으므로 별도 결정론 grep 검사가 필요함 |
201
330
  | Workflow `args`를 사용하는 스크립트가 `typeof args === 'string' ? JSON.parse(args) : args` 방어를 거친 뒤 필드에 접근하는지 확인 | 하니스가 객체 args를 문자열로 인코딩해 전달하면 `args.<field>`가 undefined가 되어 스크립트가 즉시 런타임 실패(0 agents 실행). `node --check`는 문법만 검사하므로 위 셸 `${...}` 이스케이프 항목과 동일한 런타임 계열을 잡지 못함 |
331
+ -->
332
+
333
+ Workflow 도구 견고성·안전성 CC 버전 노트(223~274)는 DETAIL 참조.
202
334
 
335
+ <!-- DETAIL: Workflow Script Sanity Check version notes (v2.1.223~274), original wording
203
336
  > **v2.1.223+**: workflow script가 동적 `import()`로 workflow 샌드박스 **밖의 코드를 실행**할 수 있던 결함이 수정되었습니다. 위 표의 체크는 프롬프트 조립·문법·런타임 계열을 다루지만 **샌드박스 탈출은 다루지 않았고**, 구버전에서는 `node --check` 통과 + 프롬프트 정상 조립 상태에서도 스크립트가 경계 밖 코드를 끌어올 수 있었습니다. 외부에서 받은 workflow script를 실행하기 전 동적 `import()` 사용 여부를 grep으로 확인합니다(Tier-1 결정론 검사).
204
337
 
205
338
  > **v2.1.259/260+**: Workflow 도구 견고성 수정 3건입니다. (259) 워크플로 실행 재개 시 직전 stop된 실행의 프로세스가 아직 종료 중이면 그 agent들이 **중복 실행**될 수 있던 결함이 수정되었습니다 — 구버전에서는 `resumeFromRunId`를 stop 직후 바로 호출하는 것이 안전하지 않았으므로, stop → 프로세스 종료 확인 → resume 순서를 지킵니다. (260) Workflow `agent({schema})`가 이제 **충족 불가능한 JSON Schema를 사전 거부**하고, 재시도 한도 초과 에러에 마지막 검증 실패 내용을 포함합니다 — 플랫폼이 스스로 수행하는 Tier-1 결정론 사전 점검이며, 위 표의 sanity-check 항목에 "충족 불가능한 schema는 어떤 agent도 실행되기 전에 거부됨"을 추가로 간주할 수 있습니다. (260) 장시간 context compaction이 진행 중인 Workflow subagent가 "stalled"로 재시작되던 결함이 수정되었습니다 — R009 Adaptive Parallel Splitting과 교차 참조: compaction 대기는 stall이 아닙니다.
@@ -209,7 +342,11 @@ Before invoking a Workflow script, deterministically verify:
209
342
  > **v2.1.269+**: `claude plugin eval`이 플러그인의 eval suite를 Claude Code 자체로 실행해 점수화·재현 가능한 결과(JSON + HTML 리포트)를 냅니다 — 이 ladder에 스킬 품질 검증을 위한 새 Tier-1/2 도구가 추가된 것입니다(cross-ref `skill-creator`, R006). `CLAUDE_CODE_WORKFLOW_MAX_CONCURRENT_AGENTS`(1~256)가 신설되어 Workflow 도구의 실행당 동시 agent 한도를 조정할 수 있게 되었습니다 — 플랫폼 상한은 이제 설정 가능하지만, 이 저장소의 R009 정책 상한(동시 5, soft 4)은 그대로 적용됩니다. `--output-format stream-json`의 `permission_denials`가 경로 스코프 deny 규칙에 걸린 Read/Edit/Write 호출도 이제 포함합니다 — 구버전 `-p` 검증 실행에서는 이런 거부가 denial 계측에서 누락됐을 수 있습니다. `bashEditDiffEnabled`가 Bash 명령이 변경한 파일의 diff를 Bash 도구 결과에 함께 실어, 셸을 통한 편집을 Tier-1 결정론적으로 사후 점검할 수 있게 합니다.
210
343
 
211
344
  > **v2.1.271/274+**: (271) `claude plugin install`/`update`에 `--accept-command <sha256>`이 추가되어, `-y`(blanket yes) 대신 이전 `--json` 실행이 표시한 명령을 정확히 그 sha256으로만 승인할 수 있습니다 — 콘텐츠 주소화된 결정론적(Tier 1) 승인이 blanket yes보다 우선됩니다. dynamic workflow가 usage limit에 도달하면 이제 agent를 드롭하는 대신 **일시정지 후 한도 리셋 시 재개**합니다(cross-ref 위 「Workflow Script Sanity Check」의 resume 관련 항목). (274) Monitor 도구 통지가 스크립트의 최종 출력과 exit을 **하나의 통지**로 묶어 전달합니다(모델 턴 절약). `CLAUDE_CODE_MCP_STARTUP_WAIT_MS`가 신설되어 첫 non-interactive 턴이 연결 중인 MCP 서버를 기다리는 시간을 제한합니다(`0`=대기 안 함) — Tier-1 검증용 `-p` 실행이 MCP 기동으로 지연되지 않아야 할 때 관련됩니다.
345
+ -->
212
346
 
347
+ Common Violation 사례(#1271/#1438/#1512)는 DETAIL 참조 — 전부 Tier-1 sanity check로 사전 포착 가능했다.
348
+
349
+ <!-- DETAIL: Common Violation examples, original wording
213
350
  #### Common Violation (#1271)
214
351
  Session 106 follow-up to #1266 ③: a Workflow authoring error recurred — the guardrail fact-sheet was concatenated onto the agent's RETURN VALUE instead of the prompt string, and a placeholder/assembly slip went uncaught because no pre-run sanity check existed. This check is the deterministic Tier-1 guard that catches such slips before the expensive run.
215
352
 
@@ -222,9 +359,14 @@ Origin: #1438 (Session 125 회고 찐빠 #2) — fix Workflow의 verify 프롬
222
359
  Origin: #1512 (v1.1.27 세션 회고 찐빠 #2) — Workflow `args`를 JSON 객체로 전달했으나 하니스가 문자열로 인코딩해 `args.paths`가 undefined → 0 agents 실행으로 즉시 런타임 실패. `typeof args === 'string' ? JSON.parse(args) : args` 방어 추가 후 재실행 성공.
223
360
 
224
361
  > **v2.1.246+**: MCP 도구 파라미터 스키마가 빈 객체(`{}`)일 때 인자가 실제 타입이 아니라 **JSON 문자열로 전달**되던 결함이 수정되었습니다. 이는 위 표의 "하니스가 객체 `args`를 문자열로 인코딩해 전달"(#1512) 버그와 **동일한 버그 클래스**가 MCP 도구 호출 경로에도 있었음을 확인시켜줍니다 — 구버전에서 스키마가 `{}`인 MCP 도구를 호출하면 인자가 문자열로 도착해 `args.<field>`가 undefined로 즉시 실패할 수 있었습니다. `typeof args === 'string' ? JSON.parse(args) : args` 방어는 Workflow 스크립트뿐 아니라 빈 스키마 MCP 도구를 감싸는 코드에도 같은 논리로 필요했다는 뜻입니다.
362
+ -->
225
363
 
226
364
  ### Verifier Ground-Truth for Cross-Cutting Facts
227
365
 
366
+ Cross-cutting facts unverifiable from primary source MUST be supplied as explicit ground-truth.
367
+
368
+ <!-- DETAIL: Verifier Ground-Truth paragraph, original wording
228
369
  Cross-cutting facts not verifiable from the primary source (external URLs, in-cluster DNS/hostnames, infra topology) MUST be supplied to the verifier as explicit ground-truth. Otherwise an adversarial verifier cannot distinguish a hallucinated value from a correct one — a verification blind spot.
370
+ -->
229
371
 
230
372
  Cross-reference: R009 (giant-prompt decomposition), `worker-reviewer-pipeline` skill.
@@ -99,6 +99,8 @@ Issue body format (matching the pattern established by issue #683):
99
99
  ## 액션 아이템
100
100
 
101
101
  - [ ] oh-my-customcode 영향도 관점에서 릴리즈 노트 검토
102
+ - [ ] 새 지식은 `guides/claude-code/15-version-compatibility.md`(+ `templates/` 미러)에 규칙별 절로 기록 (서사·근거는 가이드, 룰에 쌓지 않는다 — R016 「버전노트 보존정책」)
103
+ - [ ] 이 릴리즈가 **현재 에이전트 행동을 바꾸는 규범**이면 해당 룰에 최대 1줄만 추가 — 추가 전 `CLAUDE.md`+`.claude/rules/*.md` 주석 제외 합계가 R016 예산(140,000자)을 넘지 않는지 확인, 넘으면 다른 조항을 은퇴·DETAIL화
102
104
  - [ ] 새 Claude Code 기능이 에이전트에 영향을 주면 에이전트 정의 갱신
103
105
  - [ ] 현재 oh-my-customcode 버전과의 호환성 테스트
104
106
  - [ ] 새 기능이 관련되면 CLAUDE.md 갱신
@@ -425,6 +425,12 @@ steps:
425
425
  <path> | grep -c '^+[^+]'`) before restating it — do not relay an unverified
426
426
  agent-reported count (R023 「리서치 위임의 결론 수치는 표에서 재계산해 병기」 #1707 #4
427
427
  확장, #1709 #5).
428
+ - For `claude-code-release` issues, CC release knowledge goes to
429
+ `guides/claude-code/15-version-compatibility.md` (+ templates mirror) per rule; a rule
430
+ file gets at most ONE line of behavioral norm only when agent behavior must change.
431
+ Delegations adding visible text to `CLAUDE.md`/`.claude/rules/*.md` MUST keep the
432
+ comment-stripped total ≤140,000 chars (hard limit 150,000, validate-docs
433
+ `--programmatic-only`) — retire/DETAIL-wrap something else in-change if needed (R016 버전노트 보존정책 / 예산 게이트, #1717).
428
434
 
429
435
 
430
436
  ## Sensitive Path Handling (CC v2.1.121+)
@@ -1,9 +1,11 @@
1
1
  # Claude Code Version Compatibility
2
2
 
3
- > Updated: 2026-07-02
4
- > Source: Claude Code release notes (#967, #968, #969, #1126 auto-detected by claude-native skill, #1137, #1158, #1242, #1243, #1244, #1245, #1276, #1280)
3
+ > Updated: 2026-09-24
4
+ > Source: Claude Code release notes (#967, #968, #969, #1126 auto-detected by claude-native skill, #1137, #1158, #1242, #1243, #1244, #1245, #1276, #1280, #1713, #1714, #1716)
5
5
  >
6
- > **Note (compat 노트 이관)**: 이 파일은 v2.1.160까지의 호환성 노트를 보존합니다. v2.1.161+ 이후 CC 호환성 노트는 `.claude/rules/` 각 규칙(R001/R002/R006/R010/R012 등)에 인라인으로 축적(이관)되었으므로, 최신 compat 노트는 해당 규칙 파일을 참조하세요.
6
+ > **Note (compat 노트 이관, v1.1.9~v1.1.76)**: v2.1.161~v2.1.276 구간의 CC 호환성 노트는 `.claude/rules/` 각 규칙(R001/R002/R006/R010/R012 등)에 인라인으로 축적되어 있으며, 이 구간은 그대로 보존합니다.
7
+ >
8
+ > **Note (정책 전환, #1717 — v1.1.77+)**: 룰 코퍼스 컨텍스트 예산 초과(#1717 실측: 주석 제외 306,752자, `/memory` 150k자 한도 초과)를 계기로, v2.1.277+부터 신규 CC 버전 노트는 다시 이 가이드로 돌아옵니다. 룰 파일(`.claude/rules/*.md`)에는 현재 행동을 바꾸는 규범이 있을 때만 1줄로 남기고, CHANGELOG 인용·영향 서사·Origin 배경은 이 가이드가 전담합니다(R016 「버전노트 보존정책」).
7
9
 
8
10
  ## Compatibility Baseline
9
11
 
@@ -1217,6 +1219,184 @@ Opus 4.8에서 thinking blocks가 수정되어 API 오류가 발생하던 버그
1217
1219
 
1218
1220
  ---
1219
1221
 
1222
+ ## v2.1.277 (2026-09-18)
1223
+
1224
+ > Issue: #1714 — Claude Code v2.1.277 compatibility documentation
1225
+
1226
+ ### 설정 · CLAUDE.md 로딩
1227
+
1228
+ - CHANGELOG 원문: "Added AGENTS.md support: in a project with no CLAUDE.md, Claude Code reads AGENTS.md instead; change it under "Project instructions" in `/config` (not yet on Bedrock, Vertex or Foundry)"
1229
+ (277) 이 저장소는 루트에 `CLAUDE.md`가 있으므로 AGENTS.md 대체 로딩은 발동하지 않습니다 — 다만 저장소 루트의 `AGENTS.md`는 `.gitignore` 리터럴로 미추적 상태이므로(세션152 실측), 이 파일이 실수로 tracked화되어 CLAUDE.md와 내용이 갈리는 일이 없도록 유지합니다.
1230
+
1231
+ ### 헤드리스(`-p`) · 백그라운드
1232
+
1233
+ - CHANGELOG 원문: "Fixed `claude -p` and Agent SDK sessions that could hang with no result after an internal error; they now report the error and exit with code 1"
1234
+ (277) `/fsd` 등 `-p` 기반 무인 루프에서 내부 오류로 인한 무응답 행이 사라지고 exit code 1로 종료되므로, 무인 루프 감시 스크립트는 이제 이 종료 코드를 정지 신호로 사용할 수 있습니다.
1235
+ - CHANGELOG 원문: "Fixed a headless resume (`claude -p --resume`, the SDK, a VS Code extension window reload) starting the session's cost and usage totals at zero; headless sessions now save their totals at exit"
1236
+ (277) `-p --resume`으로 이어가는 헤드리스 세션의 비용·사용량 누적이 이제 정확히 보존되므로, 릴리즈 세션 비용 추정 시 재개 이전 구간이 0으로 초기화되던 오차가 사라집니다.
1237
+ - CHANGELOG 원문: "Fixed background sessions (`claude --bg`) exiting when a plugin's LSP server exited or closed its stdin"
1238
+ (277) `--bg` 백그라운드 세션이 LSP 플러그인의 stdin 종료만으로 함께 종료되던 결함이 수정되어, 무인 백그라운드 실행의 뜻밖의 조기 종료 원인 후보 하나가 사라집니다.
1239
+ - CHANGELOG 원문: "Improved session start-up for SDK and headless (`-p`) use: the first turn no longer waits on the per-directory CLAUDE.md lookup"
1240
+ (277) 이 저장소는 CLAUDE.md + 23개 룰을 매 세션 고정 주입하므로, 헤드리스 첫 턴의 디렉터리별 CLAUDE.md 조회 대기가 제거되면 `-p` 기반 파이프라인(`/pipeline auto-dev` 등)의 착수 지연이 줄어듭니다.
1241
+ - CHANGELOG 원문: "Removed the background Haiku auto-title request from `claude -p` runs launched outside an SDK or IDE"
1242
+ (277) `-p` 단독 실행에서 백그라운드 자동 제목 요청이 제거되어, 순수 CLI 기반 무인 실행의 부가 API 호출이 줄어듭니다 — 이 저장소 R005 비용 인식 원칙과 정합합니다.
1243
+
1244
+ ### 훅 · 재개 · prompt cache
1245
+
1246
+ - CHANGELOG 원문: "Fixed conversations failing every request with "text content blocks must be non-empty" when an earlier assistant turn held an empty text block beside other content, including after `--resume`"
1247
+ (277) 이 오류 문구는 R021이 v2.1.251 이후 text 블록 부재율 급증의 원인으로 추정한 CHANGELOG 항목과 같은 계열입니다 — 이 수정이 R008 advisory 진양성 원인(#1706 `[hypothesis]`)을 직접 해소하는지는 미확정이며, 다음 세션에서 v2.1.277+ 트랜스크립트로 재측정이 필요합니다.
1248
+ - CHANGELOG 원문: "Fixed sessions continued after `/clear` (restart, `--continue`, `--resume`) missing part of their first message when a SessionStart hook printed output, causing a full prompt-cache miss"
1249
+ (277) 이 저장소는 `SessionStart` 훅(`claude-md-reinject.sh`)으로 매 세션 CLAUDE.md를 재주입하므로, v2.1.277 미만에서는 `/clear` 이후 재개 시 그 훅 출력이 prompt-cache를 전면 무효화했을 수 있습니다 — R021의 SessionStart 재주입 경로 신뢰성이 개선됩니다.
1250
+ - CHANGELOG 원문: "Fixed resumed subagents and teammates re-rendering the MCP tool definitions they had loaded, which broke prompt caching for that agent"
1251
+ (277) 재개된 서브에이전트·teammate의 MCP 도구 정의 재렌더링으로 인한 prompt-cache 파손이 수정되어, R009 v2.1.265 계열의 prefix 안정성 노트가 한 건 더 보강됩니다.
1252
+ - CHANGELOG 원문: "Fixed attachments recorded earlier in a conversation being re-rendered after a resume or relaunch, which dropped extended thinking and missed the prompt cache"
1253
+ (277) 재개·재실행 후 첨부물 재렌더링으로 extended thinking이 소실되고 캐시가 깨지던 결함이 수정되어, 재개 세션의 reasoning 보존 신뢰성이 개선됩니다.
1254
+ - CHANGELOG 원문: "Fixed a crash ("unrecoverable interface error") when resuming a session whose saved transcript contains a stop hook summary without a well-formed hook list"
1255
+ (277) Stop 훅 요약이 불완전한 트랜스크립트를 재개할 때의 크래시가 수정되어, R021이 운용하는 `session-reflection.sh` Stop 훅 경로의 재개 안정성이 개선됩니다.
1256
+ - CHANGELOG 원문: "Fixed messages typed while Claude is still working sometimes being ignored by the model"
1257
+ (277) 작업 중 입력한 메시지가 무시되던 결함이 수정되어, R020 Interrupt 관련 규칙이 전제하는 "인터럽트가 모델에 도달한다"는 가정의 신뢰성이 높아집니다.
1258
+
1259
+ ### Bash · 샌드박스 · 권한
1260
+
1261
+ - CHANGELOG 원문: "Fixed `$TMPDIR` expanding empty in Bash commands that run outside the sandbox while sandboxing is enabled"
1262
+ (277) 샌드박스 활성 중 비샌드박스 Bash 명령에서 `$TMPDIR`가 빈 값으로 확장되던 결함이 수정되어, R010의 PPID 스코프 `/tmp` 마커 carve-out과 R009의 에이전트별 고유 `$TMPDIR` 경로 지침이 이제 더 안정적으로 동작합니다.
1263
+ - CHANGELOG 원문: "Fixed a `sandbox.excludedCommands` glob exempting an entire compound Bash command from the sandbox when only one part matched; every part must now match"
1264
+ (277) 복합 Bash 명령의 일부만 매칭돼도 전체가 샌드박스에서 면제되던 결함이 수정되어, `sandbox.excludedCommands`를 쓰는 환경의 샌드박스 우회 폭이 좁아집니다.
1265
+ - CHANGELOG 원문: "Fixed the Write tool silently ending the turn as a declined permission when the target path is an existing directory; it now reports a clear error"
1266
+ (277) 기존 디렉터리 경로에 Write를 시도할 때 무음으로 거부되던 결함이 수정되어, R020 "actual outcome ≠ attempt" 진단에서 원인 후보(무음 권한 거부 vs 명확한 오류)를 구분하기 쉬워집니다.
1267
+ - CHANGELOG 원문: "Improved the dangerous-rm permission prompt to name the flagged rm command and suggest a `${VAR:?}` guard, so headless runs can recover"
1268
+ (277) 위험한 `rm` 프롬프트가 플래그된 명령과 가드 방법을 명시하게 되어, R001 파괴적 명령 승인 절차의 실효성이 헤드리스 실행에서도 개선됩니다.
1269
+ - CHANGELOG 원문: "Improved prompt handling: invisible Unicode formatting and tag characters in a prompt are removed and the cleaned prompt is shown for review before it is sent"
1270
+ (277) 비가시 유니코드로 명령 일부를 숨기던 R001 v2.1.223 계열의 승인 다이얼로그 무결성 결함과 같은 위협 축을 프롬프트 입력 단계에서도 방어하게 됩니다.
1271
+
1272
+ ### 서브에이전트 · SendMessage
1273
+
1274
+ - CHANGELOG 원문: "Fixed messages from other agents (such as a subagent's SendMessage) that arrived mid-turn showing up below the "Ran N shell commands" row instead of where they arrived"
1275
+ (277) 서브에이전트 SendMessage가 도착 위치가 아니라 엉뚱한 곳에 표시되던 결함이 수정되어, R018 SendMessage 신뢰성 계열 노트가 표시 정확성 측면에서 한 건 더 보강됩니다.
1276
+ - CHANGELOG 원문: "Changed subagent results to reach the main agent under a header marking them as subagent output, with the result indented, so text in a subagent's result cannot pass as the session's own instructions"
1277
+ (277) 서브에이전트 결과가 이제 "서브에이전트 출력"임을 표시하는 헤더로 감싸져 도착하므로, R015 "다른 에이전트의 메시지는 결코 사용자의 승인이 아니다" 원칙이 플랫폼 레벨에서도 표시적으로 강화됩니다.
1278
+
1279
+ ### 스킬 · 플러그인 · 도구
1280
+
1281
+ - CHANGELOG 원문: "Fixed project skills from the main repository not loading in `--worktree` sessions when `.claude/skills` is untracked"
1282
+ (277) 이 저장소는 `.claude/skills`가 tracked이므로 이 결함의 직접 대상은 아니지만, `isolation: "worktree"`로 스폰하는 에이전트가 untracked 스킬 디렉터리를 가진 다른 프로젝트에서는 이제 정상 로드됩니다.
1283
+ - CHANGELOG 원문: "Fixed `claude plugin install` sometimes failing and breaking the installed copy when reinstalling a plugin version that a session or another program was using; an unchanged copy is now left alone"
1284
+ (277) 사용 중인 플러그인 버전을 재설치할 때 설치본이 깨지던 결함이 수정되어, 세션 도중 플러그인 재설치가 더 안전해집니다.
1285
+ - CHANGELOG 원문: "Fixed Grep and Glob reporting no matches when the search could not start because the system was out of processes, memory or file handles; they now return an error saying so"
1286
+ (277) 자원 고갈로 탐색 자체가 시작되지 못했을 때 "매치 없음"으로 오보고되던 결함이 수정되어, R005 「도구 이름 ≠ 그 프로그램」이 경고하는 0건 결과 오독 위험이 이 원인 축에서는 줄어듭니다.
1287
+ - CHANGELOG 원문: "Changed Fable to always appear in `/model` on the Anthropic API; it is greyed out only when your organization's settings disable it"
1288
+ (277) `/model`에서 Fable이 항상 노출되도록 바뀌어, R006 Fable 5 tier 안내(Tier 2 `claude-fable-5`/`claude-fable-5-1`)를 선택할 때 조직 정책으로 비활성화된 경우만 회색으로 구분됩니다.
1289
+ - CHANGELOG 원문: "Removed the deprecated TaskOutput tool; Claude reads a background task's output file with Read instead, and the `taskOutputMaxChars` setting and `TASK_MAX_OUTPUT_LENGTH` no longer have any effect"
1290
+ (277) `TaskOutput` 도구 자체가 제거되고 `taskOutputMaxChars`/`TASK_MAX_OUTPUT_LENGTH` 설정이 무효화되므로, 이 두 항목을 언급하는 기존 룰 텍스트(R002 Tier 5 표, R013 인라인 출력 상한 노트)는 이제 사실과 어긋납니다 — 아래 「rule candidates」 참조.
1291
+
1292
+ 기타 67건 — 이 저장소 비해당(VSCode/Claude Code on the web/Claude Tag 전용 UI 18건 포함, 나머지는 게이트웨이 전용 설정, 로그인/인증 UX, 저빈도 크래시 edge case, `/plugin`·`/mcp` 표시 버그 등).
1293
+
1294
+ **Action items**:
1295
+ - R002 Tier 5 표와 R013 인라인 출력 상한 노트의 `TaskOutput`/`taskOutputMaxChars`/`TASK_MAX_OUTPUT_LENGTH` 참조를 v1.1.77에서 정정 완료(위 서술의 "R005"는 R013의 오기였습니다).
1296
+ - 그 외 항목은 CC 플랫폼이 자체 해소한 신뢰성 개선이며, 이 저장소 harness 변경은 불필요합니다.
1297
+
1298
+ ---
1299
+
1300
+ ## v2.1.278 (2026-09-19)
1301
+
1302
+ > Issue: #1713 — Claude Code v2.1.278 compatibility documentation
1303
+
1304
+ ### 자동 모드 · 비용
1305
+
1306
+ - CHANGELOG 원문: "Changed auto mode for Claude API and Enterprise users, and on Bedrock, Vertex, Foundry and gateways, to default to the server-side classifier, which does not charge for classifier overhead (`CLAUDE_CODE_AUTO_MODE_SERVER=0` opts out on Bedrock, Vertex, Foundry and gateways); warns on billed fallback. See https://code.claude.com/docs/en/auto-mode-classifier-billing"
1307
+ (278) auto mode classifier가 기본적으로 서버사이드로 전환되어 classifier 오버헤드가 과금되지 않으므로, 이 저장소가 상시 사용하는 auto mode 세션의 실질 비용이 낮아집니다 — R005 비용 인식 원칙에 유리한 방향의 변경입니다.
1308
+ - CHANGELOG 원문: "Added an `Auto mode server` row to `/status` showing whether this session's auto mode classifier runs on the server"
1309
+ (278) `/status`에서 이 세션의 classifier가 서버에서 도는지 직접 확인할 수 있게 되어, 위 비용 절감이 실제로 적용됐는지를 실측(R020 ground-truth)할 수 있습니다.
1310
+
1311
+ **Action items**:
1312
+ - 코드·룰 변경 불필요. `/status`의 `Auto mode server` 행으로 상태만 확인 가능합니다(docs-only).
1313
+
1314
+ ---
1315
+
1316
+ ## v2.1.280 (2026-09-22)
1317
+
1318
+ > Issue: #1716 — Claude Code v2.1.280 compatibility documentation
1319
+
1320
+ ### 모델 · effort
1321
+
1322
+ - CHANGELOG 원문: "Added Claude Opus 5.5 (`claude-opus-5-5`), now the default Opus model — 1M context, $4/$20 per Mtok with $0.20/Mtok cache reads"
1323
+ (280) Opus 5.5가 기본 Opus 모델이 되었으므로, R006 Model Specification Tier 2 표에 `claude-opus-5-5` 전체 ID를 추가할지 검토가 필요합니다 — 아래 rule candidates 참조.
1324
+ - CHANGELOG 원문: "Changed the default model on Pro and Team Standard plans from Sonnet to Opus, matching Max, Team Premium, and Enterprise"
1325
+ (280) Pro/Team Standard 플랜의 기본 모델이 Sonnet에서 Opus로 바뀌었으므로, 해당 플랜을 쓰는 세션은 R005 비용 인식 관점에서 기본값 자체가 더 비싸진 상태로 시작됩니다.
1326
+ - CHANGELOG 원문: "Changed an effort level saved before `/effort` became per-model to no longer apply to newly released models such as Opus 5.5; they start at their default until you pick a level"
1327
+ (280) Opus 5.5처럼 새로 출시된 모델은 과거 저장된 effort 값을 물려받지 않고 기본 effort로 시작하므로, 이 저장소의 effort 관련 지침을 새 모델에 그대로 적용하기 전 실측이 필요합니다.
1328
+ - CHANGELOG 원문: "Changed Opus 4.7, Opus 4.8 and Fable 5 to stop holding their launch-default effort over `/effort` in `-p` or the Agent SDK, a project, managed or `--settings` `effortLevel`, or a per-model level"
1329
+ (280) Opus 4.7·4.8·Fable 5가 더 이상 `/effort` 등 명시적 effort 설정을 무시하지 않게 되어, R006이 v2.1.267 노트에서 기록한 "effort 프론트매터가 무시된다"는 전제가 이 세 모델에서는 더 이상 성립하지 않습니다 — 아래 rule candidates 참조.
1330
+
1331
+ ### MCP
1332
+
1333
+ - CHANGELOG 원문: "Added `CLAUDE_CODE_MAX_MCP_DESCRIPTION_LENGTH` to change the 2,048-character cap on MCP tool descriptions and server instructions for every MCP server in the session"
1334
+ (280) MCP 도구 설명·서버 안내문의 2,048자 상한을 세션 단위로 조정할 수 있게 되어, `ontology-rag`·`semble-integration`·`code-review-graph` 등 이 저장소가 연동하는 MCP 서버의 설명이 길어질 때 절단 위험을 env var로 완화할 수 있습니다.
1335
+
1336
+ ### 권한 · 자동 모드
1337
+
1338
+ - CHANGELOG 원문: "Fixed writes through a symlinked path being judged by their in-tree spelling: the prompt names where the write lands, and `acceptEdits`, allow rules and auto mode no longer approve one landing outside"
1339
+ (280) 심볼릭 링크 경로를 통한 쓰기가 트리 내부 표기만으로 승인되던 우회가 수정되어, R002가 반복 기록해 온 "경로 표기 우회" 계열(예: v2.1.233 `\??\`, v2.1.268 symlink 디렉터리)의 최신 보강입니다.
1340
+ - CHANGELOG 원문: "Fixed auto mode retrying an action over and over when a safety check declined to review it; the action is now denied once, noting that retrying won't help"
1341
+ (280) safety check가 검토를 거부한 행동을 auto mode가 무한 재시도하던 결함이 수정되어, R010 Subagent Scope-Creep STOP Protocol이 전제하는 "재시도가 아니라 범위 재설계"라는 원칙과 플랫폼 동작이 더 가까워집니다.
1342
+ - CHANGELOG 원문: "Fixed auto mode denying actions over and over without pause when a safety check gave no answer; retries now back off, and the turn stops with a message after ten in a row"
1343
+ (280) safety check 무응답 시의 무한 거부 루프가 backoff + 10회 후 정지로 수정되어, 무인 루프가 이런 상황에서 조기에 눈에 띄는 정지 메시지로 멈추게 됩니다.
1344
+ - CHANGELOG 원문: "Fixed Write calls failing validation when a model sends `path`, `file_text`, `file_content` or a stray `description` instead of `file_path` and `content`"
1345
+ (280) 잘못된 파라미터명으로 인한 Write 검증 실패가 완화되어, R020 도구 호출 완결성 관련 왕복 낭비가 이 원인 축에서는 줄어듭니다.
1346
+ - CHANGELOG 원문: "Changed `PermissionRequest` hooks: an agent-type hook no longer runs there, since its answer could never allow or deny the request; it now shows an error pointing to command or http hooks"
1347
+ (280) `PermissionRequest` 훅에 agent-type 핸들러를 쓰면 이제 오류로 안내되므로, 이 이벤트에는 command 또는 http 핸들러만 유효하다는 제약이 명시화됩니다 — 이 저장소는 현재 `PermissionRequest`를 배선하지 않았습니다.
1348
+
1349
+ ### 백그라운드 서브에이전트 · SendMessage · 압축
1350
+
1351
+ - CHANGELOG 원문: "Fixed resuming a session with unfinished background agents, shells or workflows starting a model turn on its own before you typed anything"
1352
+ (280) 미완료 백그라운드 작업이 있는 세션을 재개할 때 사용자 입력 없이 턴이 저절로 시작되던 결함이 수정되어, R010 v2.1.232 "non-teammate 스폰이 기본 background 실행"이 야기하는 재개 시 예상치 못한 자동 진행 위험이 줄어듭니다.
1353
+ - CHANGELOG 원문: "Fixed messages sent to a background subagent being silently lost in headless and SDK sessions when the subagent was finishing its turn"
1354
+ (280) 서브에이전트가 턴을 마무리하는 시점에 헤드리스·SDK 세션에서 메시지가 무음 소실되던 결함이 수정되어, R018 SendMessage 신뢰성 계열("전달됨 ≠ 읽힘" 등)에 헤드리스 경로의 보강이 추가됩니다.
1355
+ - CHANGELOG 원문: "Fixed a finished subagent's report being lost when the conversation that launched it was compacted before the report was read"
1356
+ (280) 완료된 서브에이전트 보고가 compact로 소실되던 결함이 수정되어, R013/R018이 함께 다루는 compaction-서브에이전트 보고 상호작용의 신뢰성이 개선됩니다.
1357
+ - CHANGELOG 원문: "Fixed background subagents being unable to use the LSP tool when an LSP plugin is active"
1358
+ (280) LSP 플러그인 활성 시 백그라운드 서브에이전트가 LSP 도구를 쓰지 못하던 결함이 수정되어, 백그라운드로 이동한 서브에이전트의 도구 가용성 격차가 줄어듭니다.
1359
+ - CHANGELOG 원문: "Fixed background shell tasks reporting benign non-zero exits (e.g. grep with no matches) as failures"
1360
+ (280) `grep` 무매치처럼 무해한 non-zero exit을 백그라운드 셸 작업이 실패로 오보고하던 결함이 수정되어, R020 "실행됨 ≠ 실패"류 오판 원인 하나가 background shell 경로에서 사라집니다.
1361
+ - CHANGELOG 원문: "Fixed background sessions (`claude --bg`) being unable to run git, hooks, plugins and other helper programs when an environment variable handed to the session contained a NUL character"
1362
+ (280) NUL 문자가 든 환경변수로 인해 `--bg` 세션이 git·훅·플러그인을 실행하지 못하던 결함이 수정되어, 이 저장소처럼 훅에 의존하는 백그라운드 실행의 안정성이 개선됩니다.
1363
+
1364
+ ### 스킬 · 메모리 · prompt cache
1365
+
1366
+ - CHANGELOG 원문: "Fixed skills in `~/.claude/skills/` being moved to `~/.claude/skills/.trash/` when a `manifest.json` in that folder listed their names"
1367
+ (280) 사용자 스코프 스킬이 `manifest.json` 이름 목록과 겹치면 `.trash/`로 이동해 버리던 결함이 수정되어, R017 Count Sync가 전제하는 스킬 파일의 존재 안정성이 보강됩니다 — 이 저장소 스킬은 프로젝트 스코프(tracked)라 직접 대상은 아니었으나, 사용자 스코프 스킬을 병행하는 세션에서는 데이터 손실 위험이 있었습니다.
1368
+ - CHANGELOG 원문: "Fixed memory write conflicts in Cowork sessions showing Claude only the start and end of a memory file over about 10,800 characters, so the retried write dropped the middle"
1369
+ (280) Cowork 세션에서 10,800자 초과 메모리 파일의 중간 구간이 재시도 쓰기에서 소실되던 결함이 수정되어, R011의 200줄 예산 관리와 무관하게 존재하던 별도의 메모리 파일 무결성 위험이 줄어듭니다.
1370
+ - CHANGELOG 원문: "Fixed a model switch made from a host app (Claude Desktop, VS Code, SDK) while Claude is working causing a prompt-cache miss on the next prompt"
1371
+ (280) 작업 중 모델 전환으로 인한 prompt-cache miss가 수정되어, R013/R009가 다루는 prompt-cache 안정성 계열에 호스트 앱발 모델 전환 축이 보강됩니다.
1372
+ - CHANGELOG 원문: "Fixed resumed fork subagents rebuilding their tool list instead of re-sending the one they first used, which broke prompt caching for that agent"
1373
+ (280) fork된 서브에이전트를 재개할 때 도구 목록을 재구성해 prompt cache가 깨지던 결함이 수정되어, R009 fork 컨텍스트 상속 관련 비용 안정성이 개선됩니다.
1374
+ - CHANGELOG 원문: "Improved `/cost` cache-miss causes to name thinking mode and thinking display changes"
1375
+ (280) `/cost`의 cache-miss 원인 표시에 thinking 모드·표시 변경이 추가되어, R012/R013이 다루는 prompt-cache 원인 후보 진단이 더 세밀해집니다.
1376
+
1377
+ ### 훅 · 안정성
1378
+
1379
+ - CHANGELOG 원문: "Added hook output sizes and the number of oversized outputs saved to a file to the `hook_execution_complete` OpenTelemetry event"
1380
+ (280) 훅 출력 크기와 파일로 저장된 초과분 개수가 OpenTelemetry 이벤트에 추가되어, R021이 기록한 v2.1.247 훅 출력 폭주(대화 overflow) 계열 결함을 모니터링으로 조기 발견할 수 있게 됩니다.
1381
+ - CHANGELOG 원문: "Improved the UserPromptSubmit hook timeout notice and the debug log to name which hook command timed out"
1382
+ (280) `UserPromptSubmit` 훅 타임아웃 알림이 어느 훅 명령이 타임아웃됐는지 명시하게 되어, 이 저장소가 이 이벤트에 배선한 `r007-r008-drift-advisor.sh`·`fail-axis-cause-advisor.sh`·`claude-md-reinject.sh` 등 다중 훅의 원인 진단이 쉬워집니다.
1383
+ - CHANGELOG 원문: "Fixed conversations failing on every turn with a "role 'system' must precede an 'assistant' message" API error"
1384
+ (280) 이 API 오류로 전 턴이 실패하던 결함이 수정되어, 관련 세션 자체 종료 위험이 사라집니다.
1385
+ - CHANGELOG 원문: "Fixed conversations with the advisor on failing every turn with API Error 400 "Input tag 'advisor_20260301'" behind a proxy or gateway that doesn't support it; the request now retries without it"
1386
+ (280) advisor 미지원 프록시·게이트웨이 경유 시의 400 오류가 이제 advisor 없이 재시도되어, R005가 기록한 v2.1.276의 같은 오류 문구(2.1.275 회귀)와는 별개 시나리오가 추가로 해소됩니다.
1387
+ - CHANGELOG 원문: "Fixed a crash when resuming a session whose saved transcript holds a malformed system message or a memory-saved notice without its file list"
1388
+ (280) 메모리 저장 알림에 파일 목록이 없어 재개 시 크래시하던 결함이 수정되어, R011 세션 종료 메모리 저장 경로의 재개 안정성이 개선됩니다.
1389
+ - CHANGELOG 원문: "Fixed `/config` crashing and some on/off preferences being misread when a preference that has moved to `settings.json` still holds a value like `null` or `"false"` in `~/.claude.json`"
1390
+ (280) `settings.json`으로 이관된 설정이 `~/.claude.json`에 `null`/`"false"`로 남아 있을 때의 오독·크래시가 수정되어, R002/R010이 의존하는 설정 계층(user/project/local) 판독 신뢰성이 개선됩니다.
1391
+
1392
+ 기타 91건 — 이 저장소 비해당(VSCode/Claude Code on the web/Claude Tag/Code Review 전용 29건, Windows·self-hosted runner 전용 4건 포함, 나머지는 UI 다이얼로그·마우스·키바인딩 폴리시, Artifact 도구 세부사항, 마켓플레이스 커밋 추적 등 저빈도 항목).
1393
+
1394
+ **Action items**:
1395
+ - R006 Model Specification Tier 2 표에 `claude-opus-5-5` 행을 v1.1.77에서 추가 완료. v2.1.267 DETAIL 노트(Opus 4.7·4.8·Fable 5 effort 무시 서술)는 이번 릴리즈의 반전 사실을 아직 반영하지 않았으므로 다음 룰 편집 세션에서 정정이 필요합니다.
1396
+ - 그 외 항목은 CC 플랫폼 신뢰성 개선이며 이 저장소 harness 변경은 불필요합니다.
1397
+
1398
+ ---
1399
+
1220
1400
  ## Known Platform Issues & Workarounds
1221
1401
 
1222
1402
  ### Agent tool malformed parsing on long / special-character prompts (#1241)
@@ -1256,6 +1436,10 @@ Opus 4.8에서 thinking blocks가 수정되어 API 오류가 발생하던 버그
1256
1436
  - #1245 — Claude Code v2.1.156 compatibility documentation
1257
1437
  - #1276 — Claude Code v2.1.159 compatibility documentation
1258
1438
  - #1280 — Claude Code v2.1.160 compatibility documentation
1439
+ - #1713 — Claude Code v2.1.278 compatibility documentation
1440
+ - #1714 — Claude Code v2.1.277 compatibility documentation
1441
+ - #1716 — Claude Code v2.1.280 compatibility documentation
1442
+ - #1717 — 컨텍스트 예산 초과 대응: CC 버전 노트 이관 정책 전환(룰 → 가이드)
1259
1443
  - `.claude/skills/claude-native/` — auto-generation source
1260
1444
  - `.claude/rules/SHOULD-hud-statusline.md` — R012 statusline integration
1261
1445
  - `.claude/rules/MUST-agent-design.md` — R006 agent frontmatter spec
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.1.76",
2
+ "version": "1.1.78",
3
3
  "lastUpdated": "2026-09-03",
4
4
  "omcustomMinClaudeCode": "2.1.121",
5
5
  "omcustomMinClaudeCodeReason": "Sensitive-path direct Write/Edit on .claude/** under bypassPermissions (R010 deprecation, #1101)",