oh-my-customcode 0.161.0 → 0.162.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
@@ -2334,7 +2334,7 @@ var init_package = __esm(() => {
2334
2334
  workspaces: [
2335
2335
  "packages/*"
2336
2336
  ],
2337
- version: "0.161.0",
2337
+ version: "0.162.0",
2338
2338
  description: "Batteries-included agent harness for Claude Code",
2339
2339
  type: "module",
2340
2340
  bin: {
package/dist/index.js CHANGED
@@ -2031,7 +2031,7 @@ var package_default = {
2031
2031
  workspaces: [
2032
2032
  "packages/*"
2033
2033
  ],
2034
- version: "0.161.0",
2034
+ version: "0.162.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.161.0",
6
+ "version": "0.162.0",
7
7
  "description": "Batteries-included agent harness for Claude Code",
8
8
  "type": "module",
9
9
  "bin": {
@@ -196,6 +196,20 @@ triage-dispatch.yml 실패 원인을 파일 Read 전에 "triaged 라벨 부재 +
196
196
 
197
197
  Origin: #1266 ④.
198
198
 
199
+ ### Degraded-Output Re-Verification Gate (529 / buffering)
200
+
201
+ 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.
202
+
203
+ | Anti-pattern | Required |
204
+ |--------------|----------|
205
+ | Dispatch a recovery agent off a single 529-buffered read | Re-run a minimal deterministic check (`wc -c`, single-field `gh ... view`, `head`) and confirm before acting |
206
+ | Declare a file "corrupted/오염" from one empty Read | Confirm byte count / content via an independent command first |
207
+
208
+ #### Common Violation (#1269 ①)
209
+ Session 106: during 529 buffering, a CHANGELOG was misdiagnosed as "61x 중복 오염" from buffered output and a recovery agent was dispatched — a self-violation of the same-session Read-Before-Characterize rule (#1266 ④). Deterministic count re-verification showed the file was clean. The 529 gate makes the re-verification mandatory, not advisory.
210
+
211
+ Origin: #1269 ① (R020 self-violation, session 106).
212
+
199
213
  ## Integration
200
214
 
201
215
  | Rule | Interaction |
@@ -37,6 +37,8 @@ Update the relevant rule rather than just acknowledging the violation.
37
37
 
38
38
  **Skill Promotion**: feedback memory가 동일 패턴으로 3회 이상 반복되면 "failure pattern"으로 승격. skill-extractor의 `--mode failure` 플래그로 스킬 후보 분석 가능 (Skillify 내재화, #972).
39
39
 
40
+ > **Quantitative threshold (clarified, #1268)**: candidacy begins at **≥2 occurrences** (propose a candidate via skill-extractor's 4-criteria gate); confirmed promotion to a tracked failure pattern requires **≥3 occurrences**. The ≥2 candidacy tier feeds skill-extractor Phase 1; the ≥3 tier gates actual skill creation. See `skill-extractor` Selection Discipline.
41
+
40
42
  When CI failure, process gap, or repeatable system defect is found:
41
43
  1. Record feedback memory (defend current session)
42
44
  2. Register GitHub issue (trackable improvement item)
@@ -313,6 +313,9 @@ Before delegating a task to a subagent, MUST verify the target agent's tool capa
313
313
  | `Read` external files | `tools:` includes Read |
314
314
  | `Write` files | `tools:` includes Write (and target path not in `disallowedTools` scope) |
315
315
  | MCP server calls | `mcpServers:` includes the required server |
316
+ | Task targets a specific file path | The path EXISTS (`Glob`/`ls`) — capability check alone does not catch a missing/renamed file |
317
+
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.
316
319
 
317
320
  ### Known Limitations (Active Cache)
318
321
 
@@ -88,6 +88,21 @@ Workflow/agent prompts MUST be fully assembled into the prompt string **before**
88
88
  |--------------|----------|
89
89
  | `const r = await agent(prompt) + FACTS` | `const r = await agent(prompt + FACTS)` — assemble first |
90
90
 
91
+ ### Workflow Script Sanity Check
92
+
93
+ Before invoking a Workflow script, deterministically verify:
94
+
95
+ | Check | Why |
96
+ |-------|-----|
97
+ | No unresolved placeholders (`{phase1_summary}`, `TODO`, `<...>`, `{{ }}`) remain in any agent prompt string | An unfilled placeholder reaches the agent verbatim → garbled task |
98
+ | Template-literal / string concatenation produces the intended prompt (assemble-before-call, see above) | Post-call concatenation (`agent(prompt) + FACTS`) silently drops content |
99
+ | Script parses — balanced braces/quotes, valid JS | A syntax error aborts the entire run after partial work |
100
+
101
+ #### Common Violation (#1271)
102
+ 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.
103
+
104
+ Origin: #1271 (Workflow authoring error recurrence, session 106).
105
+
91
106
  ### Verifier Ground-Truth for Cross-Cutting Facts
92
107
 
93
108
  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.
@@ -128,6 +128,36 @@ Delegate to mgr-creator with the proposal context:
128
128
 
129
129
  mgr-creator handles: SKILL.md creation, template sync, ontology registration.
130
130
 
131
+ ## Selection Discipline (evidence-gated)
132
+
133
+ Before proposing a SKILL candidate, apply this gate. Default to NOT creating a new skill — prefer strengthening an existing skill/rule.
134
+
135
+ ### Evidence Hierarchy
136
+
137
+ Rank supporting evidence; only direct, repeated success qualifies:
138
+
139
+ | Tier | Evidence | Action |
140
+ |------|----------|--------|
141
+ | 1 Direct | Pattern executed successfully ≥2 times in observed trajectories | Eligible to propose |
142
+ | 2 Inferred | Pattern plausible but observed once | Hold — do not propose yet |
143
+ | 3 Speculative | Pattern imagined from a single description | Reject |
144
+
145
+ ### 4-Criteria Selection Gate
146
+
147
+ A pattern becomes a candidate only if ALL four hold:
148
+
149
+ 1. Reusable across ≥2 distinct contexts (not one-off)
150
+ 2. Non-trivial — encodes real workflow knowledge, not a single command
151
+ 3. Not already covered by an existing skill (run an overlap check first)
152
+ 4. Demonstrated success ≥2 times (Evidence Hierarchy tier 1)
153
+
154
+ ### Two-Phase Restraint
155
+
156
+ - **Phase 1 (broad)**: collect all repeated patterns as raw candidates.
157
+ - **Phase 2 (restrain)**: filter through the 4-criteria gate. Default to NOT creating a skill; prefer strengthening an existing skill/rule over spawning a new one.
158
+
159
+ > Borrowed from /scout #1268 (evidence-hierarchy + selection gate + two-phase restraint). Reference: issue #1268.
160
+
131
161
  ## Integration
132
162
 
133
163
  | System | How |
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.161.0",
2
+ "version": "0.162.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)",