Validated Alternate-Art Catalog Handoff

Historical implementation record. This file documents an earlier catalog delivery workflow and includes machine-specific commands. For current extension behavior, use CARD-IDENTITY-AND-ALTERNATE-ART.md, the checked-in generator, and the generated allowlist. Do not regenerate published runtime data during a documentation-only task.

Artifact

Use:

docs/extension_alt_art_catalog.json

This is a generated input artifact for the extension. The generator is owned by the separate TTS workspace and is intentionally not copied into the extension repository. To regenerate it, run from the TTS workspace:

Set-Location 'C:\Users\tanne\OneDrive\Documents\TTS UVS'
python .\uvs_tts_card_updater\build_alt_art_handoff.py

That command writes the TTS workspace’s docs/extension_alt_art_catalog.json. After regeneration, copy the catalog and report into this extension docs folder. Do not run the command from the extension repository.

To prepare and package the runtime allowlist, generate any missing image sizes, commit those assets to uvs-tts-assets, and then build against that full commit:

python .\scripts\build-remote-card-art.py `
  .\docs\extension_alt_art_catalog.json `
  'C:\Users\tanne\OneDrive\Documents\git\uvs-tts-assets' `
  <full-uvs-tts-assets-commit> `
  --prepare-assets

Run the command again with the new committed revision after asset preparation. The generated remote-card-art.js embeds that revision, and runtime URL checks accept images only below its pinned alternate-art path.

The generator accepts only review decisions classified as alt. It excludes not_alt and functionally_distinct, merges duplicate artwork only within the same canonical Ultra card, preserves all source provenance, and carries paired transform backs from the runtime source data.

Canonical identity

Match canonical cards by:

setId + cardNumber

uvsUltraCardId is a stable supporting identifier. cardName is display metadata and must not establish identity because same-name cards can have different mechanics and renamed reprints can be functionally identical.

Catalog shape

{
  "cards": [
    {
      "uvsUltraCardId": "10404",
      "setId": "yyhdt",
      "cardNumber": "154",
      "cardName": "Urameshi Perseverance",
      "alternates": [
        {
          "artworkId": "tcgplayer/10404-539680",
          "image": {
            "repositoryPath": "alternate-art/supplemental/tcgplayer-candidates/539680 - Urameshi Perseverance.jpg",
            "sourceUrl": "https://www.tcgplayer.com/product/539680/...",
            "imageUrl": "https://tcgplayer-cdn.tcgplayer.com/product/539680_in_1000x1000.jpg"
          },
          "provenance": []
        }
      ]
    }
  ]
}

provenance may contain several source records when the official gallery and TCGplayer provided the same artwork. Do not emit duplicate choices for those records. Use artworkId as the stable alternate choice identifier.

Asset paths

Every repositoryPath is relative to the root of the separate uvs-tts-assets repository. It is not relative to the extension repository. The catalog’s top-level assetRepository object declares this base explicitly. Consumers may use imageUrl directly for source recognition; local file access requires a checkout of uvs-tts-assets.

Extension behavior

The extension’s forum-code output should continue to emit canonical identity:

{quantity} -{setId}/{cardNumber} {cardName}

When the source page exposes a recognized alternate image or product URL, it may additionally associate the selected artworkId for importer use. Preserve the canonical set/card pair; never replace it with TCGplayer product metadata.

The extension must not perform its own scraping or infer alternate identity by name. Refreshes are generated and reviewed in this workspace, then delivered as an updated catalog.