원클릭으로
canon-publish
Use when a Canon run is complete and the user wants to publish the packet into docs or specs from chat.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Use when a Canon run is complete and the user wants to publish the packet into docs or specs from chat.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Use when you need a governed Canon review of a real diff or pull-request range instead of a loose chat summary.
Use when a repository does not have Canon runtime state yet and you need to initialize .canon before any governed workflow.
Use when you need a governed Canon policy-shaping run to shape a new or modified policy with mandatory impact evaluation.
Use when you need a governed backlog run that decomposes bounded upstream decisions into delivery epics and slices.
Use when you need a governed Canon architecture run to record decisions, tradeoffs, and risk-gated approvals.
Use when you need a governed change run in a live codebase where invariants and existing behavior matter.
| name | canon-publish |
| description | Use when a Canon run is complete and the user wants to publish the packet into docs or specs from chat. |
| preflight | {"requires_canon":true,"requires_initialized":true,"canonical_input":null,"system_context":null,"risk_required":false,"zone_required":false,"owner_optional":true} |
available-nowdefault visibility: discoverable-standardPublish a completed Canon run from chat without making the user remember the raw CLI contract.
.canon/artifacts/ into tech-docs/, specs/, or another visible destination.RUN_IDOptional:
DESTINATION for --to <PATH> when the user wants an override instead of the default publish destinationcanon is on PATH. If missing, point to the install guide..canon/ exists. If missing, point to $canon-init.@last; do not silently publish the latest run on the user's behalf.--to <PATH> instead of rewriting it.canon publish <RUN_ID> [--to <DESTINATION>]requirements, surface that the destination includes the additive prd.md alongside the sectional packet files.canon/ is missing, point to $canon-init.RUN_ID is missing or unknown, ask only for the exact run id and show the exact retry form canon publish <RUN_ID>.$canon-status or $canon-inspect-artifacts instead of retrying blindly.prd.md first when the user wants one readable product-facing document.$canon-inspect-artifacts or $canon-status.$canon-status$canon-inspect-artifacts$canon-inspect-evidenceAfter a successful publish, check for after_publish hooks:
If .canon/hooks.toml exists and is valid TOML with version = 1:
Parse hooks.after_publish.actions array.
Filter by mode_filter: skip hooks whose mode_filter does not include
the published run's mode. If mode_filter is null or absent, include the
hook for all modes.
For each matching hook, emit a proposal block:
## Lifecycle Hook Detected
**Event**: after_publish
**Hook**: <id>
**Command**: `<command>`
**Working Directory**: <repo-root>
**Description**: <description>
**Required**: <Yes if optional=false, No if optional=true>
**Trusted**: <Yes if trusted=true, No if trusted=false>
Proceed with this hook? [Yes / No / Skip all hooks]
Apply confirmation rules per the optional/trusted matrix in
.agents/skills/canon-shared/references/hooks-schema.md.
If .canon/hooks.toml is missing, unreadable, or has invalid TOML, skip
hook detection silently. Do not block the publish flow.
Record hook trace in ai-provenance.md (see Hook Trace Recording below).
After each hook proposal is resolved, append to the run's ai-provenance.md:
## Hook Traces
| Hook ID | Event | Command | Trusted | Outcome | Exit Code | Timestamp |
|---------|-------|---------|---------|---------|-----------|-----------|
| <id> | after_publish | <command> | <yes/no> | <accepted/declined/skipped> | <code or n/a> | <ISO 8601> |