7.77.0 — corbeille réparée (FK favorites/recents) + MCP workspaces
FlowDeck CI / lint (push) Failing after 1m28s
FlowDeck CI / docker (push) Canceled after 0s
FlowDeck CI / test (push) Canceled after 2h18m54s

- detach_page_references : nettoyage des références NO ACTION avant
  toute suppression définitive (unitaire, Empty Trash, purge 30 j)
- MCP : list_workspaces / get_workspace ; descriptions collections
  clarifiées (bases de données, pas des workspaces)
- 96 tests verts sur le périmètre (MCP, trash, cohérence)
This commit is contained in:
Spark
2026-10-22 09:03:43 -04:00
parent 215990adc0
commit f6782ee5b3
8 changed files with 141 additions and 7 deletions
+20
View File
@@ -51,6 +51,26 @@ EFFECTIVE_WORKSPACE_SQL = (
)
def detach_page_references(conn, page_ids) -> None:
"""Supprime les lignes qui référencent des pages en ``NO ACTION``.
``favorites.page_id`` et ``recents.page_id`` référencent
``pages(id)`` sans CASCADE et la connexion applique
``PRAGMA foreign_keys=ON`` : supprimer définitivement une page
réelle — ouverte un jour (recents) ou mise en favori — levait un
``IntegrityError`` (500 côté API, échec silencieux de la purge
automatique des 30 jours). À appeler avant tout
``DELETE FROM pages`` définitif. (Régression du 2026-10-22 :
les pages synthétiques des tests n'avaient ni favori ni récent.)
"""
ids = [int(i) for i in page_ids]
if not ids:
return
ph = ",".join("?" * len(ids))
conn.execute(f"DELETE FROM favorites WHERE page_id IN ({ph})", ids)
conn.execute(f"DELETE FROM recents WHERE page_id IN ({ph})", ids)
def effective_workspace_sql(alias: str = "c") -> str:
"""Workspace effectif d'une collection (colonne ou ``NULL`` si orpheline)."""
return EFFECTIVE_WORKSPACE_SQL.format(a=alias)