Files
festipod/AGENTS.md
T
Sylvain Duchesne db9eb1cf47 doctrine: Festipod treats @ng-eventually/client as a finished NextGraph SDK
Enforce the project boundary: Festipod is written as if NextGraph were a mature,
finished SDK; @ng-eventually/client IS that SDK. NO current-NextGraph-state,
simulation, polyfill, shim, mono-store, store-id or broker-internal knowledge
remains in this repo — it now lives in the @ng-eventually/client repo.

- Dissolved the `nextgraph-platform` concept entirely (12 leaves — all
  current-state/simulation, now in the lib's docs/). Rescued the genuine domain
  parts into functional-domain/knowledge_data-scopes-and-discovery.md (which
  entity → which scope; product-level discovery/notification intent), framed as
  SDK usage with no mechanism.
- data-layer re-anchored to "how Festipod persists via the SDK": stripped
  mono-store/private_store_id/RepoNotFound/DataCloneError/FESTIPOD_MULTISTORE.
  Deleted the current-SDK compensation leaves (private-store-scope, multistore,
  the 2026-03-17 ADRs, conditional-ng-init). Kept/reworded the domain + app
  leaves; caveat_participation-deletion reduced to the domain contract.
- app-security reworded (isolation delegated to the SDK; app trusts it).
- AGENTS.md: dropped the nextgraph-platform row, reworded data-layer/
  functional-domain/app-security, added the "Frontière SDK NextGraph" note.
- Fixed dangling [[links]]; concept lint clean (43 leaves).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-03 23:23:23 +02:00

2.8 KiB

Festipod

Web app mobile-first où les utilisateurs créent des points de rencontre qui se greffent sur des événements publics existants, pour favoriser les rencontres. L'événement n'est qu'un prétexte/ancrage ; la valeur, c'est le point de rencontre — on s'inscrit à un point de rencontre, pas à un événement. Stack : Bun + React + NextGraph (P2P, local-first, chiffré).

Invariants à toujours garder

  • Architecture feature-based : le code est organisé par domaine métier, pas par couche technique.
    src/modules/{event,user,home,auth,workshop,meeting,notification}/
    src/shared/          # Composants, context, data — importable par tous les modules
    src/app/             # App shell (router, providers, entrée)
    src/screens/index.ts # Registre d'écrans (utilisé par Storybook)
    
  • Un module n'importe QUE depuis shared/ — jamais d'un autre module. C'est l'invariant qui rend l'archi réelle.
  • Bun-first : bun / bun install / bun test / bun build, jamais node/npm/vite/jest. bun run dev (port 3000).

Frontière SDK NextGraph

Le SDK de données de Festipod est @ng-eventually/client — traité comme un SDK NextGraph fini et mature (documents par entité placés par scope public/protected/private, capabilities, inboxes). Il est injecté une seule fois via ngSession.configure(...). Ne jamais documenter dans ce repo l'état courant de NextGraph (contraintes du SDK sous-jacent, contournements, internes broker/verifier) : cela vit dans le repo @ng-eventually/client. La doctrine Festipod décrit uniquement comment Festipod utilise ce SDK + le domaine + l'architecture + le contrat BDD.

Doctrine du projet — concepts (livrée automatiquement)

La connaissance détaillée vit dans .project/concepts/ (système concept) : fiches courtes, typées, livrées par un hook quand tu touches leur territoire — tu n'as pas à les charger d'avance. Les 6 concepts :

Concept Couvre
functional-domain Modèle produit : point de rencontre, acteurs, concepts métier, périmètres public/protected/private par entité, découverte, défi déduplication
app-architecture Modules, invariant d'imports, app shell, routing path-based, écrans
tech-stack Bun-first, APIs Bun, build pipeline, commandes
data-layer Persistance via le SDK @ng-eventually/client : entités-documents par scope, shapes SHEX/ORM, modes connected/demo, pièges
bdd-testing Cucumber multi-couches FR, contrat @ui/@data/@e2e, harness broker, cookbook
app-security Isolation déléguée au SDK (pas de contrôle d'accès dans les écrans), auth wallet, matrice d'autorisations cible

Pour documenter un fait projet : /concept document <sujet> (ne pas écrire en libre dans .project/).