Refactor smazal proměnnou, reference zůstala — každý request 500, build prošel
import { Aside } from ‘@astrojs/starlight/components’;
Symptom
Sekce “Symptom”Checkout e-shopu vytvoří objednávku, rezervuje zboží, u platební brány založí platbu — a pak zákazníkovi vrátí 500 „Internal server error” místo redirect URL na bránu. Objednávky v adminu končí červené (platba u brány expiruje). Build i deploy prošly bez chyby; část zákazníků platbu dokončila oklikou (potvrzovací stránka / repay link), takže výpadek nebyl vidět v tržbách okamžitě.
Root cause
Sekce “Root cause”Refactor přesunul vytváření položek objednávky do DB RPC a smazal const orderItems = …, ale ve finální odpovědi route zůstalo:
return new Response(JSON.stringify({ data: { ...order, items: orderItems }, // ReferenceError! checkout_url: url,}));Vite/esbuild typy jen stripuje, netypechecká — volný identifikátor projde buildem. V runtime vznikne ReferenceError až při sestavování odpovědi (po všech vedlejších efektech!), který spolkne catch-all try/catch a vrátí generický 500. E2E smoke testy (read-only) endpoint netestovaly.
Fix
Sekce “Fix”Obnovit data z proměnné, která ve scope existuje (vstup RPC má tentýž tvar):
data: { ...order, items: pItems },Plus regresní route testy happy path, které parsují celé response body — bez opravy padají. Detekci umožnil activity_log se zaznamenaným error_message z catch-all handleru („X is not defined” s přesnými časy).