Durcit la convention de nommage des projets (dérive constatée : 'Sliding
Automation', 'code_versioning'... au lieu des formes canoniques).
- trilium_api.py : projets_canoniques() lit le référentiel = valeurs du label
projet sur les notes de type=projet (source unique, pas de constante en dur).
Note-projet CodeVersioning créée (manquait).
- mcp_server.py : _valider_projet() branché dans les 6 tools de création
(add_decision/history/backlog, new_conversation, create_entite, add_skill).
Refuse un projet non canonique (suggestion si faute) ou inconnu (renvoi au
processus de création de projet). Ne verrouille pas si référentiel illisible.
- lint_audit.py : VAL-nommage aligné sur le référentiel (attrape casse, espace
ET snake_case ; l'ancien 'contient un espace' ratait code_versioning).
- Données : 79 notes ré-étiquetées vers les 3 formes canoniques.
Quality by design : l'erreur de nommage devient impossible à l'écriture, le
Lint n'est plus que le filet de sécurité.
- 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.
limit passe a None par defaut (ETAPI renvoie tout ; un limit explicite plafonne
volontairement). Corrige un bug critique : tous les briefings (contexte, backlog,
decisions, historique, concepts) sous-estimaient le contenu des qu'une categorie
depassait 50 notes. 96 backlogItems reels contre 50 remontes. Cause-racine du
confident-but-stale. Revele en verifiant le backlog avant reprise.
- _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).