chore(catalog-source): split per-source kill switches; default pcat off

Verified 2026-06-01 against dev's 103 unique pcat carIds: the current pcat
dump's deep-scrape (7.978 cars with real parts data via schema_parts or
part_groups+part_group_items) targets a US/JDM-market subset — Toyota 2112,
Nissan 1508, Audi 1311, Chevy 1050, Hyundai 745. **None** of sase's TR-market
vehicles intersect that rich subset:

  - 18/103 sase carIds are in dump.cars at all (registry only)
  - 0/103 yield parts via Bridge A (schema_images → schema_parts)
  - 0/103 yield parts via Bridge B (part_groups → part_group_items)

Even the cars that match by exact carId (Fiat Doblo 368 schemas, Renault
Megane, Bravo 456 schemas) have only diagram metadata — no parts annotation.
The dump scraper finished tier-1 (catalog/model/car listing) and tier-2
(schema diagrams) for these, but stopped before tier-3 (parts annotation).

Under the strict "always correct OEM" constraint there is no safe pcat lookup
today. Disable it. The container stays up for future use cases (OEM cross-
reference search, alt-part matching) and so we can flip the env back without
a code change if a richer dump arrives.

EMEX stays on (its catalog-allowlist is the next step).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-01 17:50:07 +03:00
parent 506f11d636
commit 3a3a7d3ebf
5 changed files with 42 additions and 6 deletions

View File

@@ -120,6 +120,21 @@ export const envSchema = z.object({
.default("false"),
PCAT_SOURCE_DB_URL: z.string().url().optional(),
EMEX_SOURCE_DB_URL: z.string().optional(), // mysql://... — not a strict URL per WHATWG
// Per-source kill switches under the master CATALOG_SOURCE_DB_ENABLED.
// EMEX defaults true (catalog-allowlist tightens which catalogs hit the dump).
// PCAT defaults FALSE — verified 2026-06-01 that the dump's deep-scrape covers
// a US/JDM market subset (Toyota/Nissan/Audi/Chevy/Hyundai) that doesn't
// intersect sase's TR-market vehicle pool (0 / 103 dev carIds had real parts
// data through either bridge). Container stays running for future use cases
// (OEM cross-ref, alt-part search).
EMEX_SOURCE_DB_ENABLED: z
.string()
.transform((v) => v === "true")
.default("true"),
PCAT_SOURCE_DB_ENABLED: z
.string()
.transform((v) => v === "true")
.default("false"),
});
export type Env = z.infer<typeof envSchema>;