Skip to content

Backend: https://github.com/snag-tcg/tcg-collector-backend/pull/515

Mobile: https://github.com/snag-tcg/poc-tcg-collector/pull/758 (issue #757).

The supplied OP, ST and X block logos identify main series, starter decks and special series. These families are app groupings, not actual database series: serie_id, cards, prices and all user data remain unchanged. No migration is used. GET /sets and set detail expose additive, nullable block_logo descriptors; only the six known content-addressed PNG paths are permitted by guest media.

Appearance ​

Six original 500x500 PNG variants were copied unchanged in local backend image storage and on the VPS. Full SHA-256 checks and a generated import manifest preserve their provenance as user-supplied artwork. The extra logo-eb02.png is excluded from this block-only task. No prior file was overwritten.

Light variants have opaque white backgrounds. The transparent dark variants are therefore used as native alpha masks, tinted with the actual semantic text color of the header/tile. This avoids white boxes and preserves contrast even when a Light setting uses dark accent headers. All six originals remain intact; letters retain their transparent cutouts. Ordinary Pokemon/set artwork is never tinted.

Both Cards and Sealed-by-series use the shared Explorer accordion; Collection block tiles also consume the same backend masks. Missing/older metadata retains existing fallbacks, without fabricated URLs or bundled artwork.

Operations And Validation ​

The backend inventory and reproducible dry-run/apply preparation script live in src/api/src/onePieceBlockLogos.ts and src/api/scripts/prepare-onepiece-block-logos.ts. Operational details: docs/ONEPIECE_BLOCK_LOGOS.md in the backend repository. VPS staging keeps the six-file manifest and a directory for previous exact targets; all targets were new. Every installed file was compared byte-for-byte. Existing nginx serves the image mount without restart; API metadata/media permissions require the approved deployment after green CI. No database writes are needed.

Local verification: 1,290 API tests pass (9 existing skips), strict API/script/test typecheck passes, and 2,721 mobile tests pass (11 existing skips), lint/TypeScript green. Tests first reproduced missing descriptors, denied guest media, absent client metadata/grouping and missing header art. Regression tests cover invalid paths, unchanged series metadata, normal optical framing and semantic mask tint. The native Maestro flow is authored but not executed; native visual verification remains pending. Final CI/deployment evidence is recorded on the linked PRs.

Initial activation was blocked by GitHub Actions account billing/spending limits; backend run 39293273449 did not start its jobs. The user subsequently explicitly authorized proceeding on local validation without paying for Actions. No CI rules or protection settings were changed, and no actual test failure was suppressed.

Verified Rollout (2026-10-19) ​

Backend #515 and mobile #758 were merged on staging alongside mobile #752, #754 and #756. Merge conflicts were resolved without losing behavior or changelog entries. The integrated mobile code passes lint, TypeScript and 2,739 tests (11 existing skips); the API passes strict typecheck and 1,290 tests (9 existing skips). Docker E2E was unavailable locally (Docker Desktop daemon absent); ingest tests were not rerun in this worktree because its dependencies/compiler are absent. No ingest source was changed by this work.

The backend staging revision bd1be451e64d09a86557f37a86795f4ea579e80d was archived from Git, built on the VPS and deployed as skns-api:block-logos-bd1be45. The previous API image/config-file references were preserved for rollback. API was recreated and nginx restarted; Postgres, Redis, scan services and user data were not changed. External health/readiness and anonymous French set metadata return HTTP 200, all three block families are present, all six public PNGs return HTTP 200 and match the source hashes, and an unknown revision returns HTTP 404.

The emulator application was not rebuilt/reinstalled by this rollout; native visual/Maestro validation remains pending and requires the updated mobile build.