# Zebrafish Delivery Template

Every Zebrafish production MUST end with a delivery document in this exact
format. It is machine-checked: `scripts/verify.mjs` parses this structure and
reports missing sections, missing fields, and unmatched outputs. Do not
deliver until `verify.mjs` passes on the delivery document or every remaining
finding is explicitly labeled unverified.

## Format Rules

- The document title MUST be a single line starting with `# Delivery:`.
  That marker is what switches verify.mjs into delivery mode.
- The four sections below are all REQUIRED, in this order, even when empty:
  `## Outputs`, `## Provenance`, `## Verification`, `## Unverified`.
- Entries are markdown list items. An entry starts with `- ` and its fields
  are `key: value` pairs, one per line, indented under the entry.
- Provider and model names belong ONLY in `## Provenance`. Anywhere else they
  count as provider names leaking into copy.
- A claim without a source gets the literal label `[unverified]` on the same
  line, or it moves to `## Unverified`.

## Template

```markdown
# Delivery: <short production title>

## Outputs

- role: <asset role, e.g. hero-video, main-image, cutdown-9x16>
  platform: <target platform, e.g. tiktok, amazon, youtube>
  aspect_ratio: <e.g. 9:16>
  duration: <for video/audio, e.g. 30s>
  url: <final reachable URL>

## Provenance

- output: <role from Outputs this entry backs>
  provider: <e.g. fal>
  model: <exact model or workflow name>
  generation_id: <generation ID, or use run_id/workflow_id>
  prompt: <prompt or pointer to the prompt artifact>
  references: <asset IDs and source URLs used>
  cost: <cost if available, or "not available">

## Verification

- request_fit: <pass|fail> - <output type, platform, ratio, duration, count vs brief>
- source_integrity: <pass|fail> - <claims, quotes, compliance facts vs sources>
- reachability: <pass|fail> - <every url checked>
- media_review: <pass|fail> - <frames/roles inspected, drift or artifacts>
- cost_evidence: <pass|fail> - <cost records captured or noted unavailable>

## Unverified

- <each unverified claim, assumption, or gap; write "- none" if empty>
```

## Field Requirements (enforced by verify.mjs)

- Outputs entry: `role:` and `url:` are required; `platform:` and
  `aspect_ratio:` are expected (info finding when missing).
- Provenance entry: `output:`, `provider:`, `model:` are required, plus at
  least one of `generation_id:`, `run_id:`, `workflow_id:`. `prompt:` and
  `cost:` are expected (info finding when missing).
- Every Outputs `role:` needs a Provenance entry whose `output:` matches it.
- `## Verification` needs at least one checked gate line.
- `## Unverified` must exist; keeping it honest is the point. Never delete a
  finding to make verification pass; move it here instead.

## Workflow

1. Draft the delivery document while producing, not after: add each output
   and its provenance entry as soon as a generation goes terminal.
2. Run `node <skill dir>/scripts/verify.mjs --strict <delivery file>` before
   presenting results; it exits non-zero while warning findings remain.
3. Fix findings or move them to `## Unverified` with a reason, then re-run
   until the strict gate exits clean.
4. Present the delivery document (or its content inline) as the final answer:
   URLs first, then provenance, verification, and unverified gaps.
