docs: marca bugs do mcprotocol como resolvidos em v1.2.0
KB-024 (silent-success do delete): ambas correções implementadas — makeRequest propaga 4xx/5xx (commit 09ce92c) e glpi_projecttask_delete via ORM (0ca94fc). KB-023 (InputValidation): arquivos agora realmente implementados; corrige itens do rascunho que não foram feitos (buildInputFromArgs, project_update estendido). KB-026 (snapshot): atualizado para v1.2.0 — 19 tools, ProjectTask CRUD, métricas. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
c5947a39d8
commit
f072b1cde7
3 changed files with 61 additions and 37 deletions
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in a new issue