# Pre-release review checklist: [skill name] [version]

The reviewer is not the author. Each item needs its evidence filled in; an item without evidence is a fail. Warnings from the linter are either fixed or explained here.

## Identity and format

- [ ] Name equals the folder, lowercase with single hyphens, at most 64 characters, team prefix. Pass: lint L03 clean. Evidence:
- [ ] Frontmatter holds only the keys the team's clients and uploads accept; metadata values are quoted strings. Pass: lint L05 and L07 clean in the profile the team uses, with `--allow-keys disable-model-invocation` only for a manual-only skill that keeps the key. Evidence:
- [ ] Body under 500 lines and about 5,000 tokens; required sections in order. Pass: lint L09 and L10 clean. Evidence:
- [ ] No nested SKILL.md, no secrets, no real IDs, no personal data. Pass: lint L12 and L16 clean. Evidence:
- [ ] `sources.yaml` has an entry with a docs URL for every vendor fact the skill states, or the skill states none and its Live docs block does not name `sources.yaml`. Pass: lint L11 clean; spot-check two facts against their URLs. Evidence:

## Description and triggers

- [ ] Job and request wording in the first sentence; third person; "Use when"; no angle brackets. Pass: read it aloud next to the trigger set, and the description shows in each client's skill list. Evidence:
- [ ] Trigger gate met on every client in use (9 of 10 each side, 4 of 5 fresh; manual-only 0 of 3 automatic and 3 of 3 explicit). Pass: `score-triggers.mjs --final` output attached. Evidence:
- [ ] The tuning session saw train prompts and failures only; the owner wrote the fresh prompts after the description was frozen. Evidence:

## Procedure quality

- [ ] Every decision states its threshold or condition, with units. Pass: no "consider", "large" or "where appropriate". Evidence:
- [ ] One default per decision; a stop rule for each missing input. Pass: the missing-input case stops. Evidence:
- [ ] Must-not rules sit near the top of the body. Evidence:
- [ ] Each output names who acts on it and in which tool. Evidence:
- [ ] Every MCP tool is named `ServerName:tool_name` with the server names in `martech-context/stack.md`, and a missing tool means stop and ask for the export. Evidence:

## Conventions

- [ ] Metric and naming definitions are cited by path and versioned ID in `martech-context/`, never restated. Pass: grep finds no copied formula. Evidence:
- [ ] Every past correction and incident from the capture worksheet is a rule, a failure mode with detection, or a test case. Evidence:

## Safety

- [ ] Every operation classified; version 1 is reads and local drafts only; live changes leave as a change list for agent-write-safety. Evidence:
- [ ] The enforcement layer is named (vendor read-only mode, read-only identity, deny rules, hooks) and is not the skill's own prose. Evidence:
- [ ] `allowed-tools` absent, or scoped to the skill's own script path only. Evidence:
- [ ] No injected shell commands in a shared skill. Evidence:
- [ ] Untrusted text is treated as data; no session combines untrusted content, private data and sending out. Evidence:
- [ ] No credential is asked for, printed or stored; fixtures are fictional or redacted. Evidence:

## Tests

- [ ] The owner approved the run plan before the first batch. Evidence:
- [ ] Every trigger, output and baseline session ran in manual approval mode with no write-capable MCP, app or connector tool; the tool list is in the eval record. Evidence:
- [ ] The draft entered the test project without its `evals/` folder, and no personal or compatibility skills folder held a same-name copy. Evidence:
- [ ] The hostile-content fixture was built at test time in the test project and is stored nowhere in the skill folder. Evidence:
- [ ] At least 6 output cases covering all six kinds, run 3 times with and 3 times without. Evidence:
- [ ] Release blockers 3 of 3. Evidence:
- [ ] Quality at least 20 points above the baseline, or a blocker the baseline fails. Evidence:
- [ ] Permission test: an attempted call refused by the client or server, with version, mode and rule source. Evidence:
- [ ] Coexistence: no sibling skill lost a passing trigger prompt. Evidence:
- [ ] Cross-client minimum run on every client and model in use. Evidence:

## Packaging

- [ ] One canonical folder in the repository; every client lists the skill once in a fresh clone. The one exception: Cursor lists the symlinked skill twice, both entries resolve to one folder, its trigger gate holds with both present, and the eval record notes it. Evidence:
- [ ] Works without personal files; cloud or scheduled use, if planned, tested from the repository copy. Evidence:
- [ ] Command, if any, routes to the skill and holds no procedure; empty arguments make it ask. Evidence:

## Ownership

- [ ] Owner named; reviewer is not the author. Evidence:
- [ ] Registry row, changelog line and `decisions.md` entry proposed. Evidence:
- [ ] `review_by` set: 90 days, or 30 for skills that prepare spend, send or publish drafts. Evidence:

## Sign-off

- Lint warnings explained:
- Reviewer: [name and role], date:
- Owner approval to install, commit or publish: [name and role], date:
