- trilium_api.py : remove_relation_safe (retrait via attributeId, idempotent),
move_relation_safe (reconnexion = add nouvelle puis remove ancienne, ordre sur)
- mcp_server.py : 2 tools MCP exposes (22 tools au total)
Comble le manque revele par la fusion render_engine.py : le systeme savait
creer une relation mais pas la retirer ni la reconnecter. Rend triviales les
corrections de mesusage et les fusions de hub. Teste de bout en bout.
Comble le manque revele par le test Phase 3 : creation autonome d'entites de la
couche connaissance/technique, la ou seul le pilotage etait creable via MCP.
Tool generique cadre : type valide contre liste blanche, dossier resolu via
trilium_ids.json (pas d'ID en dur), garde-fou anti-doublon, definition posee
seulement pour les concepts. Passe le serveur a 20 tools. Teste de bout en bout.
get_note/update_note/delete_note/get_children : suppression du vocabulaire
'type systeme' perime. get_children liste tout (filtre retire), get_note lit
tout (garde-fou lecture retire), update/delete refusent les notes structurelles
sans label projet. Ferme la derniere trace de l ancien garde-fou dans le code.
- api_context.py : ConceptCreate/Patch, routes /api/concepts, briefing 'Concepts'
- mcp_server.py : get_concepts (ex get_glossaire), tool_get_note garde-fou lecture retire
- redirige type=termeGlossaire vers type=concept partout (lecture, creation, briefing)
- section briefing filtree sur concepts ayant une definition (role lexical)
Corrige le 'glossaire vide' vu au test Phase 3 (code cherchait un type mort).
- _est_editable() dans trilium_api.py : editable si label projet ou type=projet
- tool_update_note + delete_note_safe utilisent ce critere
- tool_get_children : filtre TYPES_SYSTEME retire (transparence)
Corrige : composants techniques editables, get_children ne les masque plus.
Revele par le test Phase 3 (agent bloque sur edition de composant).