Entradas criadas com ZipInfo() nascem com external_attr=0; o unzip cria
os diretórios como drw------- e o webserver não consegue atravessá-los —
plugin some da lista ou dá 'Unable to load plugin information' (Plugin.php
linha 882). Inclui forma correta, sintoma do Jan 1 1980, validação do ZIP
e comando de correção no servidor. Diagnosticado no build VIP do butterfly.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Modelo validado com QuestionTypeSafeCategory (categoria ITIL filtrada por
is_helpdeskvisible, applicator grava itilcategories_id). KB-INFRA-005 corrige a
enumeracao de rotas (multi-linha) e documenta o fix do /Altcha/Challenge.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Salvar/criar formulario no form builder nativo falhava com 404 do Traefik
porque root_doc vazio faz o JS chamar /GenericAjaxCrud na raiz, fora do
allowlist. Documenta causa-raiz, correcao (allowlist Traefik+nginx) e fix de raiz.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Aprendizado do mindscrum 0.2.0. Inclui o achado de que update(status=5) resolve
o chamado sem exigir a solucao do formulario ITIL.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Mapeia o que o core ja entrega (Kanban trait single-itemtype, ProjectTaskLink
com 4 tipos de precedencia, ProjectTask_Ticket, PlanningEvent +
checkAlreadyPlanned, TeamworkInterface, Gantt como plugin) e a tabela
herdar-vs-construir do plugin mindscrum.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Gotchas de porte GLPI 10 → 11 aprendidos no plugin butterfly:
CodeMirror removido (padrão GLPI.Monaco.createEditor + formdata),
jQuery UI extinto, add_css interpola valor uma vez (+?v= do core),
e estáticos de plugin só servidos de public/ sem o segmento /public.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
O quê/como/por quê da integração + regras do Redmine de produção
(custom fields obrigatórios, atividade por projeto, identifier lowercase,
comentário obrigatório, projeto ativo) e gotchas de manutenção.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- adiciona front matter completo ao record de namespaces (estava sem metadados)
- renomeia para o próximo ID livre (036), resolvendo a colisão de ID 032
- kb_check --fix: index.json sincronizado; kb_check: OK
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Documenta as colunas/tabelas reais usadas pelas 7 tools de KPI (MTTR via
solve_delay_stat, FCR via solução recusada, SLA TTR/TTO, workload, backlog,
CSAT, volume). Atualiza snapshot KB-026 para 26 tools.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
O snapshot original (26/05) era aspiracional e dava como prontos arquivos
que git log --all confirmou nunca terem existido: src/InputValidation.php,
src/ProjectTaskTools.php e as tools glpi_projecttask_*. Tabelas de estado,
métricas e seção de versão corrigidas para refletir o disco. Itens não
implementados rebaixados de 'feito' para 'planejado'. Documentados os
commits que realmente entraram (bi_stats, fix range, schema plan_*_date).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Aprendizados validados no desenvolvimento do plugin sync:
- KB-PLUGIN-032: subclasse DBmysql read-only para banco externo (gotchas de
senha rawurldecode, query() guard, flag connected).
- KB-PLUGIN-033: comandos de console de plugin exigem src/ + namespace de nome
plugins:<key>:.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Processo definido: (1) acessar DEV CT100, (2) criar plugin direto em
plugins/ para dev+validacao conjunta via interface, (3) push Forgejo DEV,
(4) homologar, (5) push Forgejo PROD.
Regra de ouro: knowledge-base como fonte primaria; core do GLPI na
ausencia de KB; novo KB apos teste validado.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Novo runbook KB-PLUGIN-031: nascimento do plugin ate validacao E2E no
GLPI dev (scaffold, Forgejo local, deploy CT100, console, bootstrap
Kernel para testes CLI). Validado de ponta a ponta com o assetinherit.
- Registros KB-PLUGIN-021..030 existiam apenas no disco (drift) e foram
incluidos no versionamento; index.json sincronizado via kb-fix.
- Ignora lixo AppleDouble/.DS_Store do macOS.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
KB-PLUGIN-019 e KB-PLUGIN-020 estavam sem delimitador YAML.
KB-PLUGIN-011, 017, 018 tinham divergencias no index.json (titulo, status, severity).
Todos corrigidos via kb_check.py --fix.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>