From 37e516af362a4543e01be830f978548792a22888 Mon Sep 17 00:00:00 2001 From: Corentin JOGUET Date: Thu, 7 May 2026 20:12:42 +0200 Subject: [PATCH] docs(session): update SESSION-RESUME apres Bloc 1+2+3 + smoke test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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) --- .../fast-app/formation-hub/SESSION-RESUME.md | 137 ++++++++++++++---- 1 file changed, 108 insertions(+), 29 deletions(-) diff --git a/_byan-output/fast-app/formation-hub/SESSION-RESUME.md b/_byan-output/fast-app/formation-hub/SESSION-RESUME.md index bcc34fd..df13182 100644 --- a/_byan-output/fast-app/formation-hub/SESSION-RESUME.md +++ b/_byan-output/fast-app/formation-hub/SESSION-RESUME.md @@ -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. > 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 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 | | 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). - -Brief complet dans `docs/19-bridge-api-design.md`. Architecture : +Code Phase 2 = MAIN focus de la session 2026-05-07 soir + suite. 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** - 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` - MCP server (Phase 3+) co-located dans le meme service -Decoupage en blocs : -- 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 +Cf section "Etat des blocs Phase 2 (a jour)" en haut du document pour le status detaille de chaque bloc. ## 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) +Racine `.env` : ``` DOCMOST_ADMIN_EMAIL=corentin@acadenice.fr DOCMOST_ADMIN_PASSWORD=ton-pwd123456 @@ -166,8 +214,29 @@ FORGEJO_TOKEN=cc21fee2913b6043fb68f93d8b6c184fac4671f4 (admin AcadeNice) 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) 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 1d71364 feat(seed): add I4 forms publics + space etudiant + I5 healthcheck 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 @@ -195,19 +274,19 @@ d5558ca fix(docmost-seed): handle data envelope + add format field ## Pour la prochaine session — checklist demarrage ``` -[ ] Lire ce SESSION-RESUME.md -[ ] Verifier stack locale up : docker compose ps +[ ] Lire ce SESSION-RESUME.md (ce CHANGELOG en haut + section "Etat des blocs Phase 2") +[ ] 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 les 4 agents disponibles dans Agent tool -[ ] Decider quoi attaquer en premier : - - Option A : invoque bridge-dev pour Bloc 1 adapters propres - - Option B : invoque bridge-tester pour test plan E2E detaille - - Option C : invoque acadenice-devops pour setup VPS staging - - Option D : invoque docmost-fork-dev pour exploration codebase Docmost +[ ] Verifier bridge boot : cd bridge && npm run dev (logs dans /tmp/bridge-smoke.log si en background) +[ ] Smoke quick : curl http://localhost:4000/api/ready +[ ] Decider quoi attaquer en premier (cf section "Vote pour la prochaine session" en haut) : + - Option A : Bloc 7 — webhooks Baserow + sync bidirec (gros, recommande) + - Option B : Bloc 5 — rate limit + cache invalidation (court, prerequis) + - 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/`) | Fichier | Contenu |