Pre-choice usable artifact execution
Purpose & Output Contractの最小の実成果物をmain contextで作成する。effect別のparse/open・secret・irreversible・corrupt guardだけを実行し、現物path・digest・開き方を提示してからaccept-as-is/light/standard/detailedを記録する。accept-as-isはその場でhandoff完了とし、後続sectionを実行しない。
Post-choice selected improvement execution
以下の既存workflow・goal-seek・評価・修正sectionはlight/standard/detailedが記録されてsemantic_evaluator_startedへ遷移した場合だけ実行する。release/exhaustiveは別の明示eventを必要とする。
run-slide-report-modify
Runtime root contract
runtime_root_policy: host-skill-path を適用する。
- Claude Codeでは
CLAUDE_PLUGIN_ROOT をplugin rootとして使用する。
- Codexではホストが提示したこの
SKILL.md のabsolute pathから、plugin manifestを持つ祖先を上方探索して論理 PLUGIN_ROOT を解決する。
cwd からplugin rootを推測せず、literal placeholderをshellへ渡さない。各shell invocation内で解決済みabsolute pathを PLUGIN_ROOT に設定する。
prompts/ 配下はこのowner Skill契約を継承する。
役割: 既存の slide deck / report の局所修正を独立起動で行う skill (移植元 P4 = slide-modifier 相当)。生成し直さず、output_mode を保ったまま指定箇所だけを部分修正し、意匠/技術コアと非対象箇所を壊さない。plugin root = ${SRG_ROOT:-$CLAUDE_PLUGIN_ROOT}、実行パスは全てここ起点 (repo-root ハードコード禁止)。新規生成は run-slide-report-generate、シリーズ横断検証は run-cross-deck-review の責務。
Purpose & Output Contract
既存の slide deck / report を output_mode を保ったまま指定箇所だけ部分修正し、意匠/技術コアと非対象箇所を壊さず、修正後の生成後評価で視覚崩れ 0 の状態を作る。
- 入力: 既存成果物 (slide deck ディレクトリ / report HTML) と修正指示。任意
--mode slide|report (省略時は成果物から自動判定)。
- 出力: 修正レポート (修正箇所一覧 + 変更差分 + 再評価スコア)。
- usable handoff条件: main contextが (1) 修正対象と
output_mode を特定して validate-output-mode.py を通し、(2) 指定箇所だけの最小修正版を実ファイルとして作成し、(3) path/digest/開き方を提示する。accept-as-isならここで完了し、Task/evaluatorは0回。
- 選択後の改善完了条件: light/standard/detailed選択時だけ、修正後評価が視覚崩れ0でPASSするまで下記R1→R3を有界実行する。
mode 判定 (slide / report)
独立起動のため、まず修正対象成果物の output_mode を判定する。
index.html (+ styles.css / scripts.js / structure.*) を持つ → slide (deck 成果物)。
report.html (+ report-structure.*) を持つ → report。
- 曖昧な場合は
--mode 引数を優先し、validate-output-mode.py で値域整合を検証する (IN1)。判定した mode を修正 worker へ伝播する。
選択後ワークフロー (R1 → R2 → R3・worker は Task で name 起動)
pre-choiceでmain contextが最小修正版を作成・提示済みであることが前提。以下はlight/standard/detailed選択後だけ起動する。各ラウンドの7層実行契約は prompts/R1-orchestrate.md、phase activationは workflow-manifest.json.artifact_delivery_contract を正本とする。
R1: 修正対象と指示の確定
修正対象の既存成果物 (パス)・output_mode・修正指示をヒアリングして確定する。既存成果物を Read し、修正が及ぶ範囲 (対象要素) と触れてはならない意匠/技術コア・非対象箇所を明示する。
R2: 局所修正
利用者が改善を選んだ場合だけ Task で slide-report-modifier を起動 (isolation: fork)。提示済み最小修正版を入力に、判定したmodeに応じて指定箇所のみを改善する。workerのtoolsは Read, Write, Bash のみでTaskを持たず、下流agentが要る場合は修正案に明記して返し本skillがpost-choiceでdispatchする。
- 意匠 SSOT (配色トークン・16:9・最小 1.4rem・印刷 CSS・letterbox 等) と非対象セクションは不変に保つ (両モード共有)。
- slide:
index.html/styles.css/scripts.js と structure.* の同期を維持 (./references/modification-rules.md の CONST_001-013)。
- report:
report-structure.json を正本に編集し render-report.js (Bash) で report.html を再レンダして整合を維持 (./references/report-modification-rules.md の RCONST_001-013)。読み物文体・1項目1ビジュアル・reportType 骨格順序・入口ホリゾンタル(タイトル/リード/summary の読者価値・RCONST_013)を崩さず、履歴は meta.version bump + sidecar report-structure.history.json (schema 外フィールドのインライン禁止)。
- 全書き換え禁止 (局所差分のみ)。修正箇所と変更差分を記録する。
R3: 再評価 (mode 分岐)
slide-report-modifier の修正後、mode 別に再評価する (下記 deterministic_checks)。slide=verify-slides.js (+意匠/印刷影響時 evaluate-deck.js/validate-print.js) で視覚崩れ 0。report=render-report.js 再レンダ整合 + runtime bundle生成 + validate-report-visual.py <report.html> --structure <report-structure.json> --require-structure --json + mode-aware deck-evaluator。未達なら R2 へ差し戻す。
決定論チェック (deterministic_checks)
# 【共通】初回/更新後にplugin-local Chromiumを復元
python3 "${SRG_ROOT:-${PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}}/scripts/setup-playwright.py" --install
# 【共通】既存成果物の output_mode 判定と値域整合 (送信前・fail-closed)
python3 "${SRG_ROOT:-${PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}}/scripts/validate-output-mode.py" --mode <slide|report> [--report-type <enum>]
# 【slide R3】修正後の UI 品質検証 (テキスト切れ・改行・16:9 比率・非対象箇所の崩れ検出)
node "${SRG_ROOT:-${PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}}/vendor/scripts/verify-slides.js" ./index.html --check-ratio
# 意匠コア・印刷レイアウトに及ぶ場合は evaluate-deck.js / validate-print.js も併用
# 【report R3】report-structure.json → report.html 再レンダ整合 (正本の忠実な射影を確認)
node "${SRG_ROOT:-${PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}}/vendor/scripts/render-report.js" <report-structure.json> <report.html>
# 修正後 report.html の読み物視覚検証 (section 構造欠落 / 1項目1ビジュアル逸脱 / 段落過密 / 意匠逸脱・fail-closed)
node "${SRG_ROOT:-${PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}}/vendor/scripts/verify-report-runtime.js" <report.html> --structure <report-structure.json> --out <runtime-bundle.json>
python3 "${SRG_ROOT:-${PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}}/scripts/validate-report-visual.py" <report.html> --structure <report-structure.json> --require-structure --json
# さらに mode-aware deck-evaluator (report rubric: 可読性/図解適合/情報密度/セクション論理構造) を Task 起動して再評価
mode を先に確定し (validate-output-mode.py)、R3 は mode 分岐で実行する: slide=verify-slides.js (+意匠/印刷影響時 evaluate-deck.js/validate-print.js) で視覚崩れ 0、report=render-report.js 再レンダ整合 + validate-report-visual.py + mode-aware deck-evaluator。いずれも全ゲート exit 0 を完成根拠とする。
ゴールシークと受入基準 (combinators)
light/standard/detailed選択後だけ with-goal-seek(max_loops 5) + with-feedback-contract を有効化する。ループ本体は Task でSubAgentへforkし、親へは修正レポートのみ返す。accept-as-isでは両loopを0回のまま完了する。受入基準は当該skillのgoal/checklist由来:
- IN1 (inner・script):
validate-output-mode で既存成果物の output_mode を判定し修正対象の mode と reportType の値域整合を送信前検証し欠落が 0 件。
- OUT1 (outer・test): 指定箇所のみが修正され意匠/技術コアと非対象箇所が不変で、修正後の生成後評価が視覚崩れ 0 で PASS することを受入テストが確認する。
選択後の未達だけ最大3周(inner)/5 loops(goal-seek)でfindingsを反映し再実行する。提示前またはaccept-as-is後に自動起動しない。
境界
- 入力 = 既存成果物と修正指示/出力 = 局所修正済み HTML。
- slide/report 双方対応 (mode-aware): 局所修正・再評価を slide 経路 (
structure.md⇔index.html・verify-slides.js) と report 経路 (report-structure.json⇔report.html・render-report.js 再レンダ整合+validate-report-visual.py+mode-aware deck-evaluator) の両方で実体化する。purpose「slide/report 双方修正」を additive に満たす (slide 既存契約は温存)。
- 新規生成は
run-slide-report-generate へ委譲する (本 skill は既存成果物の局所修正のみ・ゼロから作らない)。
- シリーズ横断の整合検証は
run-cross-deck-review へ委譲する。
Gotchas
- 配置非依存: 全実行パスは
${SRG_ROOT:-$CLAUDE_PLUGIN_ROOT} 起点 (vendor/scripts/… / scripts/…)。repo-root 直書き禁止。
- 局所性を守る: 指定箇所以外・意匠 SSOT・印刷 CSS には触れない。全書き換えでなく Edit 差分。
- mode を保つ: slide を report へ (逆も) 変換しない。
output_mode は入力成果物のものを維持する。
- 同期維持: slide deck は
index.html⇔structure.*、report は report.html⇔report-structure.* の整合を崩さない。
- 完成判定は実体で: 修正後は Read/署名/スクショ目視で確認し、"PASS" 文字列で完成判断しない。
- agent は name 参照:
slide-report-modifier はファイルパス依存でなく Task の name 起動。
配置先
| 用途 | 出力先 |
|---|
| 本 skill 資産 | plugins/slide-report-generator/skills/run-slide-report-modify/ |
| 修正対象・出力 | 既存成果物ディレクトリ (in-place 局所修正) |
追加リソース
prompts/R1-orchestrate.md — R1→R2→R3 の 7 層実行 SSOT (agent dispatch・script/schema/reference 実体参照・deterministic ゲート・差し戻し条件)。
workflow-manifest.json — phase (R1-identify-target → R2-local-modify → R3-re-evaluate)・resource・gate (C1/C2/C3)・dependsOn・entryHook/exitHook・fatal_exit_codes の機械可読宣言。
references/modification-rules.md — slide 部分修正規範の逐語 SSOT (用語集・評価基準・修正タイプ 6 分類・CONST_001-013・修正フローパターン・index.html ⇔ structure.md 同期維持ルール)。worker (slide-report-modifier) と本 skill の双方が参照。
references/report-modification-rules.md — report 部分修正規範の逐語 SSOT (reportType 4 骨格の維持・section 構造の局所修正・report.html ⇔ report-structure.json 同期・読み物文体/1項目1ビジュアル非破壊・履歴追記)。modification-rules.md(slide) と対を成し、slide-report-modifier が mode 別に適用。
../../schemas/structure.schema.json — slide 修正対象の構造正本 (修正後 structure.* が valid を保つ判定)。
../../schemas/report-structure.schema.json — report 修正対象の構造正本 (修正後 report-structure.* が valid を保つ判定)。
../../scripts/setup-playwright.py / validate-output-mode.py — plugin-local Chromium復元・検査 + output_mode 判定・値域検証 (plugin-root glue・IN1)。
../../vendor/scripts/verify-slides.js / evaluate-deck.js / validate-print.js — slide 修正後の視覚崩れ検証 (R3・OUT1)。
../../scripts/validate-report-visual.py — report 修正後の決定論視覚ゲート (section 構造/1項目1ビジュアル/段落密度/placeholder・R3・OUT1)。
../../vendor/scripts/render-report.js — report 修正後の report-structure.json → report.html 再レンダ整合 (正本射影の確認・R3)。
- 統率する agent:
slide-report-modifier (Task の name 起動・isolation: fork・mode-aware。用語集・CONST/RCONST・修正フローは slide=references/modification-rules.md / report=references/report-modification-rules.md を SSOT に mode 別適用)。下流 agent (含 mode-aware deck-evaluator) は worker が Task 非保持ゆえ本 skill が dispatch。