oh-my-customcode 1.1.82 → 1.1.83

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
@@ -217,7 +217,7 @@ var init_package = __esm(() => {
217
217
  workspaces: [
218
218
  "packages/*"
219
219
  ],
220
- version: "1.1.82",
220
+ version: "1.1.83",
221
221
  description: "Batteries-included agent harness for Claude Code",
222
222
  type: "module",
223
223
  bin: {
package/dist/index.js CHANGED
@@ -2326,7 +2326,7 @@ var package_default = {
2326
2326
  workspaces: [
2327
2327
  "packages/*"
2328
2328
  ],
2329
- version: "1.1.82",
2329
+ version: "1.1.83",
2330
2330
  description: "Batteries-included agent harness for Claude Code",
2331
2331
  type: "module",
2332
2332
  bin: {
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "workspaces": [
4
4
  "packages/*"
5
5
  ],
6
- "version": "1.1.82",
6
+ "version": "1.1.83",
7
7
  "description": "Batteries-included agent harness for Claude Code",
8
8
  "type": "module",
9
9
  "bin": {
@@ -365,6 +365,8 @@ Single agent spawns do NOT use the `[N]` prefix.
365
365
  ✗ agent-2: failed (reason)
366
366
  ```
367
367
 
368
+ 완료 알림에 보고 본문이 없으면 한 턴 기다리고, 그래도 없으면 산출물을 실측(ground truth)한 뒤 SendMessage로 재요청합니다 — 모든 위임 결과 수집 단계에 적용됩니다.
369
+
368
370
  ## Parallel Feature Integration Gate
369
371
 
370
372
  병렬 각자의 "build green"은 통합 정합성 미보장 — 병합 후 통합 빌드+런타임 스모크 게이트 필수.
@@ -48,12 +48,14 @@ The loop converges naturally when **both** conditions are met:
48
48
  1. The auto-dev-eligible issue set reaches 0
49
49
  2. All open PRs have been either merged or explicitly deferred
50
50
 
51
+ If a release step is held pending a user-executed constrained command (per `pipeline auto-dev`'s release-step user-execution constraint check), convergence MUST NOT be declared — present the pending command(s) to the user and wait, even if the eligible issue set and open-PR count would otherwise read as zero (#1733 찐빠 #2).
52
+
51
53
  수렴을 선언하기 전에(수렴 조건이 아니라 **선언 직전 게이트**로) 이 세션의 homework 아티팩트 수를 실측해 반복 수와 대조합니다. 불일치는 다음 반복을 돌리는 신호가 아니라 **누락분을 기록하라는 신호**이므로, 회상 기반(`[recall]` 표시)으로라도 기록한 뒤 수렴을 선언합니다. v1.1.65 반복은 아티팩트를 기록하지 않은 채 다음 반복으로 넘어갔고 Iteration 4 종료 후에야 누락이 발견되어 회상 기반으로 보완되었습니다(#1688 Iteration 2 #1).
52
54
 
53
55
  FSD processes **open PRs as part of each iteration**, not only issues. This includes dependabot PRs and any automatically created PRs. Issue eligibility follows `/pipeline auto-dev` label selection exactly:
54
56
 
55
57
  - **Included**: `verify-ready` (preferred), unlabeled auto-dev candidates
56
- - **Excluded**: `verify-done`, `needs-review`, `decision-needed` labels
58
+ - **Excluded**: `triage-complete`, `needs-review`, `decision-needed` labels
57
59
 
58
60
  Do NOT invent new label logic here — defer to the `pipeline` skill's auto-dev issue selection.
59
61
 
@@ -69,6 +71,8 @@ When open PRs are found during an iteration:
69
71
  | Breaking change / design judgment required | Defer and surface to user |
70
72
  | Explicitly excluded by user this session | Skip (honor directive persistence, R015) |
71
73
 
74
+ Before executing any merge in this table, apply the same user-execution constraint check used by the release step (CLAUDE.md / session memory / the entry card, if the environment provides one, e.g. a recall entry card) — if the merge is covered by a user-execution constraint, do NOT execute it; present the exact command to the user and wait (#1733 찐빠 #2).
75
+
72
76
  All PR merge operations are delegated to **mgr-gitnerd** (R010). After merging, verify ground-truth via `gh pr view` or `git log` before declaring done (R020).
73
77
 
74
78
  Do NOT merge PRs that require user approval for architectural decisions. Surface them with a short summary and wait.
@@ -8,7 +8,7 @@ Used by `scope-selection` to include/exclude issues and by `implement` for lifec
8
8
  | Label | Meaning | scope-selection 처리 |
9
9
  |-------|---------|----------------------|
10
10
  | `verify-ready` | Triage 완료, 즉시 verify 가능 (자동화 후보) | INCLUDE (preferred) |
11
- | `verify-done` | Triage 완료했으나 deferred 또는 이미 처리됨 (이번 사이클 미포함) | EXCLUDE |
11
+ | `triage-complete` | Triage 완료, auto-dev 스코프에 선택되지 않음 (standalone triage 또는 deferred) — release-plan이 수집; auto-dev 내부 triage에서 manifest 선택 이슈는 `verify-ready` 부여 (#1734) | EXCLUDE |
12
12
  | `in-progress` | 작업 진행 중 (다른 세션에서 claim됨) | EXCLUDE |
13
13
  | `needs-review` | 사람 검토 필요 (자동 파이프라인 진입 불가) | EXCLUDE |
14
14
  | `decision-needed` | 결정 필요 (보안, 정책 critical) | EXCLUDE |
@@ -22,7 +22,7 @@ Used by `scope-selection` to include/exclude issues and by `implement` for lifec
22
22
  ```
23
23
  EXCLUDE if:
24
24
  - blocked_by_decision == true
25
- - labels ∩ {decision-needed, needs-review, verify-done, manual-action, in-progress} ≠ ∅
25
+ - labels ∩ {decision-needed, needs-review, triage-complete, manual-action, in-progress} ≠ ∅
26
26
 
27
27
  INCLUDE (preferred tier):
28
28
  - labels ∩ {verify-ready, claude-code-release, documentation} ≠ ∅
@@ -55,5 +55,5 @@ If ALL scoped issues carry at least one lite-eligible label AND scope size ≤ 7
55
55
  | Work started | Add `in-progress`, assign @me |
56
56
  | Work succeeded | Remove `in-progress`, add `verify-ready` |
57
57
  | Work failed | Remove `in-progress`, add `needs-review` |
58
- | Released | Remove `verify-ready`, close with "Fixed in v{version}" |
59
- | Deferred | Add `verify-done`, label "Deferred from v{version}" |
58
+ | Released | Remove `verify-ready`, close with "Fixed in v{version}" (auto-dev's `ci-check` step applies the `verify-ready` removal to the CURRENT release's scoped issues only; past closed issues' stale `verify-ready` are out of scope by user decision, #1734) |
59
+ | Deferred | Add `triage-complete`, label "Deferred from v{version}" |
@@ -158,7 +158,7 @@ steps:
158
158
  Reference label semantics: .claude/skills/pipeline/labels.md
159
159
 
160
160
  Apply filter rules:
161
- - EXCLUDE: blocked_by_decision == true OR labels ∩ {decision-needed, needs-review, verify-done, manual-action, in-progress} ≠ ∅
161
+ - EXCLUDE: blocked_by_decision == true OR labels ∩ {decision-needed, needs-review, triage-complete, manual-action, in-progress} ≠ ∅
162
162
  - INCLUDE (preferred): labels ∩ {verify-ready, claude-code-release, documentation} ≠ ∅
163
163
  - INCLUDE (standard): P1/P2/P3 issues not in excluded set
164
164
  - Tie-break: P1 > P2 > P3 > unclassified
@@ -237,6 +237,9 @@ steps:
237
237
  - triage step: skip professor-triage skill; perform direct manifest summary instead
238
238
  - plan step: skip release-plan skill; single-response plan instead
239
239
  - deep-plan step: skip deep-plan skill; single-response implementation notes instead
240
+ (except when scope contains a security/availability issue — see the Cross-tier
241
+ 「Lightweight Skill-Mode Substitution」 restriction below, which forbids this
242
+ substitution for such issues)
240
243
  - deep-verify step: skip deep-verify skill; perform self-review checklist instead
241
244
  — 단, 변경 집합에 `.claude/rules/**`(또는 agents/skills frontmatter 등 구조 표면)가
242
245
  포함되면 self-review로 대체하지 않고 mgr-sauron R017 검증을 **단일 목표 위임으로 필수
@@ -262,6 +265,9 @@ steps:
262
265
  - triage step: MAY replace professor-triage skill spawn with orchestrator integrated analysis
263
266
  - plan step: MAY replace release-plan skill spawn with orchestrator integrated analysis
264
267
  - deep-plan step: MAY replace deep-plan skill spawn with orchestrator integrated analysis
268
+ (except when scope contains a security/availability issue — see the Cross-tier
269
+ 「Lightweight Skill-Mode Substitution」 restriction below, which forbids this
270
+ substitution for such issues)
265
271
  - deep-verify step: perform via mgr-sauron R017 structural verification + core self-check (split standard: see the deep-verify step description — R017 spawn + change-type adversarial review, one single-goal delegation each)
266
272
  (instead of full deep-verify skill spawn). If the change set has NO structural surface
267
273
  (no agent/skill/guide/rule frontmatter changed — e.g. a workflow-yaml-only or docs-only change),
@@ -307,14 +313,14 @@ steps:
307
313
  | pre-triage | `gh label create in-progress / verify-ready / needs-review --force` (idempotent label bootstrap) |
308
314
  | scope-selection | Milestone 3-branch state machine (Step 0): closed → HALT / open → reuse / absent → `gh api repos/{owner}/{repo}/milestones --method POST`. Then: assign every scoped issue to that milestone. |
309
315
  | compression-mode-eval | none (pure evaluation + justification logs) |
310
- | triage | none (analysis only) — compressible |
316
+ | triage | `verify-ready` added to manifest issues selected by professor-triage when it runs inside this step (NOT `triage-complete`) — analysis output is compressible, this label side effect is not; when triage is skipped (docs-only) or substituted (lite integrated-analysis, lightweight mode), no separate label action is required here — the implement step's per-issue success path (row below: "On success: remove in-progress, add verify-ready") already adds `verify-ready` to each processed issue before this release completes |
311
317
  | plan | none (analysis only) — compressible |
312
318
  | deep-plan | none (analysis only) — compressible |
313
319
  | implement | `gh issue edit <N> --add-label in-progress --assignee @me`; `gh issue comment <N>` (start notice); on success remove in-progress + add verify-ready; on failure remove in-progress + add needs-review + comment error summary |
314
320
  | verify-build | none (gate only) |
315
321
  | deep-verify | none (analysis only) — compressible |
316
322
  | release | PR body MUST carry `Closes #N` for every resolved issue (auto-tag.yml greps the PR body); non-auto-tag projects additionally: `gh api .../milestones/{n} --method PATCH --field state=closed`, `gh issue close {n}`, label needs-review issues "Deferred from v{version}" |
317
- | ci-check | none (verification only) |
323
+ | ci-check | `gh issue edit <N> --remove-label in-progress` for stale labels; `gh issue edit <N> --remove-label verify-ready` for THIS release's CLOSED scoped issues only (past closed issues excluded, #1734) |
318
324
  | post-release-followup | new issue registration for release follow-ups (genuine defects auto-registered, no-ask per R016) |
319
325
 
320
326
  Only the rows marked "none (analysis only)" are compressible. Any step with a
@@ -366,6 +372,20 @@ steps:
366
372
  `mode: lightweight`) so downstream steps and reviewers can tell it apart from a full
367
373
  skill spawn (결과물에 모드를 표시, #1721 제안 4).
368
374
 
375
+ Additional restriction — security/availability scope (#1733 찐빠 #9): if ANY scoped issue
376
+ carries the `security` label, OR its title/body explicitly states a security/availability
377
+ concern (e.g. rate limiting, resource exhaustion, injection, denial-of-service — this repo
378
+ has no separate `availability` label; measured via `gh label list`, so an availability
379
+ concern must be asserted in the issue text, not inferred from a label), this lightweight
380
+ substitution is FORBIDDEN for deep-plan on that issue — AND compression-mode-eval Tier 2
381
+ lite's deep-plan integrated-analysis substitution is also FORBIDDEN for it; deep-plan MUST
382
+ run as a full skill spawn. Because deep-plan is a single release-scoped step (not run
383
+ per-issue), when ANY scoped issue qualifies, this restriction applies to the whole
384
+ release's deep-plan step. The entry-point audit for such an issue MUST include an
385
+ "executions per request (amplification)" check — how many downstream operations a single
386
+ request can trigger (e.g. GraphQL alias batching, N+1 fan-out) — not only a per-call
387
+ timeout/rate-limit check. (GraphQL document fuzz testing is OUT of scope here.)
388
+
369
389
  This substitution is NEVER available for implement, verify-build, release, ci-check, or
370
390
  deep-verify.
371
391
  It replaces analysis output ONLY — every step's state-change side effect still runs in
@@ -382,7 +402,7 @@ steps:
382
402
 
383
403
  - name: triage
384
404
  skill: professor-triage
385
- description: "Cross-analysis triage with priority assessment (scoped to release manifest) — 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"
405
+ description: "Cross-analysis triage with priority assessment (scoped to release manifest) — invoke professor-triage WITH the release manifest issue numbers from scope-selection's output as input; in this auto-dev context, manifest issues receive `verify-ready` (not `triage-complete`) per the side-effect inventory above — 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"
386
406
  depends_on: compression-mode-eval
387
407
 
388
408
  - name: plan
@@ -448,6 +468,16 @@ steps:
448
468
  (#1701 #1). The orchestrator's own wiring judgement (which file/anchor already covers a
449
469
  new clause) counts as final wording too — the prompt supplies candidate files/anchors
450
470
  only, and the subagent decides coverage by quoting the covering sentence (R010 [#1704 #1]).
471
+ Non-issue sources (더루키 회상, 메모리, 다른 프로젝트 관측) MUST be placed in a separate
472
+ block labeled with its source (e.g. `[출처: 더루키 회상 — <project>]`) and MUST NOT be
473
+ mixed into issue-quote sentences — completion criteria MUST state this separation
474
+ explicitly, applying to every orchestrator-authored delegation, all tiers (R010 「출처
475
+ 인용과 인접 문구 점검」 확장, #1735 찐빠 #1).
476
+ - A release that bundles ≥2 `feedback`-type issue proposals MUST produce a per-proposal
477
+ application-boundary table (exceptions, deadlines, tiers/steps) during plan/deep-plan or
478
+ its lightweight tier substitute, applying to lite and standard tiers, and
479
+ implement-stage delegation prompts MUST carry the relevant boundary row for each edit
480
+ (회고 제안 묶음 릴리즈의 통합 분석에 적용 경계 표 필수, #1735 찐빠 #4).
451
481
  - Before dispatching any delegation prompt in an iteration that created or reinforced a rule
452
482
  clause, the orchestrator MUST compare that clause's Anti-pattern table rows 1:1 against the
453
483
  delegation prompt's sentences and rewrite any match (cause: the R016 「신설 조항의 동일
@@ -488,6 +518,14 @@ steps:
488
518
  around it (e.g. via a shell glob or path rewrite) — it MUST stop and report the block
489
519
  verbatim (R010 「품질 게이트 우회 금지 — 훅 차단은 보고 대상」, extended here from git
490
520
  hooks to guards/classifiers/permissions generally) (#1728 찐빠 #1).
521
+ - No state-changing command (`gh issue create/edit/close`, `gh pr create/edit/close/merge`,
522
+ `git push`, label changes) — including the orchestrator's own direct commands, not only
523
+ delegated ones — MAY use a `||` fallback that prints success-looking output; the observed
524
+ failure mode was a failed `gh issue create` followed by a `||` fallback that printed a
525
+ DIFFERENT issue's URL, which the orchestrator briefly read as a successful create
526
+ (#1735 찐빠 #2). Exceptions: a `||` fallback whose output is explicitly marked as
527
+ failure (e.g. `|| echo "::warning::…"`, a literal `MISS` token) and idempotent bootstrap
528
+ commands (no `||` success masking) such as `gh label create --force 2>/dev/null`.
491
529
  - After any delegation that creates temporary files under constraint (h) above, the
492
530
  orchestrator MUST confirm with `git status --short` that no stray file was left in the
493
531
  repo (#1721 찐빠 #7).
@@ -496,7 +534,13 @@ steps:
496
534
  arithmetic below, not a replacement for it); compute turn arithmetic (files × 3 +
497
535
  edit_items × 2 ≤ 16 — a #1709-proposed guide kept below the 20-turn limit, not a
498
536
  truncation guarantee, per R020 「maxTurns 절단 실증」 6항) and state that arithmetic in
499
- the delegation prompt before dispatch (#1709 #1).
537
+ the delegation prompt before dispatch (#1709 #1). Any edit delegation requiring
538
+ verification of N quotations or identifiers (not only claude-code-release CC-note
539
+ delegations) MUST perform that verification with batched command(s) (a single loop or
540
+ combined `grep -F` pass over all N items), never per-item invocations, and the turn
541
+ arithmetic above MUST add a batched-verification term — ⌈N/batch⌉ — still an
542
+ upper-bound guide that may still truncate, not a truncation guarantee (검증 비용을
543
+ 턴 산술에 반영, R020 「maxTurns 절단 실증」 6항 확장, #1737 찐빠 #1).
500
544
  - Parity delegation prompts (e.g. a ko mirror tracking an en source) MUST require THREE
501
545
  directions — additions, edits, AND deletions — to match the source, never additions
502
546
  only; completion criteria MUST include a `grep -F` confirming zero rows/sentences are
@@ -523,6 +567,16 @@ steps:
523
567
  before restating either — do not relay an unverified agent-reported count or identifier
524
568
  (R023 「리서치 위임의 결론 수치는 표에서 재계산해 병기」 #1707 #4 확장, #1709 #5, #1722
525
569
  찐빠 #3).
570
+ - Delegations that create files, binaries, worktrees, or branches (artifact-creating
571
+ delegations only — text-only edits are excluded) MUST include measured output in their
572
+ completion report — `file <bin>` for binaries, `ls -la <path>` for created paths, `git
573
+ worktree list` for worktrees, `git branch --list` for branches, as applicable — and the
574
+ orchestrator MUST confirm architecture/path from that measured output before using the
575
+ artifact, not from the agent's self-report alone (R020 Subagent Self-Report
576
+ Verification, #1733 찐빠 #1). (#1733 찐빠 #1's third proposal — never use haiku for
577
+ worktree/cross-compile delegations — is not added separately here: R006
578
+ (`.claude/rules/MUST-agent-design.md`) already scopes `haiku` to "Fast, cheap tasks
579
+ (search, simple edits)", which excludes multi-step build/worktree work.)
526
580
  - Delegations that build or replace an evaluation/test harness or a production code path
527
581
  (fixtures, ablation lanes, scoring/oracle logic) MUST require bidirectional proof, not
528
582
  a single-direction pass: (a) positive AND negative fixtures — a fixture set that can
@@ -536,6 +590,14 @@ steps:
536
590
  measurement; (c) no working around a discovered product or measurement defect to force
537
591
  a pass — halt and report instead (R023 「Conditional-Output Verification」 양성/음성 짝
538
592
  원칙 확장, #1721 찐빠 #1, #1727 찐빠 #2, #1728 찐빠 #2).
593
+ - Delegations that inject faults / modify-then-restore files — not limited to harness
594
+ builds — MUST back up the original file under `bak/<repo-relative-path>` (the full
595
+ repo-relative path, not filename-only) nested under the session scratchpad or `$TMPDIR`
596
+ (not inside the repo, to stay consistent with constraint (h) above), and a checksum
597
+ comparison after restore is MANDATORY. A `git diff`-based patch approach is also allowed.
598
+ `git stash` is otherwise allowed EXCEPT when parallel delegations share the working tree
599
+ (R009 「File-Disjoint ≠ Independent (Local Git State)」), where it MUST NOT be used
600
+ (#1733 코멘트 찐빠 #8).
539
601
  - For `claude-code-release` issues, CC release knowledge goes to
540
602
  `guides/claude-code/15-version-compatibility.md` (+ templates mirror) per rule; a rule
541
603
  file gets at most ONE line of behavioral norm only when agent behavior must change.
@@ -638,6 +700,19 @@ steps:
638
700
  prompt: |
639
701
  Create a GitHub Release.
640
702
 
703
+ 0a. User-execution constraint check (mandatory, before step 0, #1733 찐빠 #2): read
704
+ CLAUDE.md, session memory, and the entry card (if the environment provides one, e.g. a
705
+ recall entry card) for any user-execution constraint (e.g. "merge/tag/publish must be
706
+ run by the user, not the agent"). For each command this release step is about to run:
707
+ if it is COVERED by a constraint (merge, tag, publish), do NOT execute it — present the
708
+ exact command(s) to the user and STOP this step; if it is NOT covered (e.g. branch
709
+ creation, version bump, PR creation — coverage is judged by the scope of the constraint
710
+ text actually found in CLAUDE.md/session memory, not by this example list), proceed
711
+ normally. No matching constraint found → unchanged behavior, proceed to step 0. User decision
712
+ (recorded): in an unattended run (`/fsd` etc. — see pre-triage Phase 0.6
713
+ `unattended_mode`), STOP at the first covered command, present it to the user, and HOLD
714
+ the convergence declaration until the user runs it and confirms.
715
+
641
716
  0. Pre-check (mandatory, delegate to mgr-gitnerd per R010): Detect and remove stale local `release` branch if present.
642
717
  The local `release` branch (file ref) conflicts with `release/v*` directory ref namespace.
643
718
  mgr-gitnerd executes (force-delete acceptable in automation context; warns if branch has unpushed commits):
@@ -800,7 +875,11 @@ steps:
800
875
  in-progress`) and report the fix; if the issue is still OPEN, do NOT close it here —
801
876
  closing stays with auto-tag.yml unless it failed to close that issue, in which case
802
877
  report the open issue for manual close per release step 3.d above (#1722 하네스 제안
803
- 4).
878
+ 4). Additionally, for each scoped issue that IS closed by THIS release, remove a
879
+ lingering `verify-ready` label if present (`gh issue edit <N> --remove-label
880
+ verify-ready`) — scoped to THIS release's closed issues only; bulk-removing
881
+ `verify-ready` from previously closed issues is explicitly excluded (user decision,
882
+ #1734).
804
883
  6. Report final CI status.
805
884
  description: "Post-release CI verification and fix loop"
806
885
  depends_on: release
@@ -19,7 +19,7 @@ After PR creation in the auto-dev release workflow, collect unaddressed findings
19
19
  Gather unfinished work from multiple sources:
20
20
 
21
21
  **Source A — Remaining open issues**:
22
- - Run: `gh issue list --label verify-done --state open --json number,title,labels`
22
+ - Run: `gh issue list --label triage-complete --state open --json number,title,labels`
23
23
  - These are triaged issues NOT included in the current release
24
24
 
25
25
  **Source B — Deep-verify findings**:
@@ -20,12 +20,14 @@ Analyzes GitHub issues directly against the current codebase. For each issue, se
20
20
  ## Usage
21
21
 
22
22
  ```
23
- /professor-triage # Default: --state open (excludes verify-done)
23
+ /professor-triage # Default: --state open (excludes triage-complete)
24
24
  /professor-triage 587 589 590 591 592 # Direct issue numbers
25
25
  /professor-triage --label codex-release # Custom label filter
26
26
  /professor-triage --since 2026-03-20 # Date filter
27
27
  ```
28
28
 
29
+ When `pipeline auto-dev`'s triage step invokes this skill with a release manifest (issue numbers from scope-selection) instead of a user typing issue numbers directly, the Phase 5 label differs — see the "Auto-dev manifest detection" bullet under Phase 5 Action Policy below.
30
+
29
31
  ## Workflow Contract
30
32
 
31
33
  5-phase pipeline:
@@ -86,12 +88,13 @@ See R006 "Sensitive Path Handling" (CC v2.1.121+ direct-write convention).
86
88
  - Issue already resolved by commit → `gh issue close --reason "completed"` + resolving commit comment
87
89
  - Cross-analysis "Not Applicable" → `gh issue close --reason "not planned"`
88
90
  - Duplicate series → close older + `duplicate` label
89
- - All analysis complete → add `verify-done` label
91
+ - All analysis complete → add `triage-complete` label (meaning: triaged but not selected in this auto-dev cycle — deferred/excluded, collected by release-plan; when this skill runs standalone rather than inside auto-dev's triage step, this is the label applied — manifest-selected issues inside auto-dev get `verify-ready` instead, #1734)
92
+ - **Auto-dev manifest detection**: when the caller supplies a release manifest (the list of issue numbers selected by `pipeline auto-dev`'s scope-selection step) as this skill's issue-number argument, treat it as auto-dev context — label those manifest issues `verify-ready`, NOT `triage-complete`. With no manifest supplied (standalone `/professor-triage`, `--label`, `--state`, or `--since` invocation), apply the default `triage-complete` label per the bullet above.
90
93
  - Priority assigned → add `P1`/`P2`/`P3` label
91
94
 
92
95
  **Confirmation required** (high-risk): issue reopen, new issue creation, epic linking, issue body modification.
93
96
 
94
- **Ensure `verify-done` label exists**: `gh label create "verify-done" --color "0E8A16"` if missing.
97
+ **Ensure `triage-complete` label exists**: `gh label create "triage-complete" --color "0E8A16"` if missing.
95
98
 
96
99
  ## Permission Mode
97
100
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: release-plan
3
- description: Generate release-unit development plans from professor-triage completed (verify-done) issues, grouping by priority and size
3
+ description: Generate release-unit development plans from professor-triage completed (triage-complete) issues, grouping by priority and size
4
4
  scope: harness
5
5
  user-invocable: true
6
6
  effort: medium
@@ -10,12 +10,12 @@ effort: medium
10
10
 
11
11
  ## Purpose
12
12
 
13
- Collects open GitHub issues labeled `verify-done` (triage-completed by `/professor-triage`), groups them into release units by priority and estimated size, and generates a structured release plan document. Plan only — no implementation, no commits.
13
+ Collects open GitHub issues labeled `triage-complete` (triage-completed by `/professor-triage`), groups them into release units by priority and estimated size, and generates a structured release plan document. Plan only — no implementation, no commits.
14
14
 
15
15
  ## Usage
16
16
 
17
17
  ```
18
- /release-plan # Default: all verify-done open issues
18
+ /release-plan # Default: all triage-complete open issues
19
19
  /release-plan --next minor # Force minor version bump
20
20
  /release-plan --next patch # Force patch version bump
21
21
  /release-plan --dry-run # Print plan to stdout only, no file write
@@ -26,14 +26,14 @@ Collects open GitHub issues labeled `verify-done` (triage-completed by `/profess
26
26
  ### Phase 1: Collect Issues
27
27
 
28
28
  ```bash
29
- # Get all open issues labeled verify-done
30
- gh issue list --state open --label verify-done \
29
+ # Get all open issues labeled triage-complete
30
+ gh issue list --state open --label triage-complete \
31
31
  --json number,title,labels,body,createdAt
32
32
  ```
33
33
 
34
- If `verify-done` label returns 0 results, check label existence:
34
+ If `triage-complete` label returns 0 results, check label existence:
35
35
  ```bash
36
- gh label list | grep verify-done
36
+ gh label list | grep triage-complete
37
37
  ```
38
38
  Report if label is missing and stop.
39
39
 
@@ -81,10 +81,10 @@ Use title keywords as additional hints:
81
81
  - Epic references → group constraint
82
82
 
83
83
  **Epic handling**:
84
- - Epic issues (title starts with "epic:" or has `epic` label) with `verify-done` label:
84
+ - Epic issues (title starts with "epic:" or has `epic` label) with `triage-complete` label:
85
85
  - Do NOT include the epic itself in release bins
86
86
  - DO scan epic body for child issue references (#NNN)
87
- - Include any open child issues that have `verify-done` label
87
+ - Include any open child issues that have `triage-complete` label
88
88
  - If all child issues are closed, recommend closing the epic
89
89
 
90
90
  ### Phase 4: Group into Release Units
@@ -151,8 +151,8 @@ For each release group, produce:
151
151
  ### Completeness Check
152
152
 
153
153
  Before generating the plan document, verify:
154
- - Every verify-done issue is assigned to a release bin (none dropped)
155
- - Epic child issues with verify-done are included
154
+ - Every triage-complete issue is assigned to a release bin (none dropped)
155
+ - Epic child issues with triage-complete are included
156
156
  - Issue count in plan == issue count from Phase 1 collection (minus epics themselves)
157
157
  - No issue is deferred without explicit user approval
158
158
 
@@ -186,7 +186,7 @@ File header format:
186
186
  ```markdown
187
187
  # 릴리즈 계획 — YYYY-MM-DD 생성
188
188
 
189
- > 출처: YYYY-MM-DD 기준 `verify-done` 라벨 오픈 이슈
189
+ > 출처: YYYY-MM-DD 기준 `triage-complete` 라벨 오픈 이슈
190
190
  > 제외된 이슈 (이미 오픈 PR에 포함): #NNN, #NNN
191
191
 
192
192
  {릴리즈 그룹}
@@ -17,7 +17,7 @@ The SKILL.md is intentionally thin — it carries only the workflow contract and
17
17
  ## Usage
18
18
 
19
19
  ```
20
- /professor-triage # Default: --state open (excludes verify-done)
20
+ /professor-triage # Default: --state open (excludes triage-complete)
21
21
  /professor-triage 587 589 590 591 592 # Direct issue numbers
22
22
  /professor-triage --label codex-release # Custom label filter
23
23
  /professor-triage --since 2026-03-20 # Date filter
@@ -7,7 +7,7 @@ Companion to `guides/professor-triage/README.md`. Detailed workflow for each pha
7
7
  1. Parse arguments to determine target issues:
8
8
  - If issue numbers provided: use those directly
9
9
  - If `--label` provided: `gh issue list --label <label> --state <state> --json number`
10
- - Default: `gh issue list --state open --json number` + exclude issues with `verify-done` label
10
+ - Default: `gh issue list --state open --json number` + exclude issues with `triage-complete` label
11
11
  - If `--since` provided: add `--search "created:>YYYY-MM-DD"` filter
12
12
 
13
13
  2. For each issue, fetch full details:
@@ -17,7 +17,7 @@ gh issue view NNN --json number,title,body,comments,labels,createdAt
17
17
 
18
18
  3. For batches >20 issues, prefer `gh api graphql` for batch fetching to respect GitHub API rate limits (5000/hour authenticated).
19
19
 
20
- 4. If filter returns 0 results: if `--label` was used, check label existence via `gh label list`. Report if label missing. If default filter, report "No open issues without verify-done label found."
20
+ 4. If filter returns 0 results: if `--label` was used, check label existence via `gh label list`. Report if label missing. If default filter, report "No open issues without triage-complete label found."
21
21
 
22
22
  ## Phase 2: Codebase Analysis
23
23
 
@@ -293,7 +293,8 @@ Delegate ALL GitHub operations to mgr-gitnerd.
293
293
  | Phase 2 found issue already resolved (with commit evidence) | `gh issue close --reason "completed"` + comment with resolving commit |
294
294
  | Cross-analysis concludes "Not Applicable" / "no action needed" | `gh issue close --reason "not planned"` |
295
295
  | Cross-analysis detects same-series duplicates | Keep latest, close others + `duplicate` label |
296
- | All analysis complete | Add `verify-done` label |
296
+ | All analysis complete (standalone triage, not selected this cycle) | Add `triage-complete` label |
297
+ | All analysis complete (invoked within auto-dev's triage step, manifest-selected) | Add `verify-ready` label instead |
297
298
  | Priority assigned | Add `P1`/`P2`/`P3` label |
298
299
 
299
300
  ### Confirmation Required (high-risk)
@@ -307,7 +308,7 @@ Present to user and wait for approval before executing:
307
308
  | Epic/milestone linking | Propose link | Project structure change |
308
309
  | Issue body modification | Present edit draft | Respect original author intent |
309
310
 
310
- **Ensure `verify-done` label exists**: If not, create with `gh label create "verify-done" --color "0E8A16"`.
311
+ **Ensure `triage-complete` label exists**: If not, create with `gh label create "triage-complete" --color "0E8A16"`.
311
312
 
312
313
  ## Phase Notes Summary
313
314
 
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.1.82",
2
+ "version": "1.1.83",
3
3
  "lastUpdated": "2026-09-03",
4
4
  "omcustomMinClaudeCode": "2.1.121",
5
5
  "omcustomMinClaudeCodeReason": "Sensitive-path direct Write/Edit on .claude/** under bypassPermissions (R010 deprecation, #1101)",
@@ -158,7 +158,7 @@ steps:
158
158
  Reference label semantics: .claude/skills/pipeline/labels.md
159
159
 
160
160
  Apply filter rules:
161
- - EXCLUDE: blocked_by_decision == true OR labels ∩ {decision-needed, needs-review, verify-done, manual-action, in-progress} ≠ ∅
161
+ - EXCLUDE: blocked_by_decision == true OR labels ∩ {decision-needed, needs-review, triage-complete, manual-action, in-progress} ≠ ∅
162
162
  - INCLUDE (preferred): labels ∩ {verify-ready, claude-code-release, documentation} ≠ ∅
163
163
  - INCLUDE (standard): P1/P2/P3 issues not in excluded set
164
164
  - Tie-break: P1 > P2 > P3 > unclassified
@@ -237,6 +237,9 @@ steps:
237
237
  - triage step: skip professor-triage skill; perform direct manifest summary instead
238
238
  - plan step: skip release-plan skill; single-response plan instead
239
239
  - deep-plan step: skip deep-plan skill; single-response implementation notes instead
240
+ (except when scope contains a security/availability issue — see the Cross-tier
241
+ 「Lightweight Skill-Mode Substitution」 restriction below, which forbids this
242
+ substitution for such issues)
240
243
  - deep-verify step: skip deep-verify skill; perform self-review checklist instead
241
244
  — 단, 변경 집합에 `.claude/rules/**`(또는 agents/skills frontmatter 등 구조 표면)가
242
245
  포함되면 self-review로 대체하지 않고 mgr-sauron R017 검증을 **단일 목표 위임으로 필수
@@ -262,6 +265,9 @@ steps:
262
265
  - triage step: MAY replace professor-triage skill spawn with orchestrator integrated analysis
263
266
  - plan step: MAY replace release-plan skill spawn with orchestrator integrated analysis
264
267
  - deep-plan step: MAY replace deep-plan skill spawn with orchestrator integrated analysis
268
+ (except when scope contains a security/availability issue — see the Cross-tier
269
+ 「Lightweight Skill-Mode Substitution」 restriction below, which forbids this
270
+ substitution for such issues)
265
271
  - deep-verify step: perform via mgr-sauron R017 structural verification + core self-check (split standard: see the deep-verify step description — R017 spawn + change-type adversarial review, one single-goal delegation each)
266
272
  (instead of full deep-verify skill spawn). If the change set has NO structural surface
267
273
  (no agent/skill/guide/rule frontmatter changed — e.g. a workflow-yaml-only or docs-only change),
@@ -307,14 +313,14 @@ steps:
307
313
  | pre-triage | `gh label create in-progress / verify-ready / needs-review --force` (idempotent label bootstrap) |
308
314
  | scope-selection | Milestone 3-branch state machine (Step 0): closed → HALT / open → reuse / absent → `gh api repos/{owner}/{repo}/milestones --method POST`. Then: assign every scoped issue to that milestone. |
309
315
  | compression-mode-eval | none (pure evaluation + justification logs) |
310
- | triage | none (analysis only) — compressible |
316
+ | triage | `verify-ready` added to manifest issues selected by professor-triage when it runs inside this step (NOT `triage-complete`) — analysis output is compressible, this label side effect is not; when triage is skipped (docs-only) or substituted (lite integrated-analysis, lightweight mode), no separate label action is required here — the implement step's per-issue success path (row below: "On success: remove in-progress, add verify-ready") already adds `verify-ready` to each processed issue before this release completes |
311
317
  | plan | none (analysis only) — compressible |
312
318
  | deep-plan | none (analysis only) — compressible |
313
319
  | implement | `gh issue edit <N> --add-label in-progress --assignee @me`; `gh issue comment <N>` (start notice); on success remove in-progress + add verify-ready; on failure remove in-progress + add needs-review + comment error summary |
314
320
  | verify-build | none (gate only) |
315
321
  | deep-verify | none (analysis only) — compressible |
316
322
  | release | PR body MUST carry `Closes #N` for every resolved issue (auto-tag.yml greps the PR body); non-auto-tag projects additionally: `gh api .../milestones/{n} --method PATCH --field state=closed`, `gh issue close {n}`, label needs-review issues "Deferred from v{version}" |
317
- | ci-check | none (verification only) |
323
+ | ci-check | `gh issue edit <N> --remove-label in-progress` for stale labels; `gh issue edit <N> --remove-label verify-ready` for THIS release's CLOSED scoped issues only (past closed issues excluded, #1734) |
318
324
  | post-release-followup | new issue registration for release follow-ups (genuine defects auto-registered, no-ask per R016) |
319
325
 
320
326
  Only the rows marked "none (analysis only)" are compressible. Any step with a
@@ -366,6 +372,20 @@ steps:
366
372
  `mode: lightweight`) so downstream steps and reviewers can tell it apart from a full
367
373
  skill spawn (결과물에 모드를 표시, #1721 제안 4).
368
374
 
375
+ Additional restriction — security/availability scope (#1733 찐빠 #9): if ANY scoped issue
376
+ carries the `security` label, OR its title/body explicitly states a security/availability
377
+ concern (e.g. rate limiting, resource exhaustion, injection, denial-of-service — this repo
378
+ has no separate `availability` label; measured via `gh label list`, so an availability
379
+ concern must be asserted in the issue text, not inferred from a label), this lightweight
380
+ substitution is FORBIDDEN for deep-plan on that issue — AND compression-mode-eval Tier 2
381
+ lite's deep-plan integrated-analysis substitution is also FORBIDDEN for it; deep-plan MUST
382
+ run as a full skill spawn. Because deep-plan is a single release-scoped step (not run
383
+ per-issue), when ANY scoped issue qualifies, this restriction applies to the whole
384
+ release's deep-plan step. The entry-point audit for such an issue MUST include an
385
+ "executions per request (amplification)" check — how many downstream operations a single
386
+ request can trigger (e.g. GraphQL alias batching, N+1 fan-out) — not only a per-call
387
+ timeout/rate-limit check. (GraphQL document fuzz testing is OUT of scope here.)
388
+
369
389
  This substitution is NEVER available for implement, verify-build, release, ci-check, or
370
390
  deep-verify.
371
391
  It replaces analysis output ONLY — every step's state-change side effect still runs in
@@ -382,7 +402,7 @@ steps:
382
402
 
383
403
  - name: triage
384
404
  skill: professor-triage
385
- description: "Cross-analysis triage with priority assessment (scoped to release manifest) — 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"
405
+ description: "Cross-analysis triage with priority assessment (scoped to release manifest) — invoke professor-triage WITH the release manifest issue numbers from scope-selection's output as input; in this auto-dev context, manifest issues receive `verify-ready` (not `triage-complete`) per the side-effect inventory above — 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"
386
406
  depends_on: compression-mode-eval
387
407
 
388
408
  - name: plan
@@ -448,6 +468,16 @@ steps:
448
468
  (#1701 #1). The orchestrator's own wiring judgement (which file/anchor already covers a
449
469
  new clause) counts as final wording too — the prompt supplies candidate files/anchors
450
470
  only, and the subagent decides coverage by quoting the covering sentence (R010 [#1704 #1]).
471
+ Non-issue sources (더루키 회상, 메모리, 다른 프로젝트 관측) MUST be placed in a separate
472
+ block labeled with its source (e.g. `[출처: 더루키 회상 — <project>]`) and MUST NOT be
473
+ mixed into issue-quote sentences — completion criteria MUST state this separation
474
+ explicitly, applying to every orchestrator-authored delegation, all tiers (R010 「출처
475
+ 인용과 인접 문구 점검」 확장, #1735 찐빠 #1).
476
+ - A release that bundles ≥2 `feedback`-type issue proposals MUST produce a per-proposal
477
+ application-boundary table (exceptions, deadlines, tiers/steps) during plan/deep-plan or
478
+ its lightweight tier substitute, applying to lite and standard tiers, and
479
+ implement-stage delegation prompts MUST carry the relevant boundary row for each edit
480
+ (회고 제안 묶음 릴리즈의 통합 분석에 적용 경계 표 필수, #1735 찐빠 #4).
451
481
  - Before dispatching any delegation prompt in an iteration that created or reinforced a rule
452
482
  clause, the orchestrator MUST compare that clause's Anti-pattern table rows 1:1 against the
453
483
  delegation prompt's sentences and rewrite any match (cause: the R016 「신설 조항의 동일
@@ -488,6 +518,14 @@ steps:
488
518
  around it (e.g. via a shell glob or path rewrite) — it MUST stop and report the block
489
519
  verbatim (R010 「품질 게이트 우회 금지 — 훅 차단은 보고 대상」, extended here from git
490
520
  hooks to guards/classifiers/permissions generally) (#1728 찐빠 #1).
521
+ - No state-changing command (`gh issue create/edit/close`, `gh pr create/edit/close/merge`,
522
+ `git push`, label changes) — including the orchestrator's own direct commands, not only
523
+ delegated ones — MAY use a `||` fallback that prints success-looking output; the observed
524
+ failure mode was a failed `gh issue create` followed by a `||` fallback that printed a
525
+ DIFFERENT issue's URL, which the orchestrator briefly read as a successful create
526
+ (#1735 찐빠 #2). Exceptions: a `||` fallback whose output is explicitly marked as
527
+ failure (e.g. `|| echo "::warning::…"`, a literal `MISS` token) and idempotent bootstrap
528
+ commands (no `||` success masking) such as `gh label create --force 2>/dev/null`.
491
529
  - After any delegation that creates temporary files under constraint (h) above, the
492
530
  orchestrator MUST confirm with `git status --short` that no stray file was left in the
493
531
  repo (#1721 찐빠 #7).
@@ -496,7 +534,13 @@ steps:
496
534
  arithmetic below, not a replacement for it); compute turn arithmetic (files × 3 +
497
535
  edit_items × 2 ≤ 16 — a #1709-proposed guide kept below the 20-turn limit, not a
498
536
  truncation guarantee, per R020 「maxTurns 절단 실증」 6항) and state that arithmetic in
499
- the delegation prompt before dispatch (#1709 #1).
537
+ the delegation prompt before dispatch (#1709 #1). Any edit delegation requiring
538
+ verification of N quotations or identifiers (not only claude-code-release CC-note
539
+ delegations) MUST perform that verification with batched command(s) (a single loop or
540
+ combined `grep -F` pass over all N items), never per-item invocations, and the turn
541
+ arithmetic above MUST add a batched-verification term — ⌈N/batch⌉ — still an
542
+ upper-bound guide that may still truncate, not a truncation guarantee (검증 비용을
543
+ 턴 산술에 반영, R020 「maxTurns 절단 실증」 6항 확장, #1737 찐빠 #1).
500
544
  - Parity delegation prompts (e.g. a ko mirror tracking an en source) MUST require THREE
501
545
  directions — additions, edits, AND deletions — to match the source, never additions
502
546
  only; completion criteria MUST include a `grep -F` confirming zero rows/sentences are
@@ -523,6 +567,16 @@ steps:
523
567
  before restating either — do not relay an unverified agent-reported count or identifier
524
568
  (R023 「리서치 위임의 결론 수치는 표에서 재계산해 병기」 #1707 #4 확장, #1709 #5, #1722
525
569
  찐빠 #3).
570
+ - Delegations that create files, binaries, worktrees, or branches (artifact-creating
571
+ delegations only — text-only edits are excluded) MUST include measured output in their
572
+ completion report — `file <bin>` for binaries, `ls -la <path>` for created paths, `git
573
+ worktree list` for worktrees, `git branch --list` for branches, as applicable — and the
574
+ orchestrator MUST confirm architecture/path from that measured output before using the
575
+ artifact, not from the agent's self-report alone (R020 Subagent Self-Report
576
+ Verification, #1733 찐빠 #1). (#1733 찐빠 #1's third proposal — never use haiku for
577
+ worktree/cross-compile delegations — is not added separately here: R006
578
+ (`.claude/rules/MUST-agent-design.md`) already scopes `haiku` to "Fast, cheap tasks
579
+ (search, simple edits)", which excludes multi-step build/worktree work.)
526
580
  - Delegations that build or replace an evaluation/test harness or a production code path
527
581
  (fixtures, ablation lanes, scoring/oracle logic) MUST require bidirectional proof, not
528
582
  a single-direction pass: (a) positive AND negative fixtures — a fixture set that can
@@ -536,6 +590,14 @@ steps:
536
590
  measurement; (c) no working around a discovered product or measurement defect to force
537
591
  a pass — halt and report instead (R023 「Conditional-Output Verification」 양성/음성 짝
538
592
  원칙 확장, #1721 찐빠 #1, #1727 찐빠 #2, #1728 찐빠 #2).
593
+ - Delegations that inject faults / modify-then-restore files — not limited to harness
594
+ builds — MUST back up the original file under `bak/<repo-relative-path>` (the full
595
+ repo-relative path, not filename-only) nested under the session scratchpad or `$TMPDIR`
596
+ (not inside the repo, to stay consistent with constraint (h) above), and a checksum
597
+ comparison after restore is MANDATORY. A `git diff`-based patch approach is also allowed.
598
+ `git stash` is otherwise allowed EXCEPT when parallel delegations share the working tree
599
+ (R009 「File-Disjoint ≠ Independent (Local Git State)」), where it MUST NOT be used
600
+ (#1733 코멘트 찐빠 #8).
539
601
  - For `claude-code-release` issues, CC release knowledge goes to
540
602
  `guides/claude-code/15-version-compatibility.md` (+ templates mirror) per rule; a rule
541
603
  file gets at most ONE line of behavioral norm only when agent behavior must change.
@@ -638,6 +700,19 @@ steps:
638
700
  prompt: |
639
701
  Create a GitHub Release.
640
702
 
703
+ 0a. User-execution constraint check (mandatory, before step 0, #1733 찐빠 #2): read
704
+ CLAUDE.md, session memory, and the entry card (if the environment provides one, e.g. a
705
+ recall entry card) for any user-execution constraint (e.g. "merge/tag/publish must be
706
+ run by the user, not the agent"). For each command this release step is about to run:
707
+ if it is COVERED by a constraint (merge, tag, publish), do NOT execute it — present the
708
+ exact command(s) to the user and STOP this step; if it is NOT covered (e.g. branch
709
+ creation, version bump, PR creation — coverage is judged by the scope of the constraint
710
+ text actually found in CLAUDE.md/session memory, not by this example list), proceed
711
+ normally. No matching constraint found → unchanged behavior, proceed to step 0. User decision
712
+ (recorded): in an unattended run (`/fsd` etc. — see pre-triage Phase 0.6
713
+ `unattended_mode`), STOP at the first covered command, present it to the user, and HOLD
714
+ the convergence declaration until the user runs it and confirms.
715
+
641
716
  0. Pre-check (mandatory, delegate to mgr-gitnerd per R010): Detect and remove stale local `release` branch if present.
642
717
  The local `release` branch (file ref) conflicts with `release/v*` directory ref namespace.
643
718
  mgr-gitnerd executes (force-delete acceptable in automation context; warns if branch has unpushed commits):
@@ -800,7 +875,11 @@ steps:
800
875
  in-progress`) and report the fix; if the issue is still OPEN, do NOT close it here —
801
876
  closing stays with auto-tag.yml unless it failed to close that issue, in which case
802
877
  report the open issue for manual close per release step 3.d above (#1722 하네스 제안
803
- 4).
878
+ 4). Additionally, for each scoped issue that IS closed by THIS release, remove a
879
+ lingering `verify-ready` label if present (`gh issue edit <N> --remove-label
880
+ verify-ready`) — scoped to THIS release's closed issues only; bulk-removing
881
+ `verify-ready` from previously closed issues is explicitly excluded (user decision,
882
+ #1734).
804
883
  6. Report final CI status.
805
884
  description: "Post-release CI verification and fix loop"
806
885
  depends_on: release