docs(session): update SESSION-RESUME apres Bloc 1+2+3 + smoke test
Some checks are pending
CI / Type-check bridge (push) Blocked by required conditions
CI / Tests unit bridge (push) Blocked by required conditions
CI / Lint bridge (Biome) (push) Waiting to run
CI / Tests integration bridge (push) Blocked by required conditions
CI / Security scan (push) Waiting to run
CI / Docker build + healthcheck (push) Blocked by required conditions

- Ajoute CHANGELOG en tete du doc avec les 4 commits de la session soir
- Ajoute section "Smoke test live — etat actuel" avec table des resultats
- Ajoute section "Etat des blocs Phase 2 (a jour)" : 1-2-3 DONE, 4 inclus dans 3, 3.2/5/6/7 TODO avec recommandations
- Update credentials : bridge/.env documente + commande docker run bridge-redis
- Update commits Forgejo : split jour / soir
- Update checklist demarrage prochaine session : pull, bridge-redis, npm run dev, smoke quick, options bloc

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Corentin JOGUET 2026-05-07 20:12:42 +02:00
parent 7a3fbe455d
commit 37e516af36

View file

@ -1,8 +1,67 @@
# SESSION RESUME — formation-hub Acadenice (2026-05-07) # SESSION RESUME — formation-hub Acadenice (last update 2026-05-07 soir)
> Document de reference pour reprendre le travail apres restart Claude Code OU /compact. > Document de reference pour reprendre le travail apres restart Claude Code OU /compact.
> Lis-moi avant de commencer la prochaine session. > Lis-moi avant de commencer la prochaine session.
## CHANGELOG depuis derniere update (session 2026-05-07 soir)
4 commits ajoutes (`5b2abbc`, `2c5665b`, `c8e9b4d`, `7a3fbe4`) — bridge passe de "scaffold + 4 agents recrutes" a "service utilisable end-to-end pour 10 endpoints Tier 1" :
- **Bloc 1 cloture** (`5b2abbc`) : adapters propres (TS errors fixed, biome format), 679 LOC.
- **Bloc 2 livre** (`2c5665b`) : domain models 12 fichiers (Personne, Module, Attribution, Tache, etc.) + 111 tests Vitest, coverage **97.86%** lines sur `src/domain/`. Decimal.js partout pour heures, schemas zod, RG-01 implementee dans Module.creerAttribution.
- **Bloc 3 livre** (`c8e9b4d`) : routes REST Tier 1 + auth middleware + repos Baserow + tests integration mockes. **10/10 endpoints livres** : GET personnes/:id/dashboard, GET formations/:id, GET projets/:id, POST modules/:id/attribuer, POST interventions, PATCH attributions/:id/heures-realisees, etc. Tests : **163/163 verts**, coverage globale `src/` : **70.77%**.
- **Smoke test fixes** (`7a3fbe4`) : 2 bugs decouverts via test live contre Baserow + Docmost reels :
- `BaserowClient.resolveTableIds` requiert un JWT user (Baserow API distingue DB tokens / JWT). Workaround : env var `BASEROW_TABLE_IDS` JSON override.
- `BaseRepo.list` cassait sur row malformee (Personne avec splits null != 100 → throw). Fix : try/catch toDomain par row, skip + log warn + `meta.skipped` exposed.
## Smoke test live — etat actuel
Stack live + bridge testes :
- Baserow : `http://localhost:8080` (workspace 112 "Acadenice", database 133 "formation-hub", 9 tables au singulier 609-617)
- Docmost : `http://localhost:3000`
- Redis bridge dedie : container `bridge-redis` sur `127.0.0.1:6379` (separe du `docmost-redis` interne)
- Bridge : `http://localhost:4000` via `npm run dev` dans `bridge/`
`.env` du bridge cree (gitignore confirme). Token Baserow DB cree : `vyabYuYW7E5BLTTV7RGbl2Y0Mkk4hvHP` (workspace 112, CRUD complet). Token bridge admin de test : `brg_smoketest_admin` avec scope `admin:*`.
7/8 endpoints OK au smoke test (le 8e bug est fix dans `7a3fbe4`). Tableau detaille :
| Endpoint | Resultat |
|----------|----------|
| GET /api/health | 200 |
| GET /api/ready | 200 (baserow:true, redis:true) |
| GET /personnes (no auth) | 401 AUTH_REQUIRED |
| GET /personnes (bad token) | 401 AUTH_INVALID |
| GET /personnes (good, 2 rows malformees) | 200 data:[] meta.skipped:2 (apres fix) |
| GET /personnes/9999 | 404 NOT_FOUND |
| GET /formations | 200 (2 rows) |
| GET /projets | 200 (2 rows) |
## Etat des blocs Phase 2 (a jour)
| Bloc | Status | Detail |
|------|--------|--------|
| 1 — Adapters | DONE | `5b2abbc`, 0% test coverage (Bloc 6) |
| 2 — Domain models | DONE | `2c5665b`, 97.86% coverage |
| 3 — Routes Tier 1 + auth + repos | DONE | `c8e9b4d`, 10/10 endpoints, 86-96% coverage middleware/routes |
| 3.2 — Refactor erreurs domain typees + routes /blocs /clients /taches | TODO | DomainError sub-classes (RGViolationError, ConflictError) pour remplacer mapping par texte |
| 4 — Auth middleware | DONE (en partie) | inclus dans Bloc 3 (Bearer brg_*, scopes JSON-encoded, admin:* wildcard) |
| 5 — Rate limit + cache invalidation | TODO | RedisCache.checkRateLimit existe deja, faut middleware Hono qui l'appelle |
| 6 — Tests integration adapters | TODO | testcontainers Postgres + Redis ephemeres, 0% coverage adapters actuel |
| 7 — Webhook handlers Baserow + sync bidirec | TODO | gros bloc (~2-3h) — coeur du projet |
| 8 — Tiptap node-views Docmost | TODO | docmost-fork-dev, Phase 2.3+ |
| 9 — Bidirec backlinks | TODO | docmost-fork-dev, Phase 3 |
| 10 — Doc utilisateur + release v0.1.0 | TODO | tech-writer + acadenice-devops |
## Vote pour la prochaine session
Le reste des blocs est dans Phase 2 — Bridge service du SESSION-RESUME plus bas. Recommandation pour la reprise :
- **Option A (recommandee)** : Bloc 7 — webhooks Baserow + premier sync bidirec auto. C'est ce qui rend le bridge utile au-dela de "REST sur Baserow". Gros bloc 2-3h.
- **Option B** : Bloc 5 — rate limit + cache invalidation. Court (~1h), prerequis prod, prepare Bloc 7.
- **Option C** : Bloc 6 — tests integration adapters via testcontainers. Solidifie la fondation Bloc 1 qui est a 0% actuellement. ~1.5h via bridge-tester.
- **Option D** : Bloc 3.2 — refactor erreurs domain typees + routes restantes (/blocs, /clients, /taches). Pas urgent.
## Vision projet en 3 lignes ## Vision projet en 3 lignes
Notion-like self-host pour Acadenice (CFA + Agence dev) en Stack composite : Notion-like self-host pour Acadenice (CFA + Agence dev) en Stack composite :
@ -83,28 +142,16 @@ Localises dans `docs/` du repo + miroir Outline collection R&D Notion-Like :
| Setup VPS staging (Hetzner CPX21) | acadenice-devops | | Setup VPS staging (Hetzner CPX21) | acadenice-devops |
| Configurer Forgejo Actions runner (`infra/forgejo-runner/`) | acadenice-devops | | Configurer Forgejo Actions runner (`infra/forgejo-runner/`) | acadenice-devops |
## Phase 2 — Bridge service (a demarrer) ## Phase 2 — Bridge service (en cours, Blocs 1-3 + fix smoke test livres)
Code Phase 2 = MAIN focus de la prochaine session (estimation 2-3 mois fullstack). Code Phase 2 = MAIN focus de la session 2026-05-07 soir + suite. Brief complet dans `docs/19-bridge-api-design.md`. Architecture :
Brief complet dans `docs/19-bridge-api-design.md`. Architecture :
- 5 missions : expose Baserow, webhooks Baserow, sert Tiptap nodes Docmost, orchestre workflows metier, **sync bidirec Docmost ↔ Baserow** - 5 missions : expose Baserow, webhooks Baserow, sert Tiptap nodes Docmost, orchestre workflows metier, **sync bidirec Docmost ↔ Baserow**
- Stack fixee : Node 22 + Hono + zod + ofetch + ioredis + pino + decimal.js + Vitest + Biome - Stack fixee : Node 22 + Hono + zod + ofetch + ioredis + pino + decimal.js + Vitest + Biome
- Endpoints REST `/api/v1/*` versionnes - Endpoints REST `/api/v1/*` versionnes (10 livres Tier 1)
- Webhooks anti-loop via header `X-Bridge-Origin` - Webhooks anti-loop via header `X-Bridge-Origin`
- MCP server (Phase 3+) co-located dans le meme service - MCP server (Phase 3+) co-located dans le meme service
Decoupage en blocs : Cf section "Etat des blocs Phase 2 (a jour)" en haut du document pour le status detaille de chaque bloc.
- Bloc 1 : Adapters BaserowClient + DocmostClient + RedisCache (drafts existants dans `bridge/src/adapters/`, **a refaire proprement** par bridge-dev — TS errors actuels)
- Bloc 2 : Domain models (Personne, Module, Tache, etc.)
- Bloc 3 : Routes REST principales
- Bloc 4 : Auth middleware (API tokens scopes)
- Bloc 5 : Cache Redis pattern cache-aside
- Bloc 6 : Tests unit + integration (par bridge-tester)
- Bloc 7 : Webhook handlers Baserow (sync bidirec)
- Bloc 8 : Tiptap node-view custom (par docmost-fork-dev — Phase 2.3+)
- Bloc 9 : Bidirec backlinks (par docmost-fork-dev — Phase 3)
- Bloc 10 : Documentation utilisateur + release v0.1.0
## Agents BYAN crees pour le projet ## Agents BYAN crees pour le projet
@ -156,6 +203,7 @@ Pas encore crees. A faire via BYAN web ou skill `byan-bmb-workflow-builder` :
## Credentials utilises (dans `.env` gitignore — a regenerer si compromis) ## Credentials utilises (dans `.env` gitignore — a regenerer si compromis)
Racine `.env` :
``` ```
DOCMOST_ADMIN_EMAIL=corentin@acadenice.fr DOCMOST_ADMIN_EMAIL=corentin@acadenice.fr
DOCMOST_ADMIN_PASSWORD=ton-pwd123456 DOCMOST_ADMIN_PASSWORD=ton-pwd123456
@ -166,8 +214,29 @@ FORGEJO_TOKEN=cc21fee2913b6043fb68f93d8b6c184fac4671f4 (admin AcadeNice)
OUTLINE_TOKEN=ol_api_s2EqjDW5SPlXzM4vqiZaMd8UD00jsnespK4rRs OUTLINE_TOKEN=ol_api_s2EqjDW5SPlXzM4vqiZaMd8UD00jsnespK4rRs
``` ```
## Commits Forgejo selfhost (cumulés cette session) `bridge/.env` (cree session 2026-05-07 soir) :
```
NODE_ENV=development
PORT=4000
LOG_LEVEL=debug
BASEROW_API_URL=http://localhost:8080
BASEROW_API_TOKEN=vyabYuYW7E5BLTTV7RGbl2Y0Mkk4hvHP
DOCMOST_API_URL=http://localhost:3000
REDIS_URL=redis://127.0.0.1:6379
BASEROW_WEBHOOK_SECRET=smoke-test-webhook-secret-32chars-min
BRIDGE_API_TOKENS=[{"token":"brg_smoketest_admin","name":"smoketest","scopes":["admin:*"]}]
BASEROW_DATABASE_ID=133
BASEROW_TABLE_IDS={"personne":609,"formation":610,"bloc":611,"module":612,"attribution":613,"client":614,"projet":615,"tache":616,"intervention":617}
```
Container Redis dedie pour bridge (separe du docmost-redis interne) :
```bash
docker run -d --name bridge-redis -p 127.0.0.1:6379:6379 redis:7-alpine
```
## Commits Forgejo selfhost (cumulés)
Session 2026-05-07 jour :
``` ```
668576c chore: initial commit (55 files, 7986 insertions, conception complete) 668576c chore: initial commit (55 files, 7986 insertions, conception complete)
d510bdd ops: fix CI run + bump testcontainers + doc 19 sync bidirec d510bdd ops: fix CI run + bump testcontainers + doc 19 sync bidirec
@ -182,7 +251,17 @@ a0266b8 feat(baserow): add formulas pass + related field naming
d5558ca fix(docmost-seed): handle data envelope + add format field d5558ca fix(docmost-seed): handle data envelope + add format field
1d71364 feat(seed): add I4 forms publics + space etudiant + I5 healthcheck 1d71364 feat(seed): add I4 forms publics + space etudiant + I5 healthcheck
7d4d2cd feat(agents): create bridge-dev specialized agent (1st BYAN INT) 7d4d2cd feat(agents): create bridge-dev specialized agent (1st BYAN INT)
[NEXT] feat(agents): create 3 more agents + session resume MD b37220d feat(agents): complete BYAN INT for 3 more agents + session resume MD
460f7ef feat(workflows): create 5 BYAN workflows for agent collaboration
```
Session 2026-05-07 soir :
```
5b2abbc feat(bridge/adapters): bloc 1 propre — BaserowClient + DocmostClient + RedisCache
2c5665b feat(bridge/domain): bloc 2 — domain models + tests Vitest (coverage 97.86%)
c8e9b4d feat(bridge): bloc 3 — routes REST Tier 1 + auth + repos Baserow (10 endpoints)
7a3fbe4 fix(bridge): smoke test fixes — skip rows malformees + BASEROW_TABLE_IDS override
[NEXT] docs(session): update SESSION-RESUME apres Bloc 1+2+3 + smoke test
``` ```
## Memoire BYAN persistee ## Memoire BYAN persistee
@ -195,19 +274,19 @@ d5558ca fix(docmost-seed): handle data envelope + add format field
## Pour la prochaine session — checklist demarrage ## Pour la prochaine session — checklist demarrage
``` ```
[ ] Lire ce SESSION-RESUME.md [ ] Lire ce SESSION-RESUME.md (ce CHANGELOG en haut + section "Etat des blocs Phase 2")
[ ] Verifier stack locale up : docker compose ps [ ] Verifier stack locale up : docker compose ps + docker ps | grep bridge-redis
(si bridge-redis absent : docker run -d --name bridge-redis -p 127.0.0.1:6379:6379 redis:7-alpine)
[ ] Verifier git pull a jour : cd formation-hub && git pull [ ] Verifier git pull a jour : cd formation-hub && git pull
[ ] Verifier les 4 agents disponibles dans Agent tool [ ] Verifier bridge boot : cd bridge && npm run dev (logs dans /tmp/bridge-smoke.log si en background)
[ ] Decider quoi attaquer en premier : [ ] Smoke quick : curl http://localhost:4000/api/ready
- Option A : invoque bridge-dev pour Bloc 1 adapters propres [ ] Decider quoi attaquer en premier (cf section "Vote pour la prochaine session" en haut) :
- Option B : invoque bridge-tester pour test plan E2E detaille - Option A : Bloc 7 — webhooks Baserow + sync bidirec (gros, recommande)
- Option C : invoque acadenice-devops pour setup VPS staging - Option B : Bloc 5 — rate limit + cache invalidation (court, prerequis)
- Option D : invoque docmost-fork-dev pour exploration codebase Docmost - Option C : Bloc 6 — tests integration adapters via bridge-tester
- Option D : Bloc 3.2 — refactor erreurs domain typees + routes restantes
``` ```
Mon vote pour la prochaine session : **Option A** — bridge-dev refait les adapters proprement (drafts actuels dans `bridge/src/adapters/` ont des TS errors).
## Fast-App workflow local (artefacts dans `_byan-output/fast-app/formation-hub/`) ## Fast-App workflow local (artefacts dans `_byan-output/fast-app/formation-hub/`)
| Fichier | Contenu | | Fichier | Contenu |