Índice de Decisões Arquivadas
Para manter o arquivo corrente leve, as decisões DEC-001 a DEC-030 foram movidas para decisions-001-030.md, DEC-031 a DEC-040 para decisions-031-040.md, DEC-041 a DEC-050 para decisions-041-050.md, DEC-051 a DEC-060 para decisions-051-060.md, DEC-061 a DEC-070 para decisions-061-070.md, DEC-071 a DEC-080 para decisions-071-080.md, DEC-081 a DEC-090 para decisions-081-090.md e DEC-091 a DEC-095 para decisions-091-095.md. |
ID | Data | Status | Título Resumido |
|---|---|---|---|---|
| DEC-001 | 2026-05-25 | accepted | Adotar SDD repo-wide no conn2flow |
|
| DEC-002 | 2026-05-25 | accepted | Suportar Claude Code e GitHub Copilot | |
| DEC-003 | 2026-05-25 | accepted | 00-baseline-architecture.md como referência primária | |
| DEC-004 | 2026-05-25 | accepted | sdd/human-requests/ como intake não normativo | |
| DEC-005 | 2026-05-25 | accepted | Definir Plano 1 de sincronização de projetos | |
| DEC-006 | 2026-05-25 | accepted | Adotar fallbacks estruturados no sync de projetos | |
| DEC-007 | 2026-05-25 | accepted | Arquitetura baseada em schema contract JSON | |
| DEC-008 | 2026-05-25 | accepted | Padronizar idioma para coluna 'language' | |
| DEC-009 | 2026-05-25 | accepted | Loteamento dinâmico para max_allowed_packet | |
| DEC-010 | 2026-05-25 | accepted | Usar data-hooks.php para pipeline local/global | |
| DEC-011 | 2026-05-25 | accepted | Deleção controlada via chave no descritor de módulo | |
| DEC-012 | 2026-05-25 | accepted | Padronizar logs com log_disco() em log.php | |
| DEC-013 | 2026-05-25 | accepted | Widgets Envelopados com marcação de comentário HTML | |
| DEC-014 | 2026-05-25 | accepted | Seleção manual baseada em IDs textuais/slugs | |
| DEC-015 | 2026-05-25 | accepted | Persistência de templates HTML/CSS apenas no banco | |
| DEC-016 | 2026-05-25 | accepted | publisher-highlights estruturado análogo ao publisher | |
| DEC-017 | 2026-05-26 | accepted | Extensão de order_by no fields_schema do Highlights | |
| DEC-018 | 2026-05-26 | accepted | Curadoria manual de destaques via Fomantic Dropdown | |
| DEC-019 | 2026-05-28 | accepted | Componentização no PublisherHighlightsCustomDropdown | |
| DEC-020 | 2026-05-28 | accepted | Ciclo de vida isolado do dropdown manual | |
| DEC-021 | 2026-06-04 | accepted | Substituir dropdown por Autocomplete + Sortable.js | |
| DEC-022 | 2026-06-04 | accepted | Módulo Menus desacoplado e templates próprios | |
| DEC-023 | 2026-06-04 | accepted | Hierarquia multi-nível de menus e DnD bidimensional | |
| DEC-024 | 2026-06-05 | accepted | Aba de Variáveis no Menus, simulação e hover CSS | |
| DEC-025 | 2026-06-05 | accepted | Tipo de Item Publicador no menus e correções | |
| DEC-026 | 2026-06-05 | accepted | Criação do Módulo de Galerias de Imagens | |
| DEC-027 | 2026-06-05 | accepted | Contrato de Target em Link-Custom e [[item#target]] | |
| DEC-028 | 2026-06-05 | accepted | Bloco item-separator em templates de Menus | |
| DEC-029 | 2026-06-05 | accepted | Controles de exibição e resolução de imagem em Galerias | |
| DEC-030 | 2026-06-05 | accepted | Comportamento dinâmico em JS público dos widgets | |
| DEC-031 | 2026-06-05 | accepted | Alvo/Variáveis Globais/Modos de IA do módulo Galerias → archive | |
| DEC-032 | 2026-06-08 | accepted | Compilação Tailwind CSS CLI no core e pipeline de release → archive | |
| DEC-033 | 2026-06-08 | accepted | Estrutura de testes Unit/Integration/E2E na raiz → archive | |
| DEC-034 | 2026-06-08 | accepted | Correção HTML (Quill), automação de campos e v2.8.0 → archive | |
| DEC-035 | 2026-06-09 | accepted | Unificação do Pré-visualizador de HTML Externo nos Módulos → archive | |
| DEC-036 | 2026-06-09 | accepted | Otimização do CSS Automático com Filtragem de Redundâncias do Tailwind → archive | |
| DEC-037 | 2026-06-10 | accepted | Links Individuais, Controles de Exibição de Galerias e Correções Visuais → archive | |
| DEC-038 | 2026-06-10 | accepted | Autocomplete de Páginas em Galerias, Ajuste de Menu e Preparação de Release → archive | |
| DEC-039 | 2026-06-10 | accepted | Ajuste do Modo de IA de Destaques e Preservação de Template Modificado → archive | |
| DEC-040 | 2026-06-10 | accepted | Resolução de Framework CSS e Variáveis de Destaques de Modelo Modificado → archive | |
| DEC-041 | 2026-06-11 | accepted | Centralização de Injeção de Recursos de Widgets e Módulo Publicador Índice → archive | |
| DEC-042 | 2026-06-12 | accepted | Reestruturação e Otimização de Dados, Sincronização e Visibilidade de Logs → archive | |
| DEC-043 | 2026-06-13 | accepted | Diretrizes de Autenticação, 2FA e JWT (Slices 1–2) → archive | |
| DEC-044 | 2026-06-13 | accepted | Integração de Autenticação, 2FA, Login Social e Endurecimento (Slices 3–6) → archive | |
| DEC-045 | 2026-06-13 | accepted | Login sem Senha por E-mail e Auxílio de Configuração OAuth → archive | |
| DEC-046 | 2026-06-13 | accepted | Segurança no Acesso e Geração de Chaves de API → archive | |
| DEC-047 | 2026-06-13 | accepted | Aprimoramento do Editor HTML Visual (Design) → archive | |
| DEC-048 | 2026-06-13 | accepted | Aprimoramento do Editor HTML Visual (Execução) → archive | |
| DEC-049 | 2026-06-13 | accepted | Refinamentos no Editor HTML Visual (Toolbar e Children) → archive | |
| DEC-050 | 2026-06-13 | accepted | Novas Operações Estruturais no Editor HTML Visual (Copy/Paste/Wrap) → archive | |
| DEC-051 | 2026-06-13 | accepted | Painel Auxiliar de Formatação Visual (Styler) → archive | |
| DEC-052 | 2026-06-13 | accepted | Inversão e Expansão do Painel Auxiliar de Formatação Visual (Styler 20 grupos) → archive | |
| DEC-053 | 2026-06-14 | accepted | Melhorias Visuais e Funcionais do Editor HTML Visual (Fundo/Deseleção) → archive | |
| DEC-054 | 2026-06-14 | accepted | Ajustes Finais no Pré-visualizador de Widgets e Elemento Fantasma → archive | |
| DEC-055 | 2026-06-15 | accepted | Correções e Melhorias no Módulo publisher-index → archive | |
| DEC-056 | 2026-06-15 | accepted | Controle de Métricas no publisher-index e suíte de testes MySQL → archive | |
| DEC-057 | 2026-06-15 | accepted | Curadoria Manual no publisher-index, Novos Templates e Variáveis Inline → archive | |
| DEC-058 | 2026-06-15 | accepted | Prefixagem Dinâmica de URL Raiz para Campos de Imagem nos Widgets → archive | |
| DEC-059 | 2026-06-16 | accepted | Correção de Caracteres Especiais nos Widgets, Preview e Refatoração → archive | |
| DEC-060 | 2026-06-16 | accepted | Correção de Temporal Dead Zone e Overlays no Editor Visual → archive |
| DEC-061 | 2026-06-22 | accepted | Refatoração dinâmica do módulo Forms com html-editor (req-049 / BATCH-049).... → archive |
| DEC-062 | 2026-06-22 | accepted | Correções do visual editor, colisão de abas e novos templates para Forms (req... → archive |
| DEC-063 | 2026-06-22 | accepted | Escape HTML global no editor e separador de valor/rótulo nos selects do Forms... → archive |
| DEC-064 | 2026-06-23 | accepted | Sincronização Declarativa de Recursos, Deleção e Atualização Forçada — Módulo... → archive |
| DEC-065 | 2026-06-24 | accepted | Correção de Tipagem e Validação de Perfil Anônimo em Menus Condicionais (req-... → archive |
| DEC-066 | 2026-06-25 | accepted | Sistema de Recuperação e Engenharia Reversa de Recursos (Pull System) (req-05... → archive |
| DEC-067 | 2026-06-25 | accepted | Atualização de Versões dos Componentes do GitHub Actions (req-064 / BATCH-064... → archive |
| DEC-068 | 2026-06-29 | accepted | Registro Dinâmico de Widgets do Sistema e Carregamento sob Demanda no Editor ... → archive |
| DEC-069 | 2026-06-29 | accepted | Correção de Exceção de CodeMirror Indefinido no Módulo de Formulários (req-06... → archive |
| DEC-070 | 2026-06-29 | accepted | Correção de Causa-Raiz das Abas Travadas e Widget Vazio no Módulo de Formulár... → archive |
| DEC-071 | 2026-06-29 | accepted | Alinhamento Visual do CRUD e Painel de Conteúdo de Formulários com Menus (req... → archive |
| DEC-072 | 2026-06-29 | accepted | Integração do Módulo de Formulários com o Controlador de Submissão da Bibliot... → archive |
| DEC-073 | 2026-06-30 | accepted | Parametrização de Scripts de Widget no Editor HTML e Dinamização do Mapeament... → archive |
| DEC-074 | 2026-06-30 | accepted | Novos Tipos de Campos, Limites via Campo "Opções" e Melhoria Progressiva no M... → archive |
| DEC-075 | 2026-06-30 | accepted | Remoção do Campo e Metadado "hosting_plan" no Módulo de Planos de Assinatura ... → archive |
| DEC-076 | 2026-06-30 | accepted | Parametrização Dinâmica de E-mails e Integração de Estágios de Serviço em Pla... → archive |
| DEC-077 | 2026-06-30 | accepted | Dinamização Completa de Planos e Saneamento de Hardcodes no Módulo Subscripti... → archive |
| DEC-078 | 2026-07-09 | accepted | Dashboard Site Toolbar, Agendamento de Páginas e Extensões do Editor HTML (re... → archive |
| DEC-079 | 2026-07-10 | accepted | Desacoplamento de Scripts do Iframe e Mapeamento Inteligente de Variáveis no ... → archive |
| DEC-080 | 2026-07-10 | accepted | Correções no Live Editor: Trava de Widgets, Submenu do Painel "+" e Isolament... → archive |
| DEC-081 | 2026-07-10 | accepted | Mapeamento no Pai de Widgets Múltiplos, Image Picker, Filtro/Agrupamento de M... → archive |
| DEC-082 | 2026-07-10 | accepted | Integração de Modelos de Sessão e Assistente IA no Live Editor (req-080 / BAT... → archive |
| DEC-083 | 2026-07-11 | accepted | CodeMirror no Assistente IA, Correção do Save Intermitente, Dropdowns da Tool... → archive |
| DEC-084 | 2026-07-13 | accepted | Carregamento de Widgets, Seleção de Modelos, Restauração de Backups e Isolame... → archive |
| DEC-085 | 2026-07-13 | accepted | Correções de Homologação do Live Editor (BATCH-083). Três correções pós-BATCH... → archive |
| DEC-086 | 2026-07-13 | accepted | Restauração de Backup Server-Side e Preview de Dispositivo com JS do Site (BA... → archive |
| DEC-089 | 2026-07-15 | accepted | Criação dos Módulos/Widgets forms-search (Formulários de Busca) e pages-in... → [archive](file:///[REDACTED]) | | DEC-090 | 2026-07-17 | accepted | Transição do Gerenciador de Arquivos para Árvore Física no Disco e CRUD Compl... → [archive](file:///[REDACTED]) | | DEC-091 | 2026-07-20 | accepted | Renderização de Variáveis/Widgets no Editor HTML Clássico e Preview, igual à ... → [archive](file:///[REDACTED]) | | DEC-092 | 2026-07-29 | accepted | Mapeamento visual de mídia/documento embutido, proteção de eventos, suporte h... → [archive](file:///[REDACTED]) | | DEC-093 | 2026-07-30 | accepted | Correções de homologação do BATCH-096, separação da edição avançada e embeds ... → [archive](file:///[REDACTED]) | | DEC-094 | 2026-07-30 | accepted | Área de transferência persistente do Editor Visual (demanda direta do Engenhe... → [archive](file:///[REDACTED]) | | DEC-095 | 2026-07-30 | accepted | Upload e gestão de pastas liberados no modo picker doadmin-arquivos(deman... → [archive](file:///[REDACTED]) | | DEC-096 | 2026-07-30 | accepted | Mídia embutida: 403 em arquivos com espaço, streaming por HTTP Range e dimens... → [archive](file:///[REDACTED]) | | DEC-097 | 2026-07-30 | accepted | Embed sem arquivo escolhido não emite atributo de fonte vazio (homologação / ... → [archive](file:///[REDACTED]) | | DEC-098 | 2026-07-30 | accepted | Memória da última pasta no modo picker doadmin-arquivos(demanda direta do... → [archive](file:///[REDACTED]) | | DEC-099 | 2026-07-30 | accepted | Filtro de módulos no menu principal do gestor (demanda direta do Engenheiro C... → [archive](file:///[REDACTED]) | | DEC-100 | 2026-07-31 | accepted | Extensão da biblioteca PayPal (PHP) e asset JS para Checkout Transparente e T... → [archive](file:///[REDACTED]) | | DEC-101 | 2026-08-03 | accepted | Navegacao por foco real nos resultados visiveis dos dois filtros de modulos (BATCH-105). → [archive](file:///[REDACTED]) | | DEC-103 | 2026-08-06 | accepted | Painéis fixos opcionais do editor visual (Sidebar de CSS e Barra de Navegação), expansão do styler e ação Substituir (BATCH-106). → [archive](file:///[REDACTED]) | | DEC-104 | 2026-08-13 | accepted | Isenção de crawlers, verificação silenciosa de cookie, OpenGraph no core e auditoria de CSRF em formulários submetidos por código (BATCH-109). → [archive](file:///[REDACTED]) | | DEC-105 | 2026-08-13 | accepted | Metadados de compartilhamento por página, aba de SEO no Editor HTML, painel de Configurações na Editbar e sitemap.xml incremental (BATCH-110). → [archive](file:///[REDACTED]) | | DEC-106 | 2026-08-13 | accepted | Reversão do bloqueio de analytics e fim do laço de verificação de cookie; tokens de robô em duas camadas (CR-001 / BATCH-111). Reverte DEC-104 §4. → [archive](file:///[REDACTED]) | | DEC-107 | 2026-08-14 | accepted | Sitemap em assets, correção do 301, aba SEO no publisher-pages, isolamento do painel da Editbar e meta tags de SEO (BATCH-112). → [archive](file:///[REDACTED]) | | DEC-108 | 2026-08-14 | accepted | Extração incremental dos bridges privados e preservação temporária da cobertura de[REDACTED]-system(BATCH-115). → [archive](file:///[REDACTED]) | | DEC-109 | 2026-08-14 | accepted | Bundle Tailwind canônico e opt-in por página para impedir colisão entre sidecars independentes (BATCH-115). → [archive](file:///[REDACTED]) | | DEC-110 | 2026-08-14 | accepted | Governança de bundles Tailwind por recurso e compilação incremental (BATCH-114). → [archive](file:///[REDACTED]) | | DEC-111 | 2026-08-17 | accepted | Política de captura de CSS compilado na Editbar e delta contra cascata real (BATCH-117). → [archive](file:///[REDACTED]) | | DEC-112 | 2026-08-17 | accepted | Resolução de conflitos de display em layouts Tailwind e filtro fino de theme (BATCH-118). → [archive](file:///[REDACTED]) | | DEC-113 | 2026-08-18 | accepted | Arquitetura híbrida de layouts Tailwind e coexistência de componentes de interface (BATCH-119). → [archive](file:///[REDACTED]) | | DEC-114 | 2026-08-19 | accepted | Migração estruturada de telas públicas de identidade para Tailwind puro (BATCH-121). → [archive](file:///[REDACTED]) | | DEC-115 | 2026-08-20 | accepted | Customização de rótulos e ordenação de módulos administrativos em modulos-grupos (BATCH-125). | | DEC-116 | 2026-08-21 | accepted | Atualização Global da Documentação, Readmes, Changelogs e Workflows de Release (Gestor v2.9.39 e Instalador v1.5.6) (BATCH-127). | | DEC-117 | 2026-08-21 | accepted | Correção de Reload em Erro de CSRF/Sessão, Mapeamento de Ícones de Projetos, Alternância de Botões de Menu e Saneamento do Lucide (BATCH-127). | | DEC-118 | 2026-08-24 | accepted | Extrator semântico de tokens do Tailwind para o Assistente de IA no Editor HTML (BATCH-129). | | DEC-119 | 2026-08-28 | accepted | Correspondência por nome sanitizado no controlador estático e desempate de colisão sem espaço (BATCH-143). | | DEC-120 | 2026-08-29 | accepted | Aparência de estado resolvida por CADEIA DE RECURSOS no galleries, com o CSS acompanhando as classes (BATCH-147). | | DEC-121 | 2026-08-29 | accepted | A telavariablesnão oferece ações sobre a tabelamodulos; tipo de campo passa a sereditor-texto(BATCH-147). | | DEC-122 | 2026-08-29 | accepted | Assets de terceiros versionados emgestor/assets/vendor/, com verificação de certificado inegociável no download (BATCH-146). | | DEC-123 | 2026-08-29 | accepted | Uma biblioteca local inclui também o que ela própria pede: chavearquivosno registro (BATCH-148). | | DEC-124 | 2026-08-29 | accepted | Fontes hospedadas pelo projeto, com filtro de subset eunicode-rangepreservado (BATCH-148). | | DEC-125 | 2026-08-29 | accepted | Minificar é build; escolher o arquivo é resolução — nunca transformar o corpo na entrega (BATCH-148). | | DEC-126 | 2026-08-29 | accepted | Ocss:rebuildregenera apenas recursos editados online (user_modified=1`) (BATCH-149). |
| DEC-127 | 2026-08-29 | accepted | Assets locais também no layout administrativo Tailwind, com guarda de versão (BATCH-149). |
| DEC-128 | 2026-08-30 | accepted | Dependências Tailwind de sistema: declarada falha alto, automática degrada em silêncio (BATCH-150). |
| DEC-132 | 2026-10-04 | accepted | Painel em Tailwind por variantes que guardam os ganchos do JS e ponte vanilla para a API do Fomantic (BATCH-227). |
DEC-116aDEC-122arquivadas em decisions-114-122.md.
DEC-123 - 2026-08-29 - accepted
Uma biblioteca local inclui também o que ela própria pede (BATCH-148).
O BATCH-146 migrou o CSS do Fomantic para o disco e os ícones do layout administrativo sumiram. O
semantic.min.css pede as fontes por caminho RELATIVO a ele próprio; servido do CDN isso resolvia
contra o domínio do CDN, servido do disco passou a resolver contra vendor/fomantic-ui/2.9.4/ — onde
os arquivos não existiam.
Decisões:
-
O registro ganha a chave
arquivos: dependências que a biblioteca pede sozinha (fontes, sprites) e que NÃO viram tag. Migrar apenas o que aparece em<link>/<script>deixa a metade invisível para trás, e a falha é visível para o usuário e silenciosa para o servidor. -
A régua é "tudo que ela pede está local", não "os arquivos que eu listei estão local". Foram 22 arquivos no caso do Fomantic — e o Lato veio junto, eliminando mais uma busca externa.
DEC-124 - 2026-08-29 - accepted
Fontes hospedadas pelo próprio projeto, com filtro de subset (BATCH-148).
Um <link> para [REDACTED] faz o navegador de cada visitante entregar ao Google IP,
Referer e User-Agent antes de qualquer consentimento. Precedente: Landgericht München I, 2022
(Az. 3 O 17493/20). Licença não é obstáculo: OFL e Apache 2.0 permitem hospedar.
Decisões:
-
O comando descobre as URLs nos recursos em vez de exigir uma lista: acrescentar uma família ao layout e rodar o comando basta, e a declaração não pode divergir do que os layouts realmente pedem.
-
User-Agent moderno é requisito, não detalhe: o Google decide o formato por ele. Sem um moderno, devolve
ttf— várias vezes maior, sem a compressão que justifica o formato web. -
Filtra subsets, preserva
unicode-range: das 78 faces devolvidas, 50 eram cirílico, grego e vietnamita. Mas ounicode-rangedas 28 restantes é preservado — é ele que faz o navegador baixar só o subset necessário. Removê-lo transformaria a economia em desperdício de banda do visitante. -
Escreve na FONTE do projeto, não no espelho:
resolve()preferepath_tests, mas o pipeline lê e o deploy publicapath. Gravar no espelho faria o trabalho sumir no próximo sync, sem erro. -
O
@importera o pior caso: no CSS de destaques, além de vazar dados, ele BLOQUEAVA a renderização até a resposta do Google chegar.
DEC-125 - 2026-08-29 - accepted
Minificar é build; escolher o arquivo é resolução — nunca transformar o corpo na entrega (BATCH-148).
A sugestão original era minificar no arquivo-estatico.php. O controlador ganhou no BATCH-100
Content-Length, Accept-Ranges, ETag e 304, e os quatro dependem de o corpo entregue ser
exatamente o arquivo em disco.
Decisões:
-
As duas responsabilidades ficam separadas:
c2f assets:minifyproduz o derivado no build;arquivo_estatico_preferir_minificado()apenas ESCOLHE qual arquivo enviar. O envio continua sendo um envio de arquivo, e as quatro garantias seguem corretas — medido:Content-Length17305 batendo byte a byte,304noIf-None-Match,206com 100 bytes noRange. -
O minificado é derivado, irmão de
css_precompiled(CR-002): gerado por build, nunca editado à mão, sempre recalculável, com procedência (sha1do fonte) registrada em manifesto. -
A escolha acontece DEPOIS da autorização: o containment continua decidido num lugar só.
-
Em desenvolvimento serve o fonte: depurar com nomes destruídos pelo
--mangleé pior que baixar alguns KB a mais — e isso torna inofensivo o derivado envelhecer enquanto alguém edita, porque quem edita está em dev. -
node --checkobrigatório antes de gravar: sintaxe inválida quebraria a tela sem sinal no servidor, e o arquivo de autoria — maior, porém correto — é sempre a alternativa preferível. O limite fica declarado: isso valida sintaxe, não semântica. -
A etapa entra no pipeline, não fatal: fora dele viraria "alguém precisa lembrar", e derivado velho serviria código antigo com cara de novo. Máquina sem Node continua rodando o pipeline.
DEC-126 - 2026-08-29 - accepted
O css:rebuild regenera apenas o que foi editado ONLINE (BATCH-149).
A tela /perfil-usuario/ apareceu sem estilo depois do BATCH-148. Dois defeitos somados, ambos meus:
-
regenerarFontesDeclaradas()só lia<id>.json(metadado por recurso). Operfil-usuarionão tem esse arquivo: as 15 páginas dele declaramtailwind_sourcesno MANIFESTO DO MÓDULO. A função devolvia lista vazia e a regeneração descartava as utilities montadas em PHP/JS. -
Mesmo com as fontes lidas, o resultado (13.429 bytes) continuava menor que o do build offline (25.276), porque o
resources:synccompila com o contexto completo do projeto.
Decisões:
-
O escopo do
css:rebuildéuser_modified = 1: o problema que o req-141 descreve existe SÓ quando o HTML do banco divergiu do HTML do disco. Parauser_modified = 0, o build offline já compilou do MESMO HTML, com mais contexto. Regenerar ali não corrige nada e troca um CSS completo por um mais pobre. Medido: 17 de 1.446 recursos precisavam de regeneração; os outros 1.429 eram dano puro. -
--todoscontinua alcançando o acervo, para auditoria e recuperação. -
As fontes declaradas são lidas também do manifesto do módulo, mantendo o containment (
realpathpreso à raiz do gestor): a origem da declaração muda, a guarda não. -
A lição registrada: uma etapa de pipeline que REESCREVE derivados precisa de escopo mínimo demonstrável. A minha reescrevia 1.446 registros para consertar 17, e o excesso era invisível — o comando reportava sucesso.
DEC-127 - 2026-08-29 - accepted
Assets locais também no layout administrativo Tailwind, com guarda de versão (BATCH-149).
O inventário do BATCH-146 procurou dist/semantic.min.css e não viu
dist/components/icon.min.css — outro caminho do mesmo pacote, usado pelo layout Tailwind do gestor.
O lucide estava ao lado, também por CDN.
Decisões:
-
fomantic-iconé entrada própria no registro: o layout precisa só do componente de ícones, e carregar os 2,1 MB do Fomantic inteiro para desenhar ícone seria pior que o CDN. As fontes vão junto (DEC-123), com o relativo correto paradist/components/(../themes/...). -
Recurso HTML não chama PHP, então o layout escreve o caminho com a versão dentro. O risco é a versão do registro e a do layout divergirem, produzindo 404 silencioso — exatamente a falha dos ícones. Por isso existe teste que compara as duas.
-
Teste que exige o arquivo no disco para cada entrada do registro:
assets_externos_url()cai no CDN em silêncio quando o local falta; a suíte transforma esse silêncio em falha.
DEC-128 - 2026-08-30 - accepted
Dependências Tailwind de sistema: declarada falha alto, automática degrada em silêncio (BATCH-150).
O modal de alerta (interface_alerta()) aparecia sem estilo na tela de login do Photon (/photon/signin/): botão com texto branco sobre fundo transparente, sem sombra e sem limite de largura (7 de 12 classes sem regra). O CSS do modal existia compilado em banco e disco (4.694 B), mas não pertencia à compilação daquela página. O modal é injetado dinamicamente em runtime, e a compilação por recurso dependia de declaração manual em tailwind_dependencies em cada página — uma lista de exceções que bastou falhar em acessar-sistema para quebrar a interface.
Ao transformar os três modais de sistema injetados em runtime (interface-alerta-modal-tailwind, interface-carregamento-dimmer-tailwind, interface-confirmacao-exclusao-modal-tailwind) em dependências automáticas de toda página Tailwind no compilador (tailwind_recursos_dependencies()), a compilação estrita abortou todo o build do Photon com erro fatal, pois o projeto local traz os componentes em pt-br e não em en.
Decisões:
-
Modais de sistema injetados em runtime são dependência automática de toda página Tailwind: nenhuma página precisa declarar manualmente os componentes que o próprio core pode injetar por função global (
interface_alerta(), dimmers ou confirmações). -
Distinção de severidade entre dependência declarada e automática:
-
Dependência declarada pelo desenvolvedor continua falhando alto com erro fatal: a ausência indica erro de digitação, dependência quebrada ou caminho incorreto no manifesto/metadado.
-
Dependência automática injetada pelo framework é marcada como
opcional: truee degrada em silêncio: quem a inseriu foi o sistema e não o autor da página. Em ambientes/idiomas onde o componente ainda não existe ou não foi sincronizado (ex: ausência de variantesen), a compilação segue sem abortar a esteira.
-
-
Guarda de sincronia na suíte de testes: teste unitário compara o mapa de injeção em runtime de
interface_componentes_incluir()com a lista de modais automáticos do compilador, impedindo que um novo modal de sistema nasça sem estilo no Tailwind.
DEC-129 - 2026-10-03 - accepted
-
Contexto: req-215 (parte do core da REQ-096 do
conn2flow-site). Na arquitetura "painel no Central, execução no cliente", o painel precisa de efeitos que só existem no site do cliente. -
Decisão: o canal assinado ganha a ação
rotina. O Central pede uma rotina por nome; o cliente só executa o que o manifesto da cópia de execução declarou emroutines. Tabelas do core continuam fora do canal de banco: o painel do Central as usa para se desenhar. -
Decisão: cópia de execução (
scope: distributed-execution) só age quando o módulo (ou um deactive_with) está contratado no.envda instalação. -
Consequência: regra de negócio de cada efeito fica no projeto (no
conn2flow-site, a bibliotecasite-local); o core só transporta e confere.
DEC-130 - 2026-10-03 - accepted
-
Contexto: req-216 (parte do core da REQ-097 do
conn2flow-site). O Engenheiro Chefe definiu que o acesso aos módulos distribuídos vem do perfil do usuário no Central, sem lista por cliente, e que a inadimplência tem quatro estados. -
Decisão: o cliente lê o catálogo do próprio pacote (
project/distributed-modules.json); a lista do.envfica opcional. -
Decisão: o canal ganha a ação
estado. O projeto fornece o estado (account-provider); o core transporta, assina, guarda no cliente e aplica: carência com aviso, suspenso só de visualização (garantido no canal), encerrado fora do painel. -
Decisão: módulo que já executou no cliente continua executando, para não derrubar pós-venda.
-
Consequência: a regra de cobrança fica no projeto; o core não conhece assinatura nem plano.
DEC-131 - 2026-10-03 - accepted
-
Contexto: req-217, pedido do Engenheiro Chefe: mesmo com a chave do canal vazada, o [REDACTED] ser identificado.
-
Decisão: o segredo da instalação só abre sessão (
abrir). Quem recebe confirma a origem ligando para o endereço que ele tem cadastrado (confirmar) e só então entrega uma chave de sessão aleatória de 15 minutos; requisições comuns são assinadas com ela (X-C2F-Session). -
Decisão: o endereço de retorno nunca vem da requisição:
central-urlno cliente,urldo cadastro no Central. -
Consequência: Central e sites precisam ser publicados juntos;
MODULO_DISTRIBUIDO_ORIGIN_CHECK=falsevolta ao canal anterior durante a transição. Próximo passo proposto: chaves assimétricas (Ed25519).
DEC-132 - 2026-10-04 - accepted
-
Contexto: req-219. O editor HTML tem cerca de 10 mil linhas de JavaScript sobre a API do Fomantic (
dropdown,modal,tab…) e o Engenheiro Chefe pediu o painel em Tailwind, sem jQuery onde der. -
Decisão: a troca é por variante de componente (
<id>-tailwind, escolhida porinterface_componente_variante()), que guarda marcadores, ids, nomes,data-tabe as classes-gancho do JS. As classesui …restantes são só ganchos, sem CSS na página. Um teste compara cada variante com a original. -
Decisão: onde o Fomantic não está, a biblioteca de controles (
controles.js, sem framework) responde pela API do Fomantic usada no core (ponte). O JS legado passa a vanilla aos poucos, sem quebrar as duas variantes no meio do caminho. -
Decisão: estilo de elemento gerado por PHP ou JS vai em classe
c2fc-*própria (controles.css); utilities do Tailwind só no HTML dos recursos, que é o que o compilador enxerga. -
Decisão: página Tailwind com o editor usa bundle (
tailwind_bundle+$_GESTOR['tailwind-page-bundle'] = true); sem o flag, os sidecars dos componentes invertem as responsivas. -
Consequência: cada módulo migra trocando layout e páginas e ganhando as variantes que faltam; a fatia 6 segue esse caminho por grupo de módulos.