- A25 — 84 `except Exception: pass/…` → `logger.exception("<fonction>")`
(19 fichiers : api_v2 30, dashboard 10, board 7, sites 5, workspace 5,
api_v2_helpers 5, …) ; `logger` ajouté là où il manquait (api_v2_helpers,
sites + `import logging`)
- A25 critique — les `try` autour de `materialize_properties` supprimés dans
`create_collection_v2` ET `apply_db_template_v2` : un échec interrompt la
transaction au lieu de commiter une collection sans schéma
- test `test_collection_rollback_when_materialize_fails` (Bearer v2, monkeypatch
qui lève, assertions : RuntimeError + 0 ligne commitée)
- A21 partiel — `PRAGMA busy_timeout=5000` dans `get_conn()` (point d'entrée
unique) ; commentaire `ponytail:` : le wrapper async + les 510 call sites
restent à migrer module par module
- suite **1028/1028** · `ruff check app tests` OK
78 lines
4.6 KiB
Markdown
78 lines
4.6 KiB
Markdown
# WORKLOAD — FlowDeck Notion Clone
|
||
|
||
> **Début**: 2026-07-08 | **Version**: v7.3.8 (audit sécurité — A25 + A21 partiel) | **Statut**: EN COURS 🔄
|
||
> **Cible**: parité Notion + intégration forge · **Follow-ups v7.3 livrés**: sidebar teamspaces, notif `page.updated`, charts `number` + dashboards multi-DB, unfurl forge, UI Settings → Audit — voir `ROADMAP.md § v7.3.0`
|
||
|
||
## Avancement Global
|
||
|
||
| Version | Description | Statut | Tests |
|
||
|---------|-------------|--------|-------|
|
||
| v0.2–v0.9 | Base → Backend | ✅ | — |
|
||
| v1.0 | Production (lifespan, CI/CD) | ✅ | 28/28 |
|
||
| v1.1 | Pages & Sidebar Notion | ✅ | — |
|
||
| v1.2 | Éditeur Notion (slash menu, blocs) | ✅ | — |
|
||
| v1.3 | Database Concept (collections) | ✅ | 34/34 |
|
||
| v1.4 | Propriétés Avancées (21 types) | ✅ | 38/38 |
|
||
| v1.5 | Relations, Rollups, Formulas | ✅ | 43/43 |
|
||
| v1.6 | Vues (Calendar, Gallery, List, Timeline) | ✅ | 49/49 |
|
||
| v1.7 | Vues Améliorées (view config, save-as) | ✅ | — |
|
||
| v1.8 | Sub-items & Dépendances | ✅ | 56/56 |
|
||
| v1.9 | My Tasks Dashboard | ✅ | 60/60 |
|
||
| v2.0 | Multi-User + Editor Complete | ✅ | 67/67 |
|
||
| v2.1 | Public API, Webhooks, PWA | ✅ | 73/73 |
|
||
| v2.2 | Share/Publish, Favorites, Library | ✅ | 73/73 |
|
||
| v3.0 | Auth locale, Multi-Forge, Standalone | ✅ | — |
|
||
| v4.x–v5.x | MVP → Agent IA, palette, automations, import, calendrier, wiki-links, synced blocks | ✅ | 523+ |
|
||
| v6.0–v6.3 | PWA offline, permissions granulaires, web clipper, API publique v2 | ✅ | 668+ |
|
||
| **v6.4.0** | **Realtime production (merge 3-voix, broadcast non bloquant)** | ✅ | **749+** |
|
||
| **v6.5.0–v6.5.1** | **Synced blocks production (databases/vues) + webhooks v2 complets** | ✅ | **749** |
|
||
| **v6.6.0** | **Agent phase 5 — API publique agent & skill marketplace** | ✅ | **764+** |
|
||
| **v6.7.0** | **SSO / SAML + OIDC entreprise (Enterprise Auth)** | ✅ | **802** |
|
||
| v6.8.0 | Sites multi-pages + Forms publics ([doc](docs/V68_Sites_Forms.md)) | ✅ | 20 |
|
||
| v6.9.0 | Recherche hybride + Ask AI RAG ([doc](docs/V69_Search_Ask_AI.md)) | ✅ | 24 |
|
||
| v7.0.0 | Automations multi-étapes + Workers lite ([doc](docs/V70_Automations_Workers.md)) | ✅ | 31 |
|
||
| v7.1.0 | Calendar sync + Meeting Notes ([doc](docs/V71_Calendar_Meetings.md)) | ✅ | 15 |
|
||
| v7.2.0 | SCIM + 2FA + Audit UI + gouvernance agents ([doc](docs/V72_Enterprise_SCIM_2FA.md)) | ✅ | 52 |
|
||
| v7.3.0 | Teamspaces + Verified + Polish + follow-ups ([doc](docs/V73_Wiki_Teamspaces_Polish.md)) | ✅ | 72 |
|
||
|
||
> **Suites de régression** : `test_v72_enterprise.py` (52) + `test_v73_wiki_polish.py` (72) = **124 verts** · suite complète `-n auto` = **1016 passed**.
|
||
> **Follow-ups v7.3 livrés** (voir § v7.3.0 du `ROADMAP.md`): sidebar par teamspace, charts `number`/multi-DB, notif `page.updated` aux followers, unfurl `gitea:`/`github:`, page Settings → Audit — + 21 casses SSO corrigées (install `python3-saml`/`authlib`).
|
||
|
||
## Blocs Complétés
|
||
|
||
| Bloc | Features | Statut |
|
||
|------|----------|--------|
|
||
| Bloc 1 | Database Concept | ✅ 6/6 |
|
||
| Bloc 2 | Propriétés Avancées | ✅ 14/14 |
|
||
| Bloc 3 | Vues Manquantes | ✅ 10/10 |
|
||
| Bloc 4 | Sub-items & Dépendances | ✅ 7/7 |
|
||
| Bloc 5 | My Tasks | ✅ 7/7 |
|
||
| Bloc 6 | Éditeur Complet | ✅ 8/8 |
|
||
| Bloc 7 | Fonctions Transversales | ✅ |
|
||
|
||
**Total: 52/52 features (100%)**
|
||
|
||
## Architecture
|
||
|
||
### Tables (21)
|
||
`users`, `user_tokens`, `boards`, `cards`, `notes`, `col_mapping`, `checklists`, `checklist_items`, `project_properties`, `property_values`, `ai_keywords`, `pages`, `collections`, `collection_pages`, `collection_views`, `collection_properties`, `workspaces`, `workspace_members`, `comments`, `page_history`, `favorites`, `database_templates`, `page_templates`, `webhook_subscriptions`
|
||
|
||
### Routeurs (11)
|
||
`dashboard`, `board`, `notes`, `api`, `auth`, `webhooks`, `collections`, `my_tasks`, `workspace`, `public_api` + app-level routes
|
||
|
||
### Services (6)
|
||
`GiteaClient`, `FormulaEngine`, `RollupEngine`, `GiteaBoardCompat`, `property_types`, `webhook_outbound`
|
||
|
||
### Endpoints (85+)
|
||
CRUD collections/pages, 5 vues HTML, relations/rollups/formulas, sub-items/dependencies, my-tasks, workspaces, comments, history, favorites, templates, CSV import/export, public sharing, public API v1, webhooks, PWA manifest
|
||
|
||
## Stack
|
||
|
||
- **Backend**: Python 3.12 + FastAPI + httpx
|
||
- **Frontend**: Jinja2 + HTMX + Alpine.js + SortableJS + CSS 31KB
|
||
- **BDD**: SQLite WAL mode, 21 tables, foreign keys ON
|
||
- **Auth**: OAuth2 Gitea + sessions signed (itsdangerous) + token API
|
||
- **Déploiement**: Docker (python:3.12-slim), docker-compose, port 8080
|
||
- **Tests**: pytest, 764+ tests, TestClient avec SQLite temporaire
|
||
- **CI/CD**: Gitea Actions (.gitea/workflows/ci.yml)
|