Appearance
Backend PR #505 implements the agreed French beta policy. TCGgo supplies the lowest French Near Mint Cardmarket offer; CompSniper supplies matched eBay sold listings. Loose cards combine the two sources equally when available, or use the only available source. Graded cards and reviewed sealed SKUs keep their exact markets separate and can use the latest matching older sale when no recent sale qualifies. Prices exclude shipping and convert USD using a dated ECB rate. Missing values stay unavailable/manual. Expired eBay evidence does not suppress a still-valid Cardmarket fallback.
Shared packets reuse the existing Redis connection, while PostgreSQL owns evidence, leases and spending limits. Positive/empty/error cache lifetimes are 72 hours, 24 hours and 15 minutes. Defaults limit CompSniper to 8,000 requests over the current UTC day and preceding 32 days, 200 per rolling 24 hours and 10 per minute, with a separate 2,000-request upstream reserve. Authenticated selected refreshes may start bounded work; passive reads and catalogue bootstrap do not start paid CompSniper searches. The API Compose service forwards the five settings; the feature remains disabled by default.
Local validation: 1,274 API tests, 553 ingestion tests, TypeScript checking, 64 focused beta tests including SQL checks, Compose configuration validation and five paired frontend/API HTTP tests passed. A real provider smoke and cache replay returned usable loose, graded and sealed values; the replay made zero CompSniper calls and reported 9,997 requests remaining.
SQL checks used PGlite with existing migrations; paired HTTP checks used controlled provider DTOs and an in-memory Redis storage adapter. Docker Desktop could not start, so PostgreSQL 16/Redis 8.4.7 E2E parity is unverified. Pagination is bounded, matching is conservative, and sparse results do not prove that an item has never sold. This does not backfill every card's price history. No deployment, merge, migration, dependency change or API key is included.
Companion mobile PR #740.