e9695450ef
test(e2e): add Playwright cross-stack tests for R3.1.e database-view
...
CI / Lint bridge (Biome) (push) Waiting to run
CI / Type-check bridge (push) Blocked by required conditions
CI / Tests unit bridge (push) Blocked by required conditions
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
E2E Playwright / Playwright e2e (chromium) (push) Waiting to run
7 scenarios covering the full bridge+DocAdenice+Baserow chain:
auth login, database-view insert, inline edit persistence, SSE realtime
update (no reload), RBAC write-denied, kanban drag-drop, calendar reschedule.
Includes docker-compose.e2e.yml (Postgres+Redis+Baserow+bridge+DocAdenice),
playwright.config.ts (3 projects: chromium/firefox/webkit), auth+baserow+cleanup
fixtures, global setup (API login + Baserow seed), and GitHub Actions e2e.yml.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 00:37:23 +02:00
ce76438a77
docs(session): mark R3.1.d as delivered — f3fae2a, kanban+calendar+inline edit, 33 new tests (96 total)
CI / Type-check bridge (push) Blocked by required conditions
CI / Lint bridge (Biome) (push) Waiting to run
CI / Tests unit bridge (push) Blocked by required conditions
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
2026-05-08 00:25:31 +02:00
c985bad75c
docs(session): R3.6+R3.7+R3.8 ajoutes au backlog + mode Loop full autonome
CI / Lint bridge (Biome) (push) Waiting to run
CI / Type-check bridge (push) Blocked by required conditions
CI / Tests unit bridge (push) Blocked by required conditions
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
2026-05-08 00:14:12 +02:00
9c910995f2
docs(session): mark R3.1.c as delivered — 71c2aba, 41 tests, database-view Tiptap extension
...
CI / Lint bridge (Biome) (push) Waiting to run
CI / Type-check bridge (push) Blocked by required conditions
CI / Tests unit bridge (push) Blocked by required conditions
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
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 00:08:20 +02:00
a673d93e52
docs(session): mark R3.1.b as delivered — c998c0d, 380 tests, SSE realtime stream
CI / Tests unit bridge (push) Blocked by required conditions
CI / Docker build + healthcheck (push) Blocked by required conditions
CI / Tests integration bridge (push) Blocked by required conditions
CI / Security scan (push) Waiting to run
CI / Lint bridge (Biome) (push) Waiting to run
CI / Type-check bridge (push) Blocked by required conditions
2026-05-07 23:55:53 +02:00
c998c0d761
feat(bridge): add SSE realtime stream for R3.1.b database-view live updates
...
CI / Lint bridge (Biome) (push) Waiting to run
CI / Type-check bridge (push) Blocked by required conditions
CI / Tests unit bridge (push) Blocked by required conditions
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
Redis Streams pub/sub (XADD/XREAD BLOCK) with Last-Event-ID replay, bounded
backpressure queue, 25s heartbeat, and full retry/abort handling. Publishes
RealtimeEvents from Baserow webhook handler after cache invalidation. 380 tests.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 23:55:06 +02:00
2ac2eccf9a
docs(session): R3.1 decoupe en 5 sous-blocs incluant R3.1.e Playwright e2e
CI / Lint bridge (Biome) (push) Waiting to run
CI / Type-check bridge (push) Blocked by required conditions
CI / Tests unit bridge (push) Blocked by required conditions
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
2026-05-07 23:26:23 +02:00
95089c460c
feat(bridge): add views endpoints for R3.1.a database-view
...
CI / Lint bridge (Biome) (push) Waiting to run
CI / Type-check bridge (push) Blocked by required conditions
CI / Tests unit bridge (push) Blocked by required conditions
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
Two new endpoints under /api/v1/views:
GET /api/v1/views/table/:tableId — list views for a table with Redis
cache TTL 60s. Returns full view metadata (filters, sortings, groupBys,
order). Cache invalidated by view.created|updated|deleted webhook events.
GET /api/v1/views/:viewId/data — paginated rows of a view applying
Baserow view filters/sorts via ?view_id= query param. Redis cache TTL 30s
keyed by (viewId, page, size, search). Requires tableId query param.
Domain: View entity extended with order, filters, sortings, groupBys.
Adapter: BaserowListOptions gains viewId param (forwards to Baserow ?view_id=).
Webhook: baserow-handler extended for view.* events — invalidates views:table
and views:data cache keys. rows.* events now also invalidate views:data:*.
Tests: +44 tests (336 total, was 292). Routes 20, repo 20, webhook 4.
Coverage: view.ts 100%, routes/views.ts 100% lines, baserow-handler 100%.
Co-Authored-By: Amelia (bmad-bmm-dev BYAN) <noreply@anthropic.com>
2026-05-07 23:24:10 +02:00
19246c6fe7
docs(session): ajoute R3.5 graph view style Obsidian/AFFiNE au RECAP
CI / Lint bridge (Biome) (push) Waiting to run
CI / Type-check bridge (push) Blocked by required conditions
CI / Tests unit bridge (push) Blocked by required conditions
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
2026-05-07 23:06:43 +02:00
9fbdbd0cf3
docs(session): RECAP fin session 2026-05-07 — pivot Notion-like + R1 + R2.x livres
CI / Security scan (push) Waiting to run
CI / Lint bridge (Biome) (push) Waiting to run
CI / Type-check bridge (push) Blocked by required conditions
CI / Tests unit bridge (push) Blocked by required conditions
CI / Tests integration bridge (push) Blocked by required conditions
CI / Docker build + healthcheck (push) Blocked by required conditions
2026-05-07 23:05:51 +02:00
a79c51e6f2
feat(auth): R2.3b bridge accepte JWT HMAC DocAdenice via DOCMOST_APP_SECRET
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
2026-05-07 23:02:01 +02:00
2ed73fa948
feat(bridge): R1 refactor proxy generique style Notion
...
CI / Lint bridge (Biome) (push) Waiting to run
CI / Type-check bridge (push) Blocked by required conditions
CI / Tests unit bridge (push) Blocked by required conditions
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
Pivot strategique : DocAdenice = produit Notion-like generique. Le bridge
est livre vide a un user qui cree ses tables Baserow comme il veut. Code
sans aucune ontologie metier.
Suppressions :
- 9 entites domain metier (Personne, Formation, Bloc, Module, Attribution,
Client, Projet, Tache, Intervention) + types.ts (Role, statuts)
- baserow-repo.ts (mega-fichier 554 LOC avec 9 repos heritant BaseRepo)
- 6 routes metier (personnes, formations, projets, modules, interventions,
attributions) + tests associes
- Lookup PersonneRepo.findByEmail dans middleware auth
- Mapping DEFAULT_ROLE_SCOPES dans middleware/scopes.ts
- Cascade rollup metier dans webhooks/baserow-handler.ts
Ajouts :
- Domain generique : Table, Row, Field, View + schemas zod refondus
- 4 repos generiques : tables / rows / fields / views
- Route unique routes/tables.ts avec 9 endpoints REST CRUD generiques
- Claim JWT acadenice_permissions[] lu directement dans le middleware auth
(alimente par RBAC dynamique cote DocAdenice en R2)
- examples/acadenice-formation-hub/ : README + seed-baserow.md schema
9 tables + example-roles.md (Formateur, Developpeur, Direction, Support,
Admin avec permissions generiques)
Refactors :
- BaserowClient etendu : listTables, getTable, listFields, listViews,
getGridViewRows
- middleware/auth.ts : extractPermissions(payload), AuthenticatedUser
remplace roles[] par permissions[]
- middleware/scopes.ts : computeOidcScopes(groups, permissions, map)
- webhooks/baserow-handler.ts : invalidation generique
bridge:tables:<tableId>:* sans cascade cross-table
- lib/cache.ts : invalidateEntity -> invalidateTable(redis, tableId, rowId?)
- container.ts : drop tableIds, RepoSet={tables, rows, fields, views}
- 501 NOT_IMPLEMENTED si DB token sur endpoints /tables qui exigent JWT
Tests : 250/250 verts (depuis 319). Coverage : domain 98.9%, adapters 89%,
auth 97.08%, rate-limit 100%, cache 100%, webhooks 100%.
Quality gates verts : typecheck, lint biome, vitest, coverage thresholds.
Refs: R1 dans le pivot strategique DocAdenice Notion-like generique.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 22:12:32 +02:00
0cf6533885
feat(bridge): Bloc 5 rate limit + cache invalidation cote writes
CI / Lint bridge (Biome) (push) Waiting to run
CI / Type-check bridge (push) Blocked by required conditions
CI / Tests unit bridge (push) Blocked by required conditions
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
2026-05-07 21:44:33 +02:00
571f5c3426
feat(auth): Bloc 4 — middleware OIDC-ready avec dual mode service-token + Authentik JWT
...
CI / Lint bridge (Biome) (push) Waiting to run
CI / Type-check bridge (push) Blocked by required conditions
CI / Tests unit bridge (push) Blocked by required conditions
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
- Support JWT OIDC Authentik via jose + JWKS (cache 10min)
- Lookup Personne via PersonneRepo.findByEmail + cache Redis 60s
- Mapping groups Authentik + roles formation-hub vers scopes
- Mode OIDC active uniquement si AUTHENTIK_ISSUER + JWKS_URI + AUDIENCE set
- Service tokens brg_* inchanges, restent voie principale en local
2026-05-07 21:17:56 +02:00
8b42cbc787
chore(docmost): clone upstream + isole seed scripts Acadenice
...
CI / Lint bridge (Biome) (push) Waiting to run
CI / Type-check bridge (push) Blocked by required conditions
CI / Tests unit bridge (push) Blocked by required conditions
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
- Move docmost/setup/* vers docmost-acadenice-seed/ (preserve historique git)
- Clone Docmost upstream (depth=1) dans docmost/, gitignore le sub-repo
- Branche acadenice/main creee dans le fork pour patches
- Prepare Bloc 4 (auth federee) puis Bloc 8 (Tiptap node-views)
2026-05-07 20:57:15 +02:00
022b1ee926
feat(webhooks): Bloc 7a Baserow complet + Bloc 7b Docmost stub avec HMAC verify et idempotence
CI / Lint bridge (Biome) (push) Waiting to run
CI / Type-check bridge (push) Blocked by required conditions
CI / Tests unit bridge (push) Blocked by required conditions
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
2026-05-07 20:51:56 +02:00
c4f087b697
docs(session): Bloc 6 done + fix ZSET
CI / Lint bridge (Biome) (push) Waiting to run
CI / Type-check bridge (push) Blocked by required conditions
CI / Tests unit bridge (push) Blocked by required conditions
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
2026-05-07 20:38:07 +02:00
1cdb1b6ca4
fix(redis-cache): membre ZSET unique pour eviter collision sub-ms dans checkRateLimit
...
Date.now() seul collisionne sur appels concurrents dans la meme milliseconde,
ce qui faisait compter 1 entry au lieu de N dans la fenetre glissante.
Suffixe randomUUID pour garantir l'unicite du membre. Ajoute test burst 10x
qui prouve les 5 allowed + 5 denied attendus.
2026-05-07 20:38:07 +02:00
1528017bab
test(adapters): tests integration redis (testcontainers) + baserow/docmost (fake HTTP server)
...
- redis-cache.ts : 16 tests via testcontainers redis:7-alpine, coverage 100% lines / 95.2% branches
- baserow-client.ts : 18 tests via serveur node:http local, coverage 99% lines / 96.9% branches
- docmost-client.ts : 25 tests via serveur node:http local (login + cookie + envelope { data }), coverage 97.7% lines / 93.7% branches
- helper tests/helpers/http-server.ts : serveur Node natif reutilisable (request log + route registry)
- vitest.config.ts : ajout threshold 70% lines+branches sur src/adapters/**
- suppression sanity.test.ts (stub remplace par 3 vraies suites)
- justification fake HTTP vs container heavy en commentaire en tete de fichier
Resultat : 220/220 tests verts, coverage adapters >> seuil 70% requis.
2026-05-07 20:31:08 +02:00
37e516af36
docs(session): update SESSION-RESUME apres Bloc 1+2+3 + smoke test
...
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>
2026-05-07 20:12:42 +02:00
7a3fbe455d
fix(bridge): smoke test fixes — skip rows malformees + BASEROW_TABLE_IDS override
...
CI / Lint bridge (Biome) (push) Waiting to run
CI / Type-check bridge (push) Blocked by required conditions
CI / Tests unit bridge (push) Blocked by required conditions
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
Decouverts via smoke test local contre Baserow + Docmost reels.
1. **BaseRepo.list robuste** : try/catch toDomain par row, skip + log warn
si throw (ex Personne avec splits null != 100). Avant : 500 sur la liste
entiere. Apres : 200 avec items valides + meta.skipped count pour visibilite.
`get()` continue de propager (un get sur row corrompue = legitimement 500
pour investigation manuelle).
2. **BASEROW_TABLE_IDS env override** : BaserowClient.resolveTableIds appelle
/api/database/tables/database/:id/ qui requiert un JWT user (Baserow API
distingue DB tokens reservees aux endpoints rows, et JWT pour les endpoints
admin). En dev/prod simple on passe le mapping directement par env var :
BASEROW_TABLE_IDS={"personne":609,"formation":610,...}. Le code resolveTableIds
reste en place pour Phase 3+ (bridge avec JWT user).
Smoke test post-fix :
- GET /api/health, /api/ready : 200
- Auth : 401 absent / 401 invalide / 200 valide
- GET /personnes (rows test invalides) : 200 data:[] meta.skipped:2
- GET /formations, /projets : 200 avec rows
- GET /personnes/9999 : 404
Tests Vitest : 163/163 verts. tsc + biome ci verts.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 20:09:27 +02:00
c8e9b4d4ea
feat(bridge): bloc 3 — routes REST Tier 1 + auth + repos Baserow (10 endpoints)
...
CI / Lint bridge (Biome) (push) Waiting to run
CI / Type-check bridge (push) Blocked by required conditions
CI / Tests unit bridge (push) Blocked by required conditions
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
Wiring HTTP du bridge service. 10 endpoints livres (cf docs/19 §6.1-6.5) :
- GET /api/v1/personnes (+ /:id, + /:id/dashboard)
- GET /api/v1/formations (+ /:id avec rollups blocs/modules)
- GET /api/v1/projets (+ /:id avec rollups taches)
- POST /api/v1/modules/:id/attribuer (RG-01 -> 422, role/heures invalides -> 400)
- POST /api/v1/interventions (validation role developpeur + heures > 0)
- PATCH /api/v1/attributions/:id/heures-realisees (409 si annule/realise)
Layers ajoutees :
- src/middleware/auth.ts : Bearer brg_*, scopes JSON-encoded BRIDGE_API_TOKENS, admin:* wildcard
- src/middleware/error-handler.ts : BridgeError -> JSON shape standard
- src/lib/container.ts : DI singleton (Baserow + Redis + 9 repos), setContainer testable
- src/lib/http.ts : parseListQuery + parseBody zod helper
- src/repos/baserow-repo.ts : BaseRepo<T> abstrait + 9 sous-classes (mapping Row<->Domain)
- src/routes/{personnes,formations,projets,modules,interventions,attributions}.ts
src/index.ts reecrit : buildApp() + initContainer + auth sur /api/v1/* + ready check Baserow+Redis.
Tests : 163/163 verts (12 suites domain + 8 nouvelles : auth, repos, 6 routes).
Coverage src global : 70.77% (cible 60%). Domain 97.86%, routes 96%, middleware 86%.
Choix : BaseRepo abstrait (pas mega-generic, Ockham) ; FakeRepos in-memory pour tests routes
(pas de testcontainers ici, c'est Bloc 7) ; mapping erreurs domain -> HTTP par message texte
(fragile, sera refactor en DomainError typees au Bloc 3.2).
Hors scope (a venir) :
- Bloc 5 : rate limiting Redis
- Bloc 7 : webhook handlers Baserow + sync bidirec + cache invalidation
- Bloc 3.2 : routes /docmost/*, /sync/*, /rapports/*
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 20:01:36 +02:00
2c5665bc44
feat(bridge/domain): bloc 2 — domain models + tests Vitest (coverage 97.86%)
...
CI / Lint bridge (Biome) (push) Waiting to run
CI / Type-check bridge (push) Blocked by required conditions
CI / Tests unit bridge (push) Blocked by required conditions
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
Modele OO complet (cf docs/12-uml-class-diagram.md) en TypeScript strict :
- Personne (pivot multi-roles, splits formation/agence, heuresRestantes*)
- Formation -> Bloc -> Module composition + heuresRestantes rollup
- Module.creerAttribution avec validation RG-01 (capacite) + role formateur
- Attribution lifecycle : demarrer/saisirHeuresRealisees/cloturer/annuler
- Client -> Projet -> Tache composition + lierFormationPedagogique
- Tache.creerIntervention avec validation role developpeur + heures > 0 + actif
- Schemas zod pour runtime validation (z.infer types exposes)
- Decimal.js partout pour les heures (zero erreur flottante)
Patterns appliques :
- Statuts comme discriminated unions ('actif' | 'inactif' | ...)
- Statuts annules exclus des rollups (annulation libere capacite)
- _appliquerHeures* en pseudo-private (convention underscore, pas de friend en TS)
- Warn surcharge Personne non bloquant (overbooking volontaire possible) — RG-01 Module reste bloquante
Tests : 111 pass / 0 fail. Coverage domain : 97.86% lines, 98.57% funcs.
tsc strict EXIT 0, biome ci EXIT 0.
Hors scope (a venir) :
- Repository pattern (Bloc 3 avec routes Hono)
- rapportPDF (Phase 2.4)
- Tests adapters Bloc 1 (Bloc 6 via bridge-tester)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 19:48:22 +02:00
5b2abbc23c
feat(bridge/adapters): bloc 1 propre — BaserowClient + DocmostClient + RedisCache
...
- BaserowClient : CRUD rows, listRows pagination/filter/search, resolveTableIds, healthCheck
- DocmostClient : auth session cookie auto-relogin, spaces/pages/shares CRUD, healthCheck
- RedisCache : cache-aside, invalidation pattern SCAN, idempotence webhooks, rate limit sliding window
- errors.ts : BridgeError typee + 11 ErrorCode (AUTH/RG_VIOLATION/BASEROW_UNAVAILABLE...)
- bumps mineurs deps (hono, ofetch, ioredis, zod, pino) + ajout pino-pretty dev
tsc strict mode clean, biome ci clean. Tests unit a venir (Bloc 6 via bridge-tester).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 19:39:58 +02:00
460f7effe0
feat(workflows): create 5 BYAN workflows for agent collaboration
...
CI / Lint bridge (Biome) (push) Waiting to run
CI / Type-check bridge (push) Blocked by required conditions
CI / Tests unit bridge (push) Blocked by required conditions
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
Workflows (playbooks markdown) pour orchestrer les 4 agents specialises :
- README.md : index + conventions communes + integration BYAN web futur
- build-story.md : cycle complet livrer 1 story Phase 2 (bridge-dev → bridge-tester → review → CI → deploy staging → validation metier)
- sync-bidirec.md : sync Docmost ↔ Baserow event-driven (idempotence + anti-loop X-Bridge-Origin)
- release.md : process release semver (E2E staging → tag → approval → deploy prod → watch 30min)
- incident.md : SEV1/2/3 response + post-mortem blameless + runbooks
- bump-deps.md : Dependabot PRs + major bumps + Docmost/Baserow upstream
Chaque workflow specifie : trigger, acteurs (agents + humains), sequence
ordonnee avec outputs, gates humains bloquants, rollback, comm templates.
Workflows = playbooks declaratifs pour Claude main qui orchestre les agents
via Agent tool sequentiel. A migrer plus tard vers BYAN web workflow runs
quand le runtime BYAN sera fix.
Equipe complete pour formation-hub :
- 4 agents specialises (bridge-dev, bridge-tester, acadenice-devops, docmost-fork-dev)
- 5 workflows orchestrant leur collaboration
2026-05-07 19:30:48 +02:00
b37220d432
feat(agents): complete BYAN INT for 3 more agents + session resume MD
...
CI / Lint bridge (Biome) (push) Waiting to run
CI / Type-check bridge (push) Blocked by required conditions
CI / Tests unit bridge (push) Blocked by required conditions
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
Agents crees (briefs detailles ~150-200 lignes chacun) :
- bridge-tester : QA Vitest + testcontainers + E2E Playwright + coverage 80%
- acadenice-devops : Docker/Traefik/Forgejo/backups/monitoring/CI-CD
- docmost-fork-dev : React+Tiptap node-views + bidirec backlinks + fork strategy
Plus :
- _byan-output/fast-app/formation-hub/SESSION-RESUME.md : document de reprise
pour la prochaine session apres restart Claude Code. Contient :
* Etat global projet (conception OK + Phase 1 en cours)
* Localisation tous artefacts (URLs, paths, IDs)
* 19 docs conception checklist
* Phase 1 iteration status (OK / partiel / TODO)
* Phase 2 bridge — decoupage en blocs
* 4 agents specialises + comment les invoquer
* 3 workflows BYAN proposes (a creer)
* Decisions structurelles a respecter
* Credentials utilises (.env)
* Tous les commits cette session
* Checklist demarrage prochaine session
Equipe BYAN formation-hub now complete :
[OK] bridge-dev (code metier)
[OK] bridge-tester (qualite)
[OK] acadenice-devops (infra/ops)
[OK] docmost-fork-dev (frontend custom)
2026-05-07 19:26:17 +02:00
7d4d2cd427
feat(agents): create bridge-dev specialized agent (1st BYAN INT for project)
CI / Lint bridge (Biome) (push) Waiting to run
CI / Type-check bridge (push) Blocked by required conditions
CI / Tests unit bridge (push) Blocked by required conditions
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
2026-05-07 19:16:26 +02:00
1d71364c6e
feat(seed): add I4 forms publics + space etudiant + I5 healthcheck etendu
...
CI / Lint bridge (Biome) (push) Waiting to run
CI / Type-check bridge (push) Blocked by required conditions
CI / Tests unit bridge (push) Blocked by required conditions
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
I4 — Forms publics + space etudiant :
- baserow/seed/seed_forms.py : cree forms publics sur attribution + intervention
(saisie heures via lien sans compte). Form cree OK, field-options endpoint
retourne 404 sur Baserow 1.30 — a investiguer (URL different selon version).
- docmost/setup/create-space-etudiant.py : cree space prive + invite etudiant
+ page Welcome template. Slug strict lettres+chiffres only (fix Docmost).
I5 — Ops :
- scripts/healthcheck.sh : check UI + API health (Docmost+Baserow), affiche
status containers Docker. 4/4 OK en local.
- scripts/cron-install.sh : installe cron quotidien backup + healthcheck */5min.
Makefile : targets seed-baserow-forms, create-space-etudiant. Tous les targets
utilisent maintenant .venv/ local pour eviter pip systeme.
.gitignore : exclut .venv/ + __pycache__/.
2026-05-07 18:49:00 +02:00
d5558caf9a
fix(docmost-seed): handle Docmost data envelope + add format field
...
CI / Lint bridge (Biome) (push) Waiting to run
CI / Type-check bridge (push) Blocked by required conditions
CI / Tests unit bridge (push) Blocked by required conditions
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
Docmost API responses wrap : {data, success, status} (3 keys top-level).
- _post auto-unwrap si payload contient `data` dict|list
- create_page : ajout du field 'format' (markdown|json|html) requis
- welcome_page_content() : retourne markdown plain (Docmost convertit auto en Tiptap)
Iteration 3 BUILD validee en local :
Workspace : Acadenice (id 019e034d-...)
3 spaces : CFA, Agence, Interne
Page test : Welcome formation-hub dans CFA
Share URL : http://localhost:3000/share/019e0352-7fc4-7639 ...
Endpoints reverse-engineered confirmes fonctionnels :
/api/auth/setup, /api/auth/login, /api/workspace/info,
/api/spaces/, /api/spaces/create, /api/pages/create, /api/shares/create
2026-05-07 18:43:39 +02:00
8a676d27c8
feat(docmost): add seed.py via internal endpoints (AGPL-legal, non-official)
...
CI / Lint bridge (Biome) (push) Waiting to run
CI / Type-check bridge (push) Blocked by required conditions
CI / Tests unit bridge (push) Blocked by required conditions
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
- docmost/setup/seed.py : Python script reverse-engineered depuis docmost/docmost
github source. Endpoints utilises :
* POST /api/auth/setup (bootstrap workspace+admin)
* POST /api/auth/login (session cookie)
* POST /api/spaces/create
* POST /api/pages/create
* POST /api/shares/create
- docmost/setup/requirements.txt : requests + PyYAML
- Makefile : target seed-docmost
- README updated : explique option A (manuel) vs option B (seed automatise)
Endpoints non-officiels mais utilisables sur Community Edition AGPL.
Risque : maintenance possible si Docmost upgrade modifie les internals.
Aligne avec strategie bridge Phase 2 (doc 19).
2026-05-07 18:22:47 +02:00
5d029771a0
feat(docmost): manual setup guide for iteration 3 BUILD
...
CI / Type-check bridge (push) Blocked by required conditions
CI / Lint bridge (Biome) (push) Waiting to run
CI / Tests unit bridge (push) Blocked by required conditions
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
- docmost/setup/README.md : quickstart 10 min (admin + 3 spaces + page test + share)
- docmost/setup/spaces.yaml : schema declaratif (reference future si API Community s'ouvre)
- Makefile : target setup-docmost-guide (rappel des etapes)
API publique Docmost = Enterprise payante (cf docmost.com/docs/user-guide/api).
Setup manuel UI obligatoire pour Community Edition AGPL — rapide (10 min) et stable.
Iteration 3 du plan Fast-App couverte (stories S-01, S-07, S-08).
Couvre les UC : UCW01 gerer wiki + droits, UCW02 inviter client par lien
partage, UCW03 creer space etudiant.
2026-05-07 18:17:45 +02:00
a0266b886c
feat(baserow): add formulas pass + related field naming to seed
...
CI / Lint bridge (Biome) (push) Waiting to run
CI / Type-check bridge (push) Blocked by required conditions
CI / Tests unit bridge (push) Blocked by required conditions
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
- schema.json : 17 formulas (rollups + heures_restantes) ajoutees + related_field_name explicite sur les 10 liens
- seed.py : 3 nouveaux methodes (create_formula_field, rename_field, create_link_field returns dict)
- seed.py : pass 5/6 renomme automatiquement les related fields apres link creation
- seed.py : pass 6/6 cree les formulas (idempotent)
- README.md : section formulas updated
Iteration 2 du plan Fast-App couverte. Apres seed, les rollups
(formation_heures_attribuees, personne_heures_restantes_total, etc.)
sont automatiques.
2026-05-07 18:15:21 +02:00
6724be6c85
feat(baserow): add seed script + Fast-App iteration 1 artifacts
...
CI / Lint bridge (Biome) (push) Waiting to run
CI / Type-check bridge (push) Blocked by required conditions
CI / Tests unit bridge (push) Blocked by required conditions
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
- baserow/seed/schema.json : 9 tables declaratif (personne + CFA + Agence)
- baserow/seed/seed.py : Python script idempotent (login + workspace + db + tables + fields + links)
- baserow/seed/requirements.txt : requests
- baserow/seed/README.md : quickstart 4 etapes
- Makefile target seed-baserow
Fast-App workflow local :
- _byan-output/fast-app/formation-hub/ : 6 artifacts (pitch, backlog, cdcf-stories, plan, dispatch, build-state)
- Phase 0 mappee : phases 1-6 done depuis docs Merise/UML existants
- Iteration 1 BUILD = setup tables Baserow vanilla (S-02 + S-03 + S-04)
Stack locale up et healthy. Pret pour seed apres creation compte admin Baserow.
2026-05-07 17:37:55 +02:00
ecb7a44c3c
ops(infra): add Forgejo Actions Runner skeleton
...
CI / Lint bridge (Biome) (push) Waiting to run
CI / Type-check bridge (push) Blocked by required conditions
CI / Tests unit bridge (push) Blocked by required conditions
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
- infra/forgejo-runner/compose.yml : runner v6.5.0 avec auto-register
- infra/forgejo-runner/.env.example : variables registration
- infra/forgejo-runner/README.md : setup + usage + securite + troubleshooting
- infra/README.md : index
Le runner est OPTIONNEL et a deployer separement quand on veut activer le CI
sur git.acadenice.com. Tant que pas deploye, les workflows GitHub Actions
restent actifs sur github.com/AcadeNice/wiki (mirror).
2026-05-07 13:49:19 +02:00
d8e8bdefe5
ops(ci): fix docker-build job — setup .env BEFORE compose build
...
CI / Lint bridge (Biome) (push) Waiting to run
CI / Type-check bridge (push) Blocked by required conditions
CI / Tests unit bridge (push) Blocked by required conditions
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
- cp .env.example .env en step 1 (compose interpole les vars au build)
- Add `compose config` validation step
- Bump sleep 30 -> 60s (Docmost boot prend 45-60s sur runner)
- Bump logs --tail=200 (200 lignes au lieu de tout)
2026-05-07 12:29:35 +02:00
66ff9097a6
ops(ci): add vitest config + sanity tests stub
...
- bridge/vitest.config.ts : config + coverage v8 + passWithNoTests
- bridge/tests/unit/sanity.test.ts : stub (real tests Phase 2)
- bridge/tests/integration/sanity.test.ts : stub
- Remove tests/.gitkeep
2026-05-07 12:25:00 +02:00
991d172f69
ops(ci): trigger CI on main pushes + disable auto deploy-staging Phase 0
...
- CI runs on push to main + develop + PR (was: ignore main → never ran on main)
- Deploy staging : workflow_dispatch only (re-activer push trigger quand
secrets STAGING_HOST/USER/SSH_KEY configures cote GitHub)
Effet : push suivant trigger un CI complet et verifie que la stack passe les
gates avant tout deploy.
2026-05-07 12:21:59 +02:00
d510bddc34
ops: fix CI run — generate package-lock + bump testcontainers + doc 19 sync bidirec
...
- Add bridge/package-lock.json (npm install) — fix setup-node@v4 cache fail
- Bump testcontainers 10.x -> 11.14.0 (fix high CVE undici)
- Apply Biome formatter on src/index.ts + src/lib/config.ts
- Update doc 19 Bridge API design :
* Add 5th mission : sync bidirectionnel Docmost <-> Baserow
* Add endpoints /docmost/* write + /sync/* orchestration
* Add section MCP server (Phase 3+) with tools/resources/prompts
* Add anti-loop strategy (X-Bridge-Origin + idempotence Redis)
2026-05-07 12:20:44 +02:00
668576cdc4
chore: initial commit — formation-hub conception phase
...
Conception complete (Phase 0) pour formation-hub Acadenice :
- 19 docs Merise Agile + UML + GitOps + plans (tests/deploy/ops/api)
cf docs/00-readme.md pour l'index complet
- Stack Docker compose (Docmost + Baserow + Postgres + Redis + MinIO local FS)
compose.yml + compose.staging.yml + compose.prod.yml
- CI/CD GitHub Actions skeleton (ci, deploy-staging, deploy-prod)
- Bridge service skeleton (Hono + TS + Biome + Vitest + zod + pino)
- Templates GitHub : PR + 3 issue types + CODEOWNERS + dependabot.yml
- Scripts ops : healthcheck, backup quotidien, smoke-test post-deploy
- LICENSE AGPL-3.0 + SECURITY.md + CONTRIBUTING.md + CHANGELOG.md
- Diagramme drawIO archi infra (XML importable dans diagrams.net)
Decisions structurelles enregistrees :
- Scope CFA + Agence avec entite PERSONNE pivot multi-roles (ADR-001)
- Stack composite Docmost AGPL + Baserow MIT + bridge custom (ADR-001)
- Path B : UX quasi-unified via Tiptap node-views custom (ADR-002)
- Monorepo trunk-based development (ADR-003)
- Postgres separe Docmost/Baserow (ADR-004)
- Bridge stack Node 22 + Hono (ADR-005)
- Repo neuf prefere a fork Docmost
- Prod-like des le jour 1 (pas MVP)
2026-05-07 12:16:19 +02:00