dev #126
Reference in New Issue
Block a user
Delete Branch "dev"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
- initSentry() is now idempotent via a cached promise, and the degradation reporter / feedback opener await it — so an empty/error state that renders before the SDK's dynamic import resolves no longer drops the event (not missing the failure is the whole point of the auto-capture). - environment now resolves hostname-first (sase.tr → production, dev.sase.tr → staging), so the compose-baked VITE_SENTRY_ENVIRONMENT default ("production") no longer makes dev browser events indistinguishable from prod. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>Resolve a catalog OEM code to its TecDoc equivalents on a new /dashboard/oem/$code page: the aftermarket parts that carry it (brand + article number + image + EAN), buyable supplier substitutes, and OE cross-references (same part under other makes). - API: TecdocModule (read-only postgres-js client to the imported `td` snapshot), GET /tecdoc/oem?code=. Normalisation-based match (TecDoc stores `1J0 973 702`, catalog gives `1J0973702`); exact match recovers ~1/10 vs normalised ~5/10 on real codes. Self- disables without TECDOC_DB_* env → { matched: false }. - Web: OEM code in the parts panel is now a link (new tab) to the detail page; "N/A" stays plain text. - Mirrors CatalogSourceDbModule (raw queries, no Drizzle modelling). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>Drop the third-party brand name from the product surface and code. The OEM detail feature is now "P" (short for parts) everywhere: endpoint /p/oem, PModule/PController/PSourceDbService, config key `p`, env P_DB_ENABLED/P_DB_URL, UI copy ("P kataloğundan…"), and the unused tab label. Physical snapshot DB stays `td` (server-only). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>Decode persist looked brands up with a case-sensitive eq(), so an uppercase decode string ("FORD") missed canonical "Ford" → brand_id NULL + raw uppercase stored as brand_name, splitting one brand across casing variants in analytics/catalog. Now matches brands case-insensitively and stores the canonical name. Migration 0013_fix_brand_casing backfills existing rows (60 on prod, 1 on dev). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>The multi-candidate decode response leaked provider internals (source name, pcat car ids, EMEX _ssd/_vid/_quickGroupsUrl/catalogId) and made the client carry them between requests: the frontend stored candidateSource and echoed pcatCarId/emexCarIndex back on selection. Now the candidate list returned to the client carries only display fields (name, description, parameters) plus an opaque key, and the provider mapping is stashed in Redis (vin:candidates:*, 30m TTL, resolve-cache fallback). The pick request sends just { vin, candidate }. Legacy pcatCarId/emexCarIndex body params still work for already-loaded bundles. Also drops `source` from the public /vehicles/preview response — no consumer used it, and provider names must never be public (same policy as teaser-stats). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>POST /vehicles/decode returned the full vehicles row while every consumer (search, landing, service-test) only navigates by id and re-fetches via GET /vehicles/:id. That shipped the raw upstream decode payload to the client on every decode — rawData is 19KB avg / 127KB p95 / 207KB max in prod — plus the provider name, for nothing. The response is now { id, brandName, model, year } on both the DB-hit and fresh-decode paths. Frontend drops the (now absent) source property from the vin_decode_success event; decode source remains queryable server-side via query_logs.source. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>After the Floxy account rotation, the new residential exit IPs are slower: measured DOM-ready ~7s and the widget's /v3/api/proxy token call firing ~11.8s — past the 10s PAGE_TIMEOUT + networkidle, so every capture timed out ("No token after 12s") and the warm pool stayed empty (pcat dead despite valid creds). - waitUntil networkidle → domcontentloaded (reliable ~7s; networkidle often never settles on JS catalog sites through a slow proxy → goto times out pre-token). - PAGE_TIMEOUT 10s → 25s (env PCAT_PAGE_TIMEOUT_MS); token fired at ~11.8s. - CAPTURE_POLL_AFTER_OK 5s → 12s (env PCAT_CAPTURE_POLL_OK) to cover the ~5s gap between DOM-ready and the token call. Capture is background (warm pool, cold-pool fast-fail never blocks users), so the longer cap is free insurance. Verified via standalone Playwright probe through the new Floxy: token captured at 11842ms (DOM 7023ms). typecheck clean. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>