Caputchin
Marketplace game development

Fix a marketplace publish failure

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 for less common codes.

terms_accepted not set

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.
  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

You see this when license is missing, malformed, or names an identifier outside our approved list.

  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

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

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

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

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 for the determinism rule, and consider the optional engine kit, which provides a deterministic seedable RNG and clock.

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

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. The recipient address is your marketplace.author.email in the manifest; removing or changing it stops the emails.

See also

On this page