canon-recordlisted
Install: claude install-skill erclx/canon
# Canon record
## Guards
- If no draft path is given, stop: `❌ No draft path. Pass the path canon-screencast printed.`
- Never guess or fill an unresolved field, a target, a URL, or anything else the compile or run record names. Report it and stop. Filling one in reproduces the failure `canon demo run`'s `plan-unresolved` reason exists to catch, one layer up where nothing enforces it.
- Never pass `--force` to compile. A plan already at the default output path may carry timing tuned by hand, and the draft cannot reproduce that, so leave it untouched.
- Drive the application through `canon demo run` alone. Never open a browser, click through the app, or write to the output paths some other way.
## Step 1: resolve the plan path
Derive the default plan path the same way `canon demo compile` does: `<out>/<slug>.json`, where `<out>` defaults to `demos` and `<slug>` defaults to the draft's filename with its extension stripped. `.canon/tmp/screencast/inline-edit.md` resolves to `demos/inline-edit.json`.
## Step 2: compile only when no plan exists yet
Check whether the resolved plan path already exists.
- **It exists.** A person may have tuned it by hand since compiling. Skip compiling and go to Step 3 with this path.
- **It does not exist.** Run:
```bash
canon demo compile <draft> --json
```
Branch on the record rather than the exit code:
- `reason: draft-missing` or `reason: draft-unreadable`: report the reason, plus the record's `message` when it carries one, an