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 +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/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
|
{릴리즈 그룹}
|
|
@@ -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
|