# Artwork intake

The Bunnies design file and its Build a Bun pages are the authoring source for bunny parts. The reviewed SVG files in Spriteworks remain the release source. The older Library file is not an intake source.

Intake is a deliberate review before the offline asset build. It never changes the running MCP catalog until the source has been reviewed, generated, published and the local server restarted.

## Export a candidate snapshot

1. Open the Bunnies Build a Bun page with the connected authoring tool.
2. Inventory every clothing, headwear, facewear, accessory, prop, emote and eye card. Include new cards that have no intake annotation yet. Exclude example characters and anatomy pages from this part inventory.
3. Read the canonical ID from each artwork layer's `Spriteworks intake:` annotation. Preserve existing IDs after renames or layer merging. Leave `id` absent on a new card until an ID has been assigned.
4. Read its `Spriteworks release:` annotation. `placeholder` and `empty` are excluded. Finished pink artwork is valid: color is not a release flag. Newly finished placeholders must be explicitly marked `ready` after inspection.
5. Export each ready artwork layer as an SVG string with its authored canvas and paint order. Do not export its card border, caption or example character. Export in bounded batches if the connector limits response size.
6. Save the following snapshot outside the source tree. External document/node identifiers stay in the local intake workspace, not in the released artwork or offline build.

```json
{
  "version": 1,
  "label": "Bunnies Build a Bun",
  "categories": ["clothes", "headwear", "facewear", "accessories", "props", "emotes", "eyes"],
  "assets": [
    {
      "id": "clothes-16-suit",
      "label": "suit",
      "category": "clothes",
      "status": "ready",
      "svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"264\" height=\"264\">...</svg>"
    },
    { "label": "Unfinished prop", "category": "props", "status": "placeholder" }
  ]
}
```

This example illustrates the schema. A full report needs every card in the declared categories; omitted approved items are reported as missing. Missing and added cards are review items, not automatic deletion or import instructions.

## Compare with the released source

Run from the Spriteworks checkout:

```sh
npm run intake:report -- --snapshot /absolute/path/candidate.json --output /absolute/path/report.json
```

The command writes JSON and Markdown reports. It reports additions, missing cards, label/category changes, meaningful pixel differences, dimensions, and the existing moving fit's slot and outfit contexts. It also records the exact fit revision.

The comparison renders both SVGs with the same renderer. Restructuring shapes without changing pixels is informational. RGB rounding of one level is informational; changed alpha and larger color differences require review. Pink is never filtered automatically. Duplicate IDs, missing SVGs for ready cards, and malformed snapshots fail explicitly.

The command only reads the approved source. It does not modify source SVGs, catalogs, fit data or Figma.

## Review and release

- Inspect changed artwork at native scale and enlarged pixel scale. Check garment material separately from faint guide anatomy.
- Assign IDs and semantic paint roles for additions. Review static compatibility and moving fits independently.
- Recheck the affected fit contexts and motions for clothing/prop changes. Keep intentional eye, ear, head and prosthetic ownership rules.
- Regenerate through the repository's normal asset and rig tools. Run focused semantic and rendered checks, then type checks and publication gates.
- Import generated app data only for items the app actually awards. Adding site artwork does not add an achievement automatically.
- Publish the GitHub site, check `version.txt`, and reconnect local MCP clients so they load the current catalog.

The previous reviewed batch contained 135 finished cards, six placeholders and one empty card. These are reference counts, not a limit or a test that should reject new artwork.

## Motion sequences

The first export root of each reviewed sequence has a `Spriteworks motion:` annotation with
its stable clip ID, ordered frame roots and preview timing. Preserve those frame roots and
their order when merging internal paths. An intentional transparent frame or repeated drawing
is part of the sequence, not a placeholder to discard.

Export the finished sequence from the Bunnies Motion Sprites page. Compare rendered artwork
with the reviewed sources; path merging alone does not establish an artwork change. Record
the sequence in `asset-manifest.json` under `poseTracks`, using local pose IDs or fingerprinted
SVG files under `source/studio/motion/`. Keep authoring-tool identifiers in the intake workspace.
The offline build checks every referenced fingerprint and preserves duplicate and blank holds.

Native rig projections use the separately reviewed atlas frames and their semantic paint roles.
Adding a complete authored motion preset does not retarget interchangeable clothing onto it.

## Shared moving fits

Every reviewed motion frame references a reusable profile in
`rig/tools/app/authored-motion-bindings.json`. Profiles carry the reference anatomy,
semantic anchors (`headBounds`, `eye`, `paw`, `earBounds`, `bodyFit`, `groundLift`),
occupied regions (`held`, `mouth`, `torso`, `forelimb`, `face`), and visibility policy.
Keep unusual silhouette rules in a profile's `socket` or `surface` fields. A frame can
override individual anchors or occupied regions without copying the remaining profile.
Changing source pixels still requires a reviewed artwork revision and fit verification.

New motions join a family through their section in the asset manifest. The build emits
content-addressed family files and a small manifest. The fitted workshop loads the chosen
family and retains at most two. The app ships only its awarded-item fits and loads a
family from its local installation. Export and fitting happen offline during authoring;
the app only decodes and combines reviewed pixels at runtime.

Normal native builds cache individual authored item/pose/context fits under `.cache/`.
Code, geometry, material and ownership changes invalidate their inputs. Cache files are
disposable and never published. `node rig/tools/build-native-lab.mjs --rebuild` exercises
the incremental compiler; `--check` or `--no-cache` recomputes all fits independently.
Release checks retain the full fit matrix, pixel parity and native performance gates.

For a motion-only authoring check, set `SPRITEWORKS_MOTION_FAMILIES` to the changed
family IDs (comma separated) and run `node --test rig/tools/test-motion-packs.mjs`.
Unset it for the full release matrix. A clothing or ownership change can affect every family.
Use the fitted-rig catalog to discover and export reviewed clothing/prop combinations.
