---
type: how-to
title: Fix a marketplace publish failure
summary: "A fix-it guide for the most common marketplace publish failures: each error code is listed with what triggers it and the exact one-edit-and-retry steps to clear it, with no need to ask us to re-check anything."
---

When the Publish or update modal returns an error, or you get an email from us about a publish failure, find your error code below and follow the fix. Once you push the fix to your repository, click Publish or update again to re-check immediately, or wait for the next daily indexer run.

Every failure listed here is something you can fix in your repository. If you do not see your error here, check the [full publish errors reference](/docs/marketplace-game-development/publish-failed-reference) for less common codes.

## terms_accepted not set [#manifest-error-terms-accepted]

You see this when your `caputchin.json` does not have `"terms_accepted": true` at the top level.

1. Open your repository's `caputchin.json`.
2. Read the [Marketplace Submission Terms](/legal/submission-terms).
3. Add `"terms_accepted": true` at the top level of the manifest.
4. Commit and push.
5. Click Publish or update again, or wait for the next daily index run.

The value must be the literal JSON boolean `true`. Strings (`"true"`), numbers (`1`), or omitting the field all count as not accepted.

## License not on the approved list [#manifest-error-license]

You see this when `license` is missing, malformed, or names an identifier outside our [approved list](/docs/marketplace-game-development/publish-failed-reference#approved-licenses).

1. Pick an SPDX identifier from the approved list that genuinely covers your code and bundled assets.
2. Open `caputchin.json` and set the `license` field at the top level, for example `"license": "MIT"`.
3. If your code is dual-licensed, use an SPDX `OR` expression (e.g. `"MIT OR Apache-2.0"`). At least one branch must be on the approved list.
4. If your code is MIT but bundles Creative Commons assets, use `AND` (e.g. `"MIT AND CC-BY-4.0"`). Every branch must be on the approved list.
5. Commit, push, retry.

If your project depends on a license that is not on our approved list (most commonly GPL family, AGPL, or LGPL), the only fix is to relicense or remove the affected components. We cannot grant exceptions on a per-author basis.

## We could not find your repository [#repo-not-found]

You see this when our manifest fetch returns a 404.

Common causes and fixes:

- Your repository is private. Make it public, or remove the `caputchin-game` topic to stop appearing in the index.
- Your repository lacks the `caputchin-game` GitHub topic. Add it via the About section on the repository page.
- Your repository has no `caputchin.json` at the root (or, for child games in a collection, no `caputchin.json` at the leaf directory).
- The repository URL you entered is wrong. Use `owner/name` or the full `https://github.com/owner/name` URL.

Push a `caputchin.json` to your repository, then retry.

## Manifest structure is malformed [#manifest-error-structure]

You see a `manifest-error` whose detail starts with a field name like `entry`, `npm`, `games`, `marketplace.support`, or `run.modules[0].name`.

The detail tells you exactly which field is wrong:

- `entry: entry must be a clean relative path`: your `entry` value contains traversal (`../`), absolute slashes, query strings, or whitespace. Use a clean repo-relative path like `dist/game.js`.
- `npm: npm package name is malformed`: your `npm` field is not a valid npm coordinate. Use `name` or `@scope/name`, alphanumerics + hyphens + dots + underscores only.
- `games[i] must be a relative path inside the repo`: a child path in your collection's `games` array escapes the repo. Use paths like `packages/leaf-memory`, not `../external` or `/abs/path`.
- `run.entry must be a clean relative path`: same hygiene rule as `entry`, applied to the optional split-run entry.
- `run.modules[i].name`: the module name must match `[a-zA-Z0-9_-]+\.(wasm|js)$` and cannot be `entry.js` or `artifact.js`.

Edit the named field per the rule, commit, push, retry.

## marketplace.author has an invalid email [#manifest-error-author-email]

You see this when `marketplace.author.email` is present but does not match a normal email shape (one `@`, a dotted domain, no whitespace).

1. Open `caputchin.json`.
2. Find `marketplace.author.email`.
3. Either fix the value to a real email address (we use it only for publish-failure notifications) or remove the field entirely.
4. Commit, push, retry.

You can also remove the whole `marketplace.author` block if you do not want to receive publish-failure notifications.

## Your run artifact is non-deterministic [#run-not-conforming]

You see this when our conformance smoke runs your game's `run(seed, trace)` function and it does not produce a conforming verdict.

Important: this is not a fatal publish failure. Your game is still listed in the marketplace browse and can be embedded. It just shows **Not replayable** and cannot gate a site key until the determinism issue is fixed.

Common causes:

- Your simulation reads `Date.now()`, `performance.now()`, `Math.random()`, or other non-deterministic globals.
- Your simulation reads external state (DOM, network, storage) we do not provide at replay time.
- Your simulation depends on floating-point arithmetic that differs between runtimes.

Fix the simulation to be a pure function of the seed and trace, push, retry. See [the replay contract](/docs/marketplace-game-development/replay-contract#determinism-is-the-whole-requirement) for the determinism rule, and consider the optional [engine kit](/docs/marketplace-game-development/engine-kit), which provides a deterministic seedable RNG and clock.

## Bundle fetch failed [#bundle-fetch-failed]

You see this when the bundle URL pinned by `entry` and/or `npm` cannot be fetched, returns a non-2xx, or exceeds 12MB.

- If you just pushed a new version: the CDN may not have propagated yet. Wait a minute and retry.
- If your bundle is over 12MB: trim assets, split into modules via the `run` declaration, or move large assets to a different delivery path.
- If your `npm` package is not yet published: publish it first; we cannot fetch unpublished versions.

## Too many publish requests [#rate-limited]

You see this on the manual-publish modal when you have submitted more than ten requests in the last 60 seconds.

Wait 60 seconds and retry. There is no way to raise the limit; it protects the endpoint from abuse.

## Stopping notification emails

If you want to stop receiving publish-failure emails, see [Submission Terms section 10](/legal/submission-terms). The recipient address is your `marketplace.author.email` in the manifest; removing or changing it stops the emails.

## See also

- [Full publish errors reference](/docs/marketplace-game-development/publish-failed-reference)
- [Publish to the marketplace](/docs/marketplace-game-development/publish-to-the-marketplace)
- [Marketplace Submission Terms](/legal/submission-terms)
