Pre-choice usable artifact execution
Purpose & Output Contractの最小の実回答をmain contextで作成する。secret・欠測・矛盾のminimal guardだけを実行し、根拠refつきの現物をそのまま提示してから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-governance-adapters
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契約を継承する。
Purpose & Output Contract
scripts/adapters/のadapterを列挙し、選択したadapterのhelpと入出力契約を確認したうえで、副作用を持たない範囲 (--help と --dry-run) だけを実行してSink Contract v1.0のJSON resultとexit codeを報告する。
Key Rules
- plugin rootは
${PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}で解決する。
- adapter名を実在一覧から選び、path traversalを許可しない。
- credentialや送信先を推測しない。
- 本skillは外部書込を実行しない (
effect: conversation-outputの実体的根拠)。sink_http.py / sink_notion.py / sink_sheets.py / sink_slack.py は script header でnetwork: trueを宣言し、keychain由来のcredentialで実際にPOSTするため、本skillからは--dry-run付きでのみ起動する。--dry-run無しの実送信とdispatch.pyの実配送は本skillの責務外であり、external_mutation_guard (preview→confirm→authorize→execute の受領証フロー) を持つ呼び出し元skillへ委譲する。委譲先が無い場合は実行せず未対応理由として停止する。
- 実行許可は「credentialを参照しない呼び出し」であり、
--dry-runはその十分条件にすぎない。--dry-runを持たないresolve_route.pyはnetwork: false / write-scope: noneの純読取なので--registry付きの通常起動も許可する。配送先の代替経路そのものを確認するときはdispatch.py --dry-runを使う。
- credentialは実送信経路でのみ解決される (
scripts/secret_helper.py経由の遅延解決)。--helpと--dry-runはkeychain provider (skill-governance-secretsのsecrets/keychain_helper.py) が未配備でも成立し、実送信時のみ未配備がstatus: failure / exit 2として現れる。
ゴールシーク実行
対象adapter、入力、期待出力を確定し、python3 "${PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/scripts/adapters/<adapter>.py" --helpで契約を確認する。未解決入力がなくなった場合だけ--dry-run付きで起動する。
検証
exit codeと、adapterが返すSink Contract v1.0のJSON result (status / adapter / location / external_id / dry_run) を報告する。これはexternal-mutation guardの受領証 (preview/confirmation/authorization/completion) とは別物であり、本skillはguard受領証を発行しない。未対応adapterと実送信要求は理由付きで停止する。