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.
- Open your repository's
caputchin.json. - Read the Marketplace Submission Terms.
- Add
"terms_accepted": trueat the top level of the manifest. - Commit and push.
- 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.
- Pick an SPDX identifier from the approved list that genuinely covers your code and bundled assets.
- Open
caputchin.jsonand set thelicensefield at the top level, for example"license": "MIT". - If your code is dual-licensed, use an SPDX
ORexpression (e.g."MIT OR Apache-2.0"). At least one branch must be on the approved list. - 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. - 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-gametopic to stop appearing in the index. - Your repository lacks the
caputchin-gameGitHub topic. Add it via the About section on the repository page. - Your repository has no
caputchin.jsonat the root (or, for child games in a collection, nocaputchin.jsonat the leaf directory). - The repository URL you entered is wrong. Use
owner/nameor the fullhttps://github.com/owner/nameURL.
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: yourentryvalue contains traversal (../), absolute slashes, query strings, or whitespace. Use a clean repo-relative path likedist/game.js.npm: npm package name is malformed: yournpmfield is not a valid npm coordinate. Usenameor@scope/name, alphanumerics + hyphens + dots + underscores only.games[i] must be a relative path inside the repo: a child path in your collection'sgamesarray escapes the repo. Use paths likepackages/leaf-memory, not../externalor/abs/path.run.entry must be a clean relative path: same hygiene rule asentry, applied to the optional split-run entry.run.modules[i].name: the module name must match[a-zA-Z0-9_-]+\.(wasm|js)$and cannot beentry.jsorartifact.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).
- Open
caputchin.json. - Find
marketplace.author.email. - Either fix the value to a real email address (we use it only for publish-failure notifications) or remove the field entirely.
- 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
rundeclaration, or move large assets to a different delivery path. - If your
npmpackage 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.