DEC-001 - 2026-05-25 - accepted
Adotar SDD repo-wide no conn2flow como camada de controle para mudanças novas, sem tentar substituir a arquitetura vigente do repositório.
DEC-002 - 2026-05-25 - accepted
Suportar os dois executores de IA no mesmo repositório:
-
Claude Code via
CLAUDE.mde.claude/ -
GitHub Copilot via
.github/
Os dois devem convergir para os mesmos artefatos em sdd/.
DEC-003 - 2026-05-25 - accepted
Tratar sdd/00-baseline-architecture.md como referência primária do estado atual aprovado do legado. Mudanças futuras devem declarar o delta em relação a essa base, em vez de assumir que o legado pode ser descartado.
DEC-004 - 2026-05-25 - accepted
Tratar sdd/human-requests/ como intake humano não normativo, com resolução padrão por CURRENT.md, depois README.md, depois o arquivo .md mais recente.
DEC-005 - 2026-05-25 - accepted
Definir como próximo intake funcional esperado o Plano 1, focado em tarefas e scripts de sincronização de projetos.
DEC-006 - 2026-05-25 - accepted
Adotar fallbacks estruturados e mapeamento dinâmico na sincronização e atualização de projetos específicos:
-
Usar
path_testscomo fallback automático paratargetnosynchronize-project.sh. -
Derivar o
dockerPathsubstituindo o prefixo local por[REDACTED]se ausente noupdates-manager-database.sh. -
Isolar os dados dinâmicos do projeto de destino no
sync-core-to-project.shpor meio de exclusões no rsync.
DEC-007 - 2026-05-25 - accepted
Adotar arquitetura baseada em contrato de esquema (schema contract) por meio de um arquivo central compilado db/data/schema-metadata.json, gerado a partir do nó "tabela" dos descritores de módulos (ex: admin-paginas.json) e do descritor global dedicado tables_config.json. O script de deploy consumirá apenas esse contrato, eliminando códigos hardcoded.
DEC-008 - 2026-05-25 - accepted
Padronizar a coluna identificadora de idioma de banco de dados e arquivos de recursos de desenvolvimento para o nome unificado language em todas as tabelas (substituindo o termo legado linguagem_codigo). Esta padronização exige também a atualização/migração de todos os módulos ativos do sistema que atualmente consomem a coluna antiga, garantindo a compatibilidade de runtime do Conn2Flow.
DEC-009 - 2026-05-25 - accepted
Implementar uma estratégia de loteamento dinâmico com threshold de segurança de 30% em relação ao limite max_allowed_packet obtido em tempo de execução, dividindo payloads volumosos de HTML/CSS em chunks seguros para evitar estouro de buffer de rede.
DEC-010 - 2026-05-25 - accepted
Utilizar a nomenclatura dedicada data-hooks.php para a execução sequencial em pipeline de ganchos locais nos módulos ou globais, garantindo isolamento em relação aos hooks de execução do sistema (hooks.php).
DEC-011 - 2026-05-25 - accepted
Substituir deleções automáticas de registros órfãos por uma estratégia imperativa de deleção controlada via chave dedicada "deletar" declarada nos arquivos descritores de metadados de recursos de desenvolvimento, evitando exclusão acidental de dados de diferentes projetos de banco de dados.
DEC-012 - 2026-05-25 - accepted
Padronizar todo o registro de mensagens de logs dos scripts de sincronização de banco e geração de dados para utilizar exclusivamente a biblioteca oficial do sistema log.php e sua função nativa log_disco(), eliminando implementações duplicadas ou logs soltos.
DEC-013 - 2026-05-25 - accepted
Adotar a arquitetura de Widgets Envelopados (Wrappers) usando comentários HTML no formato <!-- widgets#IDENTIFICADOR < --> ... <!-- widgets#IDENTIFICADOR > --> para interceptar marcações estáticas e utilizá-las como templates de renderização dinâmica no core do Conn2Flow.
DEC-014 - 2026-05-25 - accepted
Fica decidido que a vinculação entre os blocos de destaques (publisher_highlights) e os tipos de publicação (publisher), bem como a seleção manual de publicações no JSON de curadoria (fields_schema->selected_items), utilizará estritamente IDs textuais/alfanuméricas (ex: 'noticias' para o tipo de publicação, e os slugs/id das publicações). Não serão utilizados IDs numéricos auto-incrementados de banco de dados (id_publisher ou id_publisher_pages) nessas relações para manter a consistência de runtime do Conn2Flow.
DEC-015 - 2026-05-25 - accepted
A estrutura de template HTML e CSS do módulo publisher-highlights será armazenada diretamente em colunas específicas (html e css) da tabela publisher_highlights, sendo totalmente editável via painel administrativo usando o html-editor.php. Em tempo de execução, o renderizador dinâmico do widget lerá o template estritamente do banco de dados — sem fallback para o mockup do arquivo físico. Se as colunas estiverem vazias ou o registro não existir, o widget retornará vazio, impedindo que mockups estáticos de preview sejam indevidamente exibidos em produção.
DEC-016 - 2026-05-25 - accepted
O desenvolvimento do módulo publisher-highlights no core do Conn2Flow espelhará a estrutura básica do módulo publisher original (como organização de pacotes, deploy automático via arquivo descritor de módulo, registro de templates locais na pasta de recursos por idioma, e a tela de edição CRUD). A tela de edição CRUD removerá o campo path_prefix e adicionará a vinculação dinâmica de placeholders @[[item#...]]@ com as colunas reais do publicador selecionado.
DEC-017 - 2026-05-26 - accepted
Estender o fields_schema do módulo publisher-highlights com a chave opcional order_by para configurar a ordenação da regra "Automática (últimas publicações)". Valores aceitos:
-
title_asc->ORDER BY p.nome ASC -
title_desc->ORDER BY p.nome DESC -
date_asc->ORDER BY p.data_modificacao ASC -
date_desc(padrão, retrocompatível) ->ORDER BY p.data_modificacao DESC
A ordenação é ignorada quando rule = 'manual', pois nesse caso a ordem é definida pelo array selected_items. Esta extensão é registrada em 03-wrapped-widgets-and-publisher-highlights.md.
DEC-018 - 2026-05-26 - accepted
Para a regra de alimentação "Manual" do publisher-highlights, substituir a entrada via <textarea> com slugs por linha por um dropdown Fomantic UI .ui.multiple.search.selection.dropdown populado dinamicamente por AJAX a partir das páginas ativas do publicador selecionado. A serialização final para o fields_schema.selected_items continua sendo a lista ordenada de slugs textuais, mantendo a compatibilidade com DEC-014 e com o widget renderer.
DEC-019 - 2026-05-28 - accepted
Decidiu-se componentizar a lógica do dropdown manual do Fomantic UI para busca e seleção múltipla de itens em uma classe Javascript reutilizável PublisherHighlightsCustomDropdown no arquivo gestor/assets/interface/jquery-custom-dropdown.js, removendo a lógica inline do módulo e centralizando as responsabilidades de inicialização (init), reconfiguração (reset), busca incremental (search), hidratação (hydrate), atualização visual (refresh) e tradução contextual das mensagens de aviso baseada no idioma ativo do gestor.
DEC-020 - 2026-05-28 - accepted
A integração do dropdown manual de itens curados no módulo publisher-highlights controlará a inicialização do componente visual sob demanda (apenas quando o modo manual estiver visível) para evitar conflitos de ciclo de vida e concorrência com o formulário. O fluxo de busca é desmembrado em duas fases manuais (busca incremental e hidratação na edição/clonagem), com eventos de escuta direta (change e click) para manter a perfeita sincronização com o preview de widget e com o fields_schema.selected_items persistido no banco de dados.
DEC-022 - 2026-06-04 - accepted
Inicialização do módulo menus (req-015 / BATCH-015), a partir de uma cópia do módulo publisher-highlights. Decisões aprovadas pelo Engenheiro Chefe nesta rodada:
-
Desacoplamento do publisher: o módulo
menusnasce sem nenhum acoplamento ao módulopublisher. A tabelamenus(migração20260701110000_create_menus_table.php) é análoga apublisher_highlightsporém sem a colunapublisher_id. O backendmenus.phpremove validação obrigatória, gravação e leitura depublisher_id, e remove as funções/AJAX acoplados ao publisher (publisher-load). Mantém o CRUD dename/fields_schema/html/csse otemplate_iddentro defields_schema(DEC-014/DEC-015 preservados). -
Itens do menu = páginas do site: a curadoria manual de itens (
fields_schema.selected_items, lista ordenada de slugs textuais) passa a referenciar diretamente páginas ativas da tabelapaginas(sempublisher_pages). Os AJAX foram renomeados parapages-searchepages-fetch, varrendopaginasno idioma corrente. O widget (menus.widget.php) renderiza os itens expondo[[item#label]],[[item#url]]e[[item#slug]], sem regralatest/order_bynem herança de publisher. -
Templates visuais próprios: os 6 templates de destaques (notícias/artigos/lives/notas/carrossel) foram removidos do clone e substituídos por 6 templates próprios de menu (
menus-horizontal-navbar,menus-vertical-sidebar,menus-footer-colunas,menus-dropdown,menus-breadcrumb,menus-mobile-hamburguer), empt-breen, com frameworktailwindcsse blocos<!-- item -->/<!-- no-item -->. -
Alvo próprio no html-editor: o módulo usa
alvo = 'menus'nohtml_editor_componente. Como esse alvo não é mapeado noswitchdohtml-editor.php, ele cai no casodefault(editor HTML/CSS limpo, sem controles de publisher), sem necessidade de modificar o core compartilhado nesta rodada. A prévia ao vivo continua disponível pela aba "Pré-Visualização" (AJAXwidget-preview).
Esta é uma inicialização preliminar: em lotes futuros o autocomplete será expandido para montar a árvore de menus multi-nível. Registro do módulo em gestor/db/data/ModulosData.json (grupo administracao-gestor, ícone sitemap, "Menus do Site" / "Site Menus").
DEC-021 - 2026-06-04 - accepted
Supera DEC-018, DEC-019 e DEC-020 (req-014). O dropdown múltiplo do Fomantic UI e o componente reutilizável PublisherHighlightsCustomDropdown (gestor/assets/interface/jquery-custom-dropdown.js) são removidos por sucessivos problemas de sincronização de estado, concorrência de callbacks onAdd/onRemove e perda da ordem cronológica de cliques. A curadoria manual passa a usar um componente de autocomplete construído do zero no próprio módulo: um <input type="text"> de busca, lista flutuante de sugestões alimentada por AJAX (publisher-pages-search) e tags (Fomantic UI Labels) renderizadas em um contêiner. A reordenação manual das tags usa drag-and-drop via biblioteca Sortable.js (CDN). Permanece inalterado o contrato de serialização: fields_schema.selected_items continua sendo a lista ordenada de slugs textuais (DEC-014), agora derivada diretamente da ordem física das tags. Cada adição, remoção ou reordenação atualiza selected_items e dispara scheduleWidgetPreview.
DEC-023 - 2026-06-04 - accepted
Hierarquia multi-nível de menus e editor drag-and-drop estilo WordPress (req-016 / BATCH-016). Decisões aprovadas pelo Engenheiro Chefe nesta rodada:
-
Contrato da árvore de itens (estende DEC-022):
fields_schema.selected_itemsdeixa de ser uma lista plana de slugs e passa a ser uma árvore ordenada de objetos tipados. Cada nó temid(id de UI),type,label,url,css_classesechildren(array recursivo); nós do tipopaginaadicionampage_id(slug da página). O contrato de IDs textuais de DEC-014 é preservado: o tipopaginareferencia o slug textual empage_id, sem IDs numéricos. Retrocompatibilidade: umselected_itemsno formato antigo (lista de strings) é interpretado como itenspaginade nível raiz. -
Cinco tipos de item:
pagina(vincula página física, link resolvido dinamicamente pelopage_id),link-custom(rótulo + URL livres),cabecalho(apenas rótulo, agrupa submenu),link-action(rótulo + URL + classes CSS para disparar scripts/modais no frontend) eseparador(linha divisória sem rótulo/link). -
Filtro de tipo de página no autocomplete: a busca de páginas (
pages-search) passa a aceitar o parâmetrotipo(pagina|sistema|ambos, defaultpagina), filtrandopaginas.tipo. A UI expõe rádios inline (Fomantic) que recarregam a busca ao mudar. -
Componente de drag-and-drop próprio (vanilla + Fomantic): o editor de árvore é construído do zero com Pointer Events em JS vanilla e visual Fomantic-UI, sem jQuery UI / nestedSortable / Sortable.js. O modelo interno de edição é uma lista plana com
depth(padrão WordPress); o arraste é bidimensional — vertical define a ordem, o deslocamento horizontal define a profundidade (filho/irmão), com clamp emdepth(item acima)+1. A dependência CDN doSortable.jsé removida do módulomenus. A conversão flat↔árvore ocorre nas fronteiras (hidratação, submit e preview). -
Renderização recursiva no widget: além de
no-itemeitem(folha), os templates suportam o delimitadoritem-parent(<!-- item-parent < --> ... <!-- item-parent > -->) com o placeholder especial[[item#children]], onde a renderização recursiva dos filhos é injetada. A funçãomenus_render_level()percorre a árvore; o tipopaginaresolvelabel/urldo banco em tempo de render (links canônicos sempre atualizados). Templates semitem-parentpermanecem funcionais (a árvore é achatada via DFS sobre o blocoitem). Variáveis expostas:[[item#label]],[[item#url]],[[item#slug]],[[item#css_classes]]e[[item#children]].
fields_schema permanece coluna json — a árvore cabe sem migração de banco.
DEC-024 - 2026-06-05 - accepted
Ajustes e correções do módulo menus (req-017 / BATCH-017), sem mudança de contrato de dados. Decisões desta rodada:
-
Reintegração da aba "Variáveis"/"Simular" para o alvo
menus: o html-editor compartilhado passa a tratarmenuscomo um alvo da família de variáveis[[item#X]](mesma família do DEC-022/DEC-023 e dopublisher-highlights). No backend,html-editor.phpganha umcase 'menus'(carrega o componente de simulação próprio e os controles de variáveis) ehtml_editor_publisher_controlsmonta otemplate_mapa partir detarget_variables. No frontend, o helperalvoUsaItemVars()unifica a detecção (publisher-highlights+menus) nos pontos que dependem da forma da variável, mantendopublisher/paginasinalterados. As variáveis dos menus são fixas (label,url,slug,css_classes,children), declaradas emmenus_variaveis_template()— diferente dopublisher-highlights, cujas variáveis são dinâmicas conforme o publicador vinculado. -
Componente de simulação próprio com árvore mockada: criado
html-editor-menus-simulation(pt-br/en) contendo uma árvore JSON de itens mockados (página, cabeçalho com filhos, link-custom, link-action e separador, em dois níveis), análogo aos buckets dopublisher-highlightsporém hierárquico. A simulação nohtml-editor-interface.jsespelha em JS a lógica recursiva domenus.widget.php(blocositem/item-parent/no-item,[[item#children]]recursivo, montagem da base). Há um fallback embutido no JS (MENUS_SIM_FALLBACK) para que a simulação funcione mesmo antes de o componente ser registrado no banco pelo pipeline. -
Hover dos submenus por geometria CSS: a quebra de
:hoverao mover o mouse do item pai para o submenu é resolvida eliminando os gaps (mt-1/ml-1) nos templatesmenus-dropdownemenus-horizontal-navbar(pt-br/en) — o submenu cola no gatilho, que é seu ancestral.group, preservando a ponte de hover. Optou-se pela correção CSS (não JS) por ser mais simples e válida tanto no preview com o site público. -
Leitura robusta de dropdown Fomantic e placeholder do DnD: o alternador de tipo de item lê o valor via
dropdown('get value')(o<select>convertido pelo Fomantic não responde a.val(), o que fazia o tipo cair sempre empagina); o placeholder do drag-and-drop passa a ter a altura de um item real e exibe "Solte o item aqui" / "Drop item here" entre setas ← / →.
Nenhuma mudança em contrato de dados, schema de banco ou no contrato de selected_items (mantém DEC-023).
DEC-025 - 2026-06-05 - accepted
Tipo de Item Publicador no Módulo de Menus e Correções (req-018 / BATCH-018). Decisões desta rodada:
-
Tipo de Item
publicador: Adiciona-se o tipo de itempublicadorque funciona como nó gerador automático de sub-itens (filhos) correspondentes às publicações ativas do publicador selecionado. O nó armazenapublisher_id,count(limite) eorder_by(ordenamento). No widget (menus.widget.php), os filhos dinâmicos são pesquisados no banco de dados e populados na árvore em tempo de renderização. O editor de menus visual (menus.js) impede o aninhamento manual de sub-itens sob o nó do tipopublicadore exibe campos condicionais de seleção. -
Correções de UI do Menus:
-
Ao alterar o
template_id, garantir que os editores CodeMirror do HTML Editor sejam atualizados corretamente mesmo quando focados. -
Corrigir a alternância de exibição de campos dinâmicos no formulário de adição (ocultando busca de páginas e exibindo rótulo/URL/classes para links, cabeçalhos, etc.).
-
Integrar os placeholders
[[item#slug]]e[[item#css_classes]]em todos os 12 templates padrões do módulo menus.
-
-
Simulação do Publicador no HTML Editor: O motor de simulação (
html-editor-interface.js) gerará de forma randômica$countsub-itens do tipopaginasob o nópublicadorpara simular o preview de forma idêntica.
DEC-026 - 2026-06-05 - accepted
Criação do Módulo de Galerias de Imagens (req-018 / BATCH-018). Decisões desta rodada:
-
Estrutura Base: O módulo
galleriesserá clonado depublisher-highlightse inteiramente desacoplado de publishers (sem colunapublisher_id). A persistência usará a tabelagalleries(Phinx migration) e o módulo será registrado emModulosData.jsoncom o ícone"images". -
Seleção de Imagens em Lote: Em vez de seleção única, o gerenciador de arquivos modal (
admin-arquivos) enviará os dados de imagem viapostMessage. O listener emgalleries.jsinterceptará e adicionará o arquivo à lista de curadoria visual, mantendo o modal aberto para que o usuário selecione múltiplas imagens seguidas em lote. O modal deve ser fechado apenas manualmente pelo usuário. -
Campos por Imagem: Cada imagem na lista de curadoria exibirá seu thumbnail, nome do arquivo, um campo editável para Legenda (
legenda) e um botão de exclusão. A ordenação será feita por drag-and-drop usando Sortable.js. O JSON serializado emfields_schemaconterá os metadados (id,caminho,imgSrc,nome,legenda). -
Widget Renderizador: O widget
galleries.widget.phplerá os metadados do banco e renderizará as imagens sequencialmente substituindo[[item#img-src]],[[item#caminho]],[[item#nome]]e[[item#legenda]]. templates de visualização (grid, carousel, masonry, slider) serão providos emresources/templates/. Simulação e aba de variáveis estarão integradas no editor HTML.
DEC-027 - 2026-06-05 - accepted
Contrato de Target em Link-Custom e Variável [[item#target]] (req-019 / BATCH-019). Decisões desta rodada:
-
Atributo Target: Adicionar campo de seleção
target(_selfou_blank) no formulário e no painel de edição do tipolink-customemmenus.js. -
Variável de Template: Expor a variável
[[item#target]]no renderizador (menus.widget.php) e simulação, permitindo que os templates de menu definamtarget="[[item#target]]"nas tags de link<a>.
DEC-028 - 2026-06-05 - accepted
Introdução do Bloco item-separator em Templates de Menus (req-019 / BATCH-019). Decisões desta rodada:
-
Delimitador de Separador: Criar suporte para o bloco de template
<!-- item-separator < --> ... <!-- item-separator > -->no renderizadormenus.widget.php. -
Textos em Separadores: Permitir que separadores opcionalmente possuam rótulo (
label) configurado, renderizando-os como divisores visuais estilizados contendo texto ou apenas linhas físicas.
DEC-029 - 2026-06-05 - accepted
Controles de Galeria e Resolução de Imagem (req-019 / BATCH-019). Decisões desta rodada:
-
Resolução de Imagem Pública: No widget público (
galleries.widget.php), priorizar o campocaminho(caminho original) para renderização da imagem, utilizandoimgSrcapenas no painel administrativo para carregamento rápido das miniaturas. -
Campos de Controle: Adicionar no schema e no formulário de galerias opções de exibir setas (
show_arrows), exibir pontinhos (show_dots), autoplay (autoplay), autoplay speed (autoplay_speed) e loop (loop). -
Template de Controles: Suportar os blocos
controls-arrows,controls-dotsedot-item(este último repetido para cada imagem no widget) para emitir opcionalmente a marcação dos controles conforme a configuração selecionada.
DEC-030 - 2026-06-05 - accepted
Comportamento Dinâmico em JS Público de Widgets (req-019 / BATCH-019). Decisões desta rodada:
-
Arquitetura de JS de Widget: Adicionar suporte a interatividade pública de widgets incluindo scripts dinâmicos de comportamento em tempo de renderização (
menus.widget.jsegalleries.widget.js). -
Lógica de Slider e Dropdown: Os scripts tratarão a abertura de submenus no dropdown por eventos de hover do JS, o toggle do menu mobile hambúrguer e a movimentação suave e controle (setas/dots/autoplay) do carrossel/slider de galerias via jQuery/CSS, garantindo retrocompatibilidade caso recursos específicos do Tailwind CSS v3 falhem no site final.