oh-my-customcode 1.1.104 → 1.1.105
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/MAY-optimization.md +1 -1
- package/templates/.claude/rules/MUST-orchestrator-coordination.md +1 -1
- package/templates/.claude/rules/MUST-sync-verification.md +2 -1
- package/templates/.claude/skills/fsd/SKILL.md +3 -0
- package/templates/.claude/skills/homework/SKILL.md +2 -0
- package/templates/.claude/skills/omcustom-release-notes/SKILL.md +3 -3
- package/templates/.claude/skills/pipeline/workflows/auto-dev.yaml +251 -45
- package/templates/.claude/skills/post-release-followup/SKILL.md +72 -4
- package/templates/manifest.json +1 -1
- package/templates/workflows/auto-dev.yaml +251 -45
package/dist/cli/index.js
CHANGED
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -40,7 +40,7 @@ zsh 내장 `echo`는 이스케이프를 확장합니다(#1625) — JSON 문자
|
|
|
40
40
|
> **zsh 내장 `echo`는 이스케이프를 확장한다 (#1625)**: zsh(이 저장소 Bash 도구 실행 셸)의 내장 `echo`는 `\n` 등 백슬래시 이스케이프를 기본 확장하므로, JSON 문자열을 파이프에 실을 때 `echo "$var"`를 쓰면 valid JSON을 스스로 깨뜨려 하류 파서 오진을 유발한다(v1.1.53 세션 훅 오진의 실제 원인). JSON/구조화 문자열 전달은 `printf '%s' "$var"`를 표준으로 한다.
|
|
41
41
|
-->
|
|
42
42
|
|
|
43
|
-
zsh는 미인용 `$var`를 단어분할하지 않습니다(#1683 #5) — 분할이 필요하면 `${=var}`나 배열을, 여러 필드는 `read -r a b c <<< "$line"`을 사용합니다.
|
|
43
|
+
zsh는 미인용 `$var`를 단어분할하지 않습니다(#1683 #5) — 분할이 필요하면 `${=var}`나 배열을, 여러 필드는 `read -r a b c <<< "$line"`을 사용합니다. 즉석 순회는 `xargs`·배열·`bash -c`로 쓰고, 프로세스를 띄운 스크립트는 정리 직후 `pgrep -f <패턴> | wc -l`로 잔여 개수를 출력해 0이 아니면 즉시 조치합니다.
|
|
44
44
|
|
|
45
45
|
<!-- DETAIL: zsh word splitting
|
|
46
46
|
> **zsh는 미인용 `$var`를 단어 분할하지 않는다 (#1683 #5)**: bash에서 관용적인 `for l in $list` / `set -- $line` 은 zsh(이 저장소 Bash 도구 실행 셸)에서 변수 전체를 **한 단어**로 취급하므로, `set -u`와 결합하면 `$2` 접근이 `parameter not set`으로 즉시 종료됩니다. 단어 분할이 필요하면 `${=var}`(zsh 전용) 또는 배열(`arr=(a b c); for x in "${arr[@]}"`)을 사용하고, 여러 필드가 든 문자열은 `read -r a b c <<< "$line"`으로 분해합니다. Origin: #1683 찐빠 #5 (v1.1.64 세션 — pre-triage 라벨 부트스트랩 스니펫이 1턴 실패 후 명시 인자로 재실행). Cross-ref: 위 zsh `echo` 노트, 파이프 `$?` 노트(#1540 zsh 변형) — 같은 "이 저장소의 셸은 zsh" 계열입니다.
|
|
@@ -880,7 +880,7 @@ After restart/compaction: re-read CLAUDE.md, all delegation rules still apply. N
|
|
|
880
880
|
- Use specialized agents, not general-purpose, when one exists
|
|
881
881
|
- general-purpose only for truly generic tasks (file moves, simple scripts)
|
|
882
882
|
- No exceptions for "small" or "quick" changes
|
|
883
|
-
- GitHub 메타데이터 작업(이슈 생성·코멘트·라벨·마일스톤, `gh run rerun`, 읽기 전용 `gh` 조회)은 프로젝트 파일 쓰기가 아니므로 오케스트레이터 직접 실행이 허용됩니다 — 위임도 허용되며, PR 생성·머지와 로컬 git 상태 변경은 계속 mgr-gitnerd 소유입니다 (Origin: #1683 찐빠 #6 — CI 재실행 4회·이슈 2건·코멘트 1건을 직접 실행했으나 소유 에이전트가 미명시였던 경계 모호).
|
|
883
|
+
- GitHub 메타데이터 작업(이슈 생성·코멘트·라벨·마일스톤, `gh run rerun`, 읽기 전용 `gh` 조회)은 프로젝트 파일 쓰기가 아니므로 오케스트레이터 직접 실행이 허용됩니다 — 위임도 허용되며, PR 생성·머지와 로컬 git 상태 변경은 계속 mgr-gitnerd 소유입니다 (Origin: #1683 찐빠 #6 — CI 재실행 4회·이슈 2건·코멘트 1건을 직접 실행했으나 소유 에이전트가 미명시였던 경계 모호). 다른 산출물의 번호·SHA를 인용하는 GitHub 기록은 참조 대상을 먼저 만들고, 그 명령의 출력에서 받은 번호를 인용합니다 (Origin: #1803 찐빠 #2).
|
|
884
884
|
|
|
885
885
|
### Protected Paths (mgr-creator Required)
|
|
886
886
|
|
|
@@ -242,9 +242,10 @@ Any change to: agents, agent frontmatter, skills, guides, routing patterns, rule
|
|
|
242
242
|
|
|
243
243
|
### auto-dev.yaml 압축 티어와의 양방향 참조 (Origin: #1650 C 부수)
|
|
244
244
|
|
|
245
|
-
auto-dev.yaml
|
|
245
|
+
auto-dev.yaml은 모든 티어에서 커밋 전(첫 push 전) mgr-sauron:watch를 1회 실행하며 구조 표면이 없어도 생략하지 않습니다 — 한쪽을 바꾸면 같은 커밋에서 갱신(R016).
|
|
246
246
|
|
|
247
247
|
<!-- DETAIL: auto-dev.yaml 압축 티어 paragraph, original wording
|
|
248
|
+
이력 (v1.1.105, #1799 찐빠 #1): v1.1.58에서 `.claude/rules/**` 변경 시에만 mgr-sauron R017을 필수 실행하는 carve-out을 도입했으나, v1.1.105에서 docs-only·lite·standard 전 티어가 커밋 전, 따라서 첫 push 전에 mgr-sauron:watch 단일 목표 위임을 1회 실행하는 기준으로 바꾸었습니다. 구조 표면이 없다는 것은 생략 사유가 아닙니다. 아래 원문은 v1.1.58 도입 당시의 서술입니다.
|
|
248
249
|
이 소절은 R017 적용 범위 자체를 넓히지 않는다 — 위 범위 열거가 압축 파이프라인에서 어떻게 배선되는지를 기록한다. `.claude/skills/pipeline/workflows/auto-dev.yaml`의 compression-mode-eval은 docs-only 티어에서 deep-verify를 self-review로 대체하되, 변경 집합에 `.claude/rules/**`(또는 agents/skills frontmatter 등 구조 표면)가 포함되면 mgr-sauron R017 검증을 단일 목표 위임으로 **필수 실행**하는 carve-out을 둔다(v1.1.58 세션 — docs-only 티어였으나 sauron이 R002/R010 모순 advisory 1건을 포착). 이 절의 적용 조건과 그 carve-out은 같은 조건을 서로 가리킨다 — 한쪽을 바꾸면 다른 쪽도 같은 커밋에서 갱신한다(R016 Rule Wiring Check). 이전까지는 yaml → R017 단방향 인용만 있어 R017 쪽에서 carve-out의 존재를 알 수 없었다.
|
|
249
250
|
-->
|
|
250
251
|
|
|
@@ -167,6 +167,7 @@ FSD의 루프 드라이버는 **메인 대화(오케스트레이터) 자신**입
|
|
|
167
167
|
| `/pipeline auto-dev` 1회 → homework 아티팩트 1개 기록 → 열린 PR 처리 | 「Iteration Flow」 |
|
|
168
168
|
| 반복 끝에 수렴 판정(적격 이슈 0 AND 열린 PR 0)을 실측으로 수행하고, 선언 직전 **반복 수 == homework 아티팩트 수**를 `ls .claude/outputs/sessions/{YYYY-MM-DD}/homework-*.md`로 대조 — 세션이 UTC 자정을 넘길 수 있으므로 세션이 걸친 **모든 날짜 디렉토리**를 포함합니다(예: `ls .claude/outputs/sessions/2026-09-1[78]/homework-*.md`) | R020, #1688 |
|
|
169
169
|
| 종료 경로와 무관하게 마커 제거(`command rm -f`) | 「무인 모드 마커」 |
|
|
170
|
+
| 반복의 릴리즈는 PR 생성 전에 auto-dev 릴리즈 단계의 마일스톤 배정 게이트가 PASS여야 합니다(마일스톤 vX.Y.Z가 open이고 스코프 이슈 전부가 배정됨) | auto-dev.yaml release 단계 "Milestone assignment gate", #1789 찐빠 #2(인라인 루프가 scope-selection의 마일스톤 생성·배정 부수효과를 건너뛰어 릴리즈가 마일스톤 없이 나감) |
|
|
170
171
|
|
|
171
172
|
`/goal`·`/loop`를 호출하는 경로는 여전히 유효하며, 세션이 무인(`claude -p`, 예약 실행)이라 자기 페이싱이 필요할 때 권장됩니다. 대화형 세션에서는 인라인 실행이 스킬 호출 오버헤드 없이 같은 계약을 만족합니다.
|
|
172
173
|
|
|
@@ -297,3 +298,5 @@ jq -r '.permissions.defaultMode // "unset"' "$(git rev-parse --show-toplevel)/.c
|
|
|
297
298
|
Artifacts from each iteration follow the conventions of the constituent skills:
|
|
298
299
|
- Pipeline artifacts: `.claude/outputs/sessions/{YYYY-MM-DD}/pipeline-auto-dev-{HHmmss}.md`
|
|
299
300
|
- Homework artifacts: `.claude/outputs/sessions/{YYYY-MM-DD}/homework-{HHmmss}.md`
|
|
301
|
+
|
|
302
|
+
When the homework artifact is written by delegating to an agent, the delegation prompt MUST include the "Standard delegation-prompt block" defined in `.claude/skills/pipeline/workflows/auto-dev.yaml`, including its one-line Known Limitations lookup for the target agent (Origin: #1807 찐빠 #8). This section only points to the block and does not restate it.
|
|
@@ -222,6 +222,8 @@ When `homework` is imported into a project OTHER than oh-my-customcode, its auto
|
|
|
222
222
|
|
|
223
223
|
If Phase 5 is skipped (`--dry-run`), the draft issue body is written to this artifact path for reference.
|
|
224
224
|
|
|
225
|
+
When the artifact (or the draft body) is written by delegating to an agent, the delegation prompt MUST include the "Standard delegation-prompt block" defined in `.claude/skills/pipeline/workflows/auto-dev.yaml`, including its one-line Known Limitations lookup for the target agent (Origin: #1807 찐빠 #8). This section only points to the block and does not restate it.
|
|
226
|
+
|
|
225
227
|
## Permission Mode Note
|
|
226
228
|
|
|
227
229
|
This skill does not spawn subagents directly, but future versions may delegate analysis to subagents. Pass `mode: "bypassPermissions"` on Agent calls for compatibility: it is required on CC < 2.1.212 (the per-call default, `acceptEdits`, overrides agent frontmatter `permissionMode`) and ignored on 2.1.212+, where subagents inherit the parent session's permission mode (adjustable via agent frontmatter `permissionMode`). Verify the effective mode before unattended runs: see R010 "Universal bypassPermissions".
|
|
@@ -12,7 +12,7 @@ Generate structured release notes directly within the Claude Code session, using
|
|
|
12
12
|
|
|
13
13
|
## Purpose
|
|
14
14
|
|
|
15
|
-
Replaces the CI-based `release-notes.yml` workflow that previously used Claude API (`ANTHROPIC_API_KEY`). The release notes are now generated in-session and passed
|
|
15
|
+
Replaces the CI-based `release-notes.yml` workflow that previously used Claude API (`ANTHROPIC_API_KEY`). The release notes are now generated in-session and written to a notes file and passed to `gh release create --notes-file`.
|
|
16
16
|
|
|
17
17
|
## Usage
|
|
18
18
|
|
|
@@ -96,9 +96,9 @@ _Release notes generated with Claude Code_
|
|
|
96
96
|
### Phase 4: Apply
|
|
97
97
|
|
|
98
98
|
The generated notes can be:
|
|
99
|
-
1. **Direct**:
|
|
99
|
+
1. **Direct**: Write the notes to a git-ignored notes file (for example `.claude/outputs/sessions/{date}/release-notes-{VERSION}.md`) with the Write tool, then run `gh release create v{VERSION} --notes-file <notes-file>`. Do not inline the notes text in the command line, because `$(…)` and backticks inside the notes would be executed by the shell. `release_notes.md` is a tracked file and is not used as the `--notes-file` input.
|
|
100
100
|
2. **File**: Written to `release_notes.md` for review before use
|
|
101
|
-
3. **Update**:
|
|
101
|
+
3. **Update**: Write the notes to the same kind of git-ignored notes file, then run `gh release edit v{VERSION} --notes-file <notes-file>` (again, `release_notes.md` is not used as the `--notes-file` input)
|
|
102
102
|
|
|
103
103
|
### Phase 5: Promote `## [Unreleased]` in CHANGELOG.md (Optional but Recommended)
|
|
104
104
|
|