Conn2Flow
Navegação das docs

SDD

Batch Index (Archive: BATCH-054 to BATCH-093)

Batch Status Escopo Alvo de validação Observações
BATCH-054 complete Ajustes Visuais de Margem e Tooltip com Detalhe de Perfis no Módulo Menus (req-054) VALIDATION-CHECKLIST.md#batch-054 Espaçamento vertical entre tags de perfis de usuário e botões de ação, e tooltip/contador dinâmicos exibindo perfis selecionados nas abas de visibilidade condicional. Fechado em 2026-06-22.
BATCH-055 ready-for-intake Correção na Preservação do Estado de Disponibilidade do Menu no Carregamento do CRUD (req-055) VALIDATION-CHECKLIST.md#batch-055 Correção de bug no JS (menus.js) para restaurar e selecionar corretamente a opção de disponibilidade salva (schema.availability) no carregamento inicial da página.
BATCH-056 complete Sincronização Declarativa de Recursos, Deleção e Atualização Forçada - Módulos e Globais (req-056) VALIDATION-CHECKLIST.md#batch-056 config objeto/array + coletarConfigsTabelas() consolidando deletar/forcar_atualizacao no schema-metadata.json (novo mapa de topo); varredura sync_resources com field_types (json/file:ext), metadados externos/inline e geração dinâmica de <Pascal>Data.json; forcar_atualizacao no atualizador (bypass project/user_modified + reset→0, project preservado) nos 3 caminhos de update; tables_config.json documentado; 12 docs pt-br/en. Ver DEC-064. Validação: php -l (2/2) + composer test 48/142 OK + teste novo ForcarAtualizacaoTest + smoke da varredura dinâmica; deploy (Update => Core) e validação runtime pendentes com o operador. Plano em BATCH-056.md. Fechado em 2026-06-23.
BATCH-057 complete Correção de Tipagem e Validação de Perfil Anônimo em Menus Condicionais (req-057) VALIDATION-CHECKLIST.md#batch-057 Correção de tipagem em menus.widget.php (menus_widget_condicao_valida): normaliza perfis anônimos em array (id='_anonimo'/id_usuarios=0 → false) e obtém o profile ID de forma segura (_profile_slug ou id_usuarios_perfis), eliminando o warning Array to string conversion e as 2 falhas. Ver DEC-065. Validação: php -l OK + MenusWidgetConditionalVisibilityTest 7/7 (19 assertions) + composer test 48/48 OK. Fechado em 2026-06-24.
BATCH-058 complete Sistema de Recuperação e Engenharia Reversa de Recursos (Pull System) (req-058) VALIDATION-CHECKLIST.md#batch-058 Endpoint _api/project/recover (OAuth + ZIP via reverseExport já existente, incluído com SDD_NO_AUTORUN), controlador servidor recuperacoes/recuperacao-dados-recursos.php, descompilador cliente autônomo agents/arquitetura/recuperacao-dados-recursos.php (reverso exato do compilador: extrai file:<ext> em layout PLANO sem BOM, decodifica json, saneia versao/checksum/user_modified/project/PK/idioma/status='A'/módulo-dono; metadados externos/inline), recover-project.sh + 2 VS Code tasks. Ver DEC-066. Validação: php -l (4/4) + composer test 54/54 (186 assertions, 4 skipped) incluindo novo RecuperacaoDadosRecursosTest 6/6. Deploy/pull runtime pendente com o operador. Plano em BATCH-058.md. Fechado em 2026-06-25.
BATCH-059 complete Refinamentos, Overrides de Projeto e Sincronização Inteligente de Contents (Pull System) (req-059) VALIDATION-CHECKLIST.md#batch-059 Renomeação de CLI server para recuperacao-banco-de-dados.php; overrides de scope/modulo no tables_config.json; pull inteligente de contents via MD5 e timestamps, com touch timestamps e relatório de conflitos. Validação: php -l 5/5, RecuperacaoDadosRecursosTest 11/11, composer test 59/59 (4 skipped). Plano em BATCH-059.md. Fechado em 2026-06-25.
BATCH-060 complete Pipeline de Metadados de Projeto e Desacoplamento de Configuração (req-060) VALIDATION-CHECKLIST.md#batch-060 Compilador gera project-schema-metadata.json a partir de tables_config.json na raiz do gestor em modo projeto; deploy-project-v2.sh empacota o arquivo no deploy; API e CLI banco do servidor lêem project-schema-metadata.json no dump. Documentação pt-br/en atualizada. Validação: php -l 4/4, RecuperacaoDadosRecursosTest 13/13, composer test 61/61 (4 skipped). Plano em BATCH-060.md. Fechado em 2026-06-25.
BATCH-061 complete Filtragem de Tabelas no Manifesto de Projeto e Renomeação para project_tables_config.json (req-061) VALIDATION-CHECKLIST.md#batch-061 Compilador lê project_tables_config.json em modo projeto, mantém tables_config.json para core e filtra project-schema-metadata.json para conter apenas tabelas declaradas no projeto. Descompilador lê core+projeto em ordem. Validação: php -l 3/3, RecuperacaoDadosRecursosTest 13/13. Plano em BATCH-061.md. Fechado em 2026-06-25.
BATCH-062 complete Fallback de Idioma e Estruturação de Pastas de Recursos Dinâmicos (req-062) VALIDATION-CHECKLIST.md#batch-062 Fallback de idioma pt-br para tabelas sem coluna de idioma no descompilador; arquivos físicos dinâmicos em subpastas por ID (<tabela>/<id>/<id>.<ext>) no compilador e descompilador. Validação: php -l 3/3, RecuperacaoDadosRecursosTest 15/15, composer test 63/63 (4 skipped). Plano em BATCH-062.md. Fechado em 2026-06-25.
BATCH-063 complete Depuração e Logging Explicativo na Descompilação de Arquivos (req-063) VALIDATION-CHECKLIST.md#batch-063 Causa de arquivos=0 confirmada: registros que usam o template padrão gravam html/css nulos no banco. rdr_descompilar_registro blindado contra arquivo em branco (campo '' ou nulo é omitido) + log RDR_DEBUG_FILE_EMPTY tabela=X id=Y campo=Z em modo não silencioso. Validação: php -l OK, RecuperacaoDadosRecursosTest 17/17 (97 assertions), composer test 65/65 (239 assertions, 4 skipped). Pull runtime pendente com o operador. Plano em BATCH-063.md. Fechado em 2026-06-25.
BATCH-064 complete Atualização de Versões dos Componentes do GitHub Actions (req-064) VALIDATION-CHECKLIST.md#batch-064 Atualização das ações actions/checkout (→v7), actions/setup-node (→v6) e softprops/action-gh-release (→v3) nos workflows. Fechado em 2026-06-25.
BATCH-065 complete Suporte a Colunas Customizadas de ID em Recursos Dinâmicos (req-065) VALIDATION-CHECKLIST.md#batch-065 Resolução dinâmica da coluna de ID ($cfg['id'], fallback 'id') na varredura: descompilador (helper rdr_id_col em rdr_descompilar_registro/rdr_processar) e compilador (laço dinâmico, cache $existDinamicoCache e processarRegistroDinamico). Corrige arquivos=0 para tabelas tipo publisher_pages ("id":"page_id"). Validação: php -l 3/3, RecuperacaoDadosRecursosTest 19/19 (113 assertions, +round-trip com ID customizado), composer test 67/67 (255 assertions, 4 skipped). Plano em BATCH-065.md. Fechado em 2026-06-25.
BATCH-066 complete Registro Dinâmico de Widgets do Sistema e Carregamento sob Demanda no Editor HTML (req-066) VALIDATION-CHECKLIST.md#batch-066 Tabela global widgets (migração 20260708100000, índice único [id, language], coluna project), registrada em tables_config.json (contrato natural_key). Recurso "widgets" declarado nos manifestos (menus/galleries/publisher-index/publisher-highlights pt-br+en) e coletado pelo caminho clássico de atualizacao-dados-recursos.php → WidgetsData.json. Backend: nova rota html-editor-widget-types + html-editor-widgets-list por module com resolução dinâmica da tabela alvo e validação anti-injection. Frontend: html-editor-visual-controls.js migrado para lazy load por categoria com cache local. Ver DEC-068. Validação: php -l 3/3, JSON válido 5/5, node --check OK, smoke read-only do compilador (8 widgets, 0 órfãos), composer test 67/67 (255 assertions, 4 skipped). Deploy (Update => Core + migração) e validação runtime pendentes com o operador. Fechado em 2026-06-29.
BATCH-067 complete Correção de Exceção de CodeMirror Indefinido e Abas Travadas no Módulo de Formulários (req-067) VALIDATION-CHECKLIST.md#batch-067 Rodada 1: guards typeof X !== 'undefined' && X no listener change e no handler de backup (#gestor-listener). Rodada 2 (escopo expandido): causa-raiz = editor aninhado em abas inativas no load (forms-template/forms-preview) impedia o CodeMirror de instanciar (previewHtml/totalDeSessoes quebravam com undefined.getDoc() e travavam a troca de abas Fomantic). Editor movido para seção raiz Conteúdo do Formulário fora das abas (6 HTMLs editar/adicionar/clonar × pt-br/en), espelhando o publisher-highlights; blindagem defensiva em previewHtml/getUpdatedHtmlWithValues/totalDeSessoes/menuDeSessoes. Também: forms.widget.php retornava vazio quando html do banco estava vazio (template padrão não persistido por causa do mesmo bug) → fallback ao template do banco via fields_schema.template_id. Ver DEC-069/DEC-070. Validação: node --check OK, php -l OK, composer test 67/67 (255 assertions, 4 skipped). Validação runtime pendente com o operador. Fechado em 2026-06-29.
BATCH-068 complete Alinhamento Visual do CRUD e Painel de Conteúdo de Formulários com Menus (req-068) VALIDATION-CHECKLIST.md#batch-068 Remoção da aba "Template", criação da seção de "Conteúdo do Formulário" no nível raiz das páginas (6 HTMLs) e alinhamento do menu de abas e Javascript (forms.js). Resolução da colisão de abas Fomantic usando containers isolados (.forms-main-tabs / .forms-content-tabs) e propriedade context. Validação: node --check OK, php -l OK, composer test 67/67. Fechado em 2026-06-29.
BATCH-069 complete Integração do Módulo de Formulários com o Controlador de Submissão de Biblioteca de Formulários (req-069) VALIDATION-CHECKLIST.md#batch-069 formulario_controlador aceita string OU array de IDs (laço foreach com reset por iteração), injeta config indexada por ID em gestor.form[fid] + plano para ID único (retrocompat); formulario.js itera .conn2flow-form + ._forms-submissions-controller resolvendo a config por data-form-id/id com fallback plano (showError isola por instância); forms_render (forms.widget.php) delega a gestor_incluir_biblioteca('formulario') + formulario_controlador; forms.widget.js deletado. Bump biblioteca-formulario 1.1.0→1.2.0. Ver DEC-072. Validação: php -l 2/2, node --check OK, composer test 67/67 (255 assertions, 4 skipped). Validação runtime (2+ widgets na mesma página) pendente com o operador. Fechado em 2026-06-29.
BATCH-070 complete Parametrização de Scripts de Widget no Editor HTML e Dinamização do Mapeamento do Módulo Subscriptions (req-070) VALIDATION-CHECKLIST.md#batch-070 (conn2flow) html_editor_componente aceita widget_js_include; WIDGET_SCRIPT_MODULES dinâmico + montarWidgetAssetsHead injeta scripts explícitos sem assinatura; 4 módulos passam o seu. Recriado forms.widget.js (preview via rota AJAX forms-render-editor-html + forms_render_editor_html); builder formulario_montar_js_vars extraído de formulario_controlador (sem duplicação). ([REDACTED]) Migração 20260710120000 (5 colunas signup em subscriptions_plans), i18n+CRUD+2 AJAX (buscar-perfis/buscar-form-campos)+4 templates+JS; checkout e signup dinâmicos ($planMapping/$formToPlan removidos), subscriptions_criar_usuario com perfil do plano. Ver DEC-073. Validação: php -l (todos), node --check (todos), composer test 67/67 (255 assertions, 4 skipped). Deploy/migração e validação runtime pendentes com o operador. Fechado em 2026-06-30.
BATCH-071 complete Adição de Novos Tipos de Campos, Limites via Opções e Melhoria Progressiva no Módulo de Formulários (req-071) VALIDATION-CHECKLIST.md#batch-071 Tipos password/date/url/hidden no construtor (forms.js) + textarea de opções habilitada com placeholders dinâmicos por tipo; renderer público (forms.widget.php) injeta minlength/maxlength/min/max/step a partir do campo Opções, valor padrão do hidden (renderiza só o input), wrapper de toggle de senha e classe forms-date-picker; backend (formulario.php) com limite 254 p/ password/url, FILTER_VALIDATE_URL e validações min/max de caracteres/valor/data via opções; frontend (formulario.js) com melhoria progressiva (calendar/dropdown Fomantic + toggle senha vanilla) e validações client-side; novas mensagens i18n no componente form-ui (pt-br/en). Ver DEC-074. Validação: node --check 2/2, php -l 3/3, JSON válido, composer test 76/76 (287 assertions, 4 skipped) com novo FormsWidgetFieldTypesTest 9/9, npm run test 3/3. Deploy (Update => Core) e validação runtime pendentes com o operador. Fechado em 2026-06-30.
BATCH-072 complete Remoção do Campo e Metadado "hosting_plan" no Módulo de Planos de Assinatura VALIDATION-CHECKLIST.md#batch-072 ([REDACTED]) Migração 20260710130000 remove hosting_plan de subscriptions_plans com guard e down() reversível; controller, 4 templates HTML e hook de hidratação deixam de consultar/salvar/renderizar o campo. Validação: php -l 3/3 OK; grep de runtime sem sobras. Migração/runtime admin pendentes no ambiente configurado, pois este checkout não expõe composer db:migrate. Fechado em 2026-06-30.
BATCH-073 complete Parametrização Dinâmica de E-mails e Integração de Estágios de Serviço em Planos VALIDATION-CHECKLIST.md#batch-073 (conn2flow) forms ganhou AJAX buscar-componentes, autocomplete no campo email.message_component nos 6 templates e JS de busca/seleção/limpeza preservando fields_schema. ([REDACTED]) checkout lê componente/assunto de fields_schema.email, usa is_free para status do e-mail; migração 20260710140000 adiciona is_free/initial_stage; CRUD de planos salva/renderiza os campos, expõe buscar-estagios, repopula estágio inicial via JS e templates foram segmentados. Validação: php -l, node --check, JSON OK, composer test 76/76. Migração/runtime admin pendentes no ambiente configurado, pois este checkout não expõe composer db:migrate. Fechado em 2026-06-30.
BATCH-074 complete Dinamização Completa de Planos e Saneamento de Hardcodes no Subscriptions (req-074) VALIDATION-CHECKLIST.md#batch-074 ([REDACTED]) Helpers em subscriptions.hooks.php: subscriptions_obter_nome_plano() (remove 5 dicionários $paypalPlanNames/$planDisplayNames/$planNames) e subscriptions_obter_form_ids_planos()/_clausula() (substitui form_id LIKE 'form-pro-%' por IN (...) dinâmico com fallback LIKE) em 3 filtros de webhook/IPN. Checkout (subscriptions_checkout): resolução dinâmica do plano em subscriptions_plans + aliases legados (aceleracao/mentoria/personalizado), card de preço de subscriptions_plans_payments, e renderização do formulário do plano via forms_render (campo forms.html por form_id) substituindo os 6 blocos HTML hardcoded; subscription-checkout.html (pt-br/en) de ~990→~135 linhas. subscription.html (~690→~55) reduzido a header + grid dinâmico + rodapé; subscription-start.html saneado (jargão hospedagem/cloud/projeto → assinatura). (conn2flow §6) formulario.php: campos password gravados como '' em fields_values e omitidos no e-mail de notificação (defesa em profundidade), mantendo o valor em $_POST para o signup. Ver DEC-077. Validação: php -l 3/3, marcadores/placeholders balanceados, composer test 76/76 (287 assertions, 4 skipped). Deploy (Update => Core) e runtime pendentes com o operador. Fechado em 2026-06-30.
BATCH-075 complete Dashboard Site Toolbar, Agendamento de Páginas e Extensões do Editor HTML (req-075) VALIDATION-CHECKLIST.md#batch-075 Lote consolidado (6 metas) concluído e validado. Todas as 6 metas implementadas e validadas estaticamente (php -l/node --check OK, composer test 76/76): M1 botão "Acessar Site"; M2 Dashboard Site Toolbar (iframe+rota+injeção+gating+menu dinâmico+offset); M3 edição in-place marker-based (render-com-caixas site-toolbar-render + editável + reconstrução + save site-toolbar-save + reload); M4 redirect inteligente (na M2 + publisher_id); M5 agendamento/datas (migração 20260712100000 + 404 no roteador + 2 controladores + 12 forms); M6 atalho de widget no floating toolbar (he-tb-widget-admin). Ver DEC-078. Validação runtime pendente com o operador (deploy Update => Core + migração). BATCH-076 é paralelo e fora deste escopo.
BATCH-076 complete Opção de Exclusão de contents/ em Tarefas de Deploy e Sincronização (req-076) VALIDATION-CHECKLIST.md#batch-076 Adição de input contentsChoice (Sim/Não) no .vscode/tasks.json e suporte ao parâmetro --contents nos scripts deploy-project-v2.sh e synchronize-project.sh para excluir a pasta contents/ do ZIP e do Rsync. Fechado em 2026-07-09.
BATCH-077 complete Desacoplamento de Scripts do Iframe e Mapeamento Inteligente de Variáveis no Live Editor (req-077) VALIDATION-CHECKLIST.md#batch-077 Slice 1: dashboard.iframe-toolbar.js extraído do <script> inline dos 2 HTMLs da toolbar (pt-br/en) e injetado via gestor_pagina_javascript_incluir(tipo=iframe-toolbar) em dashboard_site_toolbar(); órfão vazio dashboard.iframe.toolbar.js removido. Slice 2: site-toolbar-render passa a devolver o HTML CRU (content_raw/layout_raw); dashboard.toolbar.js deixa de substituir root.innerHTML e passa a preservar o DOM vivo guardando o cru em #paginaHTMLAntesEdicao e mapeando (varredura paralela): atributo→data-c2f-variable+varMap, texto→.c2f-var-box, widget→.c2f-widget-box atômico; save reconstrói @[[…]]@/marcadores e separa paginas×layouts. Ver DEC-079. Validação: node --check 2/2, php -l OK, motor 16/16 (happy-dom, arquivo real). Deploy Update => Core + validação visual pendentes com o operador. Plano em BATCH-077.md. Fechado em 2026-07-10.
BATCH-078 complete Correções no Live Editor: Trava de Widgets, Submenu do Painel "+" e Isolamento de Estilos (req-078) VALIDATION-CHECKLIST.md#batch-078 3 correções pontuais no motor compartilhado html-editor.js: (1) resolveEditable reconhece .c2f-dyn-box como bloco atômico + CSS pointer-events/user-select:none no conteúdo interno (widgets/vars inertes); (2) isEditorOwned reconhece #c2f-add-panel/#c2f-backup-panel — o clique em capture parava de vazar via elementsFromPoint e matar o toggleWidgetGroup; (3) blindagem CSS !important (color/bg/font/-webkit-text-fill-color) do floating-toolbar/styler/modal contra herança do template do site. Cache-bust ?v=c2f2 (live) + biblioteca-html-editor 1.3.30→1.3.31. Ver DEC-080. Validação: node --check 2/2, php -l 2/2, composer test 76/76 (287 assertions, 4 skipped). Deploy Update => Core + homologação visual pendentes com o operador. Plano em BATCH-078.md. Fechado em 2026-07-10.
BATCH-079 complete Mapeamento no Pai de Widgets de Múltiplos Elementos, Image Picker e Agrupamento/Filtro de Módulos (req-079) VALIDATION-CHECKLIST.md#batch-079 Lote de 8 melhorias no Live Editor + Dashboard Site Toolbar: (1+7) marcadores de widget preservados no modo edição (gestor_pagina_widgets mantém <!-- widgets# --> quando editor logado) → mapTree delimita cada widget pela fronteira exata dos comentários vivos (fim da heurística de alinhamento): widget único num <nav> marca o pai (data-c2f-widget-parent, innerHTML-replace no save), duplicados/consecutivos ficam separados; (2) ícones Fomantic → SVG (svgIcon()); (3) image-picker autônomo no modal (iframe→admin-arquivos); (4) modal redimensionável; (5) filtro #c2f-modules-filter; (6) agrupamento por modulos_grupos; (8) backups divididos Página × Layout. Ver DEC-081 (+ adendos marker-based e atomicidade de grupo). Validação: node --check 3/3, php -l (gestor.php/dashboard.php/html-editor.php), composer test 76/76, npm run test (vitest) 6/6 checks aprovados. Deploy/homologação visual pendentes com o operador. Plano em BATCH-079.md. Fechado em 2026-07-10.
BATCH-080 complete Integração de Modelos de Sessão e Assistente IA no Live Editor (req-080) VALIDATION-CHECKLIST.md#batch-080 Porta para a barra flutuante do Live Editor (gated por this.raiz): (1) botão Modelos + painel vanilla (busca/paginação via site-toolbar-templates-load, relação inserir substituir/antes/depois, injeta HTML+CSS no DOM vivo); (2/3) botão Assistente IA + painel vanilla (abas Prompt/Modo/Config, selects de prompts/modos/conexões/modelos via site-toolbar-ia-init, geração via site-toolbar-ia-request, aplica html/css ao elemento); (4) .he-bgimage-pick do styler usa o picker autônomo (imagePickerTarget='background' → applyBackgroundImage). Fix BATCH-079: widget de múltiplos elementos vira bloco atômico (resolveEditable→raiz do grupo; overlay abrange a união; outline em todos). Backend reusa html_editor_ajax_templates_load/_ia_requests + ia_ajax_prompts/_modos + novo ia_editor_dados; busca de templates retrocompatível. Cache-bust ?v=c2f5 + biblioteca-html-editor 1.4.3. Ver DEC-082. Validação: node --check, php -l (dashboard/ia/html-editor), npm run test 11/11 (novo html-editor.live.test.js 5/5), composer test 76/76. Deploy + homologação visual pendentes. Plano em BATCH-080.md. Fechado em 2026-07-10.
BATCH-081 complete CodeMirror no Assistente IA, Correção no Save, Dropdowns da Toolbar e Painel "+" em Duas Colunas (req-081) VALIDATION-CHECKLIST.md#batch-081 6 metas de refinamento do Live Editor/Dashboard Site Toolbar (gated this.raiz): (1) CodeMirror markdown nos textareas do Assistente IA + caixa .c2f-he-live-box redimensionável; (2) causa-raiz do "Erro ao salvar a página." intermitente = corpo AJAX não-JSON por saída espúria (warning/notice) sem buffer no gestor.php → blindagem com ob_start/ob_end_clean + JSON_INVALID_UTF8_SUBSTITUTE; no cliente deselectAll() antes do getCleanHtml, guarda de prontidão e parse tolerante; (3) dropdowns de Usuário e Página na toolbar (reorganizam editar/avançado + criar/clonar dinâmicos publisher vs admin); (4) CRUD de prompts (clear/edit/del/new) reusando ia_ajax_prompt_* via 3 rotas novas; (5) "Código Customizado" no painel "+" (openCustomCodePanel/insertCustomHtml); (6) painel "+" em duas colunas com grupos/itens de widget, paginação "Carregar mais" (site_toolbar.widgets_por_pagina, padrão 10) e autocomplete AJAX cross-grupo (html_editor_widgets_buscar). Ver DEC-083. Cache-bust ?v=c2f8 + biblioteca-html-editor 1.4.7 + dashboard.json 1.0.9. Validação: php -l 4/4, node --check 3/3, npm run test 14/14 (novos casos §2/§4/§5), composer test 76/76. Deploy + homologação visual pendentes. Plano em BATCH-081.md. Fechado em 2026-07-11.
BATCH-082 complete Carregamento de Widgets, Seleção de Modelos, Restauração de Backups e Isolamento Multi-usuário no Live Editor (req-082) VALIDATION-CHECKLIST.md#batch-082 4 correções do Live Editor: (1) ponte c2f-he:widget-render→AJAX site-toolbar-widget-render→c2f-he:widget-rendered (widget parava em "Carregando widget…"); (2) insertTemplate seleciona o 1º elemento inserido em replace/before/after; (3) restauração de backup marker-based — boxes_widgets em <!-- widgets#… --> + resolver_variaveis (valor puro) + raw no backup-get + re-mapTree()/restoreChrome() no frontend (varMap preservado); (4) isolamento multi-usuário via hook core↔projeto: core emite el filtro dashboard/site-toolbar.permissao-pagina (hook_apply_filters, default true) nas 4 rotas; handler consumidor no projeto conn2flow-site (multiusuario.hooks.php + hooks.json). Cache-bust ?v=c2f10 + biblioteca-html-editor 1.4.10. Ver DEC-084. Validação: php -l 2/2, node --check 2/2, npx vitest run 19/19 (novos §1/§2/§3), composer test 76/76 (287 assertions, 4 skipped). Deploy Update => Core + homologação visual/multi-usuário pendentes com o operador. Plano em BATCH-082.md. Fechado em 2026-07-13.
BATCH-083 complete Correções de Homologação do Live Editor: Hover dos Dropdowns, Preview de Dispositivo Fiel e Normalização de Variáveis no Save VALIDATION-CHECKLIST.md#batch-083 3 correções pós-BATCH-082 (demandas diretas do Chefe): (1) hover-intent dos 3 dropdowns da toolbar (c2f-dropdown-force-open + fechamento adiado + medição confiável + window.resize) — antes a caixa sumia ao mover o mouse do trigger para ela pós-resize (corrida do crescimento assíncrono do iframe); (2) preview de dispositivo fiel via IFRAME com a largura do device (media queries/vw-vh/resize reais) — Desktop edita in-place, Tablet/Mobile é preview não-editável; (3) normalização de variáveis/widgets digitados ([[x]]→@[[x]]@) no reconstructOriginal do save. Cache-bust dashboard.json 1.0.10. Ver DEC-085. Validação: node --check 2/2, dashboard.json válido, npx vitest run 20/20. Deploy Update => Core + homologação visual pendentes. Plano em BATCH-083.md. Fechado em 2026-07-13.
BATCH-084 complete Preservação de Datas Customizadas (data_criacao/data_modificacao) na Compilação de Recursos (req-084) VALIDATION-CHECKLIST.md#batch-084 Mapeamento condicional usando isset() de data_criacao e data_modificacao na função coletarRecursos() de atualizacao-dados-recursos.php para evitar gravar chaves não existentes na fonte JSON de origem como nulas no banco. Fechado em 2026-07-13.
BATCH-085 complete Restauração de Backup Server-Side e Preview de Dispositivo com JS do Site (Live Editor) VALIDATION-CHECKLIST.md#batch-085 2 correções pós-BATCH-083 (demandas diretas do Chefe): (1) restauração de backup server-side substitui a injeção client-side (que quebrava DOM/scripts) — front sinaliza via rota site-toolbar-backup-restore (grava var de sessão) + reload; roteador gestor_site_toolbar_backup_aplicar() (core) consome a sessão, substitui html da página/layout pelo backup (render pelo pipeline normal) e seta gestor.siteToolbarBackupRestaurado; iframe reentra em edição via window.parent.gestor; (2) preview de dispositivo com JS do site — iframe carrega a URL real (?c2f-device-preview=1 desativa a toolbar, mantém layout/CSS/JS) em vez do srcdoc só-CSS, corrigindo o menu hambúrguer/interações. Cache-bust dashboard.json 1.0.11. Ver DEC-086. Validação: php -l 2/2, node --check 2/2, npx vitest run 19/19, composer test 76/76. Deploy Update => Core + homologação pendentes. Plano em BATCH-085.md. Fechado em 2026-07-13.
BATCH-086 complete Preservação de data_modificacao no Sincronizador de Banco de Dados (req-086) VALIDATION-CHECKLIST.md#batch-086 Forçar a inclusão de data_modificacao no array $diff de sincronizarTabela() caso ela esteja no JSON e no schema da tabela e uma atualização for detectada, para evitar que o MySQL atualize a data de modificação automaticamente. Fechado em 2026-07-14.
BATCH-087 complete Parametrização e Resumo de Órfãos no Sincronizador de Banco de Dados (req-087) VALIDATION-CHECKLIST.md#batch-087 Silenciar logs detalhados e arquivos JSON de órfãos por padrão, mostrando apenas contagens no relatório de atualização. Flags --orphans-detail e --orphans-mode=export reativam o comportamento completo. Propagação via atualizacoes-sistema.php inclusa. Fechado em 2026-07-15.
BATCH-088 complete Criação dos Módulos/Widgets "forms-search" (Formulários de Busca) e "pages-index" (Páginas Índice) (req-088) VALIDATION-CHECKLIST.md#batch-088 Dois módulos clonados e adaptados. pages-index (clone de publisher-index): widget reescrito com consulta DIRETA a paginas (status='A' AND language AND tipo='pagina' AND sem_permissao=1), busca em nome/html, variáveis fixas [[item#title/summary/url/date]], ordenação title/date; CRUD enxuto sem publisher_id/curadoria; página semente pública busca/ (type=pagina, without_permission=1) com widget grupo_slug="padrao". forms-search (clone de forms via placeholders): widget renderiza <form method="get"> com action = página alvo (fields_schema.form_action, default busca/), garante campo name="search", sem controlador POST/reCAPTCHA; helper forms_search_registrar_busca() grava em forms_search_submissions. Analytics: o pages-index registra a busca (page load com ?search= + AJAX página 1) via function_exists (desacoplado). Migração 20260715120000 cria forms_search/forms_search_submissions/pages_index. Módulos registrados em ModulosData/UsuariosPerfisModulosData. Ver DEC-089. Validação: php -l (5/5), node --check (4/4), JSON válido (4/4), composer test 90/90 (314 assertions, 4 skipped) com novo PagesIndexFormsSearchWidgetTest 14/14. Deploy Update => Core + migração + criação do índice padrao e homologação runtime pendentes com o operador. Plano em BATCH-088.md. Fechado em 2026-07-15.
BATCH-089 ready-for-intake Ocultação do Dropdown de Página por Permissão no Live Editor e Ajuste de Alerta no Hook de Admin-paginas (req-089) VALIDATION-CHECKLIST.md#batch-089 Correção de exibição de controles de edição para usuários restritos e ajuste de propriedade de registros em admin-paginas.
BATCH-090 complete Transição do Gerenciador de Arquivos para Árvore Física no Disco e CRUD Completo de Diretórios no Admin-Arquivos (req-090) VALIDATION-CHECKLIST.md#batch-090 Gerenciador reescrito para varredura física de $_GESTOR['contents-path'] (fim da leitura/gravação individual em arquivos). Identificador = caminho relativo (+MD5); associação de categorias na tabela nova arquivos_disco_categorias (migração 20260717120000). Backend: rotas AJAX listar/uploadFile/miniaturas/excluir/pasta-criar/renomear/categorias-arquivo, todas blindadas por helpers puros de segurança em bibliotecas/arquivo.php (path traversal, extensão perigosa, sanitização de nome). Frontend: render client-side por JSON com 4 modos de visualização (localStorage), breadcrumb, drag&drop com seletor de tamanho de preview + pasta de destino, miniaturas físicas lazy em lote (mini/, cache-bust ?t=), seleção em lote e CRUD de pastas. Retrocompat Image Picker: interface.php resolve imagepick por caminho físico (não-numérico) usando metadados do disco/mini; picker devolve caminho relativo. Ver DEC-090. Validação: php -l 5/5, node --check OK, JSON OK, novo AdminArquivosSegurancaTest 16/16, composer test 106/106 (367 assertions, 4 skipped). Deploy Update => Core + migração + homologação runtime pendentes com o operador. Plano em BATCH-090.md. Fechado em 2026-07-17.
BATCH-091 complete Refinamentos de CRUD, Novos Modelos de Lupa e Autocomplete AJAX Otimizado no Módulo \"forms-search\" (req-091) VALIDATION-CHECKLIST.md#batch-091 Exclusão de abas genéricas (email/redirects) no CRUD; aba \"Campos Extras\"; templates visuais de lupas; autocomplete AJAX completo (limite 30 com botão \"Carregar mais\"); usabilidade aprimorada com debounce de 300ms, min 3 chars, setas Cima/Baixo/Enter, highlight com <mark> e cache local. Verificação: php -l 3/3, node --check 2/2, vitest 20/20 OK, PHPUnit 108/108 OK. Fechado em 2026-07-20.
BATCH-092 complete Destaque, Sincronização de URL, Debounce, Cache e Teclado no Módulo "pages-index" (req-092) VALIDATION-CHECKLIST.md#batch-092 Destaque visual com <mark>, sincronização bidirecional do parâmetro GET search, debounce otimizado com cancelamento AJAX, cache local em JS e navegação por teclado nos itens da listagem. Verificação: php -l 3/3, node --check 2/2, vitest 25/25 OK, PHPUnit 110/110 OK. Fechado em 2026-07-20.
BATCH-093 complete Renderização de Variáveis/Widgets no Editor HTML Clássico e Preview (igual à Editbar) (req-093) VALIDATION-CHECKLIST.md#batch-093 Itens 1+2: backend html_editor_boxes_variaveis/_boxes_widgets/resolver_* + rota html-editor-render-vars → {boxes, values} (regex tolerante a [[var]]/@[[var]]@, marcador exato → round-trip; resolve globais, preserva locais). Frontend: htmlEditorRenderVars (AJAX, cb {boxes,values}, fallback ao cru) + htmlEditorReconstructVars (reversão caixa→[[var]], no-op sem caixas); editor visual async (globais em caixas antes de abrir) + reversão no save; preview async (globais→valor via values, locais via simulação). publisher-pages coberto pela infra genérica (sem tocar o módulo); locais no editor visual ficam como marcadores (preservadas no save; sem a simulação replicada, que quebraria a reversão 1:1). Decisão: DUPLICAR (Editbar intacta). Ver DEC-091. Validação: php -l OK + smoke funções, node --check OK, vitest reversão 4/4 (função real extraída), suíte 29/29 + composer 110/110 sem regressão. Cache-bust biblioteca-html-editor 1.4.11. Refinamento opcional (locais em caixas no editor) + homologação runtime pendentes. Plano em BATCH-093.md. Fechado em 2026-07-20.

O Futuro é Híbrido: Humano + IA.

O Conn2Flow é a ferramenta. Se você precisa do Arquiteto para desenhar a estratégia da sua empresa usando essa tecnologia...

Contrate Consultoria Especializada