run-slide-report-modify · v0.1.0 · 2026-08-26 · sha256 1df228931e858d92

run-slide-report-modify v0.1.0A

Immutable. This exact content is served forever at /api/v1/blob/1df228931e858d92.

---
name: run-slide-report-modify
description: 既存のスライドデッキ/レポートを output_mode を保ったまま指定箇所だけ部分修正したいとき、意匠/技術コアと非対象箇所を壊さず修正後の再評価で視覚崩れ0にしたいときに使う。
kind: run
prefix: run
version: 0.1.0
user-invocable: true
disable-model-invocation: false
argument-hint: "[target-dir?] [--mode slide|report]"
arguments: [target_dir, mode]
allowed-tools:
  - Read
  - Write
  - Edit
  - Bash(node *)
  - Bash(python3 *)
  - Task
  - Glob
  - Grep
effect: local-artifact
owner: harness maintainers
since: 2026-07-05
last-audited: 2026-07-05
output_language: ja
prompt_layer: 7layer
combinators:
  - with-goal-seek
  - with-feedback-contract
goal_seek:
  activation_state: semantic_evaluator_started
  engine: inline
  fork: subagent
  max_loops: 5
responsibility_refs:
  - prompts/R1-orchestrate.md
manifest: workflow-manifest.json
schema_refs:
  - ../../schemas/structure.schema.json
  - ../../schemas/report-structure.schema.json
  - schemas/modification-report.schema.json
feedback_contract: # per-skill 受入基準(purpose-acceptance)。修正後の生成後評価 verdict と突合し汎用ゲート言い換えへ退化させない
  activation_state: semantic_evaluator_started
  max_iterations: 3
  criteria:
    - id: IN1
      loop_scope: inner
      text: validate-output-mode で既存成果物の output_mode を判定し修正対象の mode と reportType の値域整合を送信前検証し欠落が0件
      verify_by: script
    - id: OUT1
      loop_scope: outer
      text: 指定箇所のみが修正され意匠/技術コアと非対象箇所が不変で、修正後の生成後評価が視覚崩れ0で PASS することを受入テストが確認する
      verify_by: test
artifact_delivery:
  contract: artifact-delivery-v1
  state_machine:
    initial: artifact_created
    states: [artifact_created, minimal_guard_passed, artifact_presented, user_choice_recorded, semantic_evaluator_started, handoff_complete]
    transitions:
      - {from: artifact_created, event: minimum_guard_pass, to: minimal_guard_passed}
      - {from: minimal_guard_passed, event: present_actual_artifact, to: artifact_presented}
      - {from: artifact_presented, event: record_user_choice, to: user_choice_recorded}
      - {from: user_choice_recorded, event: accept-as-is, to: handoff_complete}
      - {from: user_choice_recorded, event: "light|standard|detailed", to: semantic_evaluator_started}
      - {from: semantic_evaluator_started, event: improvement_complete, to: handoff_complete}
    pre_choice_forbidden: [semantic-evaluator, task-fork, subagent, multi-worker, revise-loop]
    accept_contexts: {evaluator: 0, improver: 0}
  release: explicit-only
  exhaustive: explicit-only
runtime_root_policy: host-skill-path
---

## 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)

```bash
# 【共通】初回/更新後に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。