# Moonsail Verification

## Contents

- [Core Gates](#core-gates)
- [Actual-Artifact Review Gate](#actual-artifact-review-gate)
- [Image And Marketplace Gates](#image-and-marketplace-gates)
- [Video Gates](#video-gates)
- [Job gates](#job-gates)
- [Delivery Shape](#delivery-shape)

Use this reference before delivering Moonsail media, stored Objects, Jobs, or
provider comparisons.

## Core Gates

- Request fit: output type, platform, aspect ratio, requested or intentionally
  derived duration, count, role labels, and CTA match the brief. Do not impose a
  default duration when the brief and destination leave it open.
- Source integrity: product claims, brand rules, marketplace compliance facts,
  and customer quotes are backed by supplied sources or marked unverified.
- Provenance: provider, model, prompt, parameters, references, estimated cost,
  Job IDs, Object IDs, and output URLs are recorded.
- Reachability: final URLs are reachable or the failure is reported with status.
- Cost evidence: spend-bearing generation Jobs have available cost
  records or a clear "not available" note.

## Actual-Artifact Review Gate

- Review the final media bytes, not the prompt, storyboard, Job metadata,
  thumbnail, or URL string.
- Create a review Job for the exact final Object ID. For external work, first
  copy the source into the Space with `put_object`.
- Record the returned review receipt, including reviewed Object ID, SHA-256,
  coverage, findings, and delivery eligibility.
  Only a complete review with full coverage and no unresolved blocker can pass
  the creative-review gate.
- Before delivery, compare the final Object ID and SHA-256 with the receipt.
  Treat either mismatch or an ineligible receipt as a failed gate.
- Point findings to observable regions, frames, moments, or time ranges when the
  medium permits it. Preserve strengths and diagnose the material cause rather
  than scoring the prompt.
- After any repair, store and review the changed Object. A prior Object or hash
  cannot approve the new revision.
- Receipt eligibility, hashes, and deterministic probes cannot override an
  observable creative blocker such as extra anatomy, impossible contact,
  identity drift, contradictory action state, or broken continuity.
- Report partial review as a material gap. Images and video get native Gemini
  review (video includes audio). The prototype rejects review Jobs for 3D
  models, splats, text, JSON, and objects over 13 MiB before reading their
  bytes; they cannot pass the delivery gate.

## Image And Marketplace Gates

- Every requested asset role has an output or explicit missing reason.
- Main product images are product-focused and visually inspectable.
- Infographics do not invent claims, ingredients, certifications, or compliance
  facts.
- Style is consistent across the pack unless variants are intentionally split.
- Each output is labeled by role, platform, dimensions/aspect ratio, and source
  references.

## Video Gates

- Before generating a multi-shot cinematic sequence, review its beat script,
  specific visual language, storyboard states and handoffs, reference roles,
  timing, and exact prepared prompts together. Reject generic style direction,
  competing references, filler beats, and any opening frame that already
  contains the requested action's end state.
- Compare native multi-shot generation with per-shot assembly from the live
  operation limits. For native work, bind ordered image, video, and audio
  references to explicit prompt roles, label shots and cuts, and give every shot
  one primary action and one motivated camera path with an endpoint.
- Treat dynamic as motivated progression through blocking, composition,
  foreground and environmental motion, camera, edit, light, and sound. Reject
  both inert execution and arbitrary busyness.
- Treat faster and slower as narrative, editorial, visual, aesthetic, and sound
  pacing directions. Do not infer character speed, camera speed, frame rate, or
  slow motion unless the brief explicitly requests that physical change.
- Derive shot lengths from anticipation, action, comprehension, and consequence;
  reconcile their sum with a real user or platform duration constraint. Do not
  default to 30 seconds or equal-duration shots.
- Inspect the full final video when the active reviewer supports it. Focus on
  the moments, transitions, performance, motion, and sound the brief relies on
  rather than a fixed first/middle/end checklist.
- Before admitting a generated shot to an assembly, inspect the full clip plus
  decoded opening, material-action, and ending frames. Check limb count,
  anatomy, identity, gaze, weight, prop ownership and contact, blocking,
  geometry, lighting, intended action, and end state. Any gross failure blocks
  the shot regardless of technical probe results.
- Check shot order, captions, voiceover, and audio timing against a shot list or
  script when the production actually uses one.
- Check aspect ratio and duration against the requested platform.
- When continuity matters, inspect identity, wardrobe, setting, props, screen
  direction, light, and action across the relevant duration. Compare every
  outgoing shot state directly with the following incoming state, including
  internal native cuts, then watch the sequence continuously without the brief.
  Require a coherent restatement of its visible setup, event, reaction, and
  reveal before evaluating intended narrative pacing and visual consistency.

## Job gates

- Use a new idempotency key for each new Job and reuse it only for a retry.
- A generation or review estimate must fit within the approved
  `maxCostMicrousd`. Report any settled `costOverrunMicrousd` on a succeeded
  Job rather than treating it as a failure.
- Poll each Job until `succeeded`, `failed`, or `submission_unknown` before
  delivery. Never retry a `submission_unknown` Job until an operator reconciles
  the provider account.
- A successful generation must return durable Object IDs, not only provider
  URLs.
- A failed Job includes its safe error category and next repair action.

## Delivery Shape

Use the delivery shape most useful to the request. `delivery.md` (hosted:
`https://moonsail.ai/skills/moonsail/references/delivery.md`) provides an
optional machine-checked `# Delivery:` format for formal handoffs. When that
format is selected, check it with `scripts/verify.mjs` before presenting it.

Present final URLs first, then concise supporting evidence:

- output URLs labeled by role or variant;
- artifact summaries such as script, shot list, hook matrix, or scope;
- provenance summary;
- verification summary;
- what was not verified;
- next recommended action only when useful.
