Origem: FEAT-014, decisões D1, D3, D6 e D9 (2026-09-25).
Lote Vinculado: BATCH-182.
Status: approved.
Autonomia: Nível 1 (supervisionado).
1. Contexto
As docs de ai-workspace/{pt-br,en}/docs/ estão defasadas. Exemplos: gestor.php tem 68 de 76 funções não documentadas; interface.php tem 57 de 58 não documentadas e 25 funções citadas que não existem; 14 bibliotecas e 9 módulos não têm doc. Falta um contrato que torne a defasagem mensurável e uma rotina que a reduza incrementalmente.
2. Contrato normativo
2.1 Taxonomia (nova árvore, convivendo com o legado até a migração)
Os nomes de pasta e as chaves são em inglês e idênticos nos dois idiomas. Isso garante o espelhamento por caminho e a URL pública /docs/... (D5).
ai-workspace/<idioma>/docs/
├── guides/ concepts/ whats-new/
└── reference/{libraries,modules,api,cli,hooks}/-
Espelhamento obrigatório:
pt-br/docs/<rel>.md↔en/docs/<rel>.md, mesmo caminho relativo (D3). -
URL pública:
docs/<rel sem .md>/. Umindex.mdvira a raiz da pasta. -
Docs legadas (sem frontmatter, fora da nova árvore) continuam no lugar e aparecem no audit como
legacy, até serem migradas por uma onda.
2.2 Frontmatter (YAML simples, chave: valor, listas com - item)
| Chave | Obrig. | Descrição |
|---|---|---|
title |
sim | Título exibido |
description |
sim | 1 frase, usada em índices, og e llms.txt |
section |
sim | guides | concepts | reference | whats-new (deve bater com a pasta) |
order |
não | Inteiro para ordenar no menu (padrão 100) |
visibility |
não | public (padrão) | restricted (reservado; o build ignora restricted até existir suporte) |
module |
não | id do módulo documentado |
sources |
sim em reference |
Lista de caminhos do repositório que a doc descreve |
verified_at |
sim | Hash curto do commit do Core contra o qual a doc foi conferida |
2.3 Bloco extraído
Docs de reference/libraries/ contêm o bloco:
C2FFUNCTIONREFERENCEBLOCK
-
É regenerado pelo comando.
-
O texto fora do bloco é autoral e preservado.
3. Escopo técnico
-
c2f docs:audit(cli/src/Commands/DocsAuditCommand.php+cli/src/Support/Docs/*). Diagnósticos por doc, cada um com severidade:-
frontmatter inválido ou ausente;
-
sectiondivergente da pasta; -
par de idioma ausente;
-
sourcesinexistentes; -
sourcesalteradas depois deverified_at(viagit log); -
bloco extraído desatualizado;
-
cobertura: biblioteca
gestor/bibliotecas/*.phpsemreference/libraries/<nome>.mde módulogestor/modulos/*semreference/modules/<id>.md; -
contagem de docs legadas.
-
Saída: ranking em tabela, com
--json,--limit=Ne--strict(exit 1 com erros).
-
-
c2f docs:extract <biblioteca>|--all:-
lê as funções de
gestor/bibliotecas/<nome>.phpvia tokenizer (nome, parâmetros com default, linha, resumo do docblock); -
reescreve o bloco nas duas línguas;
-
com
--check, só verifica, sem escrever.
-
-
Piloto (D6): três docs escritas do zero a partir da leitura do código, em pt-br e en:
-
guides/documentation.md: como escrever e publicar docs (contrato, fluxo, comandos); -
reference/libraries/modelo.md:gestor/bibliotecas/modelo.php; -
reference/modules/menus.md: módulomenus(administração, schema de itens, widget, templates, disponibilidade por perfil).
-
-
Índices
docs/index.md(pt-br e en) apresentando a nova árvore. -
Testes PHPUnit dos parsers de frontmatter, extração e diagnósticos (com fixtures em diretório temporário).
4. Critérios de Aceite
-
php cli/c2f.php docs:auditlista o ranking sem erro e marca as 3 docs piloto como válidas. -
php cli/c2f.php docs:extract modelo --checkretorna 0 após a extração. -
As 3 docs piloto existem em pt-br e en, com frontmatter válido e conteúdo conferido contra o código.
-
PHPUnit verde, incluindo os testes novos.
git diff --checklimpo.