oh-my-customcode 1.1.81 → 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 +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/templates/.claude/rules/MUST-parallel-execution.md +2 -0
- package/templates/.claude/skills/fsd/SKILL.md +5 -1
- package/templates/.claude/skills/pipeline/labels.md +4 -4
- package/templates/.claude/skills/pipeline/workflows/auto-dev.yaml +85 -6
- package/templates/.claude/skills/post-release-followup/SKILL.md +1 -1
- package/templates/.claude/skills/professor-triage/SKILL.md +6 -3
- package/templates/.claude/skills/release-plan/SKILL.md +12 -12
- package/templates/guides/claude-code/15-version-compatibility.md +67 -0
- package/templates/guides/professor-triage/README.md +1 -1
- package/templates/guides/professor-triage/phases.md +5 -4
- package/templates/manifest.json +1 -1
- package/templates/workflows/auto-dev.yaml +85 -6
package/dist/cli/index.js
CHANGED
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -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**: `
|
|
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
|
-
| `
|
|
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,
|
|
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 `
|
|
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,
|
|
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 |
|
|
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 |
|
|
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
|
|
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
|
|
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-
|
|
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 `
|
|
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 (
|
|
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 `
|
|
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
|
|
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
|
|
30
|
-
gh issue list --state open --label
|
|
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 `
|
|
34
|
+
If `triage-complete` label returns 0 results, check label existence:
|
|
35
35
|
```bash
|
|
36
|
-
gh label list | grep
|
|
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 `
|
|
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 `
|
|
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
|
|
155
|
-
- Epic child issues with
|
|
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 기준 `
|
|
189
|
+
> 출처: YYYY-MM-DD 기준 `triage-complete` 라벨 오픈 이슈
|
|
190
190
|
> 제외된 이슈 (이미 오픈 PR에 포함): #NNN, #NNN
|
|
191
191
|
|
|
192
192
|
{릴리즈 그룹}
|
|
@@ -1397,6 +1397,73 @@ Opus 4.8에서 thinking blocks가 수정되어 API 오류가 발생하던 버그
|
|
|
1397
1397
|
|
|
1398
1398
|
---
|
|
1399
1399
|
|
|
1400
|
+
## v2.1.281 (2026-09-23)
|
|
1401
|
+
|
|
1402
|
+
> Issue: #1731 — Claude Code v2.1.281 compatibility documentation
|
|
1403
|
+
> Scope-ceiling check (R017): 설치 CC는 **2.1.282**(`claude --version`=2.1.282, `npm view @anthropic-ai/claude-code version`=2.1.282 실측)입니다. 2.1.282 CHANGELOG를 확인한 결과 2.1.281 항목을 되돌린 사례는 없습니다 — 아래 "재개된 세션 재전송" 항목(3번)은 2.1.282에서 "Fixed more cases of continued or resumed sessions (`--continue`, `--resume`) re-sending earlier messages in a changed form, which could make the API drop Claude's earlier reasoning"로 사례가 확장될 뿐, 되돌리기가 아니라 같은 방향의 보강입니다.
|
|
1404
|
+
|
|
1405
|
+
### 설정 · 세션 위임
|
|
1406
|
+
|
|
1407
|
+
- CHANGELOG 원문: "Added `"attribution": false` in `settings.json` to hide all commit and PR attribution; older CLI versions skip a settings file that holds it, so keep the object form in files shared across versions"
|
|
1408
|
+
(281) 이 저장소는 attribution을 CC 설정이 아니라 system-reminder 기반 `Co-Authored-By`/`Generated with` 문구로 관리하므로, `settings.json`에 이 키를 추가할 계획이 없다면 harness 변경은 불필요합니다 — 향후 추가할 경우 구버전 CLI와 공유하는 설정 파일에서는 object 형태를 유지해야 합니다.
|
|
1409
|
+
- CHANGELOG 원문: "Fixed `--setting-sources` (and SDK `settingSources`) not being forwarded to spawned sessions: teammates, `/bg`, `claude agents` sessions and `--worktree --tmux` now start with the parent's restriction"
|
|
1410
|
+
(281) `--setting-sources`로 제한한 설정 범위가 teammate·`/bg`·`claude agents`·`--worktree --tmux`로 스폰된 세션에 전달되지 않던 결함이 수정되어, 부모 세션의 설정 제한이 이제 하위 세션까지 상속됩니다 — 이 저장소는 `--setting-sources`를 명시적으로 쓰지 않으므로 직접 영향은 없습니다.
|
|
1411
|
+
|
|
1412
|
+
### 재개(resume) · prompt cache
|
|
1413
|
+
|
|
1414
|
+
- CHANGELOG 원문: "Fixed resumed sessions re-sending earlier turns in a changed form (a parallel tool-call turn, an MCP tool call's input or a tool-search result while its server was still reconnecting, or a tool-search result whose loading turn was interrupted), which could make the API drop the conversation's prior reasoning"
|
|
1415
|
+
(281) 재개된 세션이 병렬 tool-call 턴·재연결 중이던 MCP 도구 입력·로딩이 끊긴 tool-search 결과를 바뀐 형태로 재전송해 API가 이전 reasoning을 버리던 결함이 수정되었습니다 — 위 스코프 상한 확인대로 2.1.282에서 사례가 추가로 확장됩니다.
|
|
1416
|
+
- CHANGELOG 원문: "Fixed resuming a very large session sometimes restoring only its last few messages"
|
|
1417
|
+
(281) 매우 큰 세션을 재개할 때 마지막 몇 메시지만 복원되던 결함이 수정되어, `/fsd` 등 장기 세션을 압축 후 재개하는 흐름의 신뢰성이 개선됩니다.
|
|
1418
|
+
- CHANGELOG 원문: "Fixed a session resumed after a restart during a pending permission prompt sending a different history than before, which broke the prompt cache from that point"
|
|
1419
|
+
(281) 대기 중인 권한 프롬프트 도중 재시작 후 재개된 세션이 이전과 다른 히스토리를 보내 그 지점부터 prompt cache가 깨지던 결함이 수정되어, R012 statusline `prompt_cache` 필드가 보고하는 cache-miss 원인 후보 중 하나가 줄어듭니다.
|
|
1420
|
+
- CHANGELOG 원문: "Fixed resuming a session that ended during a tool call: Claude now sees the call and is told its outcome is unknown, and a manual resume no longer adds a hidden "Continue" message"
|
|
1421
|
+
(281) 도구 호출 도중 종료된 세션을 재개하면 이제 Claude가 그 호출을 인지하고 결과를 "알 수 없음"으로 안내받으며, 수동 재개 시 숨은 "Continue" 메시지도 더 이상 추가되지 않습니다 — R020 "Failure/Interrupt Report ≠ Actual Failure" 표가 다루는 중단 처리 계열과 같은 방향의 보강입니다.
|
|
1422
|
+
- CHANGELOG 원문: "Fixed sessions with an earlier advisor result the API could no longer read failing one request every turn and repeatedly losing earlier reasoning; the history is now repaired once"
|
|
1423
|
+
(281) 이전 advisor 결과를 API가 더 이상 읽지 못해 매 턴 요청이 실패하고 이전 reasoning을 반복 소실하던 결함이 수정되어(히스토리를 1회 복구), R005가 기록한 advisor 미지원 프록시 계열 오류와는 별개로 advisor 자체의 히스토리 손상 축이 줄어듭니다.
|
|
1424
|
+
- CHANGELOG 원문: "Fixed the prompt cache being lost when an MCP server disconnects mid-conversation, or is still connecting after a resume, while tool search is off (for example behind a proxy or gateway)"
|
|
1425
|
+
(281) MCP 서버가 대화 도중 연결이 끊기거나 재개 후에도 계속 연결 중일 때(tool search가 꺼진 상태) prompt cache가 소실되던 결함이 수정되어, R019 ontology-RAG/wiki-RAG처럼 이 저장소가 세션 중 MCP 서버에 의존하는 경로의 비용 안정성이 개선됩니다.
|
|
1426
|
+
- CHANGELOG 원문: "Improved auto mode after resuming a session in a new process: the permission classifier can now reuse its earlier prompt cache instead of rewriting it"
|
|
1427
|
+
(281) 새 프로세스에서 세션을 재개한 뒤 auto mode 권한 classifier가 이전 prompt cache를 재사용할 수 있게 되어, `defaultMode` 무시 결함(v2.1.257, R010/R002 기록)과 별개로 재개 직후 auto mode 판정 비용이 줄어듭니다.
|
|
1428
|
+
|
|
1429
|
+
### 권한 · rm 프롬프트 · sandbox
|
|
1430
|
+
|
|
1431
|
+
- CHANGELOG 원문: "Fixed a turn that could retry indefinitely, ignoring `--max-turns`, when the model alternated unparseable tool calls and output-limit truncation"
|
|
1432
|
+
(281) 모델이 파싱 불가능한 도구 호출과 출력 상한 절단을 번갈아 낼 때 `--max-turns`를 무시하고 무한 재시도하던 결함이 수정되어, R020 "maxTurns 절단 실증" 항목이 전제하는 턴 상한 자체의 신뢰성이 개선됩니다 — 이 결함은 "무시하고 계속 도는" 역방향 사례이므로, R020이 주로 다루는 "조기 절단" 문제와는 반대 축입니다.
|
|
1433
|
+
- CHANGELOG 원문: "Fixed a recursive `rm` whose target is only command-substitution output, such as `rm -rf "$(pwd)"`, running unprompted in auto and `--dangerously-skip-permissions` mode; it now asks even with a Bash allow rule, unless run with `CLAUDE_CODE_DISABLE_SUBSTITUTION_RM_PROMPT=1`"
|
|
1434
|
+
(281) `rm -rf "$(pwd)"`처럼 대상이 command-substitution 출력뿐인 재귀 `rm`이 auto·`--dangerously-skip-permissions` 모드에서 무프롬프트로 실행되던 결함이 수정되어, Bash allow rule이 있어도 이제 확인을 묻습니다(`CLAUDE_CODE_DISABLE_SUBSTITUTION_RM_PROMPT=1`로 끌 수 있음) — R001 Destructive Git Commands 표가 다루는 파괴적 명령 계열과 같은 방향의 플랫폼 보강입니다.
|
|
1435
|
+
- CHANGELOG 원문: "Improved the dangerous-rm check to also flag a removal at a shell variable followed by a top-level directory name, at a variable derived from the working directory, or at a backslash-only target"
|
|
1436
|
+
(281) 작업 디렉터리에서 파생된 변수나 최상위 디렉터리명이 뒤따르는 셸 변수, backslash-only 대상까지 dangerous-rm 검사가 넓어져, 위 항목과 함께 R001이 명시하지 않는 rm 패턴의 플랫폼 측 탐지 범위가 확장됩니다.
|
|
1437
|
+
- CHANGELOG 원문: "Changed the dangerous `rm` prompt in `--dangerously-skip-permissions` and auto mode to wait 2 minutes for an answer, then deny the command with a rewrite hint so unattended sessions keep going (`CLAUDE_CODE_DISABLE_DANGEROUS_RM_TIMEOUT=1` turns this off)"
|
|
1438
|
+
(281) `--dangerously-skip-permissions`·auto mode의 dangerous rm 프롬프트가 응답을 2분 대기한 뒤 거부(재작성 힌트 포함)하도록 바뀌어, 무인 세션이 응답 없는 rm 프롬프트에 영구히 멈추지 않고 진행합니다(`CLAUDE_CODE_DISABLE_DANGEROUS_RM_TIMEOUT=1`로 끌 수 있음) — `/fsd` 같은 무인 루프에서 rm이 필요한 작업이 있다면 2분 뒤 자동 거부됨을 전제해야 합니다.
|
|
1439
|
+
- CHANGELOG 원문: "Fixed sandboxed Bash commands being unable to write to `$TMPDIR` when `CLAUDE_CODE_TMPDIR` is set"
|
|
1440
|
+
(281) `CLAUDE_CODE_TMPDIR`가 설정된 상태에서 샌드박스된 Bash 명령이 `$TMPDIR`에 쓰지 못하던 결함이 수정되어, R005가 기록한 샌드박스 도구 공백·`$TMPDIR` 안내와 함께 이 저장소의 스크래치패드 작업 경로 안정성이 개선됩니다.
|
|
1441
|
+
|
|
1442
|
+
### 훅 · MCP 연결 타이밍 · plugin validate
|
|
1443
|
+
|
|
1444
|
+
- CHANGELOG 원문: "Fixed `mcp_tool` hooks on blocking events (PreToolUse and similar) being skipped while their MCP server was still connecting; they now wait for it, up to the MCP connect timeout"
|
|
1445
|
+
(281) `mcp_tool` 훅이 blocking 이벤트(PreToolUse 등)에서 MCP 서버가 아직 연결 중일 때 건너뛰던 결함이 수정되어 이제 MCP connect timeout까지 대기합니다 — 이 저장소는 현재 `mcp_tool` 타입 훅을 배선하지 않았으나, R006 Hook Event Types가 다루는 4개 핸들러 타입 중 하나의 신뢰성 보강입니다.
|
|
1446
|
+
- CHANGELOG 원문: "Added MCP server checks to `claude plugin validate`: it reports `.mcp.json` entries that would be silently dropped at load, undeclared `${user_config.*}` references, and insecure URLs"
|
|
1447
|
+
(281) `claude plugin validate`에 `.mcp.json` 항목이 로드 시 조용히 누락되는 경우, 미선언 `${user_config.*}` 참조, 불안전한 URL을 보고하는 MCP 검사가 추가되어, R017 "스킬 추가·수정 후 `claude plugin validate`를 개수 대조와 함께 실행" 조항의 검증 범위가 넓어집니다.
|
|
1448
|
+
- CHANGELOG 원문: "Fixed `claude plugin validate` reporting `privacyPolicyUrl`, `supportUrl` and other listing metadata keys in plugin.json as unknown fields"
|
|
1449
|
+
(281) `claude plugin validate`가 plugin.json의 `privacyPolicyUrl`·`supportUrl` 등 리스팅 메타데이터 키를 unknown field로 오보고하던 결함이 수정되어, 위 R017 조항 실행 시의 오탐 1종이 줄어듭니다.
|
|
1450
|
+
- CHANGELOG 원문: "Improved plugin hook-failure errors to name the offending plugin, and added a `claude plugin validate` warning when a shell-form hook leaves `${CLAUDE_PLUGIN_ROOT}` unquoted (it breaks on plugin paths with spaces)"
|
|
1451
|
+
(281) 플러그인 훅 실패 오류에 해당 플러그인 이름이 명시되고, shell-form 훅이 `${CLAUDE_PLUGIN_ROOT}`를 따옴표 없이 쓰면(경로에 공백이 있을 때 깨짐) `claude plugin validate` 경고가 추가되어, R023 Workflow Script Sanity Check가 다루는 "셸 변수 이스케이프" 계열 점검이 plugin validate 단계에서도 보강됩니다.
|
|
1452
|
+
|
|
1453
|
+
### /loop · 예약 작업
|
|
1454
|
+
|
|
1455
|
+
- CHANGELOG 원문: "Fixed scheduled tasks and `/loop` wakeups being fired again every second when their delivery failed, which could make Claude Code exit at the end of a turn"
|
|
1456
|
+
(281) 전달에 실패한 예약 작업·`/loop` 웨이크업이 매초 재발화되어 턴 종료 시 Claude Code가 종료될 수 있던 결함이 수정되어, 이 저장소가 무인 루프(`/fsd` 등)에서 겪을 수 있던 조용한 조기 종료 원인 하나가 줄어듭니다.
|
|
1457
|
+
|
|
1458
|
+
기타 157건 — 이 저장소 비해당 (VSCode·Claude Code on the web·Claude Tag·Code Review 전용 26건(VSCode 6, web 6, Claude Tag 13, Code Review 1), Windows 전용 2건 포함, 나머지 129건은 UI 다이얼로그·키바인딩·마우스·vim 모드·Claude apps gateway/Bedrock/Vertex 세부사항 등).
|
|
1459
|
+
|
|
1460
|
+
**Action items**:
|
|
1461
|
+
- 19건 모두 CC 플랫폼 신뢰성·안전장치 보강이며 즉각적인 harness 변경(룰 수정)은 불필요합니다.
|
|
1462
|
+
- 위 dangerous rm 2분 타임아웃(권한 · rm 프롬프트 · sandbox 3번째 항목)은 `/fsd` 등 무인 루프가 rm을 직접 실행하지 않는 한(R010 Sensitive Path Handling상 `.claude/**` 조작은 rm이 아닌 Write/Edit) 이 저장소에는 즉시 영향이 없으나, 향후 무인 루프에 rm이 포함될 경우 이 타임아웃을 전제로 설계해야 합니다.
|
|
1463
|
+
- 2.1.282 CHANGELOG의 harness 관련 항목(예: 2.1.281 "재전송 changed form" resume 결함의 추가 사례 수정)은 별도 이슈에서 2.1.282 섹션으로 다룹니다.
|
|
1464
|
+
|
|
1465
|
+
---
|
|
1466
|
+
|
|
1400
1467
|
## Known Platform Issues & Workarounds
|
|
1401
1468
|
|
|
1402
1469
|
### Agent tool malformed parsing on long / special-character prompts (#1241)
|
|
@@ -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
|
|
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 `
|
|
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
|
|
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 `
|
|
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 `
|
|
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
|
|
package/templates/manifest.json
CHANGED
|
@@ -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,
|
|
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 |
|
|
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 |
|
|
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
|