Appearance
Pokemon rarity symbols
Scope and Provenance
The 18 original PNG symbols were retrieved from public Pokecardex series controls on 20 October 2026. Each source is https://pokecardex.b-cdn.net/assets/images/rarete/ids/rarete_<id>.png. The repository manifest src/api/src/pokemonRaritySymbols.json records full SHA-256, source URL, dimensions and theme treatment. The local source batch additionally retains source pages and the original download manifest.
The user explicitly confirmed usage/publication rights for Snag on 20 October 2026. This attestation supersedes the download-time pending publication decision; it does not claim independent legal verification or change historical evidence.
Reviewed Manifest
| Source ID | Source label | Pixels | Theme treatment | SHA-256 prefix |
|---|---|---|---|---|
| 1 | Commune | 50x50 | Theme ink | 463a44ca7fd2 |
| 2 | Unco | 50x50 | Theme ink | 18794172aa6f |
| 3 | Rare | 50x50 | Theme ink | 31719d6f6898 |
| 4 | Holographique | 50x50 | Original colors | 05e6f90f0faa |
| 5 | Ultra-rare | 50x50 | Original colors | 70c52d41c7c1 |
| 6 | Secrète | 50x50 | Original colors | 61bbdf11e2f0 |
| 7 | Promo | 50x50 | Original colors | 81a958668586 |
| 32 | Double Rare | 250x250 | Original colors | 4d3b162a0876 |
| 33 | Illustration Rare | 250x250 | Original colors | dfca65ad297a |
| 34 | Ultra Rare | 250x250 | Original colors | 0ab8a51a68e2 |
| 35 | Illustration Spéciale Rare | 250x250 | Original colors | 7956fd514cfb |
| 36 | Hyper Rare | 250x250 | Original colors | f71143f2208a |
| 38 | Illustration Rare Chromatique | 82x78 | Original colors | cb7f2712a94d |
| 39 | Illustration Spéciale Chromatique | 152x100 | Original colors | b01c8cfe1f4c |
| 40 | HIGH-TECH rare | 250x250 | Original colors | 437245b5ed07 |
| 43 | Noir Blanc Rare | 238x162 | Original colors | 8fdfc4db9acb |
| 45 | Mega Hyper Rare | 100x100 | Original colors | efa243add360 |
| 47 | Méga Attaque Rare | 30x20 | Original colors | 149a42cff048 |
Display Contract
- Backend list and detail responses optionally provide
rarity_symbolwithid,path,monochrome,widthandheight. - Filenames are content-addressed:
rarity-symbols/pokemon/<id>.<sha12>.png. The public media proxy allows only the exact reviewed manifest paths, not the directory. No arbitrary URL, fake card/set row or image ownership bypass. - The app validates all metadata and resolves paths through its configured first-party catalogue-media base. Public disk hydration revalidates metadata.
- Images occupy a stable 24x20 slot using contain, not cover. Only the reviewed alpha-mask originals follow theme ink; colored/bordered originals stay intact. Native image failure or absent metadata uses the existing glyph, preserving counts, accessibility, selection and filter geometry. Mixed-set groups only show a PNG when every card agrees on the source URI.
- Label aliases reuse the existing source-ID resolver: modern Rare/Holographique and Ultra Rare must not be confused with their legacy meanings. Unsupported Snag-only groups keep their fallback; no invented source match.
- No card rarity, membership, order, number, account or holding is changed.
Installation and Rollback
The static installer defaults to a dry-run. It validates all 18 PNG hashes, headers, dimensions and source/target paths before creating a private backup receipt outside public images. Existing exact targets are backed up; previously absent files are recorded as absent. Atomic individual replacements are rehashed. Use a fresh backup directory and the reviewed source files; no recursive chmod, cache purge, SQL migration or service restart is required for static uploads.
Observed installation: 18 new files, 55,367 bytes, zero replacements. Host hashes and all 18 internal Nginx HTTP 200 payload hashes matched. Receipt and approved manifest are retained privately. New public catalogue-media paths require the backend PR deployment; copying files alone does not activate the API allowlist. Rollback must target only the receipt entries and requires approval before removing newly created public files.
Validation and Limits
Local API suite: 1,328 passed, 11 skipped; TypeScript and check-JS passed. Mobile: 2,805 passed, 11 skipped; types and targeted lint passed. Tests cover all 18 backend mappings, exact media allowlisting, hostile wire input, both native theme styles, load-error fallback/retry, group ambiguity and disk hydration. Installer exercises cover dry-run, fresh install, repeat backup and corruption rejection. A browser contact sheet verifies all 36 light/dark image instances at the display slot size; this is not a native emulator screenshot.
No native build is installed by this change. Docker-backed PostgreSQL E2E was not run locally. PRs target staging; no merge or API deployment is implied. Implementation: backend #526 and mobile #775. Backend CI run 39452773316 was rejected before jobs started because of the organisation's payment/spending limit. Local green gates do not replace this CI status.