From 123bf72e461351ff3f57f5c54eb8925265c9e0c0 Mon Sep 17 00:00:00 2001 From: Claude Lin & Lay Date: Thu, 10 Sep 2026 18:53:28 +0900 Subject: [PATCH] spec(skills): strip placement-derivation restatement from 7 operations skills MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `skills/operations-*/SKILL.md` の 7 ファイル / 9 段落が、`rules/operations/main-agent-procedures.md` `## The bar and its pair` にある実行主体確立基準(2条件)を自分の場合に当てはめ直した 「なぜ正本をここに置かないか」の再導出を持っていた。#1800 (PR #1925) が `rules/` 側の 15 節から 同じ形を落としており、本コミットはその skill 側の残りを落とす。基準自体はポインタとして残し、 「正本がどこにあり何を保持するか」の列挙は変更していない。 9 段落を個別にカーブアウト確認した結果、他所に無い論証は無く全て落とした (`operations-foreground-webhook-intake` の「ファイルを削除しない理由」を含む — issue #1922 の起票時コメントで留保されていたが、`## The bar and its pair` 末尾の byte-frozen アダプタ literal の段落と literal で同旨と確認済み)。見出し・意味タグ・ `description` frontmatter は変更していない。 Closes #1922 Co-Authored-By: Claude Opus 5 --- docs/4.-Operations.md | 25 +++++++++++++++++++ .../SKILL.md | 4 +-- skills/operations-handoff-continuity/SKILL.md | 2 -- skills/operations-on-branch/SKILL.md | 2 -- skills/operations-on-issue-format/SKILL.md | 2 -- skills/operations-on-pr-review/SKILL.md | 10 +++----- skills/operations-on-release/SKILL.md | 4 +-- skills/operations-on-sub-issue/SKILL.md | 2 -- 8 files changed, 30 insertions(+), 21 deletions(-) diff --git a/docs/4.-Operations.md b/docs/4.-Operations.md index 6327cbf6..ece13317 100644 --- a/docs/4.-Operations.md +++ b/docs/4.-Operations.md @@ -168,6 +168,31 @@ skill は `description` が場面に合致することで起動する。した 見出しと意味タグは 1 つも変えていない。CI は節名を検証しない(`tests/test_skill_reference_resolution.py` はパス解決のみを見る。節名検証は #1792 で未実装)ため、節名を変えれば `rules/` `skills/` `adapter/` `docs/` に散る 31 箇所の参照が黙って壊れる。節の内側の散文のみを対象とした。 +### skills/operations-* 側の再導出を落とした(#1922) + +上の #1800 は `rules/operations/main-agent-procedures.md` 側だった。同じ形が `skills/operations-*/SKILL.md` にも残っていた —— ポインタ(正本の所在+そこが何を保持しているかの列挙)に加えて、「なぜ正本をここに置かないか」を `## The bar and its pair` の基準(2条件のいずれかで実行主体が確立するか)に自分の場合を当てはめ直して書いた段落である。`build-2026-09-09.3` 実測で対象は **7 ファイル / 9 段落**、合計 3,468 B(2 段落持つファイルが 2 本)。 + +| file | before | after | delta | +|---|---:|---:|---:| +| `operations-foreground-webhook-intake` | 1,505 B | 809 B | -696 B | +| `operations-handoff-continuity` | 1,339 B | 896 B | -443 B | +| `operations-on-branch` | 1,913 B | 1,425 B | -488 B | +| `operations-on-issue-format` | 1,461 B | 926 B | -535 B | +| `operations-on-pr-review` | 3,154 B | 2,710 B | -444 B | +| `operations-on-release` | 4,184 B | 3,718 B | -466 B | +| `operations-on-sub-issue` | 2,133 B | 1,737 B | -396 B | + +9 段落すべてを個別にカーブアウト確認した。他所に無い論証は 1 件も無く、9 件とも落とした。 + +- `operations-foreground-webhook-intake` の 2 段落(起票時にコーディネータが「落とせる候補」と留保していた「なぜファイルを削除しないか」を含む)は、`## The bar and its pair` 末尾の byte-frozen アダプタ literal の段落(`Li+update.md` が legacy trailer をそこから導出するくだりを含む)と literal で同旨だった。起票時コメントで確認済み。 +- `operations-handoff-continuity` / `operations-on-branch` / `operations-on-issue-format` / `operations-on-sub-issue` の各1段落は、いずれも `Parent retains` の当てはめ直し。`main-agent-procedures.md` 側の対応する節は #1800 で既に同型の文を落としており、skill 側だけがその論証の写しを残していた。 +- `operations-on-pr-review` の1段落は `## The bar and its pair` の「One shape resolves the other way」がすでに `skills/task-subagent-prompt/SKILL.md` Resume-phase authority boundary を例示として名指しており、二重だった。ポインタが持っていた「正本が何を保持するか」の列挙(self-review mandate / review basis / self-review procedure / mode-specific human gate / follow-through)は文として残した。 +- `operations-on-release` の2段落のうち、Human Confirmation Required 側は末尾の一文(「確認はこの手続きに先行する」という実行順序の事実)だけを残し、導出部分のみ落とした。Release Completion Report Discipline 側は導出のみで残す実行順序情報が無く、段落ごと落とした。 + +見出し・意味タグは変更していない(`git diff -U0 -- skills/ | grep -E '^[+-](#|<[a-z])'` は空)。`description` frontmatter は対象外(変更していない)。 + +`tests/test_skill_reference_resolution.py` = 2 passed / 158 subtests passed。ローカル全件 `python -m pytest tests/` = 237 passed / 776 subtests passed。 + --- diff --git a/skills/operations-foreground-webhook-intake/SKILL.md b/skills/operations-foreground-webhook-intake/SKILL.md index 076d560e..88a50922 100644 --- a/skills/operations-foreground-webhook-intake/SKILL.md +++ b/skills/operations-foreground-webhook-intake/SKILL.md @@ -10,8 +10,6 @@ layer: L4-operations Redirect stub. Canonical = `rules/operations/main-agent-procedures.md` Foreground webhook notification intake: purpose, source priority, the `LI_PLUS_WEBHOOK_DELIVERY` mode interaction, the local webhook store resolution, foreground handling, and own-operation arrival confirmation all live there. -Why nothing is held here: the firing moment is the start of a user turn, which only the main agent has, and the bar keeps the main agent out of this surface. A pull surface cannot reach an actor whose trigger is the turn boundary itself — that mismatch is what was observed firing against the bar, and residency is the repair. - -Why the file is not deleted: `adapter/claude/CLAUDE.md` and `adapter/codex/AGENTS.md` `## Optional Webhook Notification Flow` names this path, and that block is byte-frozen — `Li+update.md` derives the legacy trailer it strips from installed files out of that very block, so drift there breaks the migration for pre-migration installs. The pointer must resolve; this stub is what it resolves to. See `rules/operations/main-agent-procedures.md` The bar and its pair. +Placement and non-deletion ground = `rules/operations/main-agent-procedures.md` The bar and its pair. diff --git a/skills/operations-handoff-continuity/SKILL.md b/skills/operations-handoff-continuity/SKILL.md index 735fc0c2..e10655e8 100644 --- a/skills/operations-handoff-continuity/SKILL.md +++ b/skills/operations-handoff-continuity/SKILL.md @@ -10,8 +10,6 @@ layer: L4-operations Pointer. Canonical = `rules/operations/main-agent-procedures.md` Handoff continuity: the push-on-interruption rule, the source-of-truth set, and the prohibition on local-only progress all live there. -Why the canonical is not here: the main agent is an actor too. It holds the issue body (`skills/task-subagent-delegation/SKILL.md` Rules puts `issue management` on `Parent retains`) and the resume target for an implementation subagent — and `chat memory`, which the canonical names, is its alone. A canonical held here would sit where one of its two actors cannot read it (`rules/operations/main-agent-procedures.md` The bar and its pair). - The subagent still reaches the canonical — `rules/**` loads for it without invocation — so nothing it needs at its own boundary is lost by the move. diff --git a/skills/operations-on-branch/SKILL.md b/skills/operations-on-branch/SKILL.md index 5e684de8..e7eff59e 100644 --- a/skills/operations-on-branch/SKILL.md +++ b/skills/operations-on-branch/SKILL.md @@ -21,8 +21,6 @@ Local validation may happen before or after push; it does not replace the branch Pointer. Canonical = `rules/operations/main-agent-procedures.md` Branch and label flow: the act-now trigger, the NOW / SOON / SOMEDAY tiers and their label mapping, the atmosphere-reading scope, the branch existence check, the `gh issue develop` command, the merge behavior, and the local-error recovery all live there. -Why the canonical is not here: the flow's trigger is human intent read from dialogue, and `backlog` / `deferred` are non-state lifecycle labels on `Parent retains`. Branch creation itself is mode-dependent — the main agent creates it under the worktree lifecycle, the subagent when the delegation uses no worktree — which is the detection sign named at `rules/operations/main-agent-procedures.md` The bar and its pair. A canonical held here would sit where its actor cannot read it. - The subagent still reaches the canonical — `rules/**` loads for it without invocation — so nothing it needs when it creates the branch itself is lost by the move. diff --git a/skills/operations-on-issue-format/SKILL.md b/skills/operations-on-issue-format/SKILL.md index 85abd542..f15b0f71 100644 --- a/skills/operations-on-issue-format/SKILL.md +++ b/skills/operations-on-issue-format/SKILL.md @@ -10,8 +10,6 @@ layer: L4-operations Pointer. Canonical = `rules/operations/main-agent-procedures.md` Issue format: title and body language, the convergence fields, the rewrite-on-change rule, the checklist bound, and the memo-mode rapid intake path all live there. -Why the canonical is not here: `skills/task-subagent-delegation/SKILL.md` Rules puts `issue creation` and `issue management` on `Parent retains` with no mode branch, and `adapter/claude/CLAUDE.md` / `adapter/codex/AGENTS.md` bar the main agent from `skills/operations-*/SKILL.md` while a subagent is available. A canonical held here would sit where its actor cannot read it. `rules/operations/main-agent-procedures.md` The bar and its pair states the placement rule; do not restate the canonical here, the second copy is what drifts. - The subagent still reaches the canonical — `rules/**` loads for it without invocation — so nothing it needs at issue-body update or failure-report time is lost by the move. diff --git a/skills/operations-on-pr-review/SKILL.md b/skills/operations-on-pr-review/SKILL.md index cb904f0d..7be9381b 100644 --- a/skills/operations-on-pr-review/SKILL.md +++ b/skills/operations-on-pr-review/SKILL.md @@ -31,12 +31,8 @@ Delegated-subagent stop condition (canonical, split by mode): ends before that. Other surfaces point here. Do not restate the condition; the second copy is what drifts. -Why this condition alone is held here, while the flow around it is not: the literal's actor is the subagent, -and the parent is only its carrier at the delegation moment (`skills/task-subagent-prompt/SKILL.md` Resume-phase -authority boundary), which is the shape `rules/operations/main-agent-procedures.md` The bar and its pair resolves -by leaving the canonical in the skill. The surrounding flow resolves the other way — its actor is the parent in -`auto` / `semi_auto` — so the self-review mandate, the review basis, the self-review procedure, the mode-specific -human gate, and the follow-through on deferred items all live at `rules/operations/main-agent-procedures.md` -PR review. Do not restate them here; the second copy is what drifts. +The surrounding PR review flow — the self-review mandate, the review basis, the self-review procedure, the +mode-specific human gate, and the follow-through on deferred items — lives at +`rules/operations/main-agent-procedures.md` PR review. Do not restate it here; the second copy is what drifts. diff --git a/skills/operations-on-release/SKILL.md b/skills/operations-on-release/SKILL.md index 58b265b7..be33e1a5 100644 --- a/skills/operations-on-release/SKILL.md +++ b/skills/operations-on-release/SKILL.md @@ -10,7 +10,7 @@ layer: L4-operations Pointer. Canonical = `rules/operations/main-agent-procedures.md` Human confirmation required: the stop word, the confirm-before list, and the trigger-mode items all live there. -Why the canonical is not here: every item is a confirmation asked of the human, and a subagent has no dialogue surface to ask on. A canonical held here would sit where its actor cannot read it (`rules/operations/main-agent-procedures.md` The bar and its pair). The confirmation precedes this procedure; nothing below runs before it has cleared. +The confirmation precedes this procedure; nothing below runs before it has cleared. @@ -94,8 +94,6 @@ Run `skills/operations-on-wiki-sync/SKILL.md`. The gate literal is canonical in Pointer. Canonical = `rules/operations/main-agent-procedures.md` Release completion report discipline: what the report contains, what it must not mention, the real-device verification structure, the scope bound, and the detection signs all live there. -Why the canonical is not here: the completion report is written to the human, and no subagent writes one — its report goes to the parent. A canonical held here would sit where its actor cannot read it. - diff --git a/skills/operations-on-sub-issue/SKILL.md b/skills/operations-on-sub-issue/SKILL.md index 33fd7e77..ceefb21d 100644 --- a/skills/operations-on-sub-issue/SKILL.md +++ b/skills/operations-on-sub-issue/SKILL.md @@ -19,8 +19,6 @@ This satisfies per-commit CI visibility without splitting into per-sub-issue PRs Pointer. Canonical = `rules/operations/main-agent-procedures.md` Sub-issue rules: the work-unit definition, the sub-issue versus sibling classification litmus, the sub-issue API, the simultaneous-task structure, the parallel conflict analysis, the scope-exceed dialogue confirm, and the recovery from accidental per-sub-issue PR runs all live there. -Why the canonical is not here: creating and classifying a sub-issue is `issue creation` on `Parent retains`, proposing a parallel structure and firing the scope-exceed confirm both speak to the human, and re-opening an issue during recovery is `issue management`. A canonical held here would sit where its actor cannot read it (`rules/operations/main-agent-procedures.md` The bar and its pair). - The subagent still reaches the canonical — `rules/**` loads for it without invocation — so the scope-exceed detection it owns at its own pre-commit moment is not lost by the move.