Troubleshooting

The manifest has an unknown field

Schema version 1 is closed. Remove the field. This includes $schema, build metadata, icons, author records, and arbitrary configuration. Put build-only metadata outside the release manifest.

The bundle contains unsupported files

Only HTML, CSS, JavaScript modules, supported web images, and WOFF fonts are accepted. Do not package source maps, TypeScript, JSON, Markdown, licenses, lockfiles, tests, or hidden operating-system files. Keep those in the project but outside runtime/.

The bundle has more than one HTML file

An extension has exactly one entrypoint. Build additional views inside that document instead of packaging more HTML files.

JavaScript must live in an external module

Move all executable code into .js or .mjs files and load it with a local module script:

<script type="module" src="main.js"></script>

Remove inline scripts, inline event handlers, javascript: URLs, and dynamically generated executable strings.

A resource works locally but not after installation

The production runtime blocks network connections and remote resources. Package scripts, styles, images, and fonts under runtime/ and use relative paths. Replace direct API calls with an approved window.BRT method.

CAPABILITY_NOT_GRANTED

The extension either did not declare the capability or the store user did not approve it. Do not loop or pressure the user. Keep the section useful without optional access and explain which feature is unavailable.

ADAPTER_UNAVAILABLE

The current site does not have the related BRT feature configured. Show a neutral fallback. For example, hide an SMS action when the store has no text-message number.

The signature does not verify

Package again from unchanged source. Common causes are editing manifest.json, bundle.zip, or submission.json after packaging; signing with a different key; or uploading files through a system that changes line endings.

The signature covers the exact SHA-256 hashes of manifest.json and bundle.zip. Even harmless reformatting changes the manifest hash.

The publisher fingerprint changed

Stop. Confirm that the expected private key was used and that no key file was replaced. BRT must not silently accept a new key under an existing publisher identity.

The iframe is blank

Check the browser console in local preview, then verify:

  1. The entry module awaits BRT.ready.
  2. Every imported module is packaged under runtime/.
  3. Resource paths are relative and match case exactly.
  4. Startup errors are caught and rendered inside the section.
  5. The extension does not use blocked globals such as fetch, XMLHttpRequest, WebSocket, storage, workers, or parent DOM access.

BRT review passes but product review fails

The automated review checks the release contract and signature. It cannot prove that the interface is useful, accessible, truthful, or appropriate for the requested permissions. Address the review notes, sign the corrected package, and resubmit it. You may keep the same version until BRT approves it. After approval, increase the version for every change.