knowledge-base/index.json

389 lines
11 KiB
JSON

{
"version": "1.0.0",
"last_updated": "2026-05-21",
"records": [
{
"id": "KB-INFRA-001",
"title": "Caminho correto de plugins no container GLPI oficial",
"domain": "infrastructure",
"tags": [
"glpi",
"docker",
"plugins",
"mount",
"orbstack"
],
"status": "active",
"severity": "high",
"path": "records/infrastructure/KB-INFRA-001-glpi-plugin-path.md",
"summary": "id: KB-INFRA-001"
},
{
"id": "KB-INFRA-002",
"title": "Icone de plugin GLPI 11 requer logo.png PNG na raiz do diretorio",
"domain": "infrastructure",
"tags": [
"glpi",
"glpi11",
"plugin",
"icon",
"logo",
"marketplace"
],
"status": "active",
"severity": "low",
"path": "records/infrastructure/KB-INFRA-002-plugin-icon-logo-png.md",
"summary": "id: KB-INFRA-002"
},
{
"id": "KB-PLUGIN-001",
"title": "Instalacao de plugin GLPI requer callbacks install/uninstall",
"domain": "plugin-dev",
"tags": [
"glpi",
"plugin",
"install",
"setup.php",
"hooks"
],
"status": "active",
"severity": "high",
"path": "records/plugin-dev/KB-PLUGIN-001-install-hooks-required.md",
"summary": "id: KB-PLUGIN-001"
},
{
"id": "KB-PLUGIN-002",
"title": "getCategory() deve ser sobrescrito em QuestionType de plugin GLPI 11",
"domain": "plugin-dev",
"tags": [
"glpi",
"glpi11",
"form-builder",
"question-type",
"javascript",
"plugin"
],
"status": "active",
"severity": "critical",
"path": "records/plugin-dev/KB-PLUGIN-002-questiontype-getcategory-override.md",
"summary": "id: KB-PLUGIN-002"
},
{
"id": "KB-PLUGIN-003",
"title": "JSON em <script type=\"application/json\"> nao deve usar htmlspecialchars",
"domain": "plugin-dev",
"tags": [
"glpi",
"glpi11",
"form-builder",
"javascript",
"json",
"xss",
"php"
],
"status": "active",
"severity": "critical",
"path": "records/plugin-dev/KB-PLUGIN-003-json-script-tag-no-htmlspecialchars.md",
"summary": "id: KB-PLUGIN-003"
},
{
"id": "KB-PLUGIN-004",
"title": "Chave do hook ADD_JAVASCRIPT deve ser o plugin key exato",
"domain": "plugin-dev",
"tags": [
"glpi",
"glpi11",
"hooks",
"javascript",
"setup.php",
"plugin-key"
],
"status": "active",
"severity": "high",
"path": "records/plugin-dev/KB-PLUGIN-004-plugin-hook-key-must-match-plugin-key.md",
"summary": "id: KB-PLUGIN-004"
},
{
"id": "KB-PLUGIN-005",
"title": "ITILCategoryFieldStrategy LAST_VALID_ANSWER ignora subclasses de QuestionTypeItemDropdown",
"domain": "plugin-dev",
"tags": [
"glpi",
"glpi11",
"form-builder",
"form-destination",
"itil-category",
"answer-pipeline",
"question-type"
],
"status": "active",
"severity": "critical",
"path": "records/plugin-dev/KB-PLUGIN-005-last-valid-answer-exact-class-match.md",
"summary": "id: KB-PLUGIN-005"
},
{
"id": "KB-PLUGIN-006",
"title": "Procedimento completo de renomeacao de plugin GLPI",
"domain": "plugin-dev",
"tags": [
"glpi",
"glpi11",
"plugin",
"rename",
"refactor",
"namespace",
"database"
],
"status": "active",
"severity": "medium",
"path": "records/plugin-dev/KB-PLUGIN-006-plugin-rename-full-procedure.md",
"summary": "id: KB-PLUGIN-006"
},
{
"id": "KB-PLUGIN-007",
"title": "GLPI 11 marca QuestionTypeItemDropdown como final",
"domain": "plugin-dev",
"tags": [
"glpi",
"glpi11",
"form-builder",
"question-type",
"fatal-error"
],
"status": "active",
"severity": "critical",
"path": "records/plugin-dev/KB-PLUGIN-007-questiontypeitemdropdown-final.md",
"summary": "id: KB-PLUGIN-007"
},
{
"id": "KB-PLUGIN-008",
"title": "Interfaces de Validacao Customizada no Form Builder do GLPI 11",
"domain": "plugin-dev",
"tags": [
"glpi",
"glpi11",
"form-builder",
"validation",
"javascript"
],
"status": "active",
"severity": "medium",
"path": "records/plugin-dev/KB-PLUGIN-008-questiontype-validation-interfaces.md",
"summary": "id: KB-PLUGIN-008"
},
{
"id": "KB-PLUGIN-009",
"title": "Validacao mandatory ignora respostas que sao arrays nao-vazios com chaves em branco",
"domain": "plugin-dev",
"tags": [
"glpi",
"glpi11",
"form-builder",
"validation",
"answers-handler"
],
"status": "active",
"severity": "high",
"path": "records/plugin-dev/KB-PLUGIN-009-transformconditionvalue-empty-array.md",
"summary": "id: KB-PLUGIN-009"
},
{
"id": "KB-PLUGIN-010",
"title": "Padrao correto para chamadas AJAX autenticadas em plugins GLPI 11",
"domain": "plugin-dev",
"tags": [
"glpi",
"glpi11",
"ajax",
"csrf",
"security",
"symfony",
"fetch",
"plugin"
],
"status": "active",
"severity": "critical",
"path": "records/plugin-dev/KB-PLUGIN-010-ajax-csrf-x-glpi-csrf-token.md",
"summary": "id: KB-PLUGIN-010"
},
{
"id": "KB-PLUGIN-011",
"title": "\"Procedimento de Release do Plugin Mindplace\"",
"domain": "plugin-dev",
"tags": [
"github",
"release",
"secrets"
],
"status": "active",
"severity": "medium",
"path": "records/plugin-dev/KB-PLUGIN-011-mindplace-release-zip-procedure.md",
"summary": "id: KB-PLUGIN-011"
},
{
"id": "KB-PLUGIN-012",
"title": "Estendendo o sistema de Tiles do Helpdesk no GLPI 11 — padrões e armadilhas",
"domain": "plugin-dev",
"tags": [
"glpi",
"glpi11",
"helpdesk",
"tiles",
"dom-manipulation",
"mutation-observer",
"twig",
"singleton",
"plugin"
],
"status": "active",
"severity": "high",
"path": "records/plugin-dev/KB-PLUGIN-012-helpdesk-tiles-extension-patterns.md",
"summary": "id: KB-PLUGIN-012"
},
{
"id": "KB-PLUGIN-013",
"title": "Runbook — Publicação de plugin no Mindplace (procedimento padrão)",
"domain": "plugin-dev",
"tags": [
"mindplace",
"runbook",
"publish",
"license",
"forgejo",
"release",
"kill-switch",
"workflow",
"automation",
"script",
"bash"
],
"status": "active",
"severity": "high",
"updated_at": "2026-05-21",
"path": "records/plugin-dev/KB-PLUGIN-013-mindplace-plugin-publication-runbook.md",
"summary": "Runbook completo de publicação. As Fases 2-5 (Forgejo + ZIP + Release + plugins.json) são automatizadas pelo script bin/mindplace-release.sh. Uso: ./bin/mindplace-release.sh ./docker/glpi/plugins/<plugin>. Requer PAT do Forgejo com escopo write:repository."
},
{
"id": "KB-PLUGIN-014",
"title": "getFromDBByCrit() não limpa $fields em falha — reutilizar a mesma instância vaza estado entre iterações",
"domain": "plugin-dev",
"tags": [
"glpi",
"glpi11",
"commondbtm",
"getfromdbbycrit",
"bug",
"iteration",
"state-leak"
],
"status": "active",
"severity": "critical",
"path": "records/plugin-dev/KB-PLUGIN-014-getfromdbbycrit-stale-fields.md",
"summary": "id: KB-PLUGIN-014"
},
{
"id": "KB-PLUGIN-015",
"title": "querySelector('.row') colide com elementos de outros plugins no Helpdesk portal",
"domain": "plugin-dev",
"tags": [
"glpi",
"glpi11",
"helpdesk",
"tilesections",
"dom",
"selectors",
"bootstrap",
"cross-plugin-interference"
],
"status": "active",
"severity": "high",
"path": "records/plugin-dev/KB-PLUGIN-015-querySelector-row-collision.md",
"summary": "id: KB-PLUGIN-015"
},
{
"id": "KB-PLUGIN-016",
"title": "\"Bypass de CSRF e Autenticação Nativa (Bearer Token) para APIs Customizadas no GLPI 11\"",
"domain": "plugin-dev",
"tags": [
"glpi-11",
"csrf",
"api",
"jwt",
"oauth",
"auth",
"stateless"
],
"status": "active",
"severity": "high",
"path": "records/plugin-dev/KB-PLUGIN-016-glpi11-csrf-bypass-and-api-auth.md",
"summary": "id: KB-PLUGIN-016"
},
{
"id": "KB-PLUGIN-017",
"title": "Bug do detector de wrapper directory no instalador Mindplace mutilava nomes de arquivos",
"domain": "plugin-dev",
"tags": [
"mindplace",
"marketplace",
"zip",
"extractor",
"install-bug"
],
"status": "active",
"severity": "high",
"path": "records/plugin-dev/KB-PLUGIN-017-mindplace-zip-wrapper-detector-bug.md",
"summary": "id: KB-PLUGIN-017"
},
{
"id": "KB-PLUGIN-018",
"title": "Convenção de wrapper directory para ZIPs de release de plugin GLPI distribuídos via Mindplace",
"domain": "plugin-dev",
"tags": [
"mindplace",
"release",
"zip",
"github-actions",
"workflow"
],
"status": "active",
"severity": "medium",
"path": "records/plugin-dev/KB-PLUGIN-018-plugin-release-zip-wrapper-convention.md",
"summary": "id: KB-PLUGIN-018"
},
{
"id": "KB-PLUGIN-019",
"title": "Arquitetura BFF (Backend For Frontend) e Seguranca via API no GLPI 11 (Plugin MCProtocol)",
"domain": "plugin-dev",
"tags": [
"glpi",
"glpi11",
"mcp",
"api",
"rbac",
"security",
"bff"
],
"status": "active",
"severity": "high",
"path": "records/plugin-dev/KB-PLUGIN-019-mcprotocol-bff-architecture.md",
"summary": "id: KB-PLUGIN-019"
},
{
"id": "KB-PLUGIN-020",
"title": "Roadmap de Evolucao do MCProtocol (Views Semanticas API)",
"domain": "plugin-dev",
"tags": [
"glpi",
"glpi11",
"mcp",
"api",
"roadmap",
"bff"
],
"status": "active",
"severity": "medium",
"path": "records/plugin-dev/KB-PLUGIN-020-mcprotocol-bff-roadmap.md",
"summary": "id: KB-PLUGIN-020"
}
]
}