3.6 KiB
#215 — Fusion bloc 1 : barre d'apps commune et références croisées des notes
Programme Fusion (accès centralisé entre ObsiGate, Flowdeck, TikTak et Kanbante). Dépôt programme :
Projets/fusion-trois-apps(épopée ACC-1, issues ObsiGate #5, #6, #7). Contrats :Projets/dracodev-commonsv0.1.0 (contrats/liens-profonds.md,contrats/external_ref.schema.json, snippetui/barre-apps/).
Ce qui est livré
ACC-1.1 — Barre d'apps commune (#5)
Le snippet figé de commons est vendangé (copié, jamais chargé depuis une autre app — la barre survit à l'arrêt des autres applications) :
frontend/draco-barre.css/frontend/draco-barre.js: copie v0.1.0 ;- markup + configuration dans
frontend/index.html, au-dessus de#app(body.has-draco-barajuste la hauteur de.app-containerdansstyle.css).
Phase 1 : navigation entre les quatre applications (ObsiGate marquée
active), sélecteur de domaine mémorisé en localStorage (draco_domain,
même clé que TikTak), recherche = focus de la recherche native, rail =
bouton latéral natif, menu = menu d'en-tête natif. Alertes unifiées et
panneau Spark affichent un message d'arrivée (fédération et agent commun :
phases ultérieures du programme) plutôt que des boutons morts. Les compteurs
croisés viendront avec la fédération ; seul le compteur local de chaque app
est alimenté en phase 1.
ACC-1.3 — Références croisées external_ref (#7)
- Modèle : le schéma figé de commons. La note est propriétaire de ses
références (
owner_type = obsigate.note,owner_id = "<vault>:<chemin>"). - Stockage : JSON par utilisateur dans
data/external_refs/(backend/external_refs.py, même patron quebackend/history.py— pas de base de données). Surchargable parOBSIGATE_EXTERNAL_REFS_DIR. - API (auth +
check_vault_access) :GET /api/refs?vault=&path=— références d'une note ;POST /api/refs{vault, path, url, label?}— création par collage d'URL profonde ; le parseur reconnaît les formes du contrat (TikTak?task=/?list=, ObsiGate#file=, Flowdeck/pages///collections/, issue Gitea = carte Kanbante) et répond 422 explicite sinon ;DELETE /api/refs/{id}.
- UI : section « Liens » en fin de note — liste avec pastille de couleur
de l'app cible, formulaire d'ajout, retrait en un clic. Rendue par le
module autonome
frontend/draco-liens.js, branché sur l'événementobsigate:file-renderedquerenderFileémet (point d'extension documenté dansfrontend/app.js).
ACC-1.2 — Notes projetées TikTak (#6)
La synchro TikTak ↔ ObsiGate écrit tiktak_id: <id> dans le frontmatter des
fichiers projetés. Le module draco-liens.js le détecte (lecture du brut via
/api/file/{vault}/raw) et affiche un bandeau « Tâche TikTak projetée » avec
le bouton « Ouvrir dans TikTak » (https://tiktak.dracodev.net/?task=<id>),
au lieu de traiter la note comme une note ordinaire.
Limites assumées (v1)
- Le libellé d'une référence est un instantané (titre par défaut dérivé de l'URL ou libellé libre) ; le rafraîchissement automatique du titre viendra avec la fédération MCP (phase 3 du programme).
- Un lien dont la cible a disparu n'est pas détecté automatiquement
(
statusresteok) — la marque « cible introuvable » viendra avec la couche données. - La section « Liens » n'apparaît que dans la vue lecture d'une note (pas dans l'éditeur).
Tests
tests/test_external_refs.py : parseur (6 formes reconnues, 7 refusées),
stockage (cycle + isolation par utilisateur), API (cycle complet, 422, 404,
403 vault inconnu).