fix(renderJson): strip framework-injected keys from serialized props
Contexto
Validando o ?renderJson do site TanStack (colombo) contra o site Fresh de produção (oficina.com), a comparação revelou que o output divergia em toda seção por chaves injetadas pelo framework que vazavam nos props:
__pageUrl/__pagePath— injetadas porrunSectionLoaders(universal).device/isMobile/currentSearchParam— mixinswithDevice/withMobile/withSearchParam.
Prod (Fresh) não injeta essas chaves, então os payloads divergiam. Pior: são request-derived — quebrariam o ETag por request/device e vazam internals que o app mobile não deveria cachear.
Fix
serializeRenderJson agora remove, após a projeção da seção (pra um projection rest-spread não conseguir vazá-las):
- qualquer chave top-level com prefixo
__(framework-internal por convenção, igual__section); device,isMobile,currentSearchParam.
Evidência (paridade end-to-end)
Rodando o colombo com o fix contra prod, mesma página:
- 0 vazamentos de chaves injetadas (antes: 4+ por seção).
home-hero→ key-set idêntico a prod (altText,gradientOverlay,heroText,promotionInfo,responsiveMedia).
Os diffs restantes entre colombo e prod são conteúdo (banners/categorias diferentes = snapshots de decofile diferentes) e deferral (config de Lazy diferente nos decofiles) — nenhum é do renderJson.
+2 testes no serializer; blocks tsc limpo.
🤖 Generated with Claude Code
Summary by cubic
Strips framework-injected request keys from serialized section props to prevent ETag churn and leaking internals. Previously serializeRenderJson emitted __pageUrl, __pagePath, device, isMobile, and currentSearchParam; now it removes any __-prefixed key plus those device/search keys after the section projection.
- Runs after the section
renderJsonprojection so rest-spread cannot reintroduce these keys. - Only the JSON output changes; section code can still consume these props server-side.
- Adds two tests; no public API changes.
- Migration: If any client code reads these keys from render JSON, move that logic server-side or derive from URL/device at runtime.