# Check the work before publishing

Check the actual renderer, the actual inputs and the exact posted source. A working canvas in an editor is the beginning of validation, not the last step.

## Blank or tiny canvas

Confirm the script type and its context name. A p5 body receives `p`; a vanilla body receives `v`. Guard missing props and initialize the edition only after the required inputs arrive. Handle the grid `square` divisor and create or resize a real canvas. For WebGL, check shader compile/link logs and attach the canvas to `props.container`.

The current viewer catches some drawing errors to keep the page usable. Inspect the browser console during development rather than treating a blank image as proof that the script is merely slow.

## Different art after reload or resize

Look for unseeded `Math.random`, fresh browser entropy, changing external data, mutable globals shared between instances, or random draws consumed in a different order. Separate persistent traits from layout and animation. Reinitialize a local stream from the same full edition identity; do not pick new traits just because the canvas changed size.

Start with the wizard's automatic **Hash & mint checks** below the script editor. The report compares fresh renders, tests several edition IDs and hash positions, and flags source locations worth reviewing. Copy its report when asking an LLM to help. See [how to interpret the sampled checks](/docs/randomness#test-before-you-publish); an inconclusive render or a repeated trait needs context, and the suite does not certify bot resistance.

## Missing controls

Open an individual edition in **live render** mode. Grids and static images have no interactive script instance. On desktop, use the faint lower-right icon or **Artwork controls** in the bottom bar. On mobile, tap the icon if the panel has faded.

For your own project, validate `version: 1`, supported action types, IDs and callbacks. A toggle needs `getState`. Text/navigation need `onAction`, including when you also supply a key label. An invalid explicit declaration suppresses automatic discovery. Reviewed known-project behavior only applies to its exact source hash.

## Native typing triggers artwork shortcuts

Use the declared text control and the p5 handler convention. Avoid document-wide capture listeners that swallow every key, including keystrokes in input fields. The current adapter protects supported handlers and its scoped window listeners; custom listeners installed elsewhere remain your responsibility.

## Traits do not appear

Log `console.log('metadata: ', object)` after the traits exist. Keep the original `transactionHash` in the object. Prefer simple named values, and do not emit a new trait distribution every frame. For multiple mints in one transaction, review the current transaction-hash grouping limitation in the [script reference](/docs/script-api).

## Marketplace image differs from the live edition

Verify that the image file is named by global `tokenId`, that the source and seed recipe are the released ones, and that the captured moment matches your intent. Check the project image base, file extension, hosted JSON and marketplace cache. An endlessly changing artwork's GIF is only an excerpt.

## A transaction appears stuck or failed

Check its hash and receipt before retrying. The wizard's deploy steps are separate transactions, and an interrupted browser does not undo successful earlier steps. Verify network, account, posting rights, current fees, project active/paused state and available supply. Do not send another transaction simply because a progress label is stale.

## Before release

- Test several hashes and full edition IDs, including the same hash at 1 and 9.
- Reproduce a fixed edition after reload and resize.
- Test a crowded grid and a selected edition on desktop and phone-sized screens.
- Check metadata, text entry, keyboard shortcuts, idle controls and explicit exports.
- Preserve exact source, dependencies, license and project settings.
- Review recipients, price, edition cap, script transaction and lock semantics.
- Describe the seed and mint mechanism accurately; do not promise bot prevention from deterministic mixing alone.

Use physical devices for memory-intensive captures and mobile keyboard behavior before making those features part of the release promise.
