Skip to content

deco-migrate: 6 bugs de scaffold/template encontrados numa migração real (portal-davinci deco-fresh→TanStack) #491

Description

@JonasJesus42

Bugs do deco-migrate (packages/blocks-cli) encontrados na primeira migração real de um site de conteúdo deco-fresh (deco-sites/portal-davinci → TanStack). Todos reproduzíveis, com fix sugerido. Contexto completo: decocms/parity#233-265.

1. siteName gerado com maiúscula → lookup CMS falha (blank SSR) [ALTO]

As rotas geradas (src/routes/index.tsx, $.tsx) usam siteName: "Portaldavinci-tanstack" (capitalizado). O lookup do decofile é case-sensitive → retorna vazio → todas as seções renderizam vazias no SSR (CLS alto, página em branco sem JS).
Fix: siteName = nome do site em minúsculas (igual ao name do wrangler.jsonc). ctx.siteName.toLowerCase().

2. wrangler.jsonc com KV placeholder inválido [ALTO]

Gera "kv_namespaces": [{ "binding": "SITES_KV", "id": "dev-sites-kv" }]. O id precisa ser um UUID real → deploy falha com KV namespace 'dev-sites-kv' is not valid [code 10042].
Fix: criar o KV via wrangler kv namespace create no bootstrap e injetar o id, OU deixar comentado com instrução explícita.

3. // line comments dentro de funções useScript quebram após minificação [ALTO]

O minifyJs do useScript colapsa newlines → qualquer // comment dentro da função serializada engole o resto do código → Unexpected end of input em runtime (script inline malformado). No portal-davinci havia 15 (@ts-ignore + comentários) no Maps.tsx → mapa em branco + erro de console. Passa no typecheck e no build, só quebra em runtime.
Fix: o codemod do deco-migrate deve remover/converter // line comments (→ /* */) dentro de funções passadas a useScript/useScriptAsDataURI.

4. Template do setup.ts gera campos fora do SiteSetupOptions [MÉDIO]

O template emite css, fonts, meta, previewWrapper em createSiteSetup({...}), mas o tipo SiteSetupOptions do @decocms/blocks não tem esses campos → erros TS na fase build (meta does not exist in type SiteSetupOptions, @ts-expect-error não usado). O template usa @ts-ignore mas o generate usa @ts-expect-error.
Fix: alinhar o tipo SiteSetupOptions com o que o template gera (add css/fonts/previewWrapper/meta) OU remover do template.

5. Não gera public/_headers → assets sem cache imutável [MÉDIO]

Assets hasheados (/assets/*-<hash>.js) são servidos pelo CF Workers Assets com o default max-age=0, must-revalidate (a lógica de immutable do worker-entry não roda neles, pois são servidos antes do worker). PageSpeed/parity penalizam.
Fix: gerar public/_headers com /assets/*Cache-Control: public, max-age=31536000, immutable (filenames são content-addressed).

6. Migrate não deve decriptar Secret blocks pra plaintext [MÉDIO/segurança]

Se o site origem usa Secret blocks (valor criptografado, decriptado server-side via decrypt key), a migração deve preservar o __resolveType de Secret + o ciphertext — não inline em plaintext no decofile de destino (regressão de segurança). No portal-davinci a Maps apiKey já estava plaintext no origem, mas validar o caminho Secret.


Menores relacionados (orchestrator-side, já tratados no plugin parity): bun run predev falha em deco-fresh (sem package.json); bun run generate precisa rodar antes do typecheck.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions