diff --git a/records/plugin-dev/KB-PLUGIN-023-mcprotocol-inputvalidation-extracted.md b/records/plugin-dev/KB-PLUGIN-023-mcprotocol-inputvalidation-extracted.md index e5a0b41..64b06e1 100644 --- a/records/plugin-dev/KB-PLUGIN-023-mcprotocol-inputvalidation-extracted.md +++ b/records/plugin-dev/KB-PLUGIN-023-mcprotocol-inputvalidation-extracted.md @@ -11,7 +11,7 @@ tags: status: active severity: medium created_at: 2026-05-26 -updated_at: 2026-05-26 +updated_at: 2026-06-22 applies_to: - glpi-11 - mcprotocol-plugin @@ -39,11 +39,24 @@ Extraído `src/InputValidation.php` (namespace `GlpiPlugin\Mcprotocol`) com mét ## Mudanças realizadas -- **Novo arquivo:** `src/InputValidation.php` -- **Refatorado:** `src/ProjectTools.php` — removeu helpers privados, agora chama `InputValidation::*`. Também ganhou método `buildInputFromArgs($args, $isUpdate)` que centraliza a montagem do input para create/update (DRY). -- **Estendido:** `glpi_project_update` agora aceita os mesmos campos do create (datas, estado, tipo) — antes só aceitava name/content/percent_done. -- **Novo arquivo:** `src/ProjectTaskTools.php` — usa `InputValidation` desde o início, com 2 tools: `glpi_projecttask_create` e `glpi_projecttask_get`. -- **Atualizado:** `src/ToolRegistry.php` — registra `ProjectTaskTools::getTools()` no merge. +> ⚠️ **Reconciliação 2026-06-22.** A versão original deste KB (26/05) era aspiracional — +> os arquivos só foram **realmente implementados em 2026-06-22** (plugin v1.2.0, repo dev +> `origin`). A lista abaixo reflete o que de fato entrou; alguns itens previstos no +> rascunho original NÃO foram feitos e estão marcados como 🔲 planejado. + +- ✅ **Novo arquivo:** `src/InputValidation.php` (commit `e588556`) — métodos + `resolveReference`, `normalizeDate`, `validateDateRange`, `validateIntRange`. +- ✅ **Refatorado:** `src/ProjectTools.php` (commit `2e4cdf7`) — `resolveStateId` delega a + `InputValidation::resolveReference`, eliminando a duplicação. Mantém fallback de 0. +- 🔲 **Planejado (não feito):** método `buildInputFromArgs($args, $isUpdate)` em + `ProjectTools` — `handleCreate` ainda monta o input inline. +- 🔲 **Planejado (não feito):** estender `glpi_project_update` com datas/estado/tipo — + hoje ainda aceita só `name`/`content`/`percent_done`. +- ✅ **Novo arquivo:** `src/ProjectTaskTools.php` (commit `0ca94fc`) — usa `InputValidation` + desde o início, com **4 tools**: `glpi_projecttask_get/create/update/delete` (mais do + que as 2 previstas). O `buildInput($args, $isUpdate)` ali implementa o padrão DRY de + montagem de input que era previsto para o ProjectTools. +- ✅ **Atualizado:** `src/ToolRegistry.php` (commit `0ca94fc`) — registra `ProjectTaskTools::getTools()` no merge. ## Convenções de uso diff --git a/records/plugin-dev/KB-PLUGIN-024-mcprotocol-delete-item-silent-success-bug.md b/records/plugin-dev/KB-PLUGIN-024-mcprotocol-delete-item-silent-success-bug.md index d5d2e00..973925d 100644 --- a/records/plugin-dev/KB-PLUGIN-024-mcprotocol-delete-item-silent-success-bug.md +++ b/records/plugin-dev/KB-PLUGIN-024-mcprotocol-delete-item-silent-success-bug.md @@ -12,7 +12,7 @@ tags: status: active severity: high created_at: 2026-05-26 -updated_at: 2026-05-26 +updated_at: 2026-06-22 applies_to: - glpi-11 - mcprotocol-plugin @@ -150,10 +150,13 @@ docker exec glpi11-mariadb mariadb -uglpi -pglpi_local_dev glpi \ ## Status -- Bug **identificado** e **documentado** -- Correção #1 (`makeRequest`) priorizada — afeta TODAS as tools genéricas REST -- Correção #2 (`glpi_projecttask_delete`) pode ser implementada junto da próxima rodada do roadmap -- Correção #3 (probe/documentação) — backlog +- ✅ **RESOLVIDO em 2026-06-22** (plugin v1.2.0, repo dev `origin`). +- ✅ Correção #1 (`makeRequest` propaga 4xx/5xx) — commit `09ce92c`. `makeRequest` + agora lança exception em HTTP ≥400, capturada no `callTool` e devolvida como erro + JSON-RPC visível. Resolve o silent-success de TODAS as tools genéricas REST. +- ✅ Correção #2 (`glpi_projecttask_delete` via ORM) — commit `0ca94fc`. Implementada + em `src/ProjectTaskTools.php` junto com get/create/update, todas via ORM `\ProjectTask`. +- 🔲 Correção #3 (probe/documentação de itemtypes quebrados na v2) — segue no backlog. ## Lições diff --git a/records/plugin-dev/KB-PLUGIN-026-mcprotocol-roadmap-snapshot-v1.2.md b/records/plugin-dev/KB-PLUGIN-026-mcprotocol-roadmap-snapshot-v1.2.md index c8c32a8..fa17518 100644 --- a/records/plugin-dev/KB-PLUGIN-026-mcprotocol-roadmap-snapshot-v1.2.md +++ b/records/plugin-dev/KB-PLUGIN-026-mcprotocol-roadmap-snapshot-v1.2.md @@ -52,9 +52,11 @@ Esta KB é um **ponto de salvamento** do estado do plugin mcprotocol. Serve de r | `glpi_ticket_add_solution` | ✅ | | | `glpi_project_get` | ✅ | Retorna tarefas (via `$DB` direto, não hierárquico) | | `glpi_project_create` | ✅ | Tasks/subtasks aninhadas, estado por nome, `plan_*_date` (schema corrigido em `4ddd00b`) | -| `glpi_project_update` | ✅ | Apenas `name`/`content`/`percent_done` — **NÃO** estendido com datas/estado | -| `glpi_projecttask_get` | 📋 planejado | Nunca implementado | -| `glpi_projecttask_create` | 📋 planejado | Nunca implementado | +| `glpi_project_update` | ✅ | Apenas `name`/`content`/`percent_done` — ainda **NÃO** estendido com datas/estado | +| `glpi_projecttask_get` | ✅ | Implementado em v1.2.0 (ORM) | +| `glpi_projecttask_create` | ✅ | Implementado em v1.2.0 (ORM, hierarquia, estado por nome) | +| `glpi_projecttask_update` | ✅ | Implementado em v1.2.0 (ORM) | +| `glpi_projecttask_delete` | ✅ | Implementado em v1.2.0 (ORM — bypassa REST v2) | | `glpi_ticket_search_by_status` | ✅ | | ### Tools genéricas (REST API v2) @@ -71,12 +73,12 @@ Esta KB é um **ponto de salvamento** do estado do plugin mcprotocol. Serve de r | Componente | Status | |---|---| -| `src/Server.php` | ✅ Funcional. **Pendente:** validar HTTP status em `makeRequest` (KB-024 Correção #1) | -| `src/ToolRegistry.php` | ✅ Registra **Ticket + Project** apenas (não ProjectTask) | -| `src/InputValidation.php` | ❌ Não existe — planejado em KB-PLUGIN-023, nunca implementado | -| `src/TicketTools.php` | ✅ Padrão antigo de validação inline (sem camada compartilhada) | -| `src/ProjectTools.php` | ✅ Validação inline; suporta `plan_*_date` e estado por nome | -| `src/ProjectTaskTools.php` | ❌ Não existe — planejado, nunca implementado | +| `src/Server.php` | ✅ Funcional. `makeRequest` valida HTTP status e propaga 4xx/5xx (v1.2.0) | +| `src/ToolRegistry.php` | ✅ Registra **Ticket + Project + ProjectTask** (v1.2.0) | +| `src/InputValidation.php` | ✅ Implementado em v1.2.0 — helpers compartilhados (KB-PLUGIN-023) | +| `src/TicketTools.php` | ✅ Padrão antigo de validação inline (candidato a migrar p/ InputValidation) | +| `src/ProjectTools.php` | ✅ `resolveStateId` usa InputValidation; suporta `plan_*_date` | +| `src/ProjectTaskTools.php` | ✅ Implementado em v1.2.0 — CRUD via ORM | | `src/Boot.php` | ✅ Registra path stateless via `SessionManager` | | `ajax/mcp.php` | ✅ Endpoint stateless com JWT (RS256 / oauth.pub) | @@ -132,31 +134,37 @@ Ambos comprovam o padrão de tools nativo funcionando em fluxo real de comercial 9. **SSE / Streamable HTTP completo** — notificações push (novo ticket, SLA estourando) 10. **OAuth2 com escopos finos** — separar permissões por escopo de tool -## Métricas atuais (reconciliadas em 2026-06-22) +## Métricas atuais (v1.2.0 — 2026-06-22) -- **Tools registradas:** 15 (9 domínio + 6 genéricas) - - Domínio: 6 de Ticket (`get`, `bi_stats`, `create`, `update`, `add_followup`, `add_solution`) + 3 de Project (`get`, `create`, `update`) - - Genéricas: `get_items`, `get_item`, `add_item`, `update_item`, `delete_item`, `ticket_search_by_status` -- **Arquivos em `src/`:** `Boot`, `Server`, `ToolRegistry`, `TicketTools`, `ProjectTools` (5) +- **Tools registradas:** 19 (13 domínio + 6 genéricas) + - Domínio Ticket (6): `get`, `bi_stats`, `create`, `update`, `add_followup`, `add_solution` + - Domínio Project (3): `get`, `create`, `update` + - Domínio ProjectTask (4): `get`, `create`, `update`, `delete` + - Genéricas (6): `get_items`, `get_item`, `add_item`, `update_item`, `delete_item`, `ticket_search_by_status` +- **Arquivos em `src/`:** `Boot`, `Server`, `ToolRegistry`, `InputValidation`, `TicketTools`, `ProjectTools`, `ProjectTaskTools` (7) - **Casos reais validados:** 2 projetos, 34 tarefas (VALGROUP, TCERJ) -- **Bugs ativos:** 3 (1 alta, 1 média, 1 baixa) -- **Versão atual do plugin:** 1.1.1 +- **Bugs ativos:** 1 (baixa — TZ de datas, KB-PLUGIN-025). KB-024 resolvido. +- **Versão atual do plugin:** 1.2.0 (em dev `origin`, aguardando homologação) -## O que realmente entrou desde o snapshot original - -Reconciliação 2026-06-22 (commits no repo dev `forgejo`): +## O que entrou (commits no repo dev `origin`) +**Rodada de reconciliação (manhã 2026-06-22):** - `dfe2f77` — `.gitignore` ignora AppleDouble (`._*`) do macOS - `12d209c` — fix: `glpi_get_items` usa `range` em vez de `limit` + `order` em maiúsculas - `e49d20d` — feat: tool de domínio `glpi_ticket_bi_stats` - `4ddd00b` — fix: `plan_start_date`/`plan_end_date` declarados no `inputSchema` do ProjectTools -## Roadmap NÃO implementado (rebaixado de "feito" para "planejado") +**Rodada v1.2.0 (correção dos bugs do roadmap):** +- `e588556` — feat: `src/InputValidation.php` (helpers compartilhados, KB-023) +- `2e4cdf7` — refactor: `ProjectTools::resolveStateId` delega a InputValidation +- `0ca94fc` — feat: `src/ProjectTaskTools.php` CRUD via ORM (KB-024 Correção #2) +- `09ce92c` — fix: `Server::makeRequest` propaga 4xx/5xx (KB-024 Correção #1, resolve silent-success) +- `900da62` — chore(release): bump 1.1.1 → 1.2.0 -Itens que o snapshot original dava como prontos, mas que nunca existiram: +## Roadmap ainda em aberto -- `src/InputValidation.php` — camada de validação compartilhada (KB-PLUGIN-023) -- `src/ProjectTaskTools.php` — `glpi_projecttask_get` / `glpi_projecttask_create` -- `glpi_project_update` estendido com datas/estado -- `Server.php::makeRequest` validando HTTP status (Correção #1 do KB-024 — ainda aberto) -- `glpi_projecttask_delete` / `glpi_projecttask_update` +- 🔲 `glpi_project_update` estendido com datas/estado/tipo (hoje só name/content/percent_done) +- 🔲 `ProjectTools::buildInputFromArgs` — `handleCreate` ainda monta input inline +- 🔲 Migrar `TicketTools` para `InputValidation` (dívida técnica — P2) +- 🔲 KB-024 Correção #3 — probe/documentação de itemtypes quebrados na v2 +- 🔲 TZ contextual em `normalizeDate` (KB-PLUGIN-025, severidade baixa)