oh-my-customcode 1.1.80 → 1.1.82
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/skills/deep-plan/SKILL.md +8 -0
- package/templates/.claude/skills/pipeline/workflows/auto-dev.yaml +171 -16
- package/templates/.claude/skills/post-release-followup/SKILL.md +2 -0
- package/templates/.claude/skills/professor-triage/SKILL.md +6 -0
- package/templates/guides/claude-code/15-version-compatibility.md +67 -0
- package/templates/manifest.json +1 -1
- package/templates/workflows/auto-dev.yaml +171 -16
package/dist/cli/index.js
CHANGED
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -60,6 +60,14 @@ Research-only analysis produces findings based on assumptions about the codebase
|
|
|
60
60
|
| Ecomode | Auto-activate for team result aggregation (R013) |
|
|
61
61
|
| REVISE limit | Max 2 cycles before user escalation |
|
|
62
62
|
|
|
63
|
+
## Lightweight Mode (conditional)
|
|
64
|
+
|
|
65
|
+
Deep Plan MAY substitute a lightweight pass for the full 3-phase pipeline when the conditions defined in `auto-dev.yaml`'s `## Cross-tier — Lightweight Skill-Mode Substitution` section are met — this skill does not restate those conditions; read them from that section before invoking lightweight mode. The resulting plan artifact or output MUST state which mode ran (`mode: full` or `mode: lightweight`) and MUST include the justification log required by that section.
|
|
66
|
+
|
|
67
|
+
## Positive-Control Gate (Search/Retrieval Experiment Plans)
|
|
68
|
+
|
|
69
|
+
When a plan's Phase 1/2 measures a search or retrieval experiment (a new lane, ranking knob, or similar), do NOT trust a negative or neutral result until a positive control confirms the measurement can detect an effect — verify that the change moves candidates for at least one real query from the actual query distribution. If it does not, report the result as "measurement inconclusive", not "no effect".
|
|
70
|
+
|
|
63
71
|
## Differentiation
|
|
64
72
|
|
|
65
73
|
| Skill | Scope | Code Verification | Phases |
|
|
@@ -178,6 +178,17 @@ steps:
|
|
|
178
178
|
For each scoped issue, extract target file/directory paths from its title+body (explicit
|
|
179
179
|
paths, backtick-quoted paths, or clearly named targets).
|
|
180
180
|
|
|
181
|
+
Measure each extracted path with `git ls-files` NOW, before scope is committed — do not
|
|
182
|
+
defer this to implement time — but ONLY for a target the issue treats as an EXISTING
|
|
183
|
+
file (edit/refactor of a path the issue claims already exists). If such a path is absent
|
|
184
|
+
from this repo (e.g. it belongs to a different repository), route that issue to
|
|
185
|
+
decision-needed or exclude it from this scope immediately (scope-selection 단계에서
|
|
186
|
+
이슈가 가리키는 경로의 `git ls-files` 실측을 선행, #1725 찐빠 #4). For a target the issue
|
|
187
|
+
is CREATING (a new file), this absence check does not apply — a new file is by
|
|
188
|
+
definition untracked (R010 「Required Checks」: 신규 생성 대상은 path-existence 확인에서
|
|
189
|
+
제외); instead confirm the parent directory exists, and do NOT exclude the issue solely
|
|
190
|
+
because the new file path itself is absent.
|
|
191
|
+
|
|
181
192
|
Check against `.claude/rules/MUST-orchestrator-coordination.md` "Protected Paths":
|
|
182
193
|
- `.claude/hooks/**` → EXCLUDED from mgr-creator routing; requires EXPLICIT USER APPROVAL
|
|
183
194
|
(security-critical). If any scoped issue targets this path, request approval for the
|
|
@@ -271,7 +282,10 @@ steps:
|
|
|
271
282
|
## Tier 3 — standard (fallback)
|
|
272
283
|
|
|
273
284
|
If neither docs-only nor lite met → set compression_mode=standard
|
|
274
|
-
- All pipeline steps execute normally with full skill spawns
|
|
285
|
+
- All pipeline steps execute normally with full skill spawns — EXCEPT the two
|
|
286
|
+
Cross-tier exceptions below ("Pre-Existing Converged Artifact Substitution" and
|
|
287
|
+
"Lightweight Skill-Mode Substitution"), which stay available under standard mode too
|
|
288
|
+
when their own conditions are met ("Independent of the tier selected above").
|
|
275
289
|
- Log: "[compression-mode] standard mode (scope={n}, mixed/high-risk labels, large scope, or code logic change)"
|
|
276
290
|
|
|
277
291
|
## Cross-tier — State-Change Side Effects Are NEVER Compressed
|
|
@@ -330,6 +344,36 @@ steps:
|
|
|
330
344
|
|
|
331
345
|
This authorizes, under an audit log, a substitution that would otherwise be a standard-mode contract deviation. Origin: #1309 (a converged `/research` artifact was used in place of triage/plan/deep-plan under standard mode without an authorizing rule).
|
|
332
346
|
|
|
347
|
+
## Cross-tier — Lightweight Skill-Mode Substitution
|
|
348
|
+
|
|
349
|
+
Independent of the tier selected above, the triage / plan / deep-plan skill spawns MAY be
|
|
350
|
+
replaced by orchestrator-integrated analysis — a lightweight mode — even in standard mode,
|
|
351
|
+
ONLY when ALL of the following hold. deep-verify is NOT eligible for this lightweight-mode
|
|
352
|
+
substitution (see NEVER list below) — it remains eligible only for the separate
|
|
353
|
+
pre-existing-converged-artifact substitution described above (a full prior skill spawn's
|
|
354
|
+
output reused, not orchestrator-integrated shortcutting).
|
|
355
|
+
1. Scope size ≤ 3 issues (이슈에 코드 근거가 있고 범위가 이슈 3건 이하이면 경량 모드,
|
|
356
|
+
#1721 제안 4 — 사용자 결정: 상한 3건).
|
|
357
|
+
2. For EVERY scoped issue in this substitution, EITHER the issue body cites concrete code
|
|
358
|
+
evidence (a file path AND an anchor — function name / unique string, not just a claim),
|
|
359
|
+
OR the orchestrator has recorded the measured root cause together with the exact
|
|
360
|
+
command used to measure it (scope=1 + 오케스트레이터 실측 원인 확정 조건의 감사 로그
|
|
361
|
+
대체 조항, #1727 찐빠 #1).
|
|
362
|
+
3. A MANDATORY justification log line is emitted naming the step and the evidence basis:
|
|
363
|
+
"[compression-mode] lightweight skill-mode substitution — step '{step}', scope={n},
|
|
364
|
+
evidence={file:anchor or measured-cause+command}".
|
|
365
|
+
4. The resulting artifact explicitly states its own mode (`mode: full` or
|
|
366
|
+
`mode: lightweight`) so downstream steps and reviewers can tell it apart from a full
|
|
367
|
+
skill spawn (결과물에 모드를 표시, #1721 제안 4).
|
|
368
|
+
|
|
369
|
+
This substitution is NEVER available for implement, verify-build, release, ci-check, or
|
|
370
|
+
deep-verify.
|
|
371
|
+
It replaces analysis output ONLY — every step's state-change side effect still runs in
|
|
372
|
+
full regardless of substitution (see "Cross-tier — State-Change Side Effects Are NEVER
|
|
373
|
+
Compressed" above).
|
|
374
|
+
|
|
375
|
+
If any condition above cannot be concretely asserted, do NOT substitute — spawn the skill.
|
|
376
|
+
|
|
333
377
|
## Output
|
|
334
378
|
|
|
335
379
|
compression_mode ∈ {docs-only, lite, standard} as pipeline state for downstream steps.
|
|
@@ -338,17 +382,17 @@ steps:
|
|
|
338
382
|
|
|
339
383
|
- name: triage
|
|
340
384
|
skill: professor-triage
|
|
341
|
-
description: "Cross-analysis triage with priority assessment (scoped to release manifest) — skipped if docs-only, integrated-analysis allowed if lite"
|
|
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"
|
|
342
386
|
depends_on: compression-mode-eval
|
|
343
387
|
|
|
344
388
|
- name: plan
|
|
345
389
|
skill: release-plan
|
|
346
|
-
description: "Release unit plan from triaged issues — skipped if docs-only, integrated-analysis allowed if lite"
|
|
390
|
+
description: "Release unit plan from triaged issues — 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"
|
|
347
391
|
depends_on: triage
|
|
348
392
|
|
|
349
393
|
- name: deep-plan
|
|
350
394
|
skill: deep-plan
|
|
351
|
-
description: "Research-validated implementation plan (research → plan → verify) — skipped if docs-only, integrated-analysis allowed if lite. MULTI-PHASE: 스킬을 그대로 spawn하지 말고 R020 「위임 경계를 Phase 개수로 설계」에 따라 단일 목표 위임으로 분할해 순차 발주한다 (#1595 #4). 리서치·계측 위임의 완료 조건에는 결론 수치를 산출물 표에서 jq/awk로 재계산해 병기하도록 명시한다(#1707 #4)."
|
|
395
|
+
description: "Research-validated implementation plan (research → plan → verify) — skipped if docs-only, integrated-analysis allowed if lite; independent of tier, MAY run in lightweight mode when compression-mode-eval's 'Cross-tier — Lightweight Skill-Mode Substitution' conditions are met. MULTI-PHASE: 스킬을 그대로 spawn하지 말고 R020 「위임 경계를 Phase 개수로 설계」에 따라 단일 목표 위임으로 분할해 순차 발주한다 (#1595 #4). 리서치·계측 위임의 완료 조건에는 결론 수치를 산출물 표에서 jq/awk로 재계산해 병기하도록 명시한다(#1707 #4)."
|
|
352
396
|
depends_on: plan
|
|
353
397
|
|
|
354
398
|
- name: implement
|
|
@@ -363,6 +407,12 @@ steps:
|
|
|
363
407
|
- Use specialized agents (lang-*, be-*, fe-*, infra-*) over general-purpose
|
|
364
408
|
4. TDD via superpowers:test-driven-development when tests apply
|
|
365
409
|
5. Commit via mgr-gitnerd with `Refs #<N>` trailer in body — NEVER `Fixes`/`Closes`/`Resolves` (#1542).
|
|
410
|
+
Commit trailers MUST use ONLY the exact trailer text the orchestrator supplies in the
|
|
411
|
+
delegation prompt — the agent MUST NOT add or rewrite any other trailer (observed in
|
|
412
|
+
another project's session: a subagent added an unapproved model-attribution trailer to 4
|
|
413
|
+
local commits, citing the repo's own past-commit convention as justification; the trailer
|
|
414
|
+
did not remain on the target branch because the squash-merge specified the PR body
|
|
415
|
+
separately) (#1728 찐빠 #6).
|
|
366
416
|
⚠ implement-stage commits land directly on develop (no PR gate here). A close-keyword trailer on a
|
|
367
417
|
develop-bound commit auto-closes the issue on push — BEFORE release/tag/publish (observed v1.1.38,
|
|
368
418
|
07:49:26Z). Close keywords belong ONLY in the release-stage PR body (see release step 3.b) — auto-tag.yml
|
|
@@ -375,6 +425,15 @@ steps:
|
|
|
375
425
|
bypasses the quality gate and is on the standing deny list (R010).
|
|
376
426
|
Note: git worktrees run typecheck only (`.husky/pre-commit` lines 7-12 branch on
|
|
377
427
|
`[ -f .git ]` and exit 0), so the long budget matters most on the MAIN worktree.
|
|
428
|
+
OPTION: the implement-stage commit MAY be deferred until AFTER deep-verify
|
|
429
|
+
corrections have landed, combining the implement changes and the deep-verify
|
|
430
|
+
corrections into ONE commit (정정 커밋 추가 비용 절감, #1727 찐빠 #4) — allowed
|
|
431
|
+
ONLY before any push to develop, and MUST be announced to the user. The deferred
|
|
432
|
+
commit still carries the `Refs #<N>` trailer and the 400000ms timeout above. Risk:
|
|
433
|
+
verify-build and deep-verify then run against an uncommitted working tree until the
|
|
434
|
+
combined commit lands. DEADLINE: the combined commit MUST land — with the
|
|
435
|
+
`.husky/pre-commit` gate passing — before the release step begins; release step
|
|
436
|
+
1.a requires a clean working tree, so a deferred commit cannot cross into release.
|
|
378
437
|
6. On success: remove in-progress, add verify-ready
|
|
379
438
|
7. On failure: remove in-progress, add needs-review, comment error summary
|
|
380
439
|
|
|
@@ -394,10 +453,44 @@ steps:
|
|
|
394
453
|
delegation prompt's sentences and rewrite any match (cause: the R016 「신설 조항의 동일
|
|
395
454
|
반복 self-check」 was known as text but not executed as a procedure, #1707 #1).
|
|
396
455
|
- Every rule/skill/guide TEXT-editing delegation prompt MUST include this fixed constraint
|
|
397
|
-
block: (a) Korean 합쇼체 for new sentences, do not imitate adjacent
|
|
456
|
+
block: (a) Korean 합쇼체 for new sentences, do not imitate adjacent 반말 — completion
|
|
457
|
+
criteria MUST include THREE deterministic checks, scoped to edited text files (md/yaml)
|
|
458
|
+
and restricted to added lines only (`git diff -U0 -- <edited md/yaml files> | grep
|
|
459
|
+
'^+'`): family check `grep -cE '(한다|된다|않는다|따른다|했다|있다|없다|넣는다|이다)[.。 "]'`
|
|
460
|
+
= 0, line-final auxiliary check `grep -E '다[.。"]?$' | grep -vc '니다[.。"]?$'` = 0
|
|
461
|
+
(the family list alone misses endings such as 따른다/했다/있다 and unpunctuated
|
|
462
|
+
line-final endings; the line-final check excludes 합쇼체 `-니다` endings so it does not
|
|
463
|
+
flag correct sentences — verified against 6 반말/평서형 positive samples and 6 합쇼체
|
|
464
|
+
negative samples, 12/12 correct) (#1711 찐빠 #3), AND line-final noun-ending check
|
|
465
|
+
`grep -E '(함|됨|필요)[.。"]?$'` = 0 (반말/명사 종결 endings such as 확인함·정정
|
|
466
|
+
필요·완료됨 fall entirely outside the 다-ending regexes above and were previously
|
|
467
|
+
undetectable — verified against 4 명사 종결 positive samples and 4 합쇼체 negative
|
|
468
|
+
samples, 8/8 correct) (#1728 찐빠 #2 residual). Even with all three checks, a residual
|
|
469
|
+
gap remains for 반말/명사 종결 variants the patterns above do not enumerate — the agent
|
|
470
|
+
MUST also read the newly added lines directly as a final check, not rely on regex alone.
|
|
471
|
+
When an edit re-emits a pre-existing
|
|
472
|
+
line unchanged in meaning (e.g. reformatting), judge only the newly added span, not the
|
|
473
|
+
whole re-emitted line; (b) locate by anchor
|
|
398
474
|
strings, never line numbers; (c) copy quotations from `gh issue view --json body` output and
|
|
399
475
|
verify with `grep -F`; (d) ±1 heading check including re-binding of relative references (위
|
|
400
|
-
표/아래 표/직전 조항); (e) copy to `templates/` mirror and confirm `md5 -q` equality (#1707 #3)
|
|
476
|
+
표/아래 표/직전 조항); (e) copy to `templates/` mirror and confirm `md5 -q` equality (#1707 #3);
|
|
477
|
+
(f) when paraphrasing a quoted source, preserve its result word, subject, and causal
|
|
478
|
+
direction (결과어·주체·인과 방향 보존) — this is checked SEPARATELY from the `grep -F`
|
|
479
|
+
lexical match, by placing the paraphrase and the original sentence side by side in the
|
|
480
|
+
completion report (#1711 찐빠 #1); (g) version/count example values written
|
|
481
|
+
into rule/skill text use placeholders, never real literals (룰 예시 값은 플레이스홀더,
|
|
482
|
+
실값 리터럴 금지) — the rule corpus is itself a grep target, and a real literal can
|
|
483
|
+
contaminate the very command a clause cites (#1711 찐빠 #2); (h) any temporary file the
|
|
484
|
+
delegation creates MUST live under a per-agent-unique path (`$TMPDIR` or the session
|
|
485
|
+
scratchpad), never a fixed shared path (#1722 찐빠 #7).
|
|
486
|
+
- Every delegation prompt (not only rule/skill/guide TEXT edits) MUST instruct the agent
|
|
487
|
+
that if a guard, classifier, or permission check blocks an action, it MUST NOT route
|
|
488
|
+
around it (e.g. via a shell glob or path rewrite) — it MUST stop and report the block
|
|
489
|
+
verbatim (R010 「품질 게이트 우회 금지 — 훅 차단은 보고 대상」, extended here from git
|
|
490
|
+
hooks to guards/classifiers/permissions generally) (#1728 찐빠 #1).
|
|
491
|
+
- After any delegation that creates temporary files under constraint (h) above, the
|
|
492
|
+
orchestrator MUST confirm with `git status --short` that no stray file was left in the
|
|
493
|
+
repo (#1721 찐빠 #7).
|
|
401
494
|
- Document mirror/parity delegations (README/ARCHITECTURE/CLAUDE.md ko-en, templates
|
|
402
495
|
mirrors, etc.) MUST be split to ≤3 files per delegation (a companion cap alongside the
|
|
403
496
|
arithmetic below, not a replacement for it); compute turn arithmetic (files × 3 +
|
|
@@ -420,17 +513,52 @@ steps:
|
|
|
420
513
|
`.gitignore` rule) — MUST be excluded from delegation scope, or its tracked status
|
|
421
514
|
decided first, before dispatch (R010 「Agent Capability Pre-Check」 git-tracked row)
|
|
422
515
|
(#1709 #4).
|
|
423
|
-
- When forwarding a number an
|
|
424
|
-
subsequent delegation prompt, recompute
|
|
425
|
-
<path> | grep -c '^+[^+]'`)
|
|
426
|
-
|
|
427
|
-
|
|
516
|
+
- When forwarding a number OR an identifier (file path, rule number, issue number) an
|
|
517
|
+
agent reported into a subsequent delegation prompt, recompute the number once via
|
|
518
|
+
diff/ls (e.g. `git diff -U0 -- <path> | grep -c '^+[^+]'`) AND re-check the
|
|
519
|
+
identifier once via a corpus-wide grep of the reported CONTENT key, not the reported
|
|
520
|
+
identifier itself (e.g. if an agent reports "<rule-N> covers <content key>", grep the
|
|
521
|
+
content key — `git grep -n '<content key>' .claude/rules/` — not `<rule-N>`) and
|
|
522
|
+
compare the file/rule where that content actually lives against the reported identifier
|
|
523
|
+
before restating either — do not relay an unverified agent-reported count or identifier
|
|
524
|
+
(R023 「리서치 위임의 결론 수치는 표에서 재계산해 병기」 #1707 #4 확장, #1709 #5, #1722
|
|
525
|
+
찐빠 #3).
|
|
526
|
+
- Delegations that build or replace an evaluation/test harness or a production code path
|
|
527
|
+
(fixtures, ablation lanes, scoring/oracle logic) MUST require bidirectional proof, not
|
|
528
|
+
a single-direction pass: (a) positive AND negative fixtures — a fixture set that can
|
|
529
|
+
both pass and fail, and for a replaced code path, invalid-input fixtures compared
|
|
530
|
+
against the original's rc/stderr, not just valid-input stdout parity; (b) a control —
|
|
531
|
+
the change MUST be measured before AND after together with the SAME harness (대조군:
|
|
532
|
+
변경 전후를 함께 측정, #1721 찐빠 #1) — this before/after measurement is MANDATORY, not
|
|
533
|
+
an example; reverting the change to confirm the result flips, or a synthetic
|
|
534
|
+
positive-control input returning a non-zero candidate/hit count, are additional means
|
|
535
|
+
of proving the harness can detect an effect at all, not substitutes for the before/after
|
|
536
|
+
measurement; (c) no working around a discovered product or measurement defect to force
|
|
537
|
+
a pass — halt and report instead (R023 「Conditional-Output Verification」 양성/음성 짝
|
|
538
|
+
원칙 확장, #1721 찐빠 #1, #1727 찐빠 #2, #1728 찐빠 #2).
|
|
428
539
|
- For `claude-code-release` issues, CC release knowledge goes to
|
|
429
540
|
`guides/claude-code/15-version-compatibility.md` (+ templates mirror) per rule; a rule
|
|
430
541
|
file gets at most ONE line of behavioral norm only when agent behavior must change.
|
|
431
|
-
Delegations
|
|
542
|
+
Delegations correcting a CC-note (a note the issue claims is wrong) MUST enclose the
|
|
543
|
+
upstream CHANGELOG lines (measured with `grep -nF`) and the original target paragraph
|
|
544
|
+
as ground truth; if the issue's premise differs from the primary source, the primary
|
|
545
|
+
source wins and the discrepancy is reported rather than silently inherited into the
|
|
546
|
+
corrected wording (#1730 찐빠 #1).
|
|
547
|
+
- When review-correction work is split across file-ownership delegations (one file per
|
|
548
|
+
agent), every split delegation prompt MUST carry the FULL list of review findings
|
|
549
|
+
(not only the subset touching that agent's file) as a self-check list, so a fix in one
|
|
550
|
+
file does not reintroduce a defect the review flagged in a sibling file (#1730 찐빠
|
|
551
|
+
#2).
|
|
552
|
+
- Delegations adding visible text to `CLAUDE.md`/`.claude/rules/*.md` MUST keep the
|
|
432
553
|
comment-stripped total ≤140,000 chars (hard limit 150,000, validate-docs
|
|
433
|
-
`--programmatic-only`) — retire/DETAIL-wrap something else in-change if needed (R016
|
|
554
|
+
`--programmatic-only`) — retire/DETAIL-wrap something else in-change if needed (R016
|
|
555
|
+
버전노트 보존정책 / 예산 게이트, #1717). Any delegation that compresses or conceals rule
|
|
556
|
+
text (DETAIL-wrapping, retirement) MUST deterministically confirm that every visible
|
|
557
|
+
approval/prohibition/MUST sentence present in the file at HEAD is semantically still
|
|
558
|
+
present in the new visible text afterwards (의미상 남았는가) — a visible-text-to-visible-
|
|
559
|
+
text comparison, not a summary-vs-summary one, using a deterministic method: per-sentence
|
|
560
|
+
`grep -F` of key phrases from each of HEAD's visible approval/prohibition/MUST sentences
|
|
561
|
+
against the new comment-stripped text (#1722 찐빠 #1).
|
|
434
562
|
|
|
435
563
|
|
|
436
564
|
## Sensitive Path Handling (CC v2.1.121+)
|
|
@@ -475,6 +603,17 @@ steps:
|
|
|
475
603
|
- If current FAIL count > baseline → NEW regression detected → halt + report failure list
|
|
476
604
|
- If current FAIL count <= baseline → continue with advisory log "X failures (baseline {n}, delta {d})"
|
|
477
605
|
5. Build verification (if package has build script)
|
|
606
|
+
6. Coverage threshold check (equivalent to `.husky/pre-commit`'s coverage gate — this
|
|
607
|
+
step exists so that a deferred implement-stage commit, per the implement step 5
|
|
608
|
+
OPTION, is still coverage-gated before release even though the hook has not run yet):
|
|
609
|
+
- bun test --coverage — standalone (NO pipe), read exit code directly
|
|
610
|
+
- Extract Function/Line coverage from the "All files" summary line
|
|
611
|
+
- Read the CURRENT threshold value and the new-source-file relaxation rule directly
|
|
612
|
+
from `.husky/pre-commit` at run time — do NOT hardcode a threshold number in this
|
|
613
|
+
workflow; the hook's threshold can change independently of this file
|
|
614
|
+
- If either Function or Line coverage falls below the threshold `.husky/pre-commit`
|
|
615
|
+
currently applies (accounting for its dynamic relaxation for commits containing
|
|
616
|
+
newly added `src/**/*.ts`/`.tsx` files): halt + report the shortfall
|
|
478
617
|
|
|
479
618
|
For Python/Go/Docker/static-site projects: auto-detect and run equivalent (py_compile + pytest / go build + go vet + go test / docker build / file validation).
|
|
480
619
|
|
|
@@ -482,6 +621,7 @@ steps:
|
|
|
482
621
|
- Lint errors (exit != 0)
|
|
483
622
|
- Typecheck errors
|
|
484
623
|
- NEW test failures (regression from baseline)
|
|
624
|
+
- Coverage below the threshold `.husky/pre-commit` currently applies
|
|
485
625
|
- Build failure
|
|
486
626
|
- Lockfile drift
|
|
487
627
|
|
|
@@ -491,7 +631,7 @@ steps:
|
|
|
491
631
|
|
|
492
632
|
- name: deep-verify
|
|
493
633
|
skill: deep-verify
|
|
494
|
-
description: "Multi-angle release quality verification — self-review checklist if docs-only; mgr-sauron R017 + core self-check if lite. MULTI-PHASE: 스킬을 그대로 spawn하지 말고 R020 「위임 경계를 Phase 개수로 설계」에 따라 단일 목표 위임으로 분할해 순차 발주한다 (#1595 #4). lite 분할 표준(#1652 #3-4): (1) mgr-sauron R017 구조 검증 단일 목표 위임 1건 + (2) 변경 성격별 적대적 리뷰 단일 목표 위임 1건 — 스크립트 변경이면 실행 재현 기반 adversarial-review, 룰/스킬/yaml 텍스트 변경이면 문구 정합·배선 리뷰. 훅·advisor 옵션 변경이면 합성 픽스처 외에 이 프로젝트 실 트랜스크립트 1건 계수 실측을 완료 조건에 포함(#1703 권장 2). 근거: v1.1.59/60 두 반복 연속 적대적 리뷰가 신규 회귀(M-3/M-4, heredoc 위조)를 실행 재현으로 포착. 검증 위임 표준 문안: 오케스트레이터가 이미 실측한 항목(bun test·lint·typecheck·template-sync·wiki-sync·validate-docs·미러 md5)은 위임서에 재실행 금지 목록으로 열거하고 재실측 대상만 지정한다 — v1.1.61 세션에서 금지 목록 없는 sauron 위임이 bun test를 재실행하다 25턴 절단됐고, 금지 목록을 명시한 재위임은 16 tool_uses로 완주했다(R020 maxTurns 절단 누적 7건째). Ordering: any wiki resync/manifest reseed for the changed rules/skills is dispatched after this step's findings are applied, not alongside it (#1688)."
|
|
634
|
+
description: "Multi-angle release quality verification — self-review checklist if docs-only; mgr-sauron R017 + core self-check if lite. MULTI-PHASE: 스킬을 그대로 spawn하지 말고 R020 「위임 경계를 Phase 개수로 설계」에 따라 단일 목표 위임으로 분할해 순차 발주한다 (#1595 #4). lite 분할 표준(#1652 #3-4): (1) mgr-sauron R017 구조 검증 단일 목표 위임 1건 + (2) 변경 성격별 적대적 리뷰 단일 목표 위임 1건 — 스크립트 변경이면 실행 재현 기반 adversarial-review, 룰/스킬/yaml 텍스트 변경이면 문구 정합·배선 리뷰. 훅·advisor 옵션 변경이면 합성 픽스처 외에 이 프로젝트 실 트랜스크립트 1건 계수 실측을 완료 조건에 포함(#1703 권장 2). 근거: v1.1.59/60 두 반복 연속 적대적 리뷰가 신규 회귀(M-3/M-4, heredoc 위조)를 실행 재현으로 포착. 검증 위임 표준 문안: 오케스트레이터가 이미 실측한 항목(bun test·lint·typecheck·template-sync·wiki-sync·validate-docs·미러 md5)은 위임서에 재실행 금지 목록으로 열거하고 재실측 대상만 지정한다 — v1.1.61 세션에서 금지 목록 없는 sauron 위임이 bun test를 재실행하다 25턴 절단됐고, 금지 목록을 명시한 재위임은 16 tool_uses로 완주했다(R020 maxTurns 절단 누적 7건째). 검증 위임도 편집 위임과 동일하게 턴 산술(대상 파일 수 × 판단 항목 수)을 계산해 위임서에 명시하고, 예산을 넘으면 파일군별로 분할해야 합니다 — v1.1.77 sauron 1차 위임은 30여 파일 + 판단 4항목을 단일 위임에 넣어 판정 없이 25턴에서 절단됐습니다(#1722 찐빠 #2). Ordering: any wiki resync/manifest reseed for the changed rules/skills is dispatched after this step's findings are applied, not alongside it (#1688)."
|
|
495
635
|
depends_on: verify-build
|
|
496
636
|
|
|
497
637
|
- name: release
|
|
@@ -551,6 +691,8 @@ steps:
|
|
|
551
691
|
⚠ do NOT add Closes/Fixes/Resolves keywords to this commit message (#1542) — this commit merges into
|
|
552
692
|
develop later via the release PR; a close keyword here bypasses the PR-body mechanism auto-tag.yml
|
|
553
693
|
relies on (see step 3.b below). Use `Refs #N` if a cross-reference is needed.
|
|
694
|
+
⚠ Commit trailers MUST use ONLY the exact trailer text supplied in this delegation
|
|
695
|
+
prompt — do not add or rewrite any other trailer (#1728 찐빠 #6; see implement step 5).
|
|
554
696
|
⚠ Bash timeout (#1645): delegate this commit with an explicit `timeout: 400000` — the
|
|
555
697
|
main-worktree pre-commit hook runs the full test suite (~165s) and the Bash default of
|
|
556
698
|
120000ms kills it with exit 143. `--no-verify` is NOT an acceptable workaround (R010).
|
|
@@ -631,7 +773,10 @@ steps:
|
|
|
631
773
|
If NOT: skip with "No CI configured. Skipping." and continue.
|
|
632
774
|
2. If CI exists:
|
|
633
775
|
- gh run list --limit 10
|
|
634
|
-
- Wait for runs triggered by the new tag/push
|
|
776
|
+
- Wait for runs triggered by the new tag/push — poll WITHIN the Bash timeout budget
|
|
777
|
+
(loop_count × sleep_interval + command time ≤ timeout, with margin), or prefer a
|
|
778
|
+
single bounded call `gh run watch <run-id> --exit-status` (optionally
|
|
779
|
+
run_in_background) over an unbounded manual poll loop (#1711 찐빠 #6).
|
|
635
780
|
- If failures: diagnose, fix, re-verify
|
|
636
781
|
3. For npm projects with auto-tag.yml: MANDATORY additional check:
|
|
637
782
|
gh run list --workflow auto-tag.yml --limit 1 --json conclusion,displayTitle
|
|
@@ -646,7 +791,17 @@ steps:
|
|
|
646
791
|
- Branch naming mismatch (branch not matching release/v* pattern — fix: verify branch name)
|
|
647
792
|
Report: "[ci-check] auto-tag.yml: {conclusion}" as mandatory line in CI status report.
|
|
648
793
|
4. For npm projects: verify npm publish succeeded (npm view <pkg> version)
|
|
649
|
-
5.
|
|
794
|
+
5. Verify every scoped issue's label/state lifecycle landed: `in-progress` removed and
|
|
795
|
+
the issue CLOSED for each issue that was in this release's scope — do not rely on the
|
|
796
|
+
implement step having run the lifecycle transition; check directly with
|
|
797
|
+
`gh issue view <N> --json state,labels` (#1722 찐빠 #6, closes gap where CLOSED issues
|
|
798
|
+
retained `in-progress`). This step finds AND fixes, not verify-only: if a stale
|
|
799
|
+
`in-progress` label remains, remove it (`gh issue edit <N> --remove-label
|
|
800
|
+
in-progress`) and report the fix; if the issue is still OPEN, do NOT close it here —
|
|
801
|
+
closing stays with auto-tag.yml unless it failed to close that issue, in which case
|
|
802
|
+
report the open issue for manual close per release step 3.d above (#1722 하네스 제안
|
|
803
|
+
4).
|
|
804
|
+
6. Report final CI status.
|
|
650
805
|
description: "Post-release CI verification and fix loop"
|
|
651
806
|
depends_on: release
|
|
652
807
|
|
|
@@ -166,6 +166,8 @@ gh issue create \
|
|
|
166
166
|
|
|
167
167
|
Add priority label (`P1`, `P2`, `P3`) based on categorization. Default for auto-registered items: `P3` (escalate to `P2` for MEDIUM+ severity).
|
|
168
168
|
|
|
169
|
+
**`## 권장 조치`의 미검증 제안은 `[가설]` 태그 필수**: `{권장 사항}`에 적는 수정안이 실행·테스트 등으로 검증되지 않았다면, 문장 앞에 `[가설]` 태그를 붙이고 무엇을 확인하면 검증되는지 함께 적으십시오. 원인 진단에만 `[가설]`을 붙이고 제안 수정안은 확정형으로 적으면, 그 제안을 그대로 적용했을 때 실패할 위험이 후속 세션으로 이월됩니다(R020 Diagnostic Hypothesis Verification, Origin: #1725 찐빠 #1).
|
|
170
|
+
|
|
169
171
|
## Notes
|
|
170
172
|
|
|
171
173
|
- This skill runs in the main conversation context (via workflow skill step)
|
|
@@ -38,6 +38,12 @@ Analyzes GitHub issues directly against the current codebase. For each issue, se
|
|
|
38
38
|
| 4 | Multi-Perspective Analysis & Output | general-purpose agents | sonnet/opus |
|
|
39
39
|
| 5 | Act | mgr-gitnerd | — |
|
|
40
40
|
|
|
41
|
+
## Lightweight Mode (Cross-Tier Substitution)
|
|
42
|
+
|
|
43
|
+
Independent of the auto-dev compression tier selected, this skill's Phase 1-4 may be replaced by a lightweight orchestrator analysis instead of a full skill spawn, but only when the conditions in `.claude/skills/pipeline/workflows/auto-dev.yaml` (runtime source) `## Cross-tier — Lightweight Skill-Mode Substitution` are met (scope ≤3 issues, code evidence or a measured root cause with the command used, and a mandatory justification log entry). This skill does not duplicate those conditions here — that section is the authoritative gate.
|
|
44
|
+
|
|
45
|
+
When lightweight mode is used, the triage output (Phase 4E artifact and/or Phase 4D comment) MUST state which mode produced it: `mode: full` or `mode: lightweight`.
|
|
46
|
+
|
|
41
47
|
## Delegation Contract
|
|
42
48
|
|
|
43
49
|
| Phase | Agent | Mode |
|
|
@@ -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)
|
package/templates/manifest.json
CHANGED
|
@@ -178,6 +178,17 @@ steps:
|
|
|
178
178
|
For each scoped issue, extract target file/directory paths from its title+body (explicit
|
|
179
179
|
paths, backtick-quoted paths, or clearly named targets).
|
|
180
180
|
|
|
181
|
+
Measure each extracted path with `git ls-files` NOW, before scope is committed — do not
|
|
182
|
+
defer this to implement time — but ONLY for a target the issue treats as an EXISTING
|
|
183
|
+
file (edit/refactor of a path the issue claims already exists). If such a path is absent
|
|
184
|
+
from this repo (e.g. it belongs to a different repository), route that issue to
|
|
185
|
+
decision-needed or exclude it from this scope immediately (scope-selection 단계에서
|
|
186
|
+
이슈가 가리키는 경로의 `git ls-files` 실측을 선행, #1725 찐빠 #4). For a target the issue
|
|
187
|
+
is CREATING (a new file), this absence check does not apply — a new file is by
|
|
188
|
+
definition untracked (R010 「Required Checks」: 신규 생성 대상은 path-existence 확인에서
|
|
189
|
+
제외); instead confirm the parent directory exists, and do NOT exclude the issue solely
|
|
190
|
+
because the new file path itself is absent.
|
|
191
|
+
|
|
181
192
|
Check against `.claude/rules/MUST-orchestrator-coordination.md` "Protected Paths":
|
|
182
193
|
- `.claude/hooks/**` → EXCLUDED from mgr-creator routing; requires EXPLICIT USER APPROVAL
|
|
183
194
|
(security-critical). If any scoped issue targets this path, request approval for the
|
|
@@ -271,7 +282,10 @@ steps:
|
|
|
271
282
|
## Tier 3 — standard (fallback)
|
|
272
283
|
|
|
273
284
|
If neither docs-only nor lite met → set compression_mode=standard
|
|
274
|
-
- All pipeline steps execute normally with full skill spawns
|
|
285
|
+
- All pipeline steps execute normally with full skill spawns — EXCEPT the two
|
|
286
|
+
Cross-tier exceptions below ("Pre-Existing Converged Artifact Substitution" and
|
|
287
|
+
"Lightweight Skill-Mode Substitution"), which stay available under standard mode too
|
|
288
|
+
when their own conditions are met ("Independent of the tier selected above").
|
|
275
289
|
- Log: "[compression-mode] standard mode (scope={n}, mixed/high-risk labels, large scope, or code logic change)"
|
|
276
290
|
|
|
277
291
|
## Cross-tier — State-Change Side Effects Are NEVER Compressed
|
|
@@ -330,6 +344,36 @@ steps:
|
|
|
330
344
|
|
|
331
345
|
This authorizes, under an audit log, a substitution that would otherwise be a standard-mode contract deviation. Origin: #1309 (a converged `/research` artifact was used in place of triage/plan/deep-plan under standard mode without an authorizing rule).
|
|
332
346
|
|
|
347
|
+
## Cross-tier — Lightweight Skill-Mode Substitution
|
|
348
|
+
|
|
349
|
+
Independent of the tier selected above, the triage / plan / deep-plan skill spawns MAY be
|
|
350
|
+
replaced by orchestrator-integrated analysis — a lightweight mode — even in standard mode,
|
|
351
|
+
ONLY when ALL of the following hold. deep-verify is NOT eligible for this lightweight-mode
|
|
352
|
+
substitution (see NEVER list below) — it remains eligible only for the separate
|
|
353
|
+
pre-existing-converged-artifact substitution described above (a full prior skill spawn's
|
|
354
|
+
output reused, not orchestrator-integrated shortcutting).
|
|
355
|
+
1. Scope size ≤ 3 issues (이슈에 코드 근거가 있고 범위가 이슈 3건 이하이면 경량 모드,
|
|
356
|
+
#1721 제안 4 — 사용자 결정: 상한 3건).
|
|
357
|
+
2. For EVERY scoped issue in this substitution, EITHER the issue body cites concrete code
|
|
358
|
+
evidence (a file path AND an anchor — function name / unique string, not just a claim),
|
|
359
|
+
OR the orchestrator has recorded the measured root cause together with the exact
|
|
360
|
+
command used to measure it (scope=1 + 오케스트레이터 실측 원인 확정 조건의 감사 로그
|
|
361
|
+
대체 조항, #1727 찐빠 #1).
|
|
362
|
+
3. A MANDATORY justification log line is emitted naming the step and the evidence basis:
|
|
363
|
+
"[compression-mode] lightweight skill-mode substitution — step '{step}', scope={n},
|
|
364
|
+
evidence={file:anchor or measured-cause+command}".
|
|
365
|
+
4. The resulting artifact explicitly states its own mode (`mode: full` or
|
|
366
|
+
`mode: lightweight`) so downstream steps and reviewers can tell it apart from a full
|
|
367
|
+
skill spawn (결과물에 모드를 표시, #1721 제안 4).
|
|
368
|
+
|
|
369
|
+
This substitution is NEVER available for implement, verify-build, release, ci-check, or
|
|
370
|
+
deep-verify.
|
|
371
|
+
It replaces analysis output ONLY — every step's state-change side effect still runs in
|
|
372
|
+
full regardless of substitution (see "Cross-tier — State-Change Side Effects Are NEVER
|
|
373
|
+
Compressed" above).
|
|
374
|
+
|
|
375
|
+
If any condition above cannot be concretely asserted, do NOT substitute — spawn the skill.
|
|
376
|
+
|
|
333
377
|
## Output
|
|
334
378
|
|
|
335
379
|
compression_mode ∈ {docs-only, lite, standard} as pipeline state for downstream steps.
|
|
@@ -338,17 +382,17 @@ steps:
|
|
|
338
382
|
|
|
339
383
|
- name: triage
|
|
340
384
|
skill: professor-triage
|
|
341
|
-
description: "Cross-analysis triage with priority assessment (scoped to release manifest) — skipped if docs-only, integrated-analysis allowed if lite"
|
|
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"
|
|
342
386
|
depends_on: compression-mode-eval
|
|
343
387
|
|
|
344
388
|
- name: plan
|
|
345
389
|
skill: release-plan
|
|
346
|
-
description: "Release unit plan from triaged issues — skipped if docs-only, integrated-analysis allowed if lite"
|
|
390
|
+
description: "Release unit plan from triaged issues — 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"
|
|
347
391
|
depends_on: triage
|
|
348
392
|
|
|
349
393
|
- name: deep-plan
|
|
350
394
|
skill: deep-plan
|
|
351
|
-
description: "Research-validated implementation plan (research → plan → verify) — skipped if docs-only, integrated-analysis allowed if lite. MULTI-PHASE: 스킬을 그대로 spawn하지 말고 R020 「위임 경계를 Phase 개수로 설계」에 따라 단일 목표 위임으로 분할해 순차 발주한다 (#1595 #4). 리서치·계측 위임의 완료 조건에는 결론 수치를 산출물 표에서 jq/awk로 재계산해 병기하도록 명시한다(#1707 #4)."
|
|
395
|
+
description: "Research-validated implementation plan (research → plan → verify) — skipped if docs-only, integrated-analysis allowed if lite; independent of tier, MAY run in lightweight mode when compression-mode-eval's 'Cross-tier — Lightweight Skill-Mode Substitution' conditions are met. MULTI-PHASE: 스킬을 그대로 spawn하지 말고 R020 「위임 경계를 Phase 개수로 설계」에 따라 단일 목표 위임으로 분할해 순차 발주한다 (#1595 #4). 리서치·계측 위임의 완료 조건에는 결론 수치를 산출물 표에서 jq/awk로 재계산해 병기하도록 명시한다(#1707 #4)."
|
|
352
396
|
depends_on: plan
|
|
353
397
|
|
|
354
398
|
- name: implement
|
|
@@ -363,6 +407,12 @@ steps:
|
|
|
363
407
|
- Use specialized agents (lang-*, be-*, fe-*, infra-*) over general-purpose
|
|
364
408
|
4. TDD via superpowers:test-driven-development when tests apply
|
|
365
409
|
5. Commit via mgr-gitnerd with `Refs #<N>` trailer in body — NEVER `Fixes`/`Closes`/`Resolves` (#1542).
|
|
410
|
+
Commit trailers MUST use ONLY the exact trailer text the orchestrator supplies in the
|
|
411
|
+
delegation prompt — the agent MUST NOT add or rewrite any other trailer (observed in
|
|
412
|
+
another project's session: a subagent added an unapproved model-attribution trailer to 4
|
|
413
|
+
local commits, citing the repo's own past-commit convention as justification; the trailer
|
|
414
|
+
did not remain on the target branch because the squash-merge specified the PR body
|
|
415
|
+
separately) (#1728 찐빠 #6).
|
|
366
416
|
⚠ implement-stage commits land directly on develop (no PR gate here). A close-keyword trailer on a
|
|
367
417
|
develop-bound commit auto-closes the issue on push — BEFORE release/tag/publish (observed v1.1.38,
|
|
368
418
|
07:49:26Z). Close keywords belong ONLY in the release-stage PR body (see release step 3.b) — auto-tag.yml
|
|
@@ -375,6 +425,15 @@ steps:
|
|
|
375
425
|
bypasses the quality gate and is on the standing deny list (R010).
|
|
376
426
|
Note: git worktrees run typecheck only (`.husky/pre-commit` lines 7-12 branch on
|
|
377
427
|
`[ -f .git ]` and exit 0), so the long budget matters most on the MAIN worktree.
|
|
428
|
+
OPTION: the implement-stage commit MAY be deferred until AFTER deep-verify
|
|
429
|
+
corrections have landed, combining the implement changes and the deep-verify
|
|
430
|
+
corrections into ONE commit (정정 커밋 추가 비용 절감, #1727 찐빠 #4) — allowed
|
|
431
|
+
ONLY before any push to develop, and MUST be announced to the user. The deferred
|
|
432
|
+
commit still carries the `Refs #<N>` trailer and the 400000ms timeout above. Risk:
|
|
433
|
+
verify-build and deep-verify then run against an uncommitted working tree until the
|
|
434
|
+
combined commit lands. DEADLINE: the combined commit MUST land — with the
|
|
435
|
+
`.husky/pre-commit` gate passing — before the release step begins; release step
|
|
436
|
+
1.a requires a clean working tree, so a deferred commit cannot cross into release.
|
|
378
437
|
6. On success: remove in-progress, add verify-ready
|
|
379
438
|
7. On failure: remove in-progress, add needs-review, comment error summary
|
|
380
439
|
|
|
@@ -394,10 +453,44 @@ steps:
|
|
|
394
453
|
delegation prompt's sentences and rewrite any match (cause: the R016 「신설 조항의 동일
|
|
395
454
|
반복 self-check」 was known as text but not executed as a procedure, #1707 #1).
|
|
396
455
|
- Every rule/skill/guide TEXT-editing delegation prompt MUST include this fixed constraint
|
|
397
|
-
block: (a) Korean 합쇼체 for new sentences, do not imitate adjacent
|
|
456
|
+
block: (a) Korean 합쇼체 for new sentences, do not imitate adjacent 반말 — completion
|
|
457
|
+
criteria MUST include THREE deterministic checks, scoped to edited text files (md/yaml)
|
|
458
|
+
and restricted to added lines only (`git diff -U0 -- <edited md/yaml files> | grep
|
|
459
|
+
'^+'`): family check `grep -cE '(한다|된다|않는다|따른다|했다|있다|없다|넣는다|이다)[.。 "]'`
|
|
460
|
+
= 0, line-final auxiliary check `grep -E '다[.。"]?$' | grep -vc '니다[.。"]?$'` = 0
|
|
461
|
+
(the family list alone misses endings such as 따른다/했다/있다 and unpunctuated
|
|
462
|
+
line-final endings; the line-final check excludes 합쇼체 `-니다` endings so it does not
|
|
463
|
+
flag correct sentences — verified against 6 반말/평서형 positive samples and 6 합쇼체
|
|
464
|
+
negative samples, 12/12 correct) (#1711 찐빠 #3), AND line-final noun-ending check
|
|
465
|
+
`grep -E '(함|됨|필요)[.。"]?$'` = 0 (반말/명사 종결 endings such as 확인함·정정
|
|
466
|
+
필요·완료됨 fall entirely outside the 다-ending regexes above and were previously
|
|
467
|
+
undetectable — verified against 4 명사 종결 positive samples and 4 합쇼체 negative
|
|
468
|
+
samples, 8/8 correct) (#1728 찐빠 #2 residual). Even with all three checks, a residual
|
|
469
|
+
gap remains for 반말/명사 종결 variants the patterns above do not enumerate — the agent
|
|
470
|
+
MUST also read the newly added lines directly as a final check, not rely on regex alone.
|
|
471
|
+
When an edit re-emits a pre-existing
|
|
472
|
+
line unchanged in meaning (e.g. reformatting), judge only the newly added span, not the
|
|
473
|
+
whole re-emitted line; (b) locate by anchor
|
|
398
474
|
strings, never line numbers; (c) copy quotations from `gh issue view --json body` output and
|
|
399
475
|
verify with `grep -F`; (d) ±1 heading check including re-binding of relative references (위
|
|
400
|
-
표/아래 표/직전 조항); (e) copy to `templates/` mirror and confirm `md5 -q` equality (#1707 #3)
|
|
476
|
+
표/아래 표/직전 조항); (e) copy to `templates/` mirror and confirm `md5 -q` equality (#1707 #3);
|
|
477
|
+
(f) when paraphrasing a quoted source, preserve its result word, subject, and causal
|
|
478
|
+
direction (결과어·주체·인과 방향 보존) — this is checked SEPARATELY from the `grep -F`
|
|
479
|
+
lexical match, by placing the paraphrase and the original sentence side by side in the
|
|
480
|
+
completion report (#1711 찐빠 #1); (g) version/count example values written
|
|
481
|
+
into rule/skill text use placeholders, never real literals (룰 예시 값은 플레이스홀더,
|
|
482
|
+
실값 리터럴 금지) — the rule corpus is itself a grep target, and a real literal can
|
|
483
|
+
contaminate the very command a clause cites (#1711 찐빠 #2); (h) any temporary file the
|
|
484
|
+
delegation creates MUST live under a per-agent-unique path (`$TMPDIR` or the session
|
|
485
|
+
scratchpad), never a fixed shared path (#1722 찐빠 #7).
|
|
486
|
+
- Every delegation prompt (not only rule/skill/guide TEXT edits) MUST instruct the agent
|
|
487
|
+
that if a guard, classifier, or permission check blocks an action, it MUST NOT route
|
|
488
|
+
around it (e.g. via a shell glob or path rewrite) — it MUST stop and report the block
|
|
489
|
+
verbatim (R010 「품질 게이트 우회 금지 — 훅 차단은 보고 대상」, extended here from git
|
|
490
|
+
hooks to guards/classifiers/permissions generally) (#1728 찐빠 #1).
|
|
491
|
+
- After any delegation that creates temporary files under constraint (h) above, the
|
|
492
|
+
orchestrator MUST confirm with `git status --short` that no stray file was left in the
|
|
493
|
+
repo (#1721 찐빠 #7).
|
|
401
494
|
- Document mirror/parity delegations (README/ARCHITECTURE/CLAUDE.md ko-en, templates
|
|
402
495
|
mirrors, etc.) MUST be split to ≤3 files per delegation (a companion cap alongside the
|
|
403
496
|
arithmetic below, not a replacement for it); compute turn arithmetic (files × 3 +
|
|
@@ -420,17 +513,52 @@ steps:
|
|
|
420
513
|
`.gitignore` rule) — MUST be excluded from delegation scope, or its tracked status
|
|
421
514
|
decided first, before dispatch (R010 「Agent Capability Pre-Check」 git-tracked row)
|
|
422
515
|
(#1709 #4).
|
|
423
|
-
- When forwarding a number an
|
|
424
|
-
subsequent delegation prompt, recompute
|
|
425
|
-
<path> | grep -c '^+[^+]'`)
|
|
426
|
-
|
|
427
|
-
|
|
516
|
+
- When forwarding a number OR an identifier (file path, rule number, issue number) an
|
|
517
|
+
agent reported into a subsequent delegation prompt, recompute the number once via
|
|
518
|
+
diff/ls (e.g. `git diff -U0 -- <path> | grep -c '^+[^+]'`) AND re-check the
|
|
519
|
+
identifier once via a corpus-wide grep of the reported CONTENT key, not the reported
|
|
520
|
+
identifier itself (e.g. if an agent reports "<rule-N> covers <content key>", grep the
|
|
521
|
+
content key — `git grep -n '<content key>' .claude/rules/` — not `<rule-N>`) and
|
|
522
|
+
compare the file/rule where that content actually lives against the reported identifier
|
|
523
|
+
before restating either — do not relay an unverified agent-reported count or identifier
|
|
524
|
+
(R023 「리서치 위임의 결론 수치는 표에서 재계산해 병기」 #1707 #4 확장, #1709 #5, #1722
|
|
525
|
+
찐빠 #3).
|
|
526
|
+
- Delegations that build or replace an evaluation/test harness or a production code path
|
|
527
|
+
(fixtures, ablation lanes, scoring/oracle logic) MUST require bidirectional proof, not
|
|
528
|
+
a single-direction pass: (a) positive AND negative fixtures — a fixture set that can
|
|
529
|
+
both pass and fail, and for a replaced code path, invalid-input fixtures compared
|
|
530
|
+
against the original's rc/stderr, not just valid-input stdout parity; (b) a control —
|
|
531
|
+
the change MUST be measured before AND after together with the SAME harness (대조군:
|
|
532
|
+
변경 전후를 함께 측정, #1721 찐빠 #1) — this before/after measurement is MANDATORY, not
|
|
533
|
+
an example; reverting the change to confirm the result flips, or a synthetic
|
|
534
|
+
positive-control input returning a non-zero candidate/hit count, are additional means
|
|
535
|
+
of proving the harness can detect an effect at all, not substitutes for the before/after
|
|
536
|
+
measurement; (c) no working around a discovered product or measurement defect to force
|
|
537
|
+
a pass — halt and report instead (R023 「Conditional-Output Verification」 양성/음성 짝
|
|
538
|
+
원칙 확장, #1721 찐빠 #1, #1727 찐빠 #2, #1728 찐빠 #2).
|
|
428
539
|
- For `claude-code-release` issues, CC release knowledge goes to
|
|
429
540
|
`guides/claude-code/15-version-compatibility.md` (+ templates mirror) per rule; a rule
|
|
430
541
|
file gets at most ONE line of behavioral norm only when agent behavior must change.
|
|
431
|
-
Delegations
|
|
542
|
+
Delegations correcting a CC-note (a note the issue claims is wrong) MUST enclose the
|
|
543
|
+
upstream CHANGELOG lines (measured with `grep -nF`) and the original target paragraph
|
|
544
|
+
as ground truth; if the issue's premise differs from the primary source, the primary
|
|
545
|
+
source wins and the discrepancy is reported rather than silently inherited into the
|
|
546
|
+
corrected wording (#1730 찐빠 #1).
|
|
547
|
+
- When review-correction work is split across file-ownership delegations (one file per
|
|
548
|
+
agent), every split delegation prompt MUST carry the FULL list of review findings
|
|
549
|
+
(not only the subset touching that agent's file) as a self-check list, so a fix in one
|
|
550
|
+
file does not reintroduce a defect the review flagged in a sibling file (#1730 찐빠
|
|
551
|
+
#2).
|
|
552
|
+
- Delegations adding visible text to `CLAUDE.md`/`.claude/rules/*.md` MUST keep the
|
|
432
553
|
comment-stripped total ≤140,000 chars (hard limit 150,000, validate-docs
|
|
433
|
-
`--programmatic-only`) — retire/DETAIL-wrap something else in-change if needed (R016
|
|
554
|
+
`--programmatic-only`) — retire/DETAIL-wrap something else in-change if needed (R016
|
|
555
|
+
버전노트 보존정책 / 예산 게이트, #1717). Any delegation that compresses or conceals rule
|
|
556
|
+
text (DETAIL-wrapping, retirement) MUST deterministically confirm that every visible
|
|
557
|
+
approval/prohibition/MUST sentence present in the file at HEAD is semantically still
|
|
558
|
+
present in the new visible text afterwards (의미상 남았는가) — a visible-text-to-visible-
|
|
559
|
+
text comparison, not a summary-vs-summary one, using a deterministic method: per-sentence
|
|
560
|
+
`grep -F` of key phrases from each of HEAD's visible approval/prohibition/MUST sentences
|
|
561
|
+
against the new comment-stripped text (#1722 찐빠 #1).
|
|
434
562
|
|
|
435
563
|
|
|
436
564
|
## Sensitive Path Handling (CC v2.1.121+)
|
|
@@ -475,6 +603,17 @@ steps:
|
|
|
475
603
|
- If current FAIL count > baseline → NEW regression detected → halt + report failure list
|
|
476
604
|
- If current FAIL count <= baseline → continue with advisory log "X failures (baseline {n}, delta {d})"
|
|
477
605
|
5. Build verification (if package has build script)
|
|
606
|
+
6. Coverage threshold check (equivalent to `.husky/pre-commit`'s coverage gate — this
|
|
607
|
+
step exists so that a deferred implement-stage commit, per the implement step 5
|
|
608
|
+
OPTION, is still coverage-gated before release even though the hook has not run yet):
|
|
609
|
+
- bun test --coverage — standalone (NO pipe), read exit code directly
|
|
610
|
+
- Extract Function/Line coverage from the "All files" summary line
|
|
611
|
+
- Read the CURRENT threshold value and the new-source-file relaxation rule directly
|
|
612
|
+
from `.husky/pre-commit` at run time — do NOT hardcode a threshold number in this
|
|
613
|
+
workflow; the hook's threshold can change independently of this file
|
|
614
|
+
- If either Function or Line coverage falls below the threshold `.husky/pre-commit`
|
|
615
|
+
currently applies (accounting for its dynamic relaxation for commits containing
|
|
616
|
+
newly added `src/**/*.ts`/`.tsx` files): halt + report the shortfall
|
|
478
617
|
|
|
479
618
|
For Python/Go/Docker/static-site projects: auto-detect and run equivalent (py_compile + pytest / go build + go vet + go test / docker build / file validation).
|
|
480
619
|
|
|
@@ -482,6 +621,7 @@ steps:
|
|
|
482
621
|
- Lint errors (exit != 0)
|
|
483
622
|
- Typecheck errors
|
|
484
623
|
- NEW test failures (regression from baseline)
|
|
624
|
+
- Coverage below the threshold `.husky/pre-commit` currently applies
|
|
485
625
|
- Build failure
|
|
486
626
|
- Lockfile drift
|
|
487
627
|
|
|
@@ -491,7 +631,7 @@ steps:
|
|
|
491
631
|
|
|
492
632
|
- name: deep-verify
|
|
493
633
|
skill: deep-verify
|
|
494
|
-
description: "Multi-angle release quality verification — self-review checklist if docs-only; mgr-sauron R017 + core self-check if lite. MULTI-PHASE: 스킬을 그대로 spawn하지 말고 R020 「위임 경계를 Phase 개수로 설계」에 따라 단일 목표 위임으로 분할해 순차 발주한다 (#1595 #4). lite 분할 표준(#1652 #3-4): (1) mgr-sauron R017 구조 검증 단일 목표 위임 1건 + (2) 변경 성격별 적대적 리뷰 단일 목표 위임 1건 — 스크립트 변경이면 실행 재현 기반 adversarial-review, 룰/스킬/yaml 텍스트 변경이면 문구 정합·배선 리뷰. 훅·advisor 옵션 변경이면 합성 픽스처 외에 이 프로젝트 실 트랜스크립트 1건 계수 실측을 완료 조건에 포함(#1703 권장 2). 근거: v1.1.59/60 두 반복 연속 적대적 리뷰가 신규 회귀(M-3/M-4, heredoc 위조)를 실행 재현으로 포착. 검증 위임 표준 문안: 오케스트레이터가 이미 실측한 항목(bun test·lint·typecheck·template-sync·wiki-sync·validate-docs·미러 md5)은 위임서에 재실행 금지 목록으로 열거하고 재실측 대상만 지정한다 — v1.1.61 세션에서 금지 목록 없는 sauron 위임이 bun test를 재실행하다 25턴 절단됐고, 금지 목록을 명시한 재위임은 16 tool_uses로 완주했다(R020 maxTurns 절단 누적 7건째). Ordering: any wiki resync/manifest reseed for the changed rules/skills is dispatched after this step's findings are applied, not alongside it (#1688)."
|
|
634
|
+
description: "Multi-angle release quality verification — self-review checklist if docs-only; mgr-sauron R017 + core self-check if lite. MULTI-PHASE: 스킬을 그대로 spawn하지 말고 R020 「위임 경계를 Phase 개수로 설계」에 따라 단일 목표 위임으로 분할해 순차 발주한다 (#1595 #4). lite 분할 표준(#1652 #3-4): (1) mgr-sauron R017 구조 검증 단일 목표 위임 1건 + (2) 변경 성격별 적대적 리뷰 단일 목표 위임 1건 — 스크립트 변경이면 실행 재현 기반 adversarial-review, 룰/스킬/yaml 텍스트 변경이면 문구 정합·배선 리뷰. 훅·advisor 옵션 변경이면 합성 픽스처 외에 이 프로젝트 실 트랜스크립트 1건 계수 실측을 완료 조건에 포함(#1703 권장 2). 근거: v1.1.59/60 두 반복 연속 적대적 리뷰가 신규 회귀(M-3/M-4, heredoc 위조)를 실행 재현으로 포착. 검증 위임 표준 문안: 오케스트레이터가 이미 실측한 항목(bun test·lint·typecheck·template-sync·wiki-sync·validate-docs·미러 md5)은 위임서에 재실행 금지 목록으로 열거하고 재실측 대상만 지정한다 — v1.1.61 세션에서 금지 목록 없는 sauron 위임이 bun test를 재실행하다 25턴 절단됐고, 금지 목록을 명시한 재위임은 16 tool_uses로 완주했다(R020 maxTurns 절단 누적 7건째). 검증 위임도 편집 위임과 동일하게 턴 산술(대상 파일 수 × 판단 항목 수)을 계산해 위임서에 명시하고, 예산을 넘으면 파일군별로 분할해야 합니다 — v1.1.77 sauron 1차 위임은 30여 파일 + 판단 4항목을 단일 위임에 넣어 판정 없이 25턴에서 절단됐습니다(#1722 찐빠 #2). Ordering: any wiki resync/manifest reseed for the changed rules/skills is dispatched after this step's findings are applied, not alongside it (#1688)."
|
|
495
635
|
depends_on: verify-build
|
|
496
636
|
|
|
497
637
|
- name: release
|
|
@@ -551,6 +691,8 @@ steps:
|
|
|
551
691
|
⚠ do NOT add Closes/Fixes/Resolves keywords to this commit message (#1542) — this commit merges into
|
|
552
692
|
develop later via the release PR; a close keyword here bypasses the PR-body mechanism auto-tag.yml
|
|
553
693
|
relies on (see step 3.b below). Use `Refs #N` if a cross-reference is needed.
|
|
694
|
+
⚠ Commit trailers MUST use ONLY the exact trailer text supplied in this delegation
|
|
695
|
+
prompt — do not add or rewrite any other trailer (#1728 찐빠 #6; see implement step 5).
|
|
554
696
|
⚠ Bash timeout (#1645): delegate this commit with an explicit `timeout: 400000` — the
|
|
555
697
|
main-worktree pre-commit hook runs the full test suite (~165s) and the Bash default of
|
|
556
698
|
120000ms kills it with exit 143. `--no-verify` is NOT an acceptable workaround (R010).
|
|
@@ -631,7 +773,10 @@ steps:
|
|
|
631
773
|
If NOT: skip with "No CI configured. Skipping." and continue.
|
|
632
774
|
2. If CI exists:
|
|
633
775
|
- gh run list --limit 10
|
|
634
|
-
- Wait for runs triggered by the new tag/push
|
|
776
|
+
- Wait for runs triggered by the new tag/push — poll WITHIN the Bash timeout budget
|
|
777
|
+
(loop_count × sleep_interval + command time ≤ timeout, with margin), or prefer a
|
|
778
|
+
single bounded call `gh run watch <run-id> --exit-status` (optionally
|
|
779
|
+
run_in_background) over an unbounded manual poll loop (#1711 찐빠 #6).
|
|
635
780
|
- If failures: diagnose, fix, re-verify
|
|
636
781
|
3. For npm projects with auto-tag.yml: MANDATORY additional check:
|
|
637
782
|
gh run list --workflow auto-tag.yml --limit 1 --json conclusion,displayTitle
|
|
@@ -646,7 +791,17 @@ steps:
|
|
|
646
791
|
- Branch naming mismatch (branch not matching release/v* pattern — fix: verify branch name)
|
|
647
792
|
Report: "[ci-check] auto-tag.yml: {conclusion}" as mandatory line in CI status report.
|
|
648
793
|
4. For npm projects: verify npm publish succeeded (npm view <pkg> version)
|
|
649
|
-
5.
|
|
794
|
+
5. Verify every scoped issue's label/state lifecycle landed: `in-progress` removed and
|
|
795
|
+
the issue CLOSED for each issue that was in this release's scope — do not rely on the
|
|
796
|
+
implement step having run the lifecycle transition; check directly with
|
|
797
|
+
`gh issue view <N> --json state,labels` (#1722 찐빠 #6, closes gap where CLOSED issues
|
|
798
|
+
retained `in-progress`). This step finds AND fixes, not verify-only: if a stale
|
|
799
|
+
`in-progress` label remains, remove it (`gh issue edit <N> --remove-label
|
|
800
|
+
in-progress`) and report the fix; if the issue is still OPEN, do NOT close it here —
|
|
801
|
+
closing stays with auto-tag.yml unless it failed to close that issue, in which case
|
|
802
|
+
report the open issue for manual close per release step 3.d above (#1722 하네스 제안
|
|
803
|
+
4).
|
|
804
|
+
6. Report final CI status.
|
|
650
805
|
description: "Post-release CI verification and fix loop"
|
|
651
806
|
depends_on: release
|
|
652
807
|
|