Files
flowdeck/ROADMAP.md
T
bruno b3c90efa73
FlowDeck CI / test (push) Failing after 18s
FlowDeck CI / docker (push) Skipped
v5.4.1 Partage : correctif permissions + autocomplete membres (inclut v5.4.0 Interactions de bloc)
- Fix "Invalid permission" : le client envoyait editor/commenter/viewer alors que
  l'API attend view/comment/edit (invitePermission -> 'edit', menu participants aligné)
- PUT /api/pages/{page_id}/share/{share_id} : mise à jour de permission persistée
- Autocomplete des membres existants dans le champ d'invitation (search users + debounce,
  navigation clavier, envoi user_id pour lier le partage au compte)
- Upsert anti-doublon dans le partage + trim email backend
- 12 tests tests/test_sharing.py ; suite 319 verte (+3 PDF pre-existants)

Sans oublier v5.4.0 (non publie jusque-la) :
- Undo/Redo (Ctrl+Z/Ctrl+Shift+Z/Ctrl+Y), duplicate (Ctrl+D), menu de bloc (turn
  into, couleurs, lien #fdblk-, move to, delete), drag&drop multi-selection,
  slash "Actions", en-tetes de tableau (has_header/first_col_header) + exports,
  sync realtime immédiat apres mutation ; 9 tests test_block_interactions.py
2026-09-08 09:34:41 -04:00

39 KiB
Raw Blame History

Roadmap FlowDeck — Notion Clone

Vision: Copie conforme de l'UI/UX Notion, intégrée à Gitea/GitHub. MVP en production : v4.0.0 — authentification locale/OAuth, pages blocs, sidebar, library, share/publish, intégrations. Branche principale : main (production) · develop (intégration) · feat/* (features).

🏗️ Stratégie de branches

main       ──●────────────●────── production (tags vX.Y.Z)
              \          /
develop       ●──●──●──●────── intégration continue
                  \  \  \
feat/xxx          ●  ●  ●──── feature branches
  • main : code en production, déploiement Docker automatique
  • develop : branche d'intégration, merges des feat/*
  • feat/<nom> : une branche par feature/fix, PR → code review → merge dans develop
  • Tags vX.Y.Z sur main pour chaque release

Workflow :

git checkout -b feat/mon-truc develop
# ... coder, commit, push ...
# Créer une PR feat/mon-truc → develop sur Gitea
# Après review + CI verte → merge
# Pour release: PR develop → main + tag vX.Y.Z

Règles :

  • Ne jamais commiter directement sur main
  • Une branche = une feature / un fix
  • Tests passent avant merge (CI Gitea Actions)
  • Commit + push après chaque modification significative

Completed

v0.2.0 ✅ — Base

Dashboard + Board Kanban + Gitea sync + Notes + Docker

v0.3.0 ✅ — Auth

OAuth2 Gitea, token par utilisateur, CSRF, rate limiting, webhooks

v0.4.0 ✅ — UI Notion

Layout 3 zones (sidebar 240px + topbar 44px), dark mode, CSS 31KB, Alpine.js

v0.5.0 ✅ — Kanban

Colonnes, groupes, cartes enrichies, drag&drop, modale détail, checklists, commentaires

v0.6.0 ✅ — Table View

6 colonnes triables, groupes rétractables

v0.7.0 ✅ — Filtres & Tri

Filtres cumulables AND, status dropdown, sort multi-critères

v0.8.0 ✅ — Vues Spéciales

Status Overview (donut SVG), Team Load (barres), Detailed Board

v0.9.0 ✅ — Backend

Propriétés custom, AI keywords, sync API, 12 tables DB

v1.0.0 ✅ — Production

  • FastAPI lifespan (deprecation fix)
  • 28 tests — 5 vues, filtres, tris, APIs, CSRF, CORS, DB
  • CI/CD Gitea Actions (.gitea/workflows/ci.yml)
  • CHANGELOG.md, ARCHITECTURE.md à jour
  • Version 1.0.0 partout (main.py, api.py, health)
  • Tag git v1.0.0

v1.1.0 ✅ — Pages & Sidebar

  • Pages Markdown avec arbre imbriqué (parent_id, sort_order)
  • Block editor mode (content_format='blocks', JSON storage)
  • Soft delete → Trash → Restore → Permanent delete
  • Drag & drop réorganisation pages
  • Sidebar Notion-style avec sections Recents/Private/Shared
  • "+ New page" footer button
  • Workspace header avec avatar + chevron toggle

v1.2.0 ✅ — Éditeur Notion

  • Slash menu (/) 15 commandes fonctionnelles
  • Navigation clavier (flèches, Enter, Escape)
  • Placeholders Notion-style (Heading 1/2/3/4, Toggle, Quote, Code)
  • Suppression outline blanc sur les blocs
  • Heading 4 support
  • Breadcrumbs contextuels (workspace > projet > page)

v1.3.0 ✅ — Database Concept

  • Tables collections, collection_pages, collection_views
  • Rétrocompatibilité Gitea via GiteaBoardCompat
  • Router /db — API CRUD collections + pages (12 endpoints)
  • 34/34 tests passent

v1.4.0 ✅ — Propriétés Avancées

  • Table collection_properties — 21 types Notion
  • Service property_types.py — validation, formatage, auto-values
  • 38/38 tests passent

v1.5.0 ✅ — Relations & Rollups

  • Type relation — lien bidirectionnel entre collections
  • Type rollup — aggregation via relation (COUNT, SUM, AVG, etc.)
  • Type formula — moteur d'expressions (19 fonctions)
  • Formula engine + Rollup engine
  • 43/43 tests passent

v1.6.0 ✅ — Vues Manquantes

  • Calendar, Gallery, List, Timeline, Table views
  • View tabs navigation
  • 49/49 tests passent

v1.7.0 ✅ — Vues Améliorées

v1.8.0 ✅ — Sub-items & Dépendances

  • View config API, Save view as
  • Sub-items (parent_id auto-référence)
  • Status aggregate, Dependencies (blocking constraint)
  • 56/56 tests passent

v1.9.0 ✅ — My Tasks & Dashboard Unifié

  • Vue /my-tasks — agrège pages assignées à l'utilisateur
  • Groupement par collection, filtres globaux
  • 60/60 tests passent

v2.0.0 ✅ — Éditeur Complet & Multi-Utilisateurs

  • Workspaces, Comments, Page History, Favorites
  • Database Templates, Page Templates, CSV Import/Export
  • Public Sharing
  • 67/67 tests passent

v2.1.0 ✅ — Workspace Local & Arborescence

v2.2.0 ✅ — Tags & Recherche Avancée

v2.3.0 ✅ — Multi-Vues Workspace & Preview Panel

v2.4.0 ✅ — Tags Personnalisés par Utilisateur

v2.5.0 ✅ — Administration Avancée

v2.6.0 ✅ — My Account & Auth Locale

v2.7.0 ✅ — Intégration Gitea Phase 1

v2.7.1 ✅ — Private Pages Gitea

v2.8.0 ✅ — Gitea Phase 2

  • Créer fichiers dans le repo (New file UI + API PUT)
  • Upload fichiers binaires (POST /upload, drag-drop)
  • Syntax highlighting via Prism.js CDN
  • Labels Gitea → tags FlowDeck (POST /sync-labels, 16 labels importés)
  • Historique commits par fichier (GET /commits?path=)

v2.9.0 ✅ — GitHub OAuth Provider

  • GitHubProvider dans app/auth/providers.py
  • GitHubAdapter dans app/services/github_adapter.py
  • Config GitHub dans .env.example

v3.0.0 ✅ — UX Professionnelle

  • Multi-sélection (checkboxes + Shift/Ctrl-click dans le sidebar)
  • Raccourcis clavier (Ctrl+N, F2, Delete, Escape, Ctrl+S)
  • Inline rename (double-clic → champ inline)
  • Loading skeletons (animations pulse dans workspaces + file viewer)
  • Grid/card view (mode grille/vignettes)
  • Table sorting (tri par colonnes)
  • Sélecteur de vue: Tree, List, Details, Title, Content (5 modes)
  • Preview Panel latéral (contenu, métadonnées, tags, actions)
  • Tri par date (Oldest/Newest)

v4.0.0 ✅ — Accounts, Integrations & Sharing (MVP)

  • auth_method sur users (local/gitea/github)
  • Badge OAuth dans sidebar
  • Settings page avec Connect/Disconnect Gitea + GitHub
  • Sidebar rules (Private = distant seulement, Trash local-only)
  • Library page avec tabs + filtres source (All/Local/Gitea/GitHub)
  • Modale Share (2 tabs: Share + Publish)
  • Page publique /p/<slug> (no auth, rendu HTML)
  • Table page_shares, colonnes is_published, is_shared, share_mode
  • Table recents — tracking automatique
  • Édition unifiée local/distant (même UI, bouton Commit pour Gitea)
  • 133 tests passent

🔜 Prochaines versions

v4.0.1 — Onboarding & Polish ✅ (2026-07-18)

Objectif : rendre l'app utilisable dès la première visite, sans friction. COMPLETED.

  • Landing page / pour visiteurs non-auth — template landing.html, design Notion dark
  • Page /auth/register GET — formulaire d'inscription dédié (tab register actif)
  • Redirection / intelligente — non-auth → landing, auth sans Gitea → local workspace, auth+Gitea → dashboard
  • Empty states — déjà présents dans local workspace (« Welcome to your Workspace »)
  • Page 404 stylisée — thème Notion sombre, JSON pour /api/*, HTML pour le reste
  • Unifier les routes API — /api/pages GET/POST → 307 redirect vers /board/api/pages
  • Page Settings — lien déjà présent dans le menu utilisateur (Settings → /accounts/settings)

v4.0.2 — Qualité & Robustesse ✅ (2026-07-18)

Objectif : zéro crash, zéro regression, DX impeccable.

  • Gestion d'erreurs — try/catch dans create_page, message user-friendly (500 JSON)
  • Validation inputs — login/register déjà validés, titre vide → "Untitled"
  • Rate limiting — 100 req/min/IP déjà en place, testé OK
  • Session expiry UX — redirect avec ?expired=1, bannière sur la page login
  • CSRF token refresh — auto-refresh sur 403, endpoint /api/csrf-token
  • Mobile responsive — sidebar slide-in, modales centrées, landing adaptative
  • Tests de non-régression — +10 tests (landing, register, 404, validation, duplicate, expiry)
  • 143 tests passent

v4.1.0 — Database: Data Sources & Linked Databases ✅ (2026-07-21)

Objectif : Collections multi-sources, databases liées (linked). COMPLETED. Doc : NOTION_DATABASE_TASKS_GUIDE.md Phase 1

  • Table collection_data_sources — multi-sources par collection (FK collection_id + source_collection_id, flag is_linked)
  • API sources — GET /db/{id}/sources/api (liste), POST /db/{id}/sources/api (ajouter), DELETE /db/{id}/sources/{sid}/api (retirer)
  • API linked DB — POST /db/{id}/linked/api (crée une collection liée : copie vues + propriétés + data source is_linked=1)
  • Full-page vs Inline — POST /db/{id}/toggle-inline/api (toggle), POST /db/inline/api (créer inline avec parent_page_id)
  • Règle permissions — linked DB hérite du workspace_id de la source → mêmes ACLs
  • Migration — ajout colonnes workspace_id, created_by sur collections
  • 153 tests passent (+10 nouveaux)

v4.2.0 — Database: Templates & Dashboards ✅ (2026-07-21)

Objectif : Templates réutilisables + dashboards combinant vues/widgets. COMPLETED.

  • Table page_templates enrichie — colonnes description, is_recurring, recurrence_rule (daily/weekly/monthly/yearly)
  • Table collection_dashboards — layout widgets (grille configurable : columns, widgets avec view_id, x, y, width, height)
  • API templates CRUD complet — PUT /workspace/collections/{id}/templates/page/{tid} (update), DELETE (delete)
  • API dashboards CRUD — GET/POST/PUT/DELETE /workspace/collections/{id}/dashboards
  • 159 tests passent (+6 nouveaux)

v4.3.0 — Database Views complètes (10 types) ✅ (2026-07-21)

Objectif : Tous les types de vues Notion avec layouts. COMPLETED.

  • Chart — barres, courbes, camemberts, donuts, scatter (Chart.js CDN)
  • Form — formulaire HTML auto-généré depuis les propriétés → POST création page
  • Map — Leaflet/OSM pour propriété Place (lat,lng parsing)
  • Feed — vue chronologique type fil d'actualité (newest first)
  • Timeline/Gantt — barres horizontales avec group_by et plages de dates
  • View tabs — 11 onglets de navigation (table, board, calendar, gallery, list, timeline, gantt, chart, form, map, feed)
  • Layout options — card_size, chart_type, group_by, place_property via config_json
  • 166 tests passent (+7 nouveaux)

v4.4.0 — Tasks, Sub-items & Dependencies ✅ (2026-07-21)

Objectif : Système complet de tâches Notion-style. COMPLETED.

  • Flag is_task sur collections — PUT /db/{id}/toggle-task/api (Turn into Tasks)
  • Table page_dependencies — bloque/bloqué par/related avec auto_shift
  • API dependencies — GET/POST/DELETE /db/{c}/pages/{p}/dependencies/api
  • Auto-shift dates — POST /db/{c}/pages/{p}/auto-shift/api (skip_weekends option)
  • 171 tests passent (+5 nouveaux)

v4.5.0 — Sprints & My Tasks ✅ (2026-07-21)

Objectif : Sprints agiles + vue My Tasks cross-databases. COMPLETED.

  • Tables sprints, sprint_pages — sprints agiles avec velocity_points
  • API sprints — CRUD + assignation/retrait pages
  • Burndown chart — GET /workspace/collections/{id}/sprints/burndown/{sid} (total/completed/remaining/ideal)
  • My Tasks — agrégation cross-databases avec filtre (all/today/overdue/upcoming)
  • 175 tests passent (+4 nouveaux)

v4.6.0 — Content Blocks enrichis ✅ (2026-09-02)

Objectif : parité d'édition avec Notion.

  • Callout blocks — boîtes colorées avec sélecteur d'emoji/icône
  • Table of contents — auto-généré depuis les headings avec ancres
  • Math equations — LaTeX / KaTeX (self-hosted) block
  • Toggle lists — contenu expandable/collapsible avec enfants
  • Multi-colonnes — layout flexible (2, 3 colonnes) + bouton ajouter/retirer colonne

Détails livrés :

  • 5 types de blocs enrichis dans le slash menu (callout, table_of_contents, math, columns, toggle)
  • Rendu des nouveaux blocs dans les pages publiques (/p/<slug>) — TOC ancré, KaTeX, colonnes, toggle <details>
  • Intégration KaTeX 0.16.11 self-hosté (/static/js/katex.min.js, /static/css/katex.min.css, /static/fonts/)
  • Persistance children (colonnes/toggle) via le format de blocs JSON
  • Export Markdown étendu aux nouveaux blocs
  • 183 tests au total (dont 5 nouveaux tests v4.6.0)

v4.7.0 — Export ✅ (2026-09-03)

Objectif : exporter une page (ou un site) depuis l'éditeur.

  • Export Markdown — avec images et sous-pages (récursif)
  • Export PDF — via xhtml2pdf (fidèle, sans CDN/lib système)
  • Export HTML — site statique standalone (document autonome + site .zip)

Détails livrés :

  • Service serveur app/services/export.py : conversion blocs → Markdown / HTML / PDF
  • 4 formats exposés : /api/export/markdown|html|pdf|site/{page_id}
  • Sous-pages incluses récursivement (Markdown et site)
  • UI : menu « More › Export » dans l'éditeur (Markdown, HTML, PDF, Site .zip)
  • PDF généré via xhtml2pdf (pip) — aucun lib système requise
  • 6 nouveaux tests (Markdown, sous-pages, HTML, PDF, Site, 404)

v4.7.1 — Fix UI Export / Share / More ✅ (2026-09-03)

  • Share / More / Activity / Move-to popovers — rendus sous le viewport (absolute + parent scrollable) → repositionnés fixed sous la topbar
  • Sous-menu Export — l'itém Export fermait le menu More ; devient un toggle, formats accessibles
  • Cache CSS — query string app.css bumpé v4.7.1
  • Vérifié Playwright headless + 190/190 tests

v4.7.2 — Fix Export : contenu absent ✅ (2026-09-03)

  • Export MD/HTML/PDF des documents — le service ne lisait que les pages blocks ; les pages file (upload .md/code, contenu sur disque) et markdown sortaient avec le seul titre. Résolution de la vraie source pour les 3 formats + rendu HTML/PDF correct des headings/listes.
  • 5 nouveaux tests → 195/195 ; vérifié sur les vraies données

v4.7.3 — Fix export PDF/HTML : tableaux + émojis ✅ (2026-09-03)

  • Tableaux — parseur GFM (bloc table) + rendu <table> HTML (thead/tbody, alignements, bordures .ftable) dans les exports HTML/PDF ; roundtrip markdown pipe valide.
  • Émojis PDF — passage du moteur à WeasyPrint (émojis couleur via Pango + fonts-noto-color-emoji dans l'image) ; repli automatique xhtml2pdf si libs natives absentes (dev Windows).
  • Dockerfile : libs pango/harfbuzz/gdk-pixbuf + polices ; requirements : + weasyprint==69.0
  • 4 nouveaux tests → 199/199 ; PDF README.md vérifié : tableau structuré + émojis colorés

v4.8.0 — Bloc Tableau simple ✅ (2026-09-03)

  • Bloc table éditable dans l'éditeur — insertion via /table (commandes slash, section BASIC), tableau 3×3 avec en-tête, cellules éditables au clic, auto-sauvegarde.
  • Lignes — bouton + Row sous le tableau (clic = ajouter) ; clic droit sur une cellule de corps → Insérer dessus/dessous, Dupliquer, Effacer, Supprimer la ligne, Supprimer le tableau.
  • Colonnes — poignée (⋮⋮) au-dessus de chaque colonne → Insérer à gauche/droite, Dupliquer, Effacer le contenu, Supprimer la colonne, Supprimer le tableau.
  • Import Markdown (GFM) — md2b transforme les tableaux pipe en bloc table au lieu de les aplatir en paragraphes ; roundtrip Markdown (JS + export) et sortie MD/HTML/PDF correcte d'un bloc table.

v4.8.1 — Fix bloc Tableau ✅ (2026-09-03)

  • « + Row » (bas) corrigé — l'insertion de ligne utilisait splice(index, ligne) (mauvaise signature) → aucune ligne ajoutée ; désormais splice(index, 0, ligne).
  • Bouton « + » à droite — ajoute une colonne à droite (équivalent « Add column »).
  • Redimensionnement des colonnes — curseur col-resize au survol des bordures d'en-tête, drag = largeur ; persisté via colsW.

v4.9.0 — Collaboration ✅ (2026-09-04)

Objectif : commentaires inline, mentions @, notifications in-app + email. COMPLETED. Doc : docs/Guide_Complet_Notion_sharing_collaborartion.md

  • Inline comments — commentaires sur sélection de texte dans l'éditeur (bouton flottant 💬) ; table comments étendue (target_type/target_id/anchor_block_id/anchor_start/anchor_end) et migrée (FK générique, idempotente) ; panneau de commentaires + résolution/suppression + compteur topbar
  • @mentions — autocomplétion @ (recherche utilisateurs temps réel), insertion @login dans les blocs et commentaires, table notifications ; endpoint POST /api/pages/{id}/mentions (notif des mentions de contenu)
  • Email notifications — service SMTP (app/services/mailer.py + templates HTML) ; préférences email par utilisateur (comments/mentions) ; config .env (SMTP_*, APP_BASE_URL) ; repli no-op sans SMTP
  • Centre de notifications in-app — cloche topbar (badge non-lus, polling 30s), panneau déroulant, mark as read / mark all read
  • Settings — toggles réels dans Settings → Notifications (Commentaires / Mentions)
  • 208 tests passent (+9 v4.9.0)

v4.11.0 — Agent IA : clés API par utilisateur & commandes slash ✅

Livré (2026-09-05) : credentials par utilisateur (table user_llm_keys, plusieurs providers), chargement dynamique des modèles depuis le fournisseur (POST /keys/{p}/models), commandes slash dans le chat (/provider, /model, /keys, … via PATCH conversation), /run utilise la clé de l'utilisateur. 239 tests verts.

v4.10.1 — Agent IA : config LLM dans l'UI ✅

Livré (2026-09-05) : sélecteur provider/modèle dans le panneau agent (persisté par conversation), config runtime DB-backed (llm_config), écran admin Agent & IA avec test de connexion (LLMClient.ping(), sans fallback mock). 232 tests verts.

v4.10.0 — FlowDeck Agent (Agent IA natif) ✅

Livré (2026-09-05) : agent conversationnel complet — boucle ReAct, streaming SSE, 18 outils avec snapshots rollback, ACL par rôle, contexte automatique, custom agents, déclencheurs planifiés + skills, multi-LLM (offline mock + 8 providers). 18 tests dédiés. Voir docs/Flowdeck_Agent_integration.md.

Objectif : Un agent IA intégré à FlowDeck, capable de planifier, rechercher et agir directement sur les workspaces — collections, pages, propriétés, vues, issues Gitea. Inspiré de Notion Agent (2026).

Documentation :

docs/Flowdeck_Agent_integration.md (702 lignes) · docs/Guide_Complet_Notion_Agent_2026.md (464 lignes)

Concept

Là où un assistant IA classique répond (prompt → réponse), FlowDeck Agent réalise :
objectif → planification → collecte contexte → actions API → résultat

Notion AI FlowDeck Agent
Répond, résume, réécrit Planifie, recherche, agit
Bloc de texte Crée collections, pages, propriétés, vues
Sans état Historique conversation + snapshots rollback
Aucune action DB Modifie le workspace via API FastAPI existantes

Fonctionnalités clés

  • Interface conversationnelle — panneau agent dans le sidebar (🤖 Agents) + popup chat
  • Boucle ReAct — Raisonnement → Action → Observation → itération (max 12 tours)
  • Streaming SSE — affichage temps réel du raisonnement et des actions
  • 10+ outils actionnables — search, read/write collections/pages, views, properties, Gitea sync
  • Permissions — même ACL que l'utilisateur (PermissionManager), audit log + rollback
  • Contexte automatique — workspace actif, pages mentionnées, fichiers uploadés
  • Custom agents — instructions, modèle, outils, scope par agent
  • Déclencheurs — planifiés, webhooks, événements workspace
  • Skills réutilisables — templates d'instructions + outils (ex: "Rédiger rapport hebdo")
  • Multi-LLM — GPT, Claude, Gemini, modèles locaux (Ollama), deepseek, qwencloud, Nvidia, openrouter

Architecture (nouveaux composants)

app/
├── routers/agent.py        — /api/agent/* (run, conversations, tools)
├── services/agent_engine.py — Orchestrateur ReAct + boucle tool calls
├── services/llm_client.py   — Abstraction multi-fournisseur LLM
├── services/tool_registry.py — 10+ outils wrappant les API existantes
├── services/context_builder.py — Collecte contexte workspace
└── templates/
    ├── agent_panel.html     — Panneau conversation Alpine.js
    └── agent_message.html   — Fragment message (streaming)

Nouvelles tables

Table Rôle
agents Config agent (nom, instructions, modèle, tools scope)
agent_conversations Sessions (titre, agent, workspace, statut)
agent_messages Messages (role, content, tool_calls, artifacts)
agent_actions Journal d'audit (tool, args, result, undo_snapshot)
agent_skills Skills réutilisables (nom, prompt template, outils)
agent_triggers Déclencheurs (cron, webhook, event, agent cible)

Cas d'usage FlowDeck

  • Créer un CRM complet — agent crée collection, propriétés, vues, exemples
  • Résumer les notes de réunion — lit les pages, synthétise, crée une page résumé
  • Générer des OKR — crée la database OKR avec relations et vues
  • Analyser un repo Gitea — lit les issues, crée un dashboard de suivi
  • Rédiger un rapport hebdomadaire — agrège les pages modifiées, génère le rapport

Plan de migration (5 phases)

  1. Phase 1 — Core Agent : AgentEngine + LLMClient + 3 outils (search, read, create) + SSE streaming
  2. Phase 2 — UI : agent_panel.html, historique conversations, sélecteur de modèle ✅ (v4.10.1)
  3. Phase 3 — Outils avancés : 7 outils supplémentaires (views, properties, Gitea, uploads)
  4. Phase 4 — Autonomie : custom agents, skills, déclencheurs planifiés
  5. Phase 5 — Plateforme : API publique agent → intégrations tierces, marketplace skills

Limitations (v1)

  • Pas de modification concurrente (lock optimiste DB)
  • Pas d'appels API externes non-FlowDeck (sandbox strict)
  • Budget tokens max par conversation (500k tokens)
  • Timeout 5 minutes par run

v5.0.0 — Command Palette & Recherche ✅ (2026-09-06)

Objectif : Ctrl+K / Ctrl+P palette de commandes universelle + recherche full-text. COMPLETED.

  • Command palette — Ctrl+K / Ctrl+P recherche universelle (modale, fuzzy, navigation clavier)
  • Quick actions — navigation, création, commandes
  • Recherche full-text — SQLite FTS5 sur pages + propriétés (prérequis technique de la palette)

v5.1.0 — Automations ✅ (2026-09-07)

Objectif : moteur de règles if-this-then-that + boutons cliquables. COMPLETED.

  • Database automations — moteur de règles if-this-then-that (trigger + condition + action)
    • Déclencheurs : événement (page.created/updated/deleted/moved, collection.*) / cron (*/N, minute fixe, @hourly, @daily) / bouton
    • Conditions combinables : eq, neq, contains, not_contains, is_empty, is_not_empty, changed
    • Actions : webhook (X-FlowDeck-Secret), set_property (validé), create_page (interpolation [[prop]]/{{title}}), notify
    • Tables automations + automation_runs (migration v5), scheduler de fond (60 s), historique des exécutions
  • Buttons — boutons cliquables déclenchant des actions
    • Bloc button dans l'éditeur (menu slash) + picker d'automation inline
    • Endpoint /api/automations/{id}/run (exempt CSRF) + UI Settings → Automations
  • Hooks événements dans collections.py / board.py / workspace.py (apply_page_template)
  • 11 tests tests/test_automations.py ; suite complète 289 verte

v5.2.0 — Infrastructure & Polish 🔄 (en cours)

✅ Priorité n°1 livrée : les migrations versionnées (voir app/migrations.py + table schema_version) — la base comptait 30+ tables créées ad-hoc ; tout nouveau schéma passe désormais par des étapes versionnées (baseline v1, indexes v2, FTS5 v3). État actuel : API publique + tokens partiellement implémentés (routers/public_api.py, test test_public_api_token) — à compléter dans la section Sécurité.

Design system

  • Design tokens — design-tokens.css (couleurs, espacements, typographie unifiés)
  • Composants réutilisables — boutons, inputs, modales, dropdowns, toasts

Sécurité & Utilisateur

  • API Tokens — générer/révoquer des clés API utilisateur (PARTIEL : public_api.py + tokens existent, manque la gestion UI dans Settings)
  • Sessions actives — voir et révoquer les sessions
  • Onboarding wizard — /welcome au premier lancement (créer compte → lier forges → premier projet)

Infrastructure

  • 🥇 Migrations versionnées — table schema_version + runner app/migrations.py (baseline v1, indexes v2, FTS5 v3) ✅
  • Backup automatique — cron daily → fichier daté
  • Index manquants — users.email, user_oauth_tokens(user_id, provider), collections/pages(workspace_id), pages(deleted_at) ✅
  • Linting — ruff (Python), eslint (JS) (aucune config actuellement)
  • Tests parallèles — pytest-xdist
  • Build Docker multi-stage — optimiser taille d'image

Forge integration

  • DB: table projects — type (builtin/gitea/github), forge_id, clone_url, default_branch, language
  • Cron: sync périodique des projets — configurable (défaut: chaque heure)
  • GitHubAdapter complet — API GitHub v3 → interface ForgeAdapter

Tests (cibles)

  • 267 tests — 259+ (dont 8 nouveaux migrations/search) ✅
  • Tests d'intégration auth (OAuth mock)
  • Tests des adapters forge (mock HTTP)
  • Tests multi-user (permissions croisées)

v5.3.0 — Database Avancée ✅ (2026-09-06)

Objectif : databases inline + templates prédéfinis + validation propriétés. COMPLETED.

  • Inline databases dans n'importe quelle page — slash command /database (groupe DATA) → sélecteur de templates → bloc embed_type:'collection' rendu par FlowDeckDB
  • Templates de database prédéfinis — 6 templates seedés (CRM, Project tracker, Task list, Content calendar, Meeting notes, Reading list) + galerie au clic « Database » (Get Started) et /database ; POST /db/api & /db/inline/api acceptent template et matérialisent les propriétés
  • Validation des propriétés (required, unique, min/max) — côté serveur (validate_property_rule, 400 + messages) + UI (modale propriété + erreurs de cellule)

v5.10.0 — Éditeur : interactions de bloc ✅ (2026-09-08)

Objectif : parité de manipulation des blocs avec Notion — les blocs étaient éditables mais statiques (impossible de les déplacer, dupliquer ou annuler une action). COMPLETED.

  • Drag & drop des blocs — poignée ⋮⋮ au survol de chaque bloc, drag vertical pour réordonner, indicateur de drop (ligne bleue) ; multi-sélection (Shift+clic sur poignée → sélection groupée déplacée d'un seul geste, ordre reconstruit depuis le DOM via data-id)
  • Menu contextuel de bloc — clic (ou clic droit) sur ⋮⋮ : Turn into (sous-menu conservant le contenu), Duplicate, Copy link to block (#fdblk-<id> avec re-focus), Move to (recherche de pages + API), Delete, couleurs texte/fond appliquées au bloc ou à la sélection
  • Undo / Redo — Ctrl+Z / Ctrl+Shift+Z/Ctrl+Y, pile de 100 opérations en mémoire du tab, re-focus du bloc restauré, déclencheur sur toutes les mutations (entrée, retour arrière, slash, tableaux, colonnes, toggles…)
  • Duplicate block — Ctrl+D, menu bloc ou slash command « Duplicate » ; copie profonde (enfants columns/toggle) en multi-sélection
  • Slash command étendue — groupe « Actions » : Turn into, Duplicate, Copy link to block, Delete block
  • En-têtes de tableau — toggles « Header row » / « First col » dans la barre du tableau (has_header défaut actif + nouveau first_col_header), persistés + rendu <th> en preview et exports Markdown/HTML
  • Intégration realtime — syncNow() poussé après chaque mutation programmatique ; 9 tests tests/test_block_interactions.py ; suite complète 307 verte (+3 PDF pré-existants)

v5.13.0 — Collaboration temps réel ✅ (2026-09-08)

Objectif : édition collaborative en direct (parité Notion en équipe). COMPLETED. Chantier n°1 de la parité Notion ; socle pour v5.14.0 (synced blocks).

  • WebSocket gateway — endpoint WS /ws/pages/{id}, auth via cookie session (refus 4401), page introuvable/supprimée → 4404 ; rooms par page en mémoire, chargées depuis la base au premier connect, droppées quand vides
  • Présence — avatars des utilisateurs connectés (topbar), couleur par utilisateur, join/leave broadcasté ; welcome = self + peers
  • Curseurs live — position curseur/sélection des autres éditeurs (block + offset), calque dédié, label avec nom, mise à jour à l'édition/au scroll
  • Merge de modifications — diffusion des ops de blocs insert/update/delete/move avec last-write-wins par bloc + version de page (stale → sync complet) ; titre synchronisé (debounce) ; persistance debounce ~1 s + flush à la déconnexion du dernier client
  • Fallback polling — si WS indisponible, rafraîchissement diff toutes les 10 s (adopté seulement sans brouillon local) + reconnexion automatique
  • CSP connect-src étendu à ws: ; 12 tests tests/test_realtime.py ; suite complète 298 verte (+3 PDF pré-existants)

v5.4.0 — Expérience éditeur (nouveautés, parité Notion)

  • Backlinks — section « Lié depuis… » en bas de page (scan des liens internes)
  • Duplicates — « Duplicate » sur page + collection (menu ...)
  • Corbeille globale améliorée — vue cross-workspace + purge automatique après 30 jours
  • Historique de version UI — browser + restaurer une version (table page_history existe)
  • Import — Markdown/CSV/Notion (complète l'export v4.7.0, facilite la migration d'utilisateurs)

v5.5.0 — Embeds & Média Riche

Objectif : parité avec les 60+ embeds Notion — contenu tiers rendu dans la page. Source : analyse Notion clone (delta v4 → v5.5, 2026-09-04).

  • Bloc Embed universel — /embed : YouTube, Vimeo, Figma, Google Maps, Loom, X/Twitter, CodePen, Miro, Spotify, SoundCloud, Twitch, Office…
  • Bookmark cards — aperçu riche des URLs (métadonnées OG : titre, image, description)
  • Image lightbox — clic pour agrandir, navigation clavier/consultation plein écran
  • Previews inline — PDF, vidéo, audio rendus directement dans la page
  • Cover & icône de page — upload image de couverture + emoji/icône custom (déjà partiel ?)

v5.6.0 — Import de données (étendu)

Objectif : compléter l'import de base (Markdown/CSV/Notion, déjà dans v5.4.0) par les formats pro et l'inférence de types.

  • Import CSV typé — inférence automatique des types de propriétés (texte, nombre, date, select)
  • Import Confluence / Evernote / Asana / Trello — via leurs formats d'export (HTML/JSON)

v5.7.0 — Database Avancée (Pt. 2)

Objectif : compléter la parité sur les propriétés, les vues sauvegardées et le Kanban pro.

  • Types propriété manquants — person, created_time, created_by, last_edited_time, last_edited_by
  • Groupes de propriétés — sections pliables dans le header de DB
  • Vues sauvegardées par utilisateur — save view (per-user, pas workspace-wide)
  • Swimlanes Kanban — sous-groupes horizontaux (2e dimension de groupement)
  • WIP limits — par colonne, alerte visuelle au dépassement
  • Cartes configurables — propriétés affichées par carte, couverture (image/icône/couleur), mode compact / détaillé
  • Calendar avec drag & drop — reschedule direct sur la grille
  • Gallery avec couvertures — image/icône comme vignette de carte

v5.8.0 — Calendrier & Rappels

Objectif : calendrier complet + notifications proactives.

  • Vues Jour / Semaine / Mois — calendrier complet (actuellement mois seulement)
  • Récurrence d'événements — daily/weekly/monthly/custom (RRULE)
  • Support timezone — par utilisateur + par événement
  • Rappels — in-app + email (avant échéance : N minutes/heures/jours)
  • Centre de notifications — cloche in-app (mentions, assignations, commentaires, rappels)
  • Template Meeting Notes — Attendees, Agenda, Notes, Action Items

v5.9.0 — AI Writing Assist (éditeur)

Objectif : l'IA Notion dans l'éditeur, au-dessus du moteur v4.9.0 (Agent IA).

  • Slash AI commands — /ai write, /ai summarize, /ai translate, /ai continue
  • Autocomplétion — suggestions de fin de ligne pendant la frappe
  • AI properties — auto-remplissage de propriétés (résumé, catégorisation) via l'Agent Engine

v5.10.0 — Éditeur : interactions de bloc ✅ (livré — voir section Completed)

Objectif : le graphe de connaissances Notion. Complète les backlinks de v5.4.0 (section « Lié depuis ») par la création des liens depuis l'éditeur.

  • Wiki-links [[ — taper [[ ouvre un picker de pages (recherche fuzzy, toutes collections), Enter insère un lien interne rendu comme chip de page (icône + titre mis à jour dynamiquement)
  • Mention de page @ — dans le menu @ existant (utilisateurs v4.9.0), ajouter l'onglet « Pages » : @ suivi d'un nom de page crée un lien inline
  • Mention de date @ — @today, @tomorrow, @2026-10-01 rendus comme chips de date
  • Renommage propagé — renommer une page met à jour le libellé affiché de tous ses liens internes (résolution au rendu via page_id, pas de texte dur)

v5.12.0 — Templates & verrouillage de page ⬜ (non commencé)

Objectif : démarrage rapide productif et protection des pages stabilisées. Les page_templates existent (v2.0.0/v4.2.0) mais uniquement côté collections.

  • Template picker global — sur « + New page » : galerie de templates (Empty, Meeting notes, Weekly report, To-do list…) + templates custom utilisateur
  • Bouton « Use template » — duplication du contenu du template dans la nouvelle page
  • Page lock — toggle 🔒 dans le menu « … » : page en lecture seule (édition désactivée pour tous sauf owner/admin), indicateur visuel en topbar
  • Full-width mode — toggle pour passer la page en pleine largeur (comme Notion)
  • Small text / typo options — option de page : taille de police réduite, serif/mono

v5.13.0 — Collaboration temps réel ✅ (livré — voir section Completed)

v5.14.0 — Synced blocks ⬜ (non commencé)

Objectif : avancer depuis v6.0.0 un bloc Notion très utilisé (même contenu dans plusieurs pages, édité une fois).

  • Bloc synced_block — table synced_blocks (source de vérité) + références par page ; slash command /synced
  • Rendu — ring rouge + badge « Synced » sur le bloc ; édition à un endroit => mise à jour partout (via rooms WS v5.13.0 si actives, sinon au reload)
  • Unsync — action « Unsync » qui convertit l'instance en copie indépendante
  • Copy & sync across pages — copier un bloc dans une autre page avec option « Paste and sync »

v6.0.0 — Pro (futur)

  • PWA — Progressive Web App, offline support
  • SSO/SAML — enterprise authentication
  • Granular permissions — page-level, property-level access control
  • Web Clipper — extension navigateur
  • API publique complète — REST API documentée (OpenAPI) (base existante : public_api.py, à étendre + documenter) — voir docs/API_GUIDE_V6.md : référence complète (conventions, CRUD par ressource, webhooks, sécurité, checklist)
  • Realtime editing (production) — voir v5.13.0 (curseurs + présence déjà avancés ici) ; reste en v6 : conflits avancés, édition large échelle
  • Synced blocks (production) — voir v5.14.0 (bloc de base) ; reste en v6 : syncing côté databases/vues

✅ Fonctionnalités livrées hors roadmap (bonus détectés dans le code)

Feature Fichiers Note
Webhooks sortants services/webhook_outbound.py, routers/workspace.py (/workspace/webhooks) CRUD + dispatch d'événements — base pour automations/API publique
API publique + tokens routers/public.py / public_api.py, test test_public_api_token À formaliser dans v5.2.0 et documenter pour v6.0.0

🎯 Ordre de priorité recommandé (état 2026-09)

  1. v5.2.0 → Migrations versionnées ✅ livré (schema_version + app/migrations.py)
  2. v5.0.0 → Command palette + FTS5 ✅ livré (palette Ctrl+K + GET /api/search)
  3. v5.3.0 → Inline databases + templates + validation ✅ livré (slash /database, 6 templates, validation propriétés)
  4. v5.13.0 → Realtime (WS + présence) ✅ livré (app/services/realtime_server.py + WS /ws/pages/{id}, présence, curseurs live, merge LWW, 12 tests)
  5. v5.10.0 → Interactions de bloc ✅ livré (drag&drop multi, undo/redo, duplicate, menu ⋮, en-têtes de tableau, 9 tests)

Résumé des phases

v0.x–v1.x ✅          v2.x ✅              v3.0.0 ✅       v4.0.0 ✅    v4.0.1 ✅
Base + Kanban         Éditeur + Gitea      UX Pro          MVP          Onboarding
+ DB + Auth           + Workspaces         + Multi-select  Accounts     & Polish
+ UI Notion           + Tags + Admin                       + Sharing    COMPLETED
                      + GitHub OAuth                       + Library

v4.0.2 ✅     v4.1–4.9 ✅     v4.10 ✅     v5.0–5.3 ✅     v5.13 ✅ · v5.10 ✅   v5.14 ⬜      v6.0 ⬜
Quality      DB views,      Agent IA     Palette →       Realtime +          Synced      Pro + Agent
& Tests      Templates &    COMPLETED    Automations     Interactions       blocks
             Collaboration               Realtime,      de bloc (undo/
                                          DB avancée,    redo, drag&drop,
                                          Calendrier, AI duplicate)

*Dernière mise à jour: 2026-09-08 — v5.13.0 Realtime livré (WebSocket gateway, présence, curseurs live, merge LWW + fallback polling, 12 tests) puis v5.10.0 Interactions de bloc livré (drag&drop multi, undo/redo, duplicate, menu ⋮, en-têtes de tableau, sync realtime, 9 tests, suite 307 verte) ; reste v5.4 → v6.0*