Skip to content

Commit c350181

Browse files
chore: upgrade Next.js and React securely
1 parent 93a4197 commit c350181

22 files changed

Lines changed: 783 additions & 291 deletions

File tree

TODO.md

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -440,8 +440,8 @@
440440
- [ ] Definir relações, ownership, lifecycle e chaves de Workspace, Project, Media, Capture, Synthetic e Execution.
441441
- [ ] Validar que `SourceAsset`, `TimelineSegment`, `OutputSpec`, adapter e `EditCommand` são compatíveis com as specs 02, 03 e 06.
442442
- [ ] Fixar versões-alvo de Next.js/React, Remotion, FFmpeg/ffprobe, Postgres/vector e client libraries no ADR-001/002/008.
443-
- [ ] Atualizar Next.js/React para uma linha suportada sem quebrar App Router, Remotion ou os contratos `/v1`; audit atual sinaliza advisory crítico no Next.js 14.2.21.
444-
- [ ] Corrigir advisories não-major de `uuid`, `postcss` e `form-data` e manter `npm audit` registrado no CI.
443+
- [x] Atualizar Next.js/React para uma linha suportada sem quebrar App Router, Remotion ou os contratos `/v1`. Evidência: Next 16.2.10, React 19.2.7, codemod async params e validação completa.
444+
- [x] Corrigir advisories não-major de `uuid`, `postcss` e `form-data`. Evidência: versões corrigidas/override PostCSS e `npm audit` com zero vulnerabilidades.
445445
- [ ] Configurar S3-compatible storage.
446446
- [x] Impedir SQLite como domínio final fora de protótipos locais. Evidência: `resolveV2PersistenceMode` exige Postgres em produção e não possui fallback silencioso.
447447
- [ ] Gerar diagrama/schema documentation e testar integridade referencial dos aggregates centrais.
@@ -2085,7 +2085,7 @@ Para cada decisão:
20852085
| Non-goals | 12/12 |
20862086
| Riscos | 11/11 |
20872087
| Fases do roadmap | 6/6 |
2088-
| Microtarefas/checks abertos | 1.211 |
2088+
| Microtarefas/checks abertos | 1.209 |
20892089

20902090
Esta contagem valida presença e fase, não conclusão. Quando o PRD mudar, atualizar este quadro e executar novamente a comparação de IDs com a matriz de rastreabilidade.
20912091

@@ -2262,7 +2262,7 @@ Pendências deliberadas:
22622262

22632263
### Slice F0-006 — Examples e compatibilidade do contrato `/v1`
22642264

2265-
**Status:** concluído em 12 de julho de 2026; ainda não commitado.
2265+
**Status:** concluído e publicado em 12 de julho de 2026 no commit `93a4197`.
22662266

22672267
Entregas:
22682268

@@ -2293,3 +2293,37 @@ Pendências deliberadas:
22932293
- headers `Deprecation`/`Sunset` e migration guide;
22942294
- política para mudanças compatíveis dentro da mesma major sem tornar o gate excessivamente conservador;
22952295
- geração de SDK e MCP a partir do OpenAPI.
2296+
2297+
### Slice F0-007 — Upgrade seguro de Next.js e React
2298+
2299+
**Status:** concluído em 12 de julho de 2026; ainda não commitado.
2300+
2301+
Entregas:
2302+
2303+
- migração incremental validada de Next 14.2.21 → 15.5.20 → 16.2.10;
2304+
- React/React DOM 18.3.1 → 19.2.7 e types React 19 atualizados;
2305+
- codemod oficial `next-async-request-api` aplicado em 15 route handlers;
2306+
- `params` de pages/routes dinâmicas agora é assíncrono conforme o App Router atual;
2307+
- `serverComponentsExternalPackages` migrado para `serverExternalPackages`;
2308+
- `outputFileTracingRoot` explícito elimina inferência incorreta causada por lockfile externo;
2309+
- dev/build usam `--webpack` explicitamente enquanto Remotion e FFmpeg dependem dos aliases/externals atuais;
2310+
- requisito de runtime registrado como Node.js 20.9+;
2311+
- `uuid` atualizado para 11.1.1, PostCSS para 8.5.18 e `form-data` transitivo corrigido;
2312+
- override global de PostCSS elimina a cópia vulnerável aninhada pelo Next;
2313+
- TypeScript config atualizado para JSX automático e types de rotas do Next 16.
2314+
2315+
Evidências:
2316+
2317+
- `npm audit --audit-level=low`: zero vulnerabilidades;
2318+
- 32 testes unitários aprovados;
2319+
- typecheck e contract compatibility gate aprovados;
2320+
- build Next 16.2.10 com Webpack aprovado;
2321+
- integração Prisma/Postgres aprovada;
2322+
- integração HTTP production aprovou projects, clients, credentials, OpenAPI e schemas;
2323+
- smoke do servidor de desenvolvimento: home, health e OpenAPI responderam 200.
2324+
2325+
Pendências deliberadas:
2326+
2327+
- migrar aliases/externals de Remotion/FFmpeg para Turbopack antes de remover `--webpack`;
2328+
- adicionar `npm audit` como gate formal de CI;
2329+
- atualizar TypeScript/Prisma e demais libs somente em slices próprios, com seus testes de migração.

docs/adr/ADR-001-v2-modular-architecture.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,12 @@ renderer ◄── RenderInput materializado
3737
- Workers podem ser separados depois sem mudar o domínio.
3838
- Haverá convivência temporária entre v1 e v2 no mesmo repositório.
3939
- Imports entre fronteiras deverão ser fiscalizados por testes/lint em etapa posterior.
40+
41+
## Runtime baseline da Fundação
42+
43+
- Next.js 16.2.10 e React/React DOM 19.2.7.
44+
- Node.js 20.9+; desenvolvimento atual validado também em Node 24.
45+
- Dynamic route `params` é assíncrono em pages e route handlers.
46+
- Builds usam Webpack explicitamente enquanto os aliases de Remotion e o external de `fluent-ffmpeg` não forem migrados para Turbopack.
47+
- `serverExternalPackages` mantém `fluent-ffmpeg` fora do bundle de Server Components.
48+
- Dependências públicas devem manter `npm audit` sem vulnerabilidades antes de exposição do produto.

next-env.d.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
/// <reference types="next" />
22
/// <reference types="next/image-types/global" />
3+
import "./.next/types/routes.d.ts";
34

45
// NOTE: This file should not be edited
5-
// see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information.
6+
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.

next.config.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,16 @@ const path = require('path')
22

33
/** @type {import('next').NextConfig} */
44
const nextConfig = {
5-
experimental: {
6-
serverComponentsExternalPackages: ['fluent-ffmpeg'],
7-
},
5+
outputFileTracingRoot: __dirname,
6+
serverExternalPackages: ['fluent-ffmpeg'],
87
webpack: (config) => {
9-
config.externals = [...(config.externals || []), { 'fluent-ffmpeg': 'commonjs fluent-ffmpeg' }];
8+
config.externals = [...(config.externals || []), { 'fluent-ffmpeg': 'commonjs fluent-ffmpeg' }]
109
config.resolve.alias = {
1110
...(config.resolve.alias || {}),
1211
remotion: path.resolve(__dirname, 'node_modules/remotion'),
1312
'@remotion/player': path.resolve(__dirname, 'node_modules/@remotion/player')
1413
}
15-
return config;
14+
return config
1615
},
1716
}
1817
module.exports = nextConfig

0 commit comments

Comments
 (0)