# 04 — Model bottleneck matrix

Classificazione delle istruzioni significative secondo la tassonomia del mandato (§7) con azione raccomandata (§8.1). Evidenze complete nei raw JSON e in `11-evidence-index.csv`. Branch: BOTH = presente in master e non toccata dal branch candidato.

| # | Componente | Istruzione | Classificazione | Problema | Impatto | Evidenza | Azione | Branch |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 1 | shared-agent-rules + sql-node | Guardrail SQL: read-only, no SELECT *, parameterize, explain | INVARIANT (+ enforcement code-side in sql-node) | Nessuno | — | GLOBAL.md:12,30; sql-node/index.js:248-250 | KEEP | BOTH |
| 2 | mcp-coldfusion-developer | cf_bridge.evaluate solo ispezione pura, niente side effect | TOOL_CONTRACT_REQUIRED + POLICY_REQUIRED — **enforcement server-side PARZIALE** (corretto 2026-07-20): esiste una denylist deterministica lato CF (`mcp_agent.cfm:134-139`: cfhttp, cfquery, cfexecute, cfregistry, cffile, cfdirectory, cfmail, createObject(, invoke() ma non è una sandbox — restano possibili bypass, funzioni script non elencate (es. equivalenti script dei tag) e side effect indiretti via `Evaluate` | Il contratto MCP-side non dichiara nulla (nessuna annotation, descrizione generica); la skill resta difesa in profondità, non unica barriera | Alto (esecuzione CFML con filtro incompleto) | skills/mcp-coldfusion-developer/SKILL.md:64; cf-node/index.js:46-72; cf-node/mcp_tool/mcp_agent.cfm:134-139 | KEEP (skill) + MOVE_TO_TOOL_SCHEMA (description/annotation conservative, SKAUD-018) + security review della denylist (SKAUD-026) | BOTH |
| 3 | mcp-memory-operator + GLOBAL.md | Igiene memoria: no segreti/token/rumore, search-before-write | POLICY_REQUIRED | Solo duplicazione wording prosa/hook | Basso | GLOBAL.md:57-70; SKILL.md:24-27 | KEEP | BOTH |
| 4 | shared-agent-rules ×3 + 2 hook | ProjectFS-first per letture filesystem | PROJECT_SPECIFIC | 5 formulazioni indipendenti della stessa regola (2 eseguibili divergenti) | Medio (drift, istruzioni incoerenti in sessione) | raw B, multi_owner #2 | KEEP + consolidare su fonte unica | BOTH |
| 5 | GLOBAL.md + hook | Git MCP-first sui comandi git read-only | PROJECT_SPECIFIC / HEURISTIC_GUIDANCE | Hint emesso anche quando la shell è più adatta (es. batch preflight) | Basso | GLOBAL.md:28; sophia-user-prompt-submit.mjs:786-805 | MAKE_CONDITIONAL (esenzione esplicita per operazioni non supportate/batch) | BOTH |
| 6 | AGENTS.md §5 + SUBAGENTS.md | Hotword !quick/!agents; subagents opt-in, scopo = cost optimization | POLICY_REQUIRED (scelta di governance esplicita) | Prosa duplicata in 2 file | Basso | AGENTS.md:55-61; SUBAGENTS.md:11-14 | KEEP + dedupe doc | BOTH |
| 7 | TOKEN_DISCIPLINE.md + GLOBAL.md | Terse mode, divieto dump log/JSON/diff | in parte MODEL_COMPENSATION, in parte HEURISTIC_GUIDANCE | I modelli frontier gestiscono già la verbosità; il divieto rigido può degradare risposte che beneficiano di dettaglio | Medio | TOKEN_DISCIPLINE.md:1-64; GLOBAL.md:103-115 | REQUIRES_ABLATION (ABL-13) + consolidare i 2 file | BOTH |
| 8 | mcp-master-orchestrator | Frontmatter che include "technical analysis that starts from tickets..." e lunga lista domini | MODEL_COMPENSATION (spinge a orchestrare ciò che un frontier fa direttamente) | Potenziale decomposizione superflua su task che un singolo modello completa; costo handoff | Alto (è il bottleneck n.1 candidato) | orchestrator SKILL.md:3,12-30; overlap E #1 | MAKE_CONDITIONAL + REQUIRES_ABLATION (ABL-01/03/13) | BOTH |
| 9 | mcp-technical-analyst | Gate pass/fail verificabili di routing | HEURISTIC_GUIDANCE ben fatta | Nessuno | — | SKILL.md:61-71 | KEEP (pattern da replicare) | BOTH |
| 10 | mcp-browser-automation | Sequenza obbligatoria 14 step per CDP attach | TOOL_CONTRACT_REQUIRED (compensa mega-tool a 38 azioni senza stati validi) | Fragile: dipende dalla memoria del modello; ogni cambio al tool rompe la skill | Medio | SKILL.md:17-36; playwright-node/index.js:1591-1704 | MOVE_TO_TOOL_SCHEMA (in attesa: KEEP) | BOTH |
| 11 | mcp-office-expert | Copia sempre il file prima di write (in-place non reversibile); list_paragraphs prima di edit | INVARIANT (conservazione dati) + TOOL_CONTRACT_REQUIRED | Il tool non ha dry-run/backup/versioning | Alto se rimossa | SKILL.md:23,31,87; office-node (nessuna annotation) | KEEP + tool improvement (backup/dry-run in office-node) | BOTH |
| 12 | mcp-docs-navigator | Ordine obbligatorio tag-first; correlate apply:false prima di apply:true; confirm_replace solo dopo verifica | INVARIANT (dry-run prima di applicare) + TOOL_CONTRACT_REQUIRED | Sequencing vive solo nella skill; schema con operation/mode/scope stringhe libere | Medio | SKILL.md:12-58; docs-node/index.js:2302-2427 | KEEP + MOVE_TO_TOOL_SCHEMA (enum + descrizioni per-azione) | BOTH |
| 13 | mcp-memory-operator | Lock della superficie tool ("8 tool reali, non promettere update/delete/import...") | TEMPORARY_WORKAROUND (legato alla milestone M2 del server) | Diventa OBSOLETE appena il server evolve; nessun criterio di scadenza | Medio | SKILL.md:39-52 | VERSION (legare a versione server + criterio di revisione) | BOTH |
| 14 | svg evals | Policy Windows "inkscape primary, mai rsvg-convert" hardcoded negli eval | ENVIRONMENT_BOUND / TEMPORARY_WORKAROUND | Rompe gli eval se cambia la strategia di export | Basso | evals.json:132-183 | VERSION (metadata freshness + fonte) | BOTH |
| 15 | ai-documents-validation | Path assoluto E:\ai-documents-validation nell'eval | PROJECT_SPECIFIC hardcoded | Non portabile; fallisce su altre macchine | Basso | evals.json:12 | REMOVE_CANDIDATE (parametrizzare) | BOTH |
| 16 | sophia-user-prompt-submit.mjs | Tabelle DOMAIN_KEYWORDS/SKILL_HINTS hand-curated (+3) sopra il catalogo (+1) | MODEL_COMPENSATION (il sistema di hint esiste perché i modelli non conoscono le skill locali) + PROJECT_SPECIFIC | Doppia curatela dei dati di routing; drift silenzioso | Alto per manutenzione | :249-267,289-306 | REFACTOR_ROUTING graduale: derivare dal catalogo/semantic overrides (il branch prepara esattamente questo) | CHANGED_BY_BRANCH (parziale) |
| 17 | 8+ SKILL.md | Escalation template a analyst/orchestrator ripetuto | HEURISTIC_GUIDANCE (duplicazione intenzionale da template) | Solo costo di manutenzione | Basso | raw E repeated #1-2 | KEEP | BOTH |
| 18 | 4 SKILL.md | "Non inventare dati/requisiti/path" | INVARIANT | Nessuno | — | raw E repeated #5 | KEEP | BOTH |
| 19 | grid-ui-debugger + frontend-perf | "Fix verificato solo dopo rebuild/reload pulito" — wording indipendente nei 2 file | INVARIANT con drift di formulazione | Divergenza futura delle due versioni | Basso | grid:32-34; perf:100-102 | KEEP + unificare wording (reference condivisa) | BOTH |
| 20 | analytics-node + skill | Delete two-step dry-run→confirm_plan_id | INVARIANT (già enforced dal tool; skill aggiunge "se il piano cambia, rifai dry-run") | Nessuno — miglior contratto del repo | — | analytics-node/src/index.ts; SKILL.md:83-93 | KEEP (pattern di riferimento per gli altri server) | BOTH |
| 21 | GLOBAL.md | "Minimal skill map" (11 voci vs 21 skill) | OBSOLETE (stale) | Terza lista di routing divergente | Medio | GLOBAL.md:43-55 | DEPRECATE (sostituire con rimando) | BOTH |
| 22 | guida viva §2.7 | 2 regole runtime-integrator assenti dalla SKILL.md (che sarebbe autoritativa) | UNCERTAIN (drift di ownership) | Fonte di verità ambigua | Medio | guide:78-79 vs SKILL.md:36-45 | Riconciliare (decidere owner) | BOTH |
| 23 | mantis-node | add_note forza view_state=private non parametrizzabile | POLICY_REQUIRED (privacy) ma non dichiarata nello schema | Comportamento sorprendente ma protettivo | Basso | mantis-node/index.js:113-124 | KEEP + documentare nello schema | BOTH |
| 24 | Branch: routing-ambiguity-gate | enabled:false default; policy mode 'off'; resolver non cablato | POLICY_REQUIRED (default sicuro) | Solo osservabilità mancante (v. 06) | — | gate:16-18; resolver:11-19 | KEEP (default) + ADD telemetry | BRANCH_ONLY |
| 25 | Branch: test-affected.mjs | package.json rimosso dai file transversal | UNCERTAIN (policy CI cambiata fuori tema) | Possibile mascheramento di regressioni | Medio | raw D files #18 | Scorporare/motivare in PR separata | INTRODUCED_BY_BRANCH |

## Sintesi delle risposte alla domanda centrale

- **Conoscenza durevole (KEEP)**: guardrail di sicurezza dati (righe 1, 3, 11, 12, 18, 19, 20, 23), gate di routing verificabili (9), template di escalation (17).
- **Compensazioni per tool deboli (da spostare nei tool)**: righe 2, 10, 11-12 parziali — il cluster più grande dell'audit (21 istanze documentate in `tool-contracts.raw.json.skill_compensations`). Non sono compensazioni per *modelli* deboli: restano necessarie finché i contratti non migliorano, per qualunque modello.
- **Compensazioni per modelli precedenti (candidate ablation)**: righe 7, 8, 16 — token discipline rigida, spinta all'orchestrazione, sistema di keyword curate. Nessuna va rimossa senza gli ablation ABL-01/02/03/13.
- **Obsolete/da versionare**: righe 13, 14, 15, 21, 22.
