Validation Reference

When you submit a BodyLink game, the fail-closed submission gate checks your bundle and — on rejection — names every failing check along with a one-line recommended fix. This page is the reference for those named checks. It is generated from the validator code (the validators' own remediation tables), so it cannot drift from what the gate actually emits.

Run the gate locally to get the same report the developer portal shows — see the Developer Guide for the full loop:

node scripts/validate-submission.mjs <bundle-dir> --report
        

Any code not listed below falls back to a generic fix — a failing check is never left without a recommended fix.

Static bundle validation checks

Each failed static validation names its check group and, per failing issue, a one-line recommended fix. The groups below are emitted in this display order. unity codes are matched by the unity. code prefix; anything unmapped falls into other.

Manifest & metadata (manifest/metadata)

Issue code Recommended fix
bundle.manifest_missing Add a valid bodylink.game.json at the bundle root (valid JSON).
bundle.manifest_invalid Fix the bodylink.game.json so it parses and matches the manifest schema.
bundle.manifest_file_missing Include bodylink.game.json in the exported bundle.
bundle.entry_kind Set manifest entry.kind to "iframe" for Runtime v1 bundles.
bundle.entry_missing Add manifest entry.html pointing at the bundle HTML entrypoint.
bundle.launcher_missing Add a launcher block to the manifest for BodyLinkTV-ready bundles.
bundle.launcher_field_missing Fill the named launcher field (description/color/gridSize/tags/howToPlay).
bundle.launcher_metadata_missing Provide the required manifest metadata (id, name, version, runtimeRange).
bundle.launcher_metadata_invalid Make manifest.version a valid SemVer (e.g. 1.0.0).
bundle.manifest_version_mismatch Align package.json version to bodylink.game.json (the manifest is the source of truth), or run bodylink version <patch|minor|major> to bump both in lockstep.
bundle.launcher_tracking_focus Set launcher.trackingFocus to one of: hand, body, none.
bundle.launcher_tracking_preset Set launcher.trackingPreset to a valid preset when requiresCamera is true.
bundle.launcher_tracking_tier Set launcher.trackingTier to one of: standard, high, custom.
bundle.launcher_tracking_policy_invalid Make launcher.trackingPolicy an object when declared.
bundle.launcher_tracking_custom_policy_missing Provide an explicit launcher.trackingPolicy for trackingTier "custom".
bundle.launcher_tracking_policy_profile Set trackingPolicy.profile to a valid value (stability/latency/precise/balanced).
bundle.launcher_tracking_pose_model Set trackingPolicy.poseModel to a valid value (lite/full).
bundle.launcher_tracking_policy_tier Raw trackingPolicy budgets require launcher.trackingTier "custom".

Capabilities & SDK compatibility (capabilities/sdk-compat)

Issue code Recommended fix
bundle.capability_missing Declare the required capabilities (iframe.bundle.v1, sdk.proxy.v1).
bundle.tracking_invalid Fix the manifest tracking block so it matches the tracking schema.
bundle.tracking_optional_invalid Correct the optional tracking declaration to a valid shape.
bundle.tracking_optional_capability_missing Add the capability that the declared optional tracking feature requires.
bundle.sdk_facade_missing Keep the SDK facade in the bundle, or externalize the SDK via the lock externalSdk descriptor.
bundle.sdk_only_forbidden_reference Remove the host-internal reference; game bundles may use only the game-kit/iframe-sdk surface.
bundle.sdk_only_unresolved_module_import Bundle or remove the unresolved module import; SDK-only bundles must resolve all specifiers.
bundle.externalize_sdk_integrity_required Provide the SDK SRI integrity (run build:sdk-artifact) before externalizing the SDK.

Catalog assets (catalog-assets)

Issue code Recommended fix
bundle.catalog_invalid Make manifest.catalog an object when declared.
bundle.catalog_asset_missing Add the missing catalog asset (thumbnail and preview) as bundle-relative files.
bundle.catalog_asset_metadata Declare image media metadata (type: image/*) for the catalog asset.

Asset sizes (asset-sizes)

Issue code Recommended fix
bundle.asset_too_large Compress or split the file so each bundle file is under the per-file size limit.

Bundle structure & offline safety (bundle-structure)

Issue code Recommended fix
bundle.asset_missing Ensure every manifest asset path resolves to an existing bundle file.
bundle.path_empty Provide a non-empty bundle-relative path.
bundle.path_not_relative Use a bundle-relative path (no absolute or URL-like paths).
bundle.path_traversal Remove ".." traversal segments from the path.
bundle.iframe_session Provide a valid manifest.iframeSession block.
bundle.parent_origins Declare iframeSession.allowedParentOrigins explicitly.
bundle.parent_origin_wildcard Replace the wildcard parent origin with explicit origins.
bundle.sandbox Set a valid iframeSession.sandbox (allow-scripts only; never allow-same-origin).
bundle.network_not_offline Set permissions.network to false for offline Runtime v1 bundles.
bundle.html_external_reference Make HTML references bundle-relative; external URLs are not allowed in offline bundles.
bundle.html_reference_missing Point the HTML reference at an existing bundle file.
bundle.opaque_origin_module_script Drop module