oh-my-customcode 1.1.29 → 1.1.30
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 +2 -2
- package/dist/index.js +2 -2
- package/package.json +2 -2
- package/templates/.claude/rules/MUST-parallel-execution.md +4 -7
- package/templates/.claude/rules/MUST-sync-verification.md +11 -0
- package/templates/.claude/rules/SHOULD-verification-ladder.md +4 -0
- package/templates/.claude/rules/SHOULD-wiki-sync.md +18 -0
- package/templates/manifest.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -241,7 +241,7 @@ var init_package = __esm(() => {
|
|
|
241
241
|
workspaces: [
|
|
242
242
|
"packages/*"
|
|
243
243
|
],
|
|
244
|
-
version: "1.1.
|
|
244
|
+
version: "1.1.30",
|
|
245
245
|
description: "Batteries-included agent harness for Claude Code",
|
|
246
246
|
type: "module",
|
|
247
247
|
bin: {
|
|
@@ -289,7 +289,7 @@ var init_package = __esm(() => {
|
|
|
289
289
|
yaml: "^2.8.2"
|
|
290
290
|
},
|
|
291
291
|
devDependencies: {
|
|
292
|
-
"@anthropic-ai/sdk": "^0.
|
|
292
|
+
"@anthropic-ai/sdk": "^0.112.3",
|
|
293
293
|
"@biomejs/biome": "^2.3.12",
|
|
294
294
|
"@types/bun": "^1.3.6",
|
|
295
295
|
"@types/js-yaml": "^4.0.9",
|
package/dist/index.js
CHANGED
|
@@ -2031,7 +2031,7 @@ var package_default = {
|
|
|
2031
2031
|
workspaces: [
|
|
2032
2032
|
"packages/*"
|
|
2033
2033
|
],
|
|
2034
|
-
version: "1.1.
|
|
2034
|
+
version: "1.1.30",
|
|
2035
2035
|
description: "Batteries-included agent harness for Claude Code",
|
|
2036
2036
|
type: "module",
|
|
2037
2037
|
bin: {
|
|
@@ -2079,7 +2079,7 @@ var package_default = {
|
|
|
2079
2079
|
yaml: "^2.8.2"
|
|
2080
2080
|
},
|
|
2081
2081
|
devDependencies: {
|
|
2082
|
-
"@anthropic-ai/sdk": "^0.
|
|
2082
|
+
"@anthropic-ai/sdk": "^0.112.3",
|
|
2083
2083
|
"@biomejs/biome": "^2.3.12",
|
|
2084
2084
|
"@types/bun": "^1.3.6",
|
|
2085
2085
|
"@types/js-yaml": "^4.0.9",
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"workspaces": [
|
|
4
4
|
"packages/*"
|
|
5
5
|
],
|
|
6
|
-
"version": "1.1.
|
|
6
|
+
"version": "1.1.30",
|
|
7
7
|
"description": "Batteries-included agent harness for Claude Code",
|
|
8
8
|
"type": "module",
|
|
9
9
|
"bin": {
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"yaml": "^2.8.2"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
|
-
"@anthropic-ai/sdk": "^0.
|
|
54
|
+
"@anthropic-ai/sdk": "^0.112.3",
|
|
55
55
|
"@biomejs/biome": "^2.3.12",
|
|
56
56
|
"@types/bun": "^1.3.6",
|
|
57
57
|
"@types/js-yaml": "^4.0.9",
|
|
@@ -32,8 +32,8 @@ Before writing/editing multiple files:
|
|
|
32
32
|
3. Specialized agent available? → Use it (not general-purpose)
|
|
33
33
|
4. Agent Teams available? → **Check R018 criteria before spawning 2+ agents; for a 3+ agent batch, announce the gate result (Agent Tool fallback reason or Agent Teams choice) — see R018 Self-Check "Gate Transparency"**
|
|
34
34
|
5. Running agent stalled (2x+ duration)? → Spawn independent follow-up tasks immediately
|
|
35
|
-
6. Announced a parallel dispatch in prose? →
|
|
36
|
-
-
|
|
35
|
+
6. Announced a parallel dispatch in prose? → **발화 직전 카운트 대조**: announce 산문이 명시한 도구 개수 N == 이 메시지에 실제 포함된 tool_use 블록 개수. 불일치면 보완한 뒤 발화 (announce-execution consistency)
|
|
36
|
+
- 누락 방향은 무작위다 — verify Bash가 빠지기도(v1.1.22/23), action delegate가 빠지기도(v1.1.27 세션) 했다. 방향별 서술 강화는 3회 재발로 실패가 실증됐으므로, 유일한 실효 방어선은 N↔N 카운트 대조다. Origin: #1512, #1503.
|
|
37
37
|
|
|
38
38
|
### Common Violations to Avoid
|
|
39
39
|
|
|
@@ -45,11 +45,8 @@ Before writing/editing multiple files:
|
|
|
45
45
|
→ Latency timeout, user cancellation, context waste, no review loop
|
|
46
46
|
✓ CORRECT: Pre-decompose by domain, spawn parallel agents per area (R009) or use Agent Teams (R018)
|
|
47
47
|
|
|
48
|
-
❌ WRONG: Announce
|
|
49
|
-
✓ CORRECT:
|
|
50
|
-
|
|
51
|
-
❌ WRONG: Announce "verify build (Bash) + delegate fix (Agent) 병렬" but dispatch only the Bash; the Agent delegate slips to next turn (verify-bash + action-delegate asymmetry — the expensive action call is the one dropped)
|
|
52
|
-
✓ CORRECT: Dispatch BOTH the verification Bash AND the action delegate (Agent/Workflow) in the SAME message as the announcement
|
|
48
|
+
❌ WRONG: Announce N개 병렬 도구(예: verify Bash + action delegate)를 예고했으나 메시지에 tool_use가 N-1개만 포함 — 누락 방향은 무작위(Bash가 빠지기도, delegate가 빠지기도)
|
|
49
|
+
✓ CORRECT: 발화 직전 announce의 N과 tool_use 블록 개수를 대조해 일치시킨 뒤 같은 메시지로 발화
|
|
53
50
|
```
|
|
54
51
|
|
|
55
52
|
> **Token threshold heuristic**: When a delegated agent prompt exceeds ~5000 tokens or spans 3+ unrelated domains, decompose by domain and spawn parallel agents. See R018 for Agent Teams criteria when review cycles are needed. Reference: #1085.
|
|
@@ -77,6 +77,17 @@ Wiki verification is also enforced by CI (`.github/workflows/wiki-sync.yml`).
|
|
|
77
77
|
```
|
|
78
78
|
-->
|
|
79
79
|
|
|
80
|
+
### Release Commit Staging Hygiene (빌드 산출물 오염 방지)
|
|
81
|
+
|
|
82
|
+
릴리즈 커밋(및 `bun run build`를 수행한 모든 커밋) 직전, `git diff --cached --name-only`로 **스테이징 목록을 실측**하여 `dist/` 등 빌드 산출물이 포함되지 않았는지 확인한다. gitignored 경로라도 `git add -f` 또는 광범위 `git add` 조합으로 스테이징될 수 있으므로, .gitignore 존재가 방어를 보장하지 않는다. 발견 시 `git reset dist/`로 제외한 뒤 커밋한다. 이는 v1.1.12의 `dist/` untrack 조치에 대한 **회귀 방지 게이트**다.
|
|
83
|
+
|
|
84
|
+
| Anti-pattern | Required |
|
|
85
|
+
|--------------|----------|
|
|
86
|
+
| 빌드 후 광범위 `git add`로 커밋 → gitignored `dist/` force-add 위험 | 커밋 직전 `git diff --cached --name-only` 실측으로 빌드 산출물 부재 확인 |
|
|
87
|
+
| .gitignore에 있으니 안전하다고 가정 | force-add 경로는 .gitignore를 우회하므로 실측 필요 |
|
|
88
|
+
|
|
89
|
+
Origin: #1512 (v1.1.28 커밋 staging에 dist/ 2파일 포함, 커밋 전 실측으로 정정; v1.1.12 dist/ untrack 회귀 방지). Cross-ref: R020 (완료 검증 — "실행됨 ≠ 성공").
|
|
90
|
+
|
|
80
91
|
## When Required
|
|
81
92
|
|
|
82
93
|
Any change to: agents, agent frontmatter, skills, guides, routing patterns, rules, wiki pages.
|
|
@@ -144,6 +144,7 @@ Before invoking a Workflow script, deterministically verify:
|
|
|
144
144
|
| Template-literal / string concatenation produces the intended prompt (assemble-before-call, see above) | Post-call concatenation (`agent(prompt) + FACTS`) silently drops content |
|
|
145
145
|
| Script parses — balanced braces/quotes, valid JS | A syntax error aborts the entire run after partial work |
|
|
146
146
|
| 프롬프트 문자열 내 셸 변수 `${...}`(`$?`, `${PIPESTATUS[0]}`, `$(...)` 등)가 `\${...}`로 이스케이프되어 있는지 사전 grep 확인 | JS 템플릿 리터럴 안의 이스케이프 안 된 셸 `${...}`를 JS가 JS 표현식으로 평가 → 런타임 `ReferenceError`(예: `PIPESTATUS is not defined`). `node --check`는 문법만 검사하여 이 런타임 오류를 못 잡으므로 별도 결정론 grep 검사가 필요함 |
|
|
147
|
+
| Workflow `args`를 사용하는 스크립트가 `typeof args === 'string' ? JSON.parse(args) : args` 방어를 거친 뒤 필드에 접근하는지 확인 | 하니스가 객체 args를 문자열로 인코딩해 전달하면 `args.<field>`가 undefined가 되어 스크립트가 즉시 런타임 실패(0 agents 실행). `node --check`는 문법만 검사하므로 위 셸 `${...}` 이스케이프 항목과 동일한 런타임 계열을 잡지 못함 |
|
|
147
148
|
|
|
148
149
|
#### Common Violation (#1271)
|
|
149
150
|
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.
|
|
@@ -153,6 +154,9 @@ Origin: #1271 (Workflow authoring error recurrence, session 106).
|
|
|
153
154
|
#### Common Violation (#1438)
|
|
154
155
|
Origin: #1438 (Session 125 회고 찐빠 #2) — fix Workflow의 verify 프롬프트에 `${PIPESTATUS[0]}`를 이스케이프 없이 사용 → `PIPESTATUS is not defined` ReferenceError로 verify 단계 실패. `node --check`는 통과했으나 런타임에서 실패.
|
|
155
156
|
|
|
157
|
+
#### Common Violation (#1512)
|
|
158
|
+
Origin: #1512 (v1.1.27 세션 회고 찐빠 #2) — Workflow `args`를 JSON 객체로 전달했으나 하니스가 문자열로 인코딩해 `args.paths`가 undefined → 0 agents 실행으로 즉시 런타임 실패. `typeof args === 'string' ? JSON.parse(args) : args` 방어 추가 후 재실행 성공.
|
|
159
|
+
|
|
156
160
|
### Verifier Ground-Truth for Cross-Cutting Facts
|
|
157
161
|
|
|
158
162
|
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.
|
|
@@ -28,6 +28,24 @@ When agents, skills, rules, or guides are created or modified, corresponding wik
|
|
|
28
28
|
| `/omcustom:wiki lint` | After major structural changes |
|
|
29
29
|
| Automatic (CI) | `.github/workflows/wiki-sync.yml` checks on PR |
|
|
30
30
|
|
|
31
|
+
### Resync Completeness — 페이지 갱신 + 매니페스트 재시딩
|
|
32
|
+
|
|
33
|
+
wiki 재동기화는 **두 단계 모두 완료해야 끝난다**: (a) 페이지 본문/`updated` 필드 갱신, (b) 매니페스트 재시딩. drift 판정은 페이지의 `updated` 필드가 아니라 **매니페스트의 SHA-256 대조**로 이루어지므로, 페이지만 갱신하면 drift가 잔존한다. 반대로 매니페스트만 재생성하면 drift 0으로 보이나 페이지 내용은 stale한 **false-green**이 된다 — 양방향 모두 불완전하다.
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
bash .github/scripts/lib/source-hash.sh generate wiki/.source-hashes.json
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
재시딩 대상은 **항상 `wiki/.source-hashes.json`**이며 `templates/manifest.json`이 아니다(#1423 혼동 사례와 동일 경계).
|
|
40
|
+
|
|
41
|
+
| Anti-pattern | Required |
|
|
42
|
+
|--------------|----------|
|
|
43
|
+
| 페이지만 갱신하고 매니페스트 재시딩 누락 → drift 잔존 | 페이지 갱신 + 매니페스트 재시딩 두 단계 모두 수행 |
|
|
44
|
+
| 매니페스트만 재생성 → false-green (drift 0이나 페이지 stale) | 페이지를 실제로 갱신한 뒤 재시딩 |
|
|
45
|
+
|
|
46
|
+
Origin: #1512 (v1.1.27 세션 — 71페이지 갱신 후 drift 71→68 잔존, 매니페스트 재시딩으로 drift 0 달성).
|
|
47
|
+
Cross-reference: R017 (동기화 검증 — Phase 3 wiki sync), R020 (완료 검증 — actual outcome ≠ attempt).
|
|
48
|
+
|
|
31
49
|
## Delegation — All wiki writes via wiki-curator agent (R010). See workflow via Read tool.
|
|
32
50
|
|
|
33
51
|
<!-- DETAIL: Delegation
|
package/templates/manifest.json
CHANGED