oh-my-customcode 0.164.0 → 0.166.0

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 CHANGED
@@ -241,7 +241,7 @@ var init_package = __esm(() => {
241
241
  workspaces: [
242
242
  "packages/*"
243
243
  ],
244
- version: "0.164.0",
244
+ version: "0.166.0",
245
245
  description: "Batteries-included agent harness for Claude Code",
246
246
  type: "module",
247
247
  bin: {
package/dist/index.js CHANGED
@@ -2031,7 +2031,7 @@ var package_default = {
2031
2031
  workspaces: [
2032
2032
  "packages/*"
2033
2033
  ],
2034
- version: "0.164.0",
2034
+ version: "0.166.0",
2035
2035
  description: "Batteries-included agent harness for Claude Code",
2036
2036
  type: "module",
2037
2037
  bin: {
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "workspaces": [
4
4
  "packages/*"
5
5
  ],
6
- "version": "0.164.0",
6
+ "version": "0.166.0",
7
7
  "description": "Batteries-included agent harness for Claude Code",
8
8
  "type": "module",
9
9
  "bin": {
@@ -65,3 +65,24 @@ Types: feat, fix, docs, style, refactor, test, chore
65
65
  ## Push Rules (R016)
66
66
 
67
67
  All pushes require prior mgr-sauron:watch verification. If sauron was not run, REFUSE the push.
68
+
69
+ ## Milestone Query Robustness
70
+
71
+ When verifying milestone state (e.g., confirming it is closed after a release), prefer **number-based direct query** over title-matching list lookup:
72
+
73
+ ```bash
74
+ # Preferred: direct lookup by milestone number (deterministic)
75
+ gh api repos/{owner}/{repo}/milestones/<number> --jq '.title, .state, .open_issues'
76
+
77
+ # Fallback: title-matching list lookup (may fail transiently)
78
+ gh api "repos/{owner}/{repo}/milestones?state=all&per_page=100" \
79
+ --jq '.[] | select(.title == "vX.Y.Z") | .title, .state, .open_issues'
80
+ ```
81
+
82
+ **Rules:**
83
+ - If title-matching list lookup returns no results (apparent "not found"), do NOT immediately report the milestone as absent.
84
+ - Retry once (transient jq filter / pagination timing issues can cause false negatives).
85
+ - If still not found after retry, fall back to number-based direct query before reporting "milestone does not exist."
86
+ - False "milestone not found" reports can mislead the release milestone-close verification step.
87
+
88
+ Origin: #1287 (v0.164.0 session retrospective — milestone v0.164.0 reported as absent but confirmed present via direct re-query).
@@ -196,6 +196,19 @@ triage-dispatch.yml 실패 원인을 파일 Read 전에 "triaged 라벨 부재 +
196
196
 
197
197
  Origin: #1266 ④.
198
198
 
199
+ ### Directory-Context Before Multi-Copy Unification/Deletion
200
+
201
+ 다중 사본(동일 파일이 N곳에 존재)을 통일하거나 삭제하기 전, 각 사본이 위치한 **디렉토리 전체 맥락**을 확인한다(`ls`로 형제 파일 파악). 사본 파일 하나만 보고 "orphan"·"stub"으로 특성화하면, 같은 디렉토리의 형제 파일(다른 역할을 가진)이 함께 덮이거나 맥락이 누락된다. Read-Before-Characterize를 파일 단위에서 디렉토리 단위로 확장한 규칙이다.
202
+
203
+ | 금지 | 필수 |
204
+ |------|------|
205
+ | 사본 파일만 보고 "orphan/stub"으로 단정 후 통일/삭제 | 사본이 속한 디렉토리 전체(`ls`)를 확인 — 형제 파일 역할·연계 파악 후 처리 |
206
+
207
+ #### Common Violation (#1290 찐빠 #2, cross-session)
208
+ Session 108에서 `auto-dev.yaml` 4곳을 canonical 통일할 때, repo-root `./workflows/`에 `eraser.yaml`이 공존하는 디렉토리 맥락을 미확인하고 덮었다. Session 109에서 디렉토리 단위 Read-Before-Characterize로 보정(`eraser.yaml` 발견 → #1289 등록, destructive 삭제 회피). 결과는 무해했으나 맥락이 불완전했다.
209
+
210
+ Origin: #1290 (session 109 retrospective).
211
+
199
212
  ### Degraded-Output Re-Verification Gate (529 / buffering)
200
213
 
201
214
  When tool outputs show degradation signs — 529 errors, duplicated or truncated output, or a Read returning empty on a file that is known non-empty — you MUST re-verify any fact via a deterministic second source BEFORE any destructive or permanent action (recovery-agent dispatch, issue edit, commit, file restore). Do NOT characterize state ("corruption", "오염", "loop") from a single degraded read.
@@ -317,6 +317,14 @@ Before delegating a task to a subagent, MUST verify the target agent's tool capa
317
317
 
318
318
  > **Path existence ≠ tool capability (#1269 ③)**: the pre-check above verifies the agent HAS Read/Write/Bash, but not that the target path actually exists. Delegating a read/write to a missing or renamed path causes the same round-trip waste the capability pre-check is meant to prevent. Verify path existence (Glob/ls) before delegating path-specific work.
319
319
 
320
+ > **Multi-copy content consistency (#1287)**: 동일 파일이 다중 사본으로 존재하는 경우(예: auto-dev.yaml이 실행본 + templates 미러 + 레거시 사본 등 N곳), 위임 전 경로 존재뿐 아니라 **사본 간 내용 일관성(md5/diff)도 확인**해야 한다. 사본이 drift된 상태에서 "N곳 동일 변경 적용"으로 위임하면 에이전트가 작업 중에야 drift를 발견(round-trip)하거나, 일부 사본만 갱신되어 불일치가 심화된다.
321
+ >
322
+ > | Anti-pattern | Required |
323
+ > |--------------|----------|
324
+ > | `find`로 N곳 존재 확인 후 "N곳 동일 변경" 위임 | 위임 전 `md5`/`diff -q`로 N곳 내용 일치 확인; drift 시 canonical 기준 정렬을 위임 prompt에 명시 |
325
+ >
326
+ > Origin: #1287 (v0.164.0 세션 회고 찐빠 #1).
327
+
320
328
  ### Known Limitations (Active Cache)
321
329
 
322
330
  | Agent | Limitation | Workaround |
@@ -32,6 +32,7 @@ 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**
34
34
  5. Running agent stalled (2x+ duration)? → Spawn independent follow-up tasks immediately
35
+ 6. Announced a parallel dispatch in prose? → ALL announced tool calls MUST be in the SAME message as the announcement (announce-execution consistency)
35
36
 
36
37
  ### Common Violations to Avoid
37
38
 
@@ -42,6 +43,9 @@ Before writing/editing multiple files:
42
43
  ❌ WRONG: Single agent receives massive multi-domain prompt (>5000 tokens, e.g., M2 plan with 12 tasks across 7 areas)
43
44
  → Latency timeout, user cancellation, context waste, no review loop
44
45
  ✓ CORRECT: Pre-decompose by domain, spawn parallel agents per area (R009) or use Agent Teams (R018)
46
+
47
+ ❌ WRONG: Announce "milestone 생성 + 구조 확인 병렬" but only dispatch one tool; the other runs next turn (announce-execution mismatch)
48
+ ✓ CORRECT: When announcing N parallel tools, include ALL N tool calls in the SAME message as the announcement
45
49
  ```
46
50
 
47
51
  > **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.
@@ -64,6 +68,8 @@ Before writing/editing multiple files:
64
68
 
65
69
  > **Agent Teams partial spawn** → See R018 (MUST-agent-teams.md) "Spawn Completeness Check".
66
70
 
71
+ > **v2.1.161+**: Parallel tool calls in a single batch are now independent — a failed Bash command no longer cancels the other calls in the same batch; each tool returns its own result. This strengthens R009 batching: one failing call in a parallel dispatch no longer aborts its siblings, so independent work bundled in the same message completes regardless of a single failure. Lowers the safety cost of the announce-execution consistency self-check (#6).
72
+
67
73
  ## Execution Rules
68
74
 
69
75
  | Rule | Detail |
@@ -19,6 +19,8 @@ Format: `─── [Spawn] {subagent_type}:{model} | {description} ───`
19
19
 
20
20
  > **v2.1.157+**: `tool_decision` telemetry events now include `tool_parameters` (bash commands, MCP/skill names) when `OTEL_LOG_TOOL_DETAILS=1`. Complements R012 observability — enables per-tool parameter tracking in monitoring dashboards. See `monitoring-setup` skill.
21
21
 
22
+ > **v2.1.161+**: `OTEL_RESOURCE_ATTRIBUTES` values are now emitted as labels on metric datapoints — usage metrics can be sliced by custom dimensions (e.g., team, repo). Extends R012 observability from per-tool parameters (v2.1.157) to per-dimension metric slicing; configure via the `monitoring-setup` skill's `OTEL_RESOURCE_ATTRIBUTES` env. Separately, `claude agents` rows now show `done/total` progress before the detail when work is fanned out, and peek surfaces the longest-running item — complements the HUD parallel-spawn display and R009 `[N]` correlation.
23
+
22
24
  <!-- DETAIL: HUD Events full spec
23
25
  ### When to Display: Multi-step tasks, parallel execution, long-running operations. Skip for single brief operations.
24
26
  ### Parallel Display:
@@ -138,6 +138,22 @@ steps:
138
138
  }
139
139
  ```
140
140
 
141
+ ## Workflow File Locations
142
+
143
+ The `auto-dev.yaml` (and other workflow YAML files) exist in **4 locations**. Only one is the runtime source — the others are mirrors for deployment and examples.
144
+
145
+ | Path | Role | Used by |
146
+ |------|------|---------|
147
+ | `.claude/skills/pipeline/workflows/auto-dev.yaml` | **Runtime source (실행본)** — `/pipeline` reads from here via `Glob("workflows/*.yaml")` relative to the skill base dir | `/pipeline` skill at runtime |
148
+ | `templates/.claude/skills/pipeline/workflows/auto-dev.yaml` | Init deployment mirror — copied to the runtime location when `omcustom init` runs | `omcustom init` |
149
+ | `workflows/auto-dev.yaml` (repo root) | Legacy `/omcustom:workflow` directory remnant — NOT referenced by `/pipeline`. Also contains `eraser.yaml` and template examples. | Unused after `/pipeline` migration |
150
+ | `templates/workflows/auto-dev.yaml` | Template example mirror — Glob'd by List Mode as "template examples" (`Glob("templates/workflows/*.yaml")`) | `/pipeline` List Mode display only |
151
+
152
+ **Key rules:**
153
+ - The runtime source is `.claude/skills/pipeline/workflows/` (skill base dir). Do NOT confuse with repo-root `workflows/`.
154
+ - When modifying any workflow YAML, update **all applicable mirrors** to prevent drift. `verify-template-sync.sh` (#1286) detects drift automatically on CI.
155
+ - Repo-root `workflows/` is a legacy `/omcustom:workflow` remnant — it also contains `eraser.yaml`. Do not delete without checking for other references.
156
+
141
157
  ## Error Handling
142
158
 
143
159
  - Pipeline not found → list available pipelines with suggestion
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.164.0",
2
+ "version": "0.166.0",
3
3
  "lastUpdated": "2026-05-20T00:00:00.000Z",
4
4
  "omcustomMinClaudeCode": "2.1.121",
5
5
  "omcustomMinClaudeCodeReason": "Sensitive-path direct Write/Edit on .claude/** under bypassPermissions (R010 deprecation, #1101)",