oh-my-customcode 1.1.70 → 1.1.72
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.
- package/dist/cli/index.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/templates/.claude/rules/MUST-completion-verification.md +7 -0
- package/templates/.claude/rules/MUST-continuous-improvement.md +9 -1
- package/templates/.claude/rules/MUST-orchestrator-coordination.md +15 -0
- package/templates/.claude/rules/MUST-sync-verification.md +2 -0
- package/templates/.claude/rules/SHOULD-verification-ladder.md +6 -0
- package/templates/.claude/skills/pipeline/workflows/auto-dev.yaml +2 -0
- package/templates/manifest.json +1 -1
- package/templates/workflows/auto-dev.yaml +2 -0
package/dist/cli/index.js
CHANGED
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -394,6 +394,13 @@ This applies when a change touches a field that participates in an override/prec
|
|
|
394
394
|
|--------------|----------|
|
|
395
395
|
| 훅 위임서에 "가드 추가·`?` 억제" 처방만 전달 | 읽는 필드의 실제 형상(`hook_success` stdin 원문 + 바이너리 훅 문서) 실측을 위임서 완료 조건에 포함 |
|
|
396
396
|
|
|
397
|
+
**값 표현 변경 각도 — 소비자 경로 전수 열거 (Origin: #1691 #2, v1.1.71)**: 저장되는 값의 **표현**(정규화 규칙·인코딩·키 형식)을 바꾸는 위임서는 그 값을 **읽는 모든 소비자 경로**를 `grep`으로 열거하고 **동일 인코딩으로 대조**하도록 완료 조건에 넣습니다. v1.1.68에서 stuck-detector `edit_hash`의 정규화만 바꾸고 소비자(JSON 직렬화 저장값 ↔ grep 원문 패턴)를 열거하지 않아 따옴표·백슬래시 회귀가 1차 구현에 남았고, 위임서의 "consumers logic unchanged" 지시 때문에 에이전트가 발견한 결함을 고치지 않고 넘겼습니다. 이 맥락의 "소비자 로직 변경 금지" 지시는 "결함 발견 시 보고 후 지시 대기"로 씁니다 — 프로덕션·권한 경계의 금지 목록(R010 「Pre-Delegation Privileged-Scope Boundary」)은 이 완화 대상이 아닙니다.
|
|
398
|
+
|
|
399
|
+
| Anti-pattern | Required |
|
|
400
|
+
|--------------|----------|
|
|
401
|
+
| 값의 정규화·인코딩만 바꾸고 소비자 경로를 열거하지 않은 위임 | 소비자 경로 전수 grep + 동일 인코딩 대조를 완료 조건에 포함 |
|
|
402
|
+
| "소비자 로직 변경 금지"로 결함 수정까지 봉쇄 | "결함 발견 시 보고 후 지시 대기"로 완화 |
|
|
403
|
+
|
|
397
404
|
Sibling discipline to Read-Before-Characterize (that rule governs diagnosis — don't label before reading; this one governs edit-planning completeness — enumerate every interdependent field before editing). Cross-ref: R023 (verification ladder — config completeness is a Tier-1 deterministic pre-check).
|
|
398
405
|
|
|
399
406
|
### Degraded-Output Re-Verification Gate (529 / buffering)
|
|
@@ -13,7 +13,7 @@ Update the relevant rule rather than just acknowledging the violation.
|
|
|
13
13
|
1. Acknowledge violation
|
|
14
14
|
2. Identify root cause (which rule was weak/unclear?)
|
|
15
15
|
3. Update the rule (add clarity, examples, self-checks)
|
|
16
|
-
4. Wiring check — confirm the rule is wired into an execution path, or mark it as wiring-not-required (see Rule Wiring Check below)
|
|
16
|
+
4. Wiring check — confirm the rule is wired into an execution path, or mark it as wiring-not-required (see Rule Wiring Check below) — and, when the new clause governs delegation prompts, apply it to this iteration's own delegation prompts before continuing (동일 반복 self-check)
|
|
17
17
|
5. Commit the change
|
|
18
18
|
6. Continue original task following updated rules
|
|
19
19
|
|
|
@@ -32,10 +32,18 @@ Update the relevant rule rather than just acknowledging the violation.
|
|
|
32
32
|
|--------------|----------|
|
|
33
33
|
| 규칙 조항만 추가하고 커밋 → 자동화 경로에 발동 지점이 없어 동일 결함 재발 | 발동 실행 경로 명시 + 반영 확인; 대상 없으면 "배선 불요" 명시 |
|
|
34
34
|
|
|
35
|
+
**신설 조항의 동일 반복 self-check (Origin: #1691 #4·#5·#7 — v1.1.71)**: 위임서 규율을 신설·보강한 반복에서는, 그 조항을 **같은 반복에서 오케스트레이터가 작성하는 이후 위임서에 즉시 적용**한 뒤 다음 단계로 넘어갑니다. v1.1.69에서 R010 「출처 인용과 인접 문구 점검도 같은 규율」을 신설한 바로 그 반복의 위임서가 이슈 문장을 인용하지 않고 같은 파일 grep을 요구하지 않아 자기 위반 3건(High 1건 포함)이 적대적 리뷰에서 적발되었습니다 — 텍스트가 룰에 실렸다는 사실은 오케스트레이터 자신의 행동이 바뀌었다는 증거가 아닙니다.
|
|
36
|
+
|
|
37
|
+
| Anti-pattern | Required |
|
|
38
|
+
|--------------|----------|
|
|
39
|
+
| 위임서 규율을 신설한 반복에서 이후 위임서를 이전 습관대로 작성 | 신설 조항을 같은 반복의 위임서에 즉시 적용하고, 리뷰 위임서에 그 조항 준수 여부를 점검 항목으로 포함 |
|
|
40
|
+
|
|
35
41
|
Origin: #1533 (v1.1.35에서 R017 (b) 조항 추가했으나 auto-dev.yaml version-bump 절차에 bun run build 단계가 없어 발동 지점 부재 — mgr-sauron이 [FAIL]로 차단, 배선 후 통과).
|
|
36
42
|
|
|
37
43
|
Cross-reference: R021(Enforcement Policy — advisory 규칙의 발동 지점), R017(구조 검증).
|
|
38
44
|
|
|
45
|
+
**적용 범위 확장 (Origin: #1698 #1 — v1.1.72)**: 이 self-check는 서브에이전트에 **요구하는** 규율뿐 아니라 오케스트레이터가 **스스로 작성하는 산문(룰 문안·요약·수치)**에도 대칭 적용됩니다. 상세·인용은 R010 「출처 인용과 인접 문구 점검도 같은 규율」 보강 2항목 참조.
|
|
46
|
+
|
|
39
47
|
## Integration
|
|
40
48
|
|
|
41
49
|
| Situation | Action |
|
|
@@ -367,6 +367,21 @@ Origin: #1646 (v1.1.58 세션 — 커밋 위임서 `12e74a76` vs 실제 `e101a0b
|
|
|
367
367
|
| 메모리 요약·기억으로 Origin 사실을 위임서에 확정형 기재 | 출처 문장을 `gh issue view`/원문에서 인용해 동봉하고 "원문과 다르면 원문 우선"을 명시 |
|
|
368
368
|
| 삽입 위치와 문안만 지정한 조항 삽입 위임 | 같은 주제의 기존 문장 grep + 모순·stale 참조 갱신을 완료 조건에 포함 |
|
|
369
369
|
|
|
370
|
+
**보강 3항목 (Origin: #1691 #6, #1696 #1·#2 — v1.1.71)**: (a) [#1696 #2] 인용문은 `gh issue view --json body` 등 **도구 출력에서 그대로 붙여 넣고** 손으로 옮겨 적지 않으며, 서브에이전트 완료 조건에 "인용문을 원문과 `grep -F`로 대조"를 넣습니다 — v1.1.70에서 오케스트레이터가 CHANGELOG 라인을 수기로 옮기다 "and marketplace"를 빠뜨렸고 서브에이전트는 그 위임서를 축자 인용했습니다. (b) [#1691 #6] 인용문이 코드·파일을 가리키면 **그 대상과 대조**한 뒤 기재합니다 — v1.1.69에서 이슈 제안 문안("동일 적용")을 검증 없이 룰로 옮겼다가 인용 대상 스크립트가 해당 필터를 의도적으로 미적용한다는 사실이 리뷰에서 드러났습니다. (c) [#1696 #1] 오케스트레이터가 위임서에 **함의를 제공할 때는 `[가설 — 실측이 반대면 반대로 기재]`로 표기**하고 실측 항목의 판정 기준을 동봉합니다 — v1.1.70에서 "이 결함의 대상일 수 있음"을 확정형으로 제공하자 서브에이전트가 와일드카드 matcher `"*"`를 "구체적 matcher"로 라벨해 함의가 역전되었습니다. 단, 파괴적·비가역 결과를 낳는 위임(아래 「참인 전제 ≠ 참인 함의 — 브랜치 전환 위임」)에서는 `[가설]` 표기 여부와 무관하게 결과 예측을 기재하지 않습니다 — 그 절이 우선합니다. 버전 노트 위임서의 같은 규율은 R017 「묶음 버전 노트 위임서 — 문장별 (NNN) 태그와 합쇼체 예시」 보강 2항목과 짝을 이룹니다.
|
|
371
|
+
|
|
372
|
+
| Anti-pattern | Required |
|
|
373
|
+
|--------------|----------|
|
|
374
|
+
| CHANGELOG·이슈 문장을 위임서에 수기로 옮겨 적음 | 도구 출력에서 복사 + 완료 조건에 `grep -F` 원문 대조 |
|
|
375
|
+
| 인용 대상 코드를 보지 않고 제안 문안을 룰로 승격 | 인용문이 가리키는 코드·파일과 대조 후 기재 |
|
|
376
|
+
| 오케스트레이터의 함의를 확정형으로 위임서에 기재 | `[가설 — 실측이 반대면 반대로 기재]` 표기 + 판정 기준 동봉 |
|
|
377
|
+
|
|
378
|
+
**보강 2항목 (Origin: #1698 #1·#2 — #3은 #1로 흡수 — v1.1.72)**: [#1698 #1] 오케스트레이터는 룰·문서에 커밋될 **최종 문안**을 완성문으로 위임서에 붙여 넣지 않습니다 — 서브에이전트가 이슈 본문에서 사실·수치를 직접 뽑아 작성하고, 오케스트레이터는 제안 포인터·삽입 위치·제약을 지정합니다. 단 인용 원문, 실측 사실(HEAD/브랜치/카운트), 승인·금지 작업 목록, 표준 금지 문구, `[가설]` 표기 함의, 검증 재실행 금지 목록은 계속 오케스트레이터가 기재합니다 — 이들은 "최종 문안"이 아니라 위임 전제입니다(배선: `auto-dev.yaml` implement 스텝 description, 4사본). 원인은 "오케스트레이터가 위임서에 룰 문안 전체를 직접 작성하면서 수치를 기억으로 옮김 — 서브에이전트에는 `gh issue view` 인용을 요구했으나 오케스트레이터 자신의 산문은 같은 규율을 받지 않음"이며, "인용 정확성이 주제인 반복에서 같은 계열 3회째(v1.1.69 세션번호 → v1.1.70 "and marketplace" → v1.1.71 "High 2건")"(#1688은 이 계열의 세션번호 오류를 Iteration 4/v1.1.67로 귀속하는데 이 인용은 v1.1.69로 표기합니다 — 두 출처 불일치, 판정하지 않음)가 재발 근거입니다. "리뷰에서 오류가 난 문장은 전부 오케스트레이터 작성분이었음"이며, "인용 대조 14건 중 오케스트레이터 작성 수치 1건 외 전부 원문 일치"가 실증됩니다. [#1698 #2] 인접 점검은 "같은 주제 키워드 grep"에만 의존하지 않고, 삽입 지점 앞뒤 섹션(±1 heading)의 Anti-pattern 표를 전수 대조하는 이원화를 적용합니다 — "인접성 점검을 키워드 grep에만 의존"했다가 12줄 아래 조항과의 모순을 놓친 사례가 원인입니다.
|
|
379
|
+
|
|
380
|
+
| Anti-pattern | Required |
|
|
381
|
+
|--------------|----------|
|
|
382
|
+
| 룰 문안 **최종 문안**을 오케스트레이터가 직접 작성해 위임서에 기재 | 서브에이전트가 이슈 본문에서 사실·수치를 직접 뽑아 작성; 오케스트레이터는 포인터·삽입 위치·제약만 지정 — 인용 원문·실측 사실·승인/금지 목록·표준 금지 문구·`[가설]` 표기·재실행 금지 목록은 오케스트레이터가 계속 기재 |
|
|
383
|
+
| 같은 주제 키워드 grep만으로 인접성 점검 완료 판정 | 키워드 grep + 삽입 지점 ±1 heading의 Anti-pattern 표 전수 대조를 병행 |
|
|
384
|
+
|
|
370
385
|
#### 참인 전제 ≠ 참인 함의 — 브랜치 전환 위임 (Origin: #1595 #2)
|
|
371
386
|
|
|
372
387
|
uncommitted 변경이 있는 상태의 브랜치 전환을 위임할 때, 위임서에 **전환의 결과를 확정형으로 예측해 적지 않는다**. "대상 브랜치에 그 파일이 없다"는 **사실**에서 "전환해도 안전하다"는 **함의**는 도출되지 않는다 — 파일이 **없기 때문에** checkout이 그 파일을 삭제해야 하고, modified 상태면 거부된다.
|
|
@@ -254,6 +254,8 @@ Origin: #1584 #1 (v1.1.46 세션) — 이슈 생성(8/11~14)과 작업(8/15) 사
|
|
|
254
254
|
| 헤더에 릴리즈 번호를 묶고 문장에는 태그 없이 위임 | 문장마다 "(NNN)" 태그, 헤더는 태그 합집합, 항목별 CHANGELOG 원문 1줄 동봉 |
|
|
255
255
|
| 영어 위임서에 "Korean 합쇼체"만 적고 예시 없음 | 합쇼체 예시 1문장 동봉 + 인접 반말 노트 추종 금지 명시 |
|
|
256
256
|
|
|
257
|
+
**보강 2항목 (Origin: #1696 #2·#3 — v1.1.71)**: (a) 항목별 CHANGELOG 원문 1줄은 `gh issue view --json body` 출력에서 **복사**해 동봉하고, 완료 조건에 "인용문을 이슈 본문과 `grep -F`로 대조"를 넣습니다(v1.1.70 — 수기 전사로 "and marketplace" 누락). (b) "같은 계열 최신 노트 뒤에 배치·cross-ref"를 지시할 때 **참조 대상이 `<!-- RETIRED` 주석 안이면 cross-ref 대신 권고 내용을 인라인**하도록 명시합니다(v1.1.70 — R002 새 노트가 은퇴된 v2.1.210 권고를 체인으로 가리켜 visible 텍스트가 없었습니다). R010 「출처 인용과 인접 문구 점검도 같은 규율」 보강 3항목과 짝을 이룹니다.
|
|
258
|
+
|
|
257
259
|
## Post-Gate Scope-Expansion Re-Run (Origin: #1433 #2)
|
|
258
260
|
|
|
259
261
|
R017 게이트(mgr-sauron) 통과 선언 후 신규 결함 발견 등으로 스코프가 확장되면(추가 파일 편집), 커밋 전 게이트를 **최종 상태에서 재실행**한다. 게이트 통과 시점 이후의 변경은 형식적으로 미검증이므로, 확장분 미검증 커밋은 R017이 최종 산출물을 커버하지 못하게 만든다.
|
|
@@ -103,6 +103,12 @@ staleness/audit 검증은 model ID·placeholder·TBD뿐 아니라 **폐기된
|
|
|
103
103
|
| "스모크 테스트 = API 호출"로 협소 인식 → 키 불필요한 순수 문자열 조립 검증을 실서버 dispatch Tier로 미룸 | 위임 첫 프롬프트부터 "샘플 멀티라인 값으로 출력 실제 조립 후 선행 들여쓰기·형식 grep 검증"을 필수 항목으로 명시 |
|
|
104
104
|
| `textwrap.dedent(f"""...{multiline_var}...""")` 를 신뢰 | 삽입 변수가 0-indent 멀티라인이면 dedent 공통 최소 들여쓰기가 0으로 계산되어 무력화 → 리터럴 들여쓰기 잔존. dedent 제거 후 명시적 문자열 concatenation 사용 |
|
|
105
105
|
|
|
106
|
+
**키·해시 설계 위임서 — 저장소 대표 편집 픽스처 선확인 (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 비용이 들지 않습니다.
|
|
107
|
+
|
|
108
|
+
| Anti-pattern | Required |
|
|
109
|
+
|--------------|----------|
|
|
110
|
+
| 키·해시 형식을 확정형으로 지시하고 충돌 사례를 열거하지 않음 | 저장소 대표 편집 3종 픽스처로 충돌 선확인을 완료 조건에 포함 |
|
|
111
|
+
|
|
106
112
|
Origin: #1455 #1 (Session 127 회고 찐빠 #1) — cc-release-monitor PR #1449 머지 후 workflow_dispatch 실검증에서 issue_body의 `<details>`·릴리즈 요약에 12칸 리터럴 들여쓰기 발견 → PR #1451 재작업. 첫 위임이 문법 검증만 지시하고 샘플 값 출력 조립 검증을 누락. `textwrap.dedent` + 멀티라인 변수 함정이 문법 검증만으로는 미노출. R020(문법 통과 ≠ 출력 정상)과 정합.
|
|
107
113
|
|
|
108
114
|
## Delegated Verification Floor — CI 잡 목록에서 도출 (Origin: #1574)
|
|
@@ -384,6 +384,8 @@ steps:
|
|
|
384
384
|
- No direct orchestrator writes (R010)
|
|
385
385
|
- All Agent tool calls MUST pass mode: "bypassPermissions" to prevent permission prompts during unattended execution
|
|
386
386
|
- Mid-run scope additions (a new issue added via user interrupt AFTER implement began) MUST re-enter the verify-build gate before release — do NOT let a late-added scope item ride to release on a prior verify-build pass. Critical for code changes; benign for docs-only (#1301).
|
|
387
|
+
- When an implement-stage delegation edits rule/skill/guide TEXT, the orchestrator MUST NOT author the final committed wording — the subagent writes it directly from the issue body (`gh issue view <N> --json body`); the delegation prompt supplies pointers, insertion anchors, constraints, verbatim tool-output quotations, and measured facts only
|
|
388
|
+
(R010 「출처 인용과 인접 문구 점검도 같은 규율」 보강 2항목, #1698 #1).
|
|
387
389
|
|
|
388
390
|
|
|
389
391
|
## Sensitive Path Handling (CC v2.1.121+)
|
package/templates/manifest.json
CHANGED
|
@@ -384,6 +384,8 @@ steps:
|
|
|
384
384
|
- No direct orchestrator writes (R010)
|
|
385
385
|
- All Agent tool calls MUST pass mode: "bypassPermissions" to prevent permission prompts during unattended execution
|
|
386
386
|
- Mid-run scope additions (a new issue added via user interrupt AFTER implement began) MUST re-enter the verify-build gate before release — do NOT let a late-added scope item ride to release on a prior verify-build pass. Critical for code changes; benign for docs-only (#1301).
|
|
387
|
+
- When an implement-stage delegation edits rule/skill/guide TEXT, the orchestrator MUST NOT author the final committed wording — the subagent writes it directly from the issue body (`gh issue view <N> --json body`); the delegation prompt supplies pointers, insertion anchors, constraints, verbatim tool-output quotations, and measured facts only
|
|
388
|
+
(R010 「출처 인용과 인접 문구 점검도 같은 규율」 보강 2항목, #1698 #1).
|
|
387
389
|
|
|
388
390
|
|
|
389
391
|
## Sensitive Path Handling (CC v2.1.121+)
|