feat(core): v5.0.0 command palette + FTS5 search, v5.2.0 versioned migrations
- Command palette Ctrl+K/Ctrl+P (base.html): universal search, fuzzy highlight, keyboard nav, quick actions. openQuickFind now opens it. - GET /api/search endpoint + search service: unified pages + databases search, FTS5 with LIKE fallback, trash excluded, user-scoped. - app/migrations.py: lightweight versioned migration runner (schema_version table); baseline schema = v1, new steps applied in order. - Migration v2: missing indexes (users.email, user_oauth_tokens, etc). - Migration v3: FTS5 pages_fts + sync triggers + backfill. - VERSION + app.main -> 5.0.0; CHANGELOG + ROADMAP updated. - +8 tests (tests/test_search_migrations.py). 259 passed (3 pre-existing PDF/weasyprint env failures unrelated).
This commit is contained in:
+34
-1
@@ -1,6 +1,39 @@
|
||||
# Changelog — FlowDeck
|
||||
|
||||
## v4.15.5 (2026-09-06) — Correctif test de connexion provider (nvidia)
|
||||
## v5.0.0 (2026-09-06) — Command Palette & Migrations versionnées
|
||||
|
||||
> Livre deux chantiers du roadmap v5 : la **migration au système de schéma versionné**
|
||||
> (v5.2.0, priorité n°1 — débloque tout le reste) et la **Command Palette + recherche
|
||||
> full-text** (v5.0.0).
|
||||
|
||||
### Added — Command palette (v5.0.0)
|
||||
- **Palette de commandes `Ctrl+K` / `Ctrl+P`** dans `base.html` : modale centrée
|
||||
autofocusée, navigation clavier (↑/↓/Enter/Esc), surlignage fuzzy des correspondances,
|
||||
recherche universelle et **quick actions** (Nouvelle page, Library, My Tasks, Trash,
|
||||
Settings, Help). Le bouton Search de la sidebar et `openQuickFind()` ouvrent désormais
|
||||
la palette (fini le toast « Quick Find — Ctrl+K »).
|
||||
- **Endpoint `GET /api/search?q=`** (`app/routers/search.py`) + service
|
||||
`app/services/search.py` : recherche unifiée des **pages** (titre + contenu) et des
|
||||
**databases** (nom + description), scopée aux workspaces accessibles de l'utilisateur.
|
||||
- **Index full-text FTS5** (`pages_fts`, migration v3) avec triggers de synchronisation
|
||||
(insert/update/delete) sur la table `pages` ; repli automatique sur `LIKE` si FTS5
|
||||
absent. Exclusions automatiques des pages supprimées (corbeille).
|
||||
|
||||
### Added — Migrations versionnées (v5.2.0)
|
||||
- **Runner léger `app/migrations.py`** (alternative à Alembic pour ce projet SQLite) :
|
||||
table `schema_version` enregistrant la version appliquée ; le schéma de base existant
|
||||
(`init_db`) devient la **baseline v1**, et chaque changement futur est une étape
|
||||
versionnée appliquée une seule fois, dans l'ordre.
|
||||
- **Migration v2 — indexes manquants** : `users(email)`, `user_oauth_tokens(user_id,
|
||||
provider)`, `collections(workspace_id)`, `pages(workspace_id)`, `pages(deleted_at)`.
|
||||
- **Migration v3 — FTS5** : `pages_fts` + triggers `pages_fts_ai/ad/au` + backfill.
|
||||
- `init_db()` termine désormais par `apply_migrations(conn)` : nouveau schéma et bases
|
||||
existantes convergent sans rejouer les migrations déjà appliquées.
|
||||
|
||||
### Tests
|
||||
- **267 tests** (8 nouveaux dans `tests/test_search_migrations.py`) : suivi de la version
|
||||
`schema_version`, indexes créés, table/triggers FTS5, synchronisation de l'index,
|
||||
recherche pages+collections, exclusions de la corbeille, requête vide et sans résultat.
|
||||
|
||||
### Corrections
|
||||
- **Test de connexion multi-provider** : le modèle configuré globalement (ex. `deepseek-v4-flash`)
|
||||
|
||||
Reference in New Issue
Block a user