oh-my-customcode 1.1.91 → 1.1.93

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.
@@ -8,7 +8,7 @@
8
8
  "hooks": [
9
9
  {
10
10
  "type": "command",
11
- "command": "bash .claude/hooks/scripts/stage-blocker.sh"
11
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/stage-blocker.sh\""
12
12
  }
13
13
  ],
14
14
  "matcher": "Write|Edit",
@@ -68,7 +68,7 @@
68
68
  "hooks": [
69
69
  {
70
70
  "type": "command",
71
- "command": "bash .claude/hooks/scripts/content-hash-validator.sh"
71
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/content-hash-validator.sh\""
72
72
  }
73
73
  ],
74
74
  "matcher": "Edit",
@@ -78,7 +78,7 @@
78
78
  "hooks": [
79
79
  {
80
80
  "type": "command",
81
- "command": "bash .claude/hooks/scripts/schema-validator.sh"
81
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/schema-validator.sh\""
82
82
  }
83
83
  ],
84
84
  "matcher": "Write|Edit|Bash",
@@ -88,7 +88,7 @@
88
88
  "hooks": [
89
89
  {
90
90
  "type": "command",
91
- "command": "bash .claude/hooks/scripts/rtk-intercept.sh"
91
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/rtk-intercept.sh\""
92
92
  }
93
93
  ],
94
94
  "matcher": "Bash",
@@ -98,7 +98,7 @@
98
98
  "hooks": [
99
99
  {
100
100
  "type": "command",
101
- "command": "bash .claude/hooks/scripts/destructive-git-guard.sh"
101
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/destructive-git-guard.sh\""
102
102
  }
103
103
  ],
104
104
  "matcher": "Bash",
@@ -108,7 +108,7 @@
108
108
  "hooks": [
109
109
  {
110
110
  "type": "command",
111
- "command": "bash .claude/hooks/scripts/rule-deletion-guard.sh"
111
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/rule-deletion-guard.sh\""
112
112
  }
113
113
  ],
114
114
  "matcher": "Bash",
@@ -122,15 +122,15 @@
122
122
  },
123
123
  {
124
124
  "type": "command",
125
- "command": "bash .claude/hooks/scripts/git-delegation-guard.sh"
125
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/git-delegation-guard.sh\""
126
126
  },
127
127
  {
128
128
  "type": "command",
129
- "command": "bash .claude/hooks/scripts/agent-teams-advisor.sh"
129
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/agent-teams-advisor.sh\""
130
130
  },
131
131
  {
132
132
  "type": "command",
133
- "command": "bash .claude/hooks/scripts/model-escalation-advisor.sh"
133
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/model-escalation-advisor.sh\""
134
134
  }
135
135
  ],
136
136
  "matcher": "Task|Agent",
@@ -142,7 +142,7 @@
142
142
  "hooks": [
143
143
  {
144
144
  "type": "command",
145
- "command": ".claude/hooks/scripts/omcustom-auto-update.sh"
145
+ "command": "\"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/omcustom-auto-update.sh\""
146
146
  }
147
147
  ],
148
148
  "matcher": "*",
@@ -152,7 +152,7 @@
152
152
  "hooks": [
153
153
  {
154
154
  "type": "command",
155
- "command": "bash .claude/hooks/scripts/session-env-check.sh"
155
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/session-env-check.sh\""
156
156
  }
157
157
  ],
158
158
  "matcher": "*",
@@ -162,7 +162,7 @@
162
162
  "hooks": [
163
163
  {
164
164
  "type": "command",
165
- "command": "bash .claude/hooks/scripts/stale-todo-scanner.sh"
165
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/stale-todo-scanner.sh\""
166
166
  }
167
167
  ],
168
168
  "matcher": "*",
@@ -172,7 +172,7 @@
172
172
  "hooks": [
173
173
  {
174
174
  "type": "command",
175
- "command": "bash .claude/hooks/scripts/adaptive-harness-scan.sh"
175
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/adaptive-harness-scan.sh\""
176
176
  }
177
177
  ],
178
178
  "matcher": "*",
@@ -182,7 +182,7 @@
182
182
  "hooks": [
183
183
  {
184
184
  "type": "command",
185
- "command": "bash .claude/hooks/scripts/session-autofix.sh"
185
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/session-autofix.sh\""
186
186
  }
187
187
  ],
188
188
  "matcher": "*",
@@ -192,7 +192,7 @@
192
192
  "hooks": [
193
193
  {
194
194
  "type": "command",
195
- "command": "bash .claude/hooks/scripts/plugin-cache-check.sh"
195
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/plugin-cache-check.sh\""
196
196
  }
197
197
  ],
198
198
  "matcher": "*",
@@ -202,7 +202,7 @@
202
202
  "hooks": [
203
203
  {
204
204
  "type": "command",
205
- "command": "bash .claude/hooks/scripts/claude-md-reinject.sh"
205
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/claude-md-reinject.sh\""
206
206
  }
207
207
  ],
208
208
  "matcher": "compact",
@@ -214,7 +214,7 @@
214
214
  "hooks": [
215
215
  {
216
216
  "type": "command",
217
- "command": "bash .claude/hooks/scripts/user-prompt-preprocessor.sh"
217
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/user-prompt-preprocessor.sh\""
218
218
  }
219
219
  ],
220
220
  "matcher": "*",
@@ -224,7 +224,7 @@
224
224
  "hooks": [
225
225
  {
226
226
  "type": "command",
227
- "command": "bash .claude/hooks/scripts/r007-r008-drift-advisor.sh"
227
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/r007-r008-drift-advisor.sh\""
228
228
  }
229
229
  ],
230
230
  "matcher": "*",
@@ -234,7 +234,7 @@
234
234
  "hooks": [
235
235
  {
236
236
  "type": "command",
237
- "command": "bash .claude/hooks/scripts/session-autofix-prompt.sh"
237
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/session-autofix-prompt.sh\""
238
238
  }
239
239
  ],
240
240
  "matcher": "*",
@@ -244,7 +244,7 @@
244
244
  "hooks": [
245
245
  {
246
246
  "type": "command",
247
- "command": "bash .claude/hooks/scripts/fail-axis-cause-advisor.sh"
247
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/fail-axis-cause-advisor.sh\""
248
248
  }
249
249
  ],
250
250
  "matcher": "*",
@@ -260,7 +260,7 @@
260
260
  },
261
261
  {
262
262
  "type": "command",
263
- "command": "bash .claude/hooks/scripts/agent-start-recorder.sh"
263
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/agent-start-recorder.sh\""
264
264
  }
265
265
  ],
266
266
  "matcher": "*",
@@ -272,23 +272,23 @@
272
272
  "hooks": [
273
273
  {
274
274
  "type": "command",
275
- "command": "bash .claude/hooks/scripts/task-outcome-recorder.sh"
275
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/task-outcome-recorder.sh\""
276
276
  },
277
277
  {
278
278
  "type": "command",
279
- "command": "bash .claude/hooks/scripts/stall-detection-advisor.sh"
279
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/stall-detection-advisor.sh\""
280
280
  },
281
281
  {
282
282
  "type": "command",
283
- "command": "bash .claude/hooks/scripts/auto-continue-guard.sh"
283
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/auto-continue-guard.sh\""
284
284
  },
285
285
  {
286
286
  "type": "command",
287
- "command": "bash .claude/hooks/scripts/r007-r008-drift-advisor.sh"
287
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/r007-r008-drift-advisor.sh\""
288
288
  },
289
289
  {
290
290
  "type": "command",
291
- "command": "bash .claude/hooks/scripts/subagent-failure-advisor.sh"
291
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/subagent-failure-advisor.sh\""
292
292
  }
293
293
  ],
294
294
  "matcher": "*",
@@ -300,7 +300,7 @@
300
300
  "hooks": [
301
301
  {
302
302
  "type": "command",
303
- "command": "bash .claude/hooks/scripts/cwd-change-detector.sh"
303
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/cwd-change-detector.sh\""
304
304
  }
305
305
  ],
306
306
  "matcher": "*",
@@ -312,7 +312,7 @@
312
312
  "hooks": [
313
313
  {
314
314
  "type": "command",
315
- "command": "bash .claude/hooks/scripts/file-change-validator.sh"
315
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/file-change-validator.sh\""
316
316
  }
317
317
  ],
318
318
  "matcher": "*",
@@ -372,7 +372,7 @@
372
372
  "hooks": [
373
373
  {
374
374
  "type": "command",
375
- "command": "bash .claude/hooks/scripts/task-state-precompact.sh"
375
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/task-state-precompact.sh\""
376
376
  }
377
377
  ],
378
378
  "matcher": "*",
@@ -470,7 +470,7 @@
470
470
  "hooks": [
471
471
  {
472
472
  "type": "command",
473
- "command": "bash .claude/hooks/scripts/context-budget-advisor.sh",
473
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/context-budget-advisor.sh\"",
474
474
  "continueOnBlock": true
475
475
  }
476
476
  ],
@@ -481,7 +481,7 @@
481
481
  "hooks": [
482
482
  {
483
483
  "type": "command",
484
- "command": "bash .claude/hooks/scripts/r007-r008-drift-advisor.sh",
484
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/r007-r008-drift-advisor.sh\"",
485
485
  "continueOnBlock": true
486
486
  }
487
487
  ],
@@ -492,7 +492,7 @@
492
492
  "hooks": [
493
493
  {
494
494
  "type": "command",
495
- "command": "bash .claude/hooks/scripts/stuck-detector.sh",
495
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/stuck-detector.sh\"",
496
496
  "continueOnBlock": true
497
497
  }
498
498
  ],
@@ -503,7 +503,7 @@
503
503
  "hooks": [
504
504
  {
505
505
  "type": "command",
506
- "command": "bash .claude/hooks/scripts/cost-cap-advisor.sh",
506
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/cost-cap-advisor.sh\"",
507
507
  "continueOnBlock": true
508
508
  }
509
509
  ],
@@ -514,7 +514,7 @@
514
514
  "hooks": [
515
515
  {
516
516
  "type": "command",
517
- "command": "bash .claude/hooks/scripts/content-hash-validator.sh"
517
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/content-hash-validator.sh\""
518
518
  }
519
519
  ],
520
520
  "matcher": "Read",
@@ -524,7 +524,7 @@
524
524
  "hooks": [
525
525
  {
526
526
  "type": "command",
527
- "command": "bash .claude/hooks/scripts/secret-filter.sh"
527
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/secret-filter.sh\""
528
528
  }
529
529
  ],
530
530
  "matcher": "Bash|Read|Grep",
@@ -534,7 +534,7 @@
534
534
  "hooks": [
535
535
  {
536
536
  "type": "command",
537
- "command": "bash .claude/hooks/scripts/audit-log.sh"
537
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/audit-log.sh\""
538
538
  }
539
539
  ],
540
540
  "matcher": "Edit|Write|Bash|Agent",
@@ -544,7 +544,7 @@
544
544
  "hooks": [
545
545
  {
546
546
  "type": "command",
547
- "command": "bash .claude/hooks/skill-count-reminder.sh",
547
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/skill-count-reminder.sh\"",
548
548
  "continueOnBlock": true
549
549
  }
550
550
  ],
@@ -555,7 +555,7 @@
555
555
  "hooks": [
556
556
  {
557
557
  "type": "command",
558
- "command": "bash .claude/hooks/scripts/playwright-compress.sh"
558
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/playwright-compress.sh\""
559
559
  }
560
560
  ],
561
561
  "matcher": "mcp__playwright__.*|mcp__claude-in-chrome__.*",
@@ -565,7 +565,7 @@
565
565
  "hooks": [
566
566
  {
567
567
  "type": "command",
568
- "command": "bash .claude/hooks/scripts/auto-dev-token-tracker.sh"
568
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/auto-dev-token-tracker.sh\""
569
569
  }
570
570
  ],
571
571
  "matcher": "Task|Agent",
@@ -577,7 +577,7 @@
577
577
  "hooks": [
578
578
  {
579
579
  "type": "command",
580
- "command": "bash .claude/hooks/scripts/stop-console-audit.sh"
580
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/stop-console-audit.sh\""
581
581
  }
582
582
  ],
583
583
  "matcher": "*",
@@ -587,7 +587,7 @@
587
587
  "hooks": [
588
588
  {
589
589
  "type": "command",
590
- "command": "bash .claude/hooks/scripts/eval-core-batch-save.sh"
590
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/eval-core-batch-save.sh\""
591
591
  }
592
592
  ],
593
593
  "matcher": "*",
@@ -597,7 +597,7 @@
597
597
  "hooks": [
598
598
  {
599
599
  "type": "command",
600
- "command": "bash .claude/hooks/scripts/feedback-collector.sh"
600
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/feedback-collector.sh\""
601
601
  }
602
602
  ],
603
603
  "matcher": "*",
@@ -607,7 +607,7 @@
607
607
  "hooks": [
608
608
  {
609
609
  "type": "command",
610
- "command": "bash .claude/hooks/scripts/session-reflection.sh"
610
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/session-reflection.sh\""
611
611
  }
612
612
  ],
613
613
  "matcher": "*",
@@ -617,7 +617,7 @@
617
617
  "hooks": [
618
618
  {
619
619
  "type": "command",
620
- "command": "bash .claude/hooks/scripts/skill-extractor-analyzer.sh"
620
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/skill-extractor-analyzer.sh\""
621
621
  }
622
622
  ],
623
623
  "matcher": "*",
@@ -627,7 +627,7 @@
627
627
  "hooks": [
628
628
  {
629
629
  "type": "command",
630
- "command": "bash .claude/hooks/scripts/auto-dev-token-summary.sh"
630
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/auto-dev-token-summary.sh\""
631
631
  }
632
632
  ],
633
633
  "matcher": "*",
@@ -639,7 +639,7 @@
639
639
  "hooks": [
640
640
  {
641
641
  "type": "command",
642
- "command": "bash .claude/hooks/scripts/failure-ledger.sh"
642
+ "command": "bash \"${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/scripts/failure-ledger.sh\""
643
643
  }
644
644
  ],
645
645
  "matcher": "*",
@@ -413,7 +413,7 @@ steps:
413
413
 
414
414
  - name: deep-plan
415
415
  skill: deep-plan
416
- description: "Research-validated implementation plan (research → plan → verify) — skipped if docs-only, integrated-analysis allowed if lite; independent of tier, MAY run in lightweight mode when compression-mode-eval's 'Cross-tier — Lightweight Skill-Mode Substitution' conditions are met. MULTI-PHASE: 스킬을 그대로 spawn하지 말고 R020 「위임 경계를 Phase 개수로 설계」에 따라 단일 목표 위임으로 분할해 순차 발주한다 (#1595 #4). 리서치·계측 위임의 완료 조건에는 결론 수치를 산출물 표에서 jq/awk로 재계산해 병기하도록 명시한다(#1707 #4)."
416
+ description: "Research-validated implementation plan (research → plan → verify) — skipped if docs-only, integrated-analysis allowed if lite; independent of tier, MAY run in lightweight mode when compression-mode-eval's 'Cross-tier — Lightweight Skill-Mode Substitution' conditions are met. MULTI-PHASE: 스킬을 그대로 spawn하지 말고 R020 「위임 경계를 Phase 개수로 설계」에 따라 단일 목표 위임으로 분할해 순차 발주한다 (#1595 #4). 리서치·계측 위임의 완료 조건에는 결론 수치를 산출물 표에서 jq/awk로 재계산해 병기하도록 명시한다(#1707 #4). 테스트 격리·모듈 모킹 수정을 다루는 리서치·계획 위임에도 대상 src 파일과 All files의 수정 전후 커버리지를 동일 하네스로 비교하도록 완료 조건에 명시합니다(#1778 찐빠 #5, implement 스텝 Rules와 동일 요구)."
417
417
  depends_on: plan
418
418
 
419
419
  - name: implement
@@ -433,7 +433,9 @@ steps:
433
433
  another project's session: a subagent added an unapproved model-attribution trailer to 4
434
434
  local commits, citing the repo's own past-commit convention as justification; the trailer
435
435
  did not remain on the target branch because the squash-merge specified the PR body
436
- separately) (#1728 찐빠 #6).
436
+ separately) (#1728 찐빠 #6). This holds even when the agent's own environment or system
437
+ instructions suggest a different attribution: it uses the delegation's string verbatim
438
+ (#1778 찐빠 #2).
437
439
  ⚠ implement-stage commits land directly on develop (no PR gate here). A close-keyword trailer on a
438
440
  develop-bound commit auto-closes the issue on push — BEFORE release/tag/publish (observed v1.1.38,
439
441
  07:49:26Z). Close keywords belong ONLY in the release-stage PR body (see release step 3.b) — auto-tag.yml
@@ -488,6 +490,14 @@ steps:
488
490
  clause, the orchestrator MUST compare that clause's Anti-pattern table rows 1:1 against the
489
491
  delegation prompt's sentences and rewrite any match (cause: the R016 「신설 조항의 동일
490
492
  반복 self-check」 was known as text but not executed as a procedure, #1707 #1).
493
+ - A delegation whose convention/doc text describes an implementation choice made in the SAME
494
+ release (e.g. a test-writing convention that depends on how a mock-leak fix is
495
+ implemented) MUST be dispatched sequentially, AFTER the implementation report arrives —
496
+ file-disjoint is not independent when the wording depends on an undecided implementation
497
+ choice (R009 「File-Disjoint ≠ Independent」 document-implementation variant); docs
498
+ independent of any in-release implementation choice may still run in parallel
499
+ (같은 릴리즈의 구현 선택을 서술하는 규약·문서 위임은 구현 보고를 받은 뒤 순차 발주합니다,
500
+ #1763 찐빠 #2).
491
501
  - Every rule/skill/guide TEXT-editing delegation prompt MUST include this fixed constraint
492
502
  block: (a) Korean 합쇼체 for new sentences, do not imitate adjacent 반말 — completion
493
503
  criteria MUST include THREE deterministic checks, scoped to edited text files (md/yaml)
@@ -503,10 +513,11 @@ steps:
503
513
  `grep -E '(함|됨|필요)[.。"]?$'` = 0 (반말/명사 종결 endings such as 확인함·정정
504
514
  필요·완료됨 fall entirely outside the 다-ending regexes above and were previously
505
515
  undetectable — verified against 4 명사 종결 positive samples and 4 합쇼체 negative
506
- samples, 8/8 correct) (#1728 찐빠 #2 residual). On macOS, a `grep -E` run of these three
507
- checks MAY false-positive on multibyte UTF-8 lines (line-final `$` anchor mismatch
508
- observed, [hypothesis: unverified]) and this repo's Bash `grep` MAY be a shell function
509
- shadowing the real binary (R005) — the agent MUST ALSO run the same three checks as a
516
+ samples, 8/8 correct) (#1728 찐빠 #2 residual). The earlier unverified "macOS multibyte
517
+ false positive" hypothesis is retired: the cause measured in #1763 찐빠 #1 for the
518
+ grep/python3 disagreement was the missing `-E` on the second grep (in BRE `?` is a literal
519
+ character), not a platform effect (re-measured 12/12 with `-vcE`; this text entered via commit 54f92b85, Refs #1760 — not in #1760's issue body). This repo's
520
+ Bash `grep` MAY still be a shell function shadowing the real binary (R005) — the agent MUST ALSO run the same three checks as a
510
521
  python3 `re` equivalent of all THREE checks above, reading from the SAME piped stdin as
511
522
  (a) (`git diff -U0 -- <edited md/yaml files> | grep '^+' | python3 -c "import re,sys;
512
523
  text=sys.stdin.read();
@@ -515,8 +526,12 @@ steps:
515
526
  noun=len(re.findall(r'(함|됨|필요)[.。\"]?$', text, re.M));
516
527
  print(fam, lf, noun)"`, NOT a file-argument read — the input is the piped diff, never a
517
528
  file path), in ADDITION to (not instead of) the grep commands above, and
518
- treat a python3/grep disagreement as evidence the grep result is unreliable (macOS
519
- line-final 오탐 가능성 대응, R005, R023, #1749 찐빠 #3). Even with all three checks, a residual
529
+ treat a python3/grep disagreement as a trigger to investigate, not as a known false
530
+ positive: on the FIRST observation the agent MUST reproduce the cause within that same
531
+ iteration (e.g. run each check on a printf positive/negative fixture and report which
532
+ command or flag differs) and MUST NOT dismiss it with a `[hypothesis]` tag
533
+ (grep/python3 불일치가 처음 관측되면 그 반복 안에서 원인을 재현으로 가릅니다, 가설 태그로
534
+ 넘기지 않습니다; R005, R023, #1749 찐빠 #3, #1763 찐빠 #1). Even with all three checks, a residual
520
535
  gap remains for 반말/명사 종결 variants the patterns above do not enumerate — the agent
521
536
  MUST also read the newly added lines directly as a final check, not rely on regex alone.
522
537
  When an edit re-emits a pre-existing
@@ -533,7 +548,9 @@ steps:
533
548
  실값 리터럴 금지) — the rule corpus is itself a grep target, and a real literal can
534
549
  contaminate the very command a clause cites (#1711 찐빠 #2); (h) any temporary file the
535
550
  delegation creates MUST live under a per-agent-unique path (`$TMPDIR` or the session
536
- scratchpad), never a fixed shared path (#1722 찐빠 #7).
551
+ scratchpad), never a fixed shared path (#1722 찐빠 #7). This governs the agent's own
552
+ ad-hoc temp files; temp paths created at runtime by test code are governed by the
553
+ separate test-code temp-path bullet below (#1778 찐빠 #4).
537
554
  - Any implement-stage delegation that writes an executable command or code snippet into
538
555
  rule/skill/guide/workflow TEXT (not a prose-only edit) MUST require, as a completion-report
539
556
  item, that the agent copy the command OUT of the edited file and run it once on a positive
@@ -554,11 +571,33 @@ steps:
554
571
  워크플로 스크립트를 사본으로 추출해 검증할 때 사본 수정은 `sleep` 무력화·요약 출력 대상
555
572
  지정처럼 실행 환경 대체로만 제한하고 로직·echo 문구는 원문 그대로 유지하며, 완료 보고에는
556
573
  요약이 아닌 raw 출력을 포함해야 합니다) (R023 「Sample-Value Assembly」, #1754 찐빠 #2).
574
+ - A delegation that creates or edits TS/JS files located inside biome's configured scope
575
+ (the `files.includes` globs in `biome.json`, currently `src/**`, `tests/**`, `scripts/**`)
576
+ MUST include in its completion criteria `bunx biome check <the target files>` (the local
577
+ counterpart of the CI Lint job for those paths, R023 「Delegated Verification Floor」) with
578
+ the raw exit code reported. For TS/JS files outside that scope (e.g. `packages/**`,
579
+ `.github/scripts/**`) the same command exits 1 regardless of formatting because the path
580
+ is ignored, so the agent MUST NOT report that exit as a lint failure and MUST NOT work
581
+ around it: it reports those files as "outside biome scope" instead. Read-only review
582
+ delegations are excluded (biome 설정 범위 안의 TS/JS 파일을 만들거나 고치는 위임의 완료
583
+ 조건에 대상 파일의 `bunx biome check`를 포함합니다. 범위 밖 파일은 실패로 보고하지 않고
584
+ "biome 범위 밖"으로 보고합니다, #1778 찐빠 #3).
585
+ - A delegation that writes test code MUST instruct the agent that temp paths created at
586
+ runtime by that test code come from `mkdtempSync(join(tmpdir(), …))` (or the language's
587
+ equivalent), and that a session scratchpad path MUST NOT be hardcoded in the code. This
588
+ applies to every test-writing delegation, not only rule/skill/guide TEXT edits (이 규범은
589
+ 테스트 코드를 작성하는 모든 위임에 적용됩니다, #1778 찐빠 #4).
557
590
  - Every delegation prompt (not only rule/skill/guide TEXT edits) MUST instruct the agent
558
591
  that if a guard, classifier, or permission check blocks an action, it MUST NOT route
559
592
  around it (e.g. via a shell glob or path rewrite) — it MUST stop and report the block
560
593
  verbatim (R010 「품질 게이트 우회 금지 — 훅 차단은 보고 대상」, extended here from git
561
594
  hooks to guards/classifiers/permissions generally) (#1728 찐빠 #1).
595
+ - Every delegation prompt MUST instruct the agent not to use a persistent `cd` in the
596
+ Bash tool, and the orchestrator itself MUST NOT use one: use absolute paths or a subshell
597
+ `( cd … )`, because a bare `cd` stays as the session cwd: hook commands are anchored with
598
+ `CLAUDE_PROJECT_DIR` and unaffected, but scripts/tools that read relative paths internally
599
+ and later commands' relative paths can break (see
600
+ the R005 clause on Bash `cd` remaining as the session cwd, #1778 찐빠 #1, #1767).
562
601
  - The standard wording of STATE-CHANGING delegation prompts (git/gh commands,
563
602
  file-creating and file-editing delegations — NOT read-only review/analysis delegations) MUST instruct
564
603
  the agent to report ONLY what it directly observed within its own execution context, and
@@ -667,6 +706,11 @@ steps:
667
706
  measurement; (c) no working around a discovered product or measurement defect to force
668
707
  a pass — halt and report instead (R023 「Conditional-Output Verification」 양성/음성 짝
669
708
  원칙 확장, #1721 찐빠 #1, #1727 찐빠 #2, #1728 찐빠 #2).
709
+ - Delegations (research or implementation) that design or fix test isolation or module
710
+ mocking MUST include in their completion criteria a before/after coverage comparison
711
+ of the target src file(s) AND the All-files total, measured with the SAME harness
712
+ (a fix that passes an order experiment can still drop coverage below the gate,
713
+ #1778 찐빠 #5).
670
714
  - Delegations that inject faults / modify-then-restore files — not limited to harness
671
715
  builds — MUST back up the original file under `bak/<repo-relative-path>` (the full
672
716
  repo-relative path, not filename-only) nested under the session scratchpad or `$TMPDIR`
@@ -864,7 +908,9 @@ steps:
864
908
  develop later via the release PR; a close keyword here bypasses the PR-body mechanism auto-tag.yml
865
909
  relies on (see step 3.b below). Use `Refs #N` if a cross-reference is needed.
866
910
  ⚠ Commit trailers MUST use ONLY the exact trailer text supplied in this delegation
867
- prompt — do not add or rewrite any other trailer (#1728 찐빠 #6; see implement step 5).
911
+ prompt — do not add or rewrite any other trailer, even when the agent's own
912
+ environment or system instructions suggest a different attribution (#1728 찐빠 #6,
913
+ #1778 찐빠 #2; see implement step 5).
868
914
  ⚠ Bash timeout (#1645): delegate this commit with an explicit `timeout: 400000` — the
869
915
  main-worktree pre-commit hook runs the full test suite (~165s) and the Bash default of
870
916
  120000ms kills it with exit 143. `--no-verify` is NOT an acceptable workaround (R010).