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>
724 lines
20 KiB
JSON
Executable file
724 lines
20 KiB
JSON
Executable file
{
|
|
"version": "1.0.0",
|
|
"last_updated": "2026-07-02",
|
|
"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-INFRA-003",
|
|
"title": "Git dual-push para Forgejo lab + mindtek-dev (sem prompt de credenciais)",
|
|
"domain": "infrastructure",
|
|
"tags": [
|
|
"git",
|
|
"forgejo",
|
|
"dual-push",
|
|
"credentials",
|
|
"sync"
|
|
],
|
|
"status": "active",
|
|
"severity": "medium",
|
|
"path": "records/infrastructure/KB-INFRA-003-git-dual-push-forgejo-lab-mindtek.md",
|
|
"summary": "id: KB-INFRA-003"
|
|
},
|
|
{
|
|
"id": "KB-INFRA-004",
|
|
"title": "\"Forgejo onmind é o origin de desenvolvimento (todo trabalho dev é versionado lá)\"",
|
|
"domain": "infrastructure",
|
|
"tags": [
|
|
"git",
|
|
"forgejo",
|
|
"origin",
|
|
"workflow",
|
|
"dev",
|
|
"sync",
|
|
"credentials"
|
|
],
|
|
"status": "active",
|
|
"severity": "high",
|
|
"path": "records/infrastructure/KB-INFRA-004-forgejo-onmind-dev-origin.md",
|
|
"summary": "id: KB-INFRA-004"
|
|
},
|
|
{
|
|
"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 (LEGADO — GitHub)\"",
|
|
"domain": "plugin-dev",
|
|
"tags": [
|
|
"github",
|
|
"release",
|
|
"secrets",
|
|
"deprecated"
|
|
],
|
|
"status": "deprecated",
|
|
"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"
|
|
],
|
|
"status": "active",
|
|
"severity": "high",
|
|
"path": "records/plugin-dev/KB-PLUGIN-013-mindplace-plugin-publication-runbook.md",
|
|
"summary": "id: KB-PLUGIN-013"
|
|
},
|
|
{
|
|
"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 na geração de ZIP de release de plugin (script mindplace-release.sh)\"",
|
|
"domain": "plugin-dev",
|
|
"tags": [
|
|
"mindplace",
|
|
"forgejo",
|
|
"release",
|
|
"zip",
|
|
"wrapper",
|
|
"mindplace-release-sh"
|
|
],
|
|
"status": "active",
|
|
"severity": "high",
|
|
"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"
|
|
},
|
|
{
|
|
"id": "KB-PLUGIN-021",
|
|
"title": "mcprotocol — Roadmap de Resources e caso de uso N1",
|
|
"domain": "plugin-dev",
|
|
"tags": [
|
|
"mcp",
|
|
"resources",
|
|
"n1",
|
|
"knowledge-base",
|
|
"roadmap"
|
|
],
|
|
"status": "draft",
|
|
"severity": "medium",
|
|
"path": "records/plugin-dev/KB-PLUGIN-021-mcprotocol-resources-n1-roadmap.md",
|
|
"summary": "id: KB-PLUGIN-021"
|
|
},
|
|
{
|
|
"id": "KB-PLUGIN-022",
|
|
"title": "mcprotocol — Padrões de validação e ergonomia em tool inputs",
|
|
"domain": "plugin-dev",
|
|
"tags": [
|
|
"mcp",
|
|
"tools",
|
|
"validation",
|
|
"ergonomics",
|
|
"llm",
|
|
"patterns"
|
|
],
|
|
"status": "active",
|
|
"severity": "medium",
|
|
"path": "records/plugin-dev/KB-PLUGIN-022-mcprotocol-tool-input-patterns.md",
|
|
"summary": "id: KB-PLUGIN-022"
|
|
},
|
|
{
|
|
"id": "KB-PLUGIN-023",
|
|
"title": "mcprotocol — InputValidation extraída como classe utilitária compartilhada",
|
|
"domain": "plugin-dev",
|
|
"tags": [
|
|
"mcp",
|
|
"tools",
|
|
"validation",
|
|
"refactor",
|
|
"patterns"
|
|
],
|
|
"status": "active",
|
|
"severity": "medium",
|
|
"path": "records/plugin-dev/KB-PLUGIN-023-mcprotocol-inputvalidation-extracted.md",
|
|
"summary": "id: KB-PLUGIN-023"
|
|
},
|
|
{
|
|
"id": "KB-PLUGIN-024",
|
|
"title": "mcprotocol — Bug duplo no glpi_delete_item (sucesso silencioso + ProjectTask não exposto em v2)",
|
|
"domain": "plugin-dev",
|
|
"tags": [
|
|
"mcp",
|
|
"bug",
|
|
"glpi",
|
|
"rest-api",
|
|
"delete",
|
|
"error-handling"
|
|
],
|
|
"status": "active",
|
|
"severity": "high",
|
|
"path": "records/plugin-dev/KB-PLUGIN-024-mcprotocol-delete-item-silent-success-bug.md",
|
|
"summary": "id: KB-PLUGIN-024"
|
|
},
|
|
{
|
|
"id": "KB-PLUGIN-025",
|
|
"title": "mcprotocol — Comportamento de timezone em datas sem hora explícita",
|
|
"domain": "plugin-dev",
|
|
"tags": [
|
|
"mcp",
|
|
"tools",
|
|
"validation",
|
|
"timezone",
|
|
"gotcha"
|
|
],
|
|
"status": "active",
|
|
"severity": "low",
|
|
"path": "records/plugin-dev/KB-PLUGIN-025-mcprotocol-date-timezone-handling.md",
|
|
"summary": "id: KB-PLUGIN-025"
|
|
},
|
|
{
|
|
"id": "KB-PLUGIN-026",
|
|
"title": "mcprotocol — Snapshot de roadmap v1.2 (pós-ProjectTask + InputValidation)",
|
|
"domain": "plugin-dev",
|
|
"tags": [
|
|
"mcp",
|
|
"roadmap",
|
|
"snapshot",
|
|
"planning"
|
|
],
|
|
"status": "active",
|
|
"severity": "medium",
|
|
"path": "records/plugin-dev/KB-PLUGIN-026-mcprotocol-roadmap-snapshot-v1.2.md",
|
|
"summary": "id: KB-PLUGIN-026"
|
|
},
|
|
{
|
|
"id": "KB-PLUGIN-027",
|
|
"title": "mcprotocol — Fluxo de release Dev → Prod (manual)",
|
|
"domain": "plugin-dev",
|
|
"tags": [
|
|
"mcp",
|
|
"release",
|
|
"workflow",
|
|
"forgejo",
|
|
"mindplace"
|
|
],
|
|
"status": "active",
|
|
"severity": "medium",
|
|
"path": "records/plugin-dev/KB-PLUGIN-027-mcprotocol-dev-prod-release-flow.md",
|
|
"summary": "id: KB-PLUGIN-027"
|
|
},
|
|
{
|
|
"id": "KB-PLUGIN-028",
|
|
"title": "GLPI 11 — Plugin com menu próprio precisa registrar rights via Profile",
|
|
"domain": "plugin-dev",
|
|
"tags": [
|
|
"glpi11",
|
|
"plugin",
|
|
"profile",
|
|
"rights",
|
|
"menu",
|
|
"sidebar",
|
|
"gotcha"
|
|
],
|
|
"status": "active",
|
|
"severity": "high",
|
|
"path": "records/plugin-dev/KB-PLUGIN-028-glpi11-plugin-rights-and-menu-visibility.md",
|
|
"summary": "id: KB-PLUGIN-028"
|
|
},
|
|
{
|
|
"id": "KB-PLUGIN-029",
|
|
"title": "GLPI 11 — Itemtypes administrativos vs. ativos (semântica de vínculo com Ticket)",
|
|
"domain": "plugin-dev",
|
|
"tags": [
|
|
"glpi11",
|
|
"plugin",
|
|
"design",
|
|
"architecture",
|
|
"ticket",
|
|
"contract",
|
|
"taxonomy"
|
|
],
|
|
"status": "active",
|
|
"severity": "medium",
|
|
"path": "records/plugin-dev/KB-PLUGIN-029-glpi11-administrative-vs-asset-itemtypes.md",
|
|
"summary": "id: KB-PLUGIN-029"
|
|
},
|
|
{
|
|
"id": "KB-PLUGIN-030",
|
|
"title": "\"GLPI 11 — Criação de tabelas exige classe Migration (Executing direct queries is not allowed!)\"",
|
|
"domain": "plugin-dev",
|
|
"tags": [
|
|
"glpi11",
|
|
"plugin",
|
|
"install",
|
|
"database",
|
|
"ddl",
|
|
"migration",
|
|
"gotcha"
|
|
],
|
|
"status": "active",
|
|
"severity": "high",
|
|
"path": "records/plugin-dev/KB-PLUGIN-030-glpi11-migration-class-required-for-ddl.md",
|
|
"summary": "id: KB-PLUGIN-030"
|
|
},
|
|
{
|
|
"id": "KB-PLUGIN-031",
|
|
"title": "\"Runbook — Processo oficial de desenvolvimento de plugins GLPI (DEV → homologação → PROD)\"",
|
|
"domain": "plugin-dev",
|
|
"tags": [
|
|
"runbook",
|
|
"workflow",
|
|
"dev",
|
|
"deploy",
|
|
"forgejo",
|
|
"scaffold",
|
|
"validation",
|
|
"console",
|
|
"processo-oficial"
|
|
],
|
|
"status": "active",
|
|
"severity": "high",
|
|
"path": "records/plugin-dev/KB-PLUGIN-031-plugin-dev-workflow-runbook.md",
|
|
"summary": "id: KB-PLUGIN-031"
|
|
},
|
|
{
|
|
"id": "KB-PLUGIN-032",
|
|
"title": "\"GLPI 11 — Segunda conexão de banco read-only via subclasse de DBmysql\"",
|
|
"domain": "plugin-dev",
|
|
"tags": [
|
|
"glpi11",
|
|
"plugin",
|
|
"database",
|
|
"dbmysql",
|
|
"connection",
|
|
"read-only",
|
|
"external-db",
|
|
"sync"
|
|
],
|
|
"status": "active",
|
|
"severity": "high",
|
|
"path": "records/plugin-dev/KB-PLUGIN-032-glpi11-second-dbmysql-connection.md",
|
|
"summary": "id: KB-PLUGIN-032"
|
|
},
|
|
{
|
|
"id": "KB-PLUGIN-033",
|
|
"title": "\"GLPI 11 — Comandos de console de plugin exigem src/ e namespace de nome plugins:<key>:\"",
|
|
"domain": "plugin-dev",
|
|
"tags": [
|
|
"glpi11",
|
|
"plugin",
|
|
"console",
|
|
"symfony",
|
|
"command",
|
|
"cli",
|
|
"gotcha"
|
|
],
|
|
"status": "active",
|
|
"severity": "high",
|
|
"path": "records/plugin-dev/KB-PLUGIN-033-glpi11-plugin-console-commands.md",
|
|
"summary": "id: KB-PLUGIN-033"
|
|
},
|
|
{
|
|
"id": "KB-PLUGIN-034",
|
|
"title": "\"GLPI 11 — Cifrar credenciais de sistemas externos em itemtype de plugin (GLPIKey)\"",
|
|
"domain": "plugin-dev",
|
|
"tags": [
|
|
"glpi11",
|
|
"plugin",
|
|
"security",
|
|
"credentials",
|
|
"glpikey",
|
|
"encryption",
|
|
"commondbtm",
|
|
"itemtype"
|
|
],
|
|
"status": "active",
|
|
"severity": "high",
|
|
"path": "records/plugin-dev/KB-PLUGIN-034-glpi11-encrypt-external-credentials-itemtype.md",
|
|
"summary": "id: KB-PLUGIN-034"
|
|
},
|
|
{
|
|
"id": "KB-PLUGIN-035",
|
|
"title": "Modelo de dados dos KPIs de Service Desk no GLPI 11 (tools de BI do mcprotocol)",
|
|
"domain": "plugin-dev",
|
|
"tags": [
|
|
"glpi",
|
|
"glpi11",
|
|
"mcp",
|
|
"kpi",
|
|
"bi",
|
|
"tickets",
|
|
"sla",
|
|
"csat"
|
|
],
|
|
"status": "active",
|
|
"severity": "medium",
|
|
"path": "records/plugin-dev/KB-PLUGIN-035-glpi11-service-desk-kpi-data-model.md",
|
|
"summary": "id: KB-PLUGIN-035"
|
|
},
|
|
{
|
|
"id": "KB-PLUGIN-036",
|
|
"title": "\"GLPI 11 — Namespaces obrigatórios para componentes do core (Twig e RichText)\"",
|
|
"domain": "plugin-dev",
|
|
"tags": [
|
|
"glpi11",
|
|
"plugin",
|
|
"twig",
|
|
"namespaces",
|
|
"templaterenderer",
|
|
"richtext",
|
|
"gotcha"
|
|
],
|
|
"status": "active",
|
|
"severity": "medium",
|
|
"path": "records/plugin-dev/KB-PLUGIN-036-glpi11-namespaces-twig.md",
|
|
"summary": "id: KB-PLUGIN-036"
|
|
},
|
|
{
|
|
"id": "KB-PLUGIN-037",
|
|
"title": "\"Plugin redmine — Contrato de API GLPI → Redmine (o quê, como e por quê)\"",
|
|
"domain": "plugin-dev",
|
|
"tags": [
|
|
"redmine",
|
|
"glpi11",
|
|
"plugin",
|
|
"api",
|
|
"rest",
|
|
"integration",
|
|
"impersonation",
|
|
"custom-fields",
|
|
"time-tracking",
|
|
"producao"
|
|
],
|
|
"status": "active",
|
|
"severity": "high",
|
|
"path": "records/plugin-dev/KB-PLUGIN-037-redmine-plugin-api-contract.md",
|
|
"summary": "id: KB-PLUGIN-037"
|
|
}
|
|
]
|
|
}
|