Files
PessoaandClaude Opus 5 5e273433de feat(extensoes): o catálogo versionado — a fonte única da loja, com três pacotes reais
Decisão 1-A do DEC-007: uma fonte, duas saídas. `extensoes/` guarda os pacotes, e
`extensoes/catalogo.json` é DERIVADO deles — nunca escrito à mão, porque ele carrega o
sha256 e o tamanho que o host confere na instalação. Um catálogo digitado diverge no
primeiro pacote corrigido, e o sintoma aparece como `extension_digest_mismatch` na máquina
de um cliente, longe de quem fez a mudança.

O gerador valida cada pacote pelo SCHEMA REAL (parseManifest + checkCompatibility), não por
uma cópia das regras: gerador com regras próprias publica pacote que o host recusa.

TRÊS PACOTES REAIS, um por nicho, porque loja vazia é defeito e não estado — medido antes:
`grep -rl --include='*.json' '"declarative"' | wc -l` devolvia 0 no repositório inteiro.
Retorno de paciente (clínica), Carrinho abandonado (e-commerce) e Primeira semana no
atendimento (equipe). Eles usam portas diferentes entre si — só possível depois da ADR-0003.

ACHADO MEDIDO, e não óbvio: o host RECUSA origem com caminho. `parseCatalog` só aceita
origem exata porque ele mesmo monta `/packages/<sha256>.json` em cima dela. Consequência:
**GitHub Pages de projeto não serve** — `https://usuario.github.io/REPO` é recusado, e eu
descobri isso pelo teste falhando, não por leitura. A hospedagem precisa de domínio ou
subdomínio dedicado; qual deles é decisão do dono, e `EXTENSOES_ORIGEM` troca sem código.
A regra virou asserção no teste, com o porquê escrito.

O metadado de loja (quem publicou, repositório, etiquetas) vive em `extensoes/loja.json` e
entra só no catálogo: a autoria é afirmada por quem revisa, não por quem envia.

7 casos verdes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-18 06:53:04 -03:00
..