Files
ng-eventually/.project/concepts/app-contract/_overview.md
T
Sylvain Duchesne 30f6263db5 docs(concept): le contrat entre le polyfill et l'application qui l'utilise
Amorce le système `concept` dans ce dépôt et ouvre `app-contract` — la frontière
entre cette bibliothèque et les applications qui la consomment.

C'est un contrat **inter-dépôts** et ce dépôt en est le FOURNISSEUR : les applications
vivent ailleurs et tireront `sdk-surface` d'ici. D'où le type `contract_`, ses cinq
sections obligatoires, et l'inscription dans `.project/contracts.yaml` — c'est
l'inscription qui publie.

Trois feuilles :

- **`contract_sdk-surface`** — l'engagement, écrit du point de vue de l'appelant.
  Ce qu'il peut tenir pour acquis : permissif en entrée et précis en sortie ; toute
  référence rendue est NUE, aucun appel ne rend jamais de clé ; lire est la possession,
  écrire est la propriété ; donner à lire est un seul acte et le destinataire n'appelle
  rien ; un dépôt s'adresse à une inbox, jamais à un document ; `ensureIdentity()` est
  toute la connexion ; et `configure` est le seul appel qu'il supprimera.
  Ce qu'il ne doit PAS tenir pour acquis, dit aussi crûment : aucune confidentialité,
  rien de « par lecteur » sur un document public, aucune révocation, aucune écriture
  déléguée, et les références ne voyagent que dans un déploiement.

- **`rule_would-the-caller-unlearn-it`** — le test qui décide de tout : est-ce que
  ceci ferait apprendre à l'appelant quelque chose qu'il devra DÉSAPPRENDRE ? Avec les
  deux tells que la revue de ces jours-ci a rendus concrets : une exception nommée
  cesse d'en être une dès qu'on la publie, et un symbole gardé parce qu'il était là
  n'est pas une décision.

- **`knowledge_what-an-app-deletes-at-migration`** — les deux destins d'un symbole
  publié, le cas intermédiaire d'`ensureIdentity` (substance jetée, site d'appel
  conservé), et le fait que la liste de suppression n'est plus portée par un chemin
  d'import depuis la fusion des entrées : une garantie mécanique remplacée par une
  garantie documentaire, dont seule la moitié est tenue par un test.

Le vocabulaire du concept fixe trois termes que ce projet a déjà payé cher :
`reference` (jamais « lien »), `ReadCap`, `polyfill-era`. `lint` est conformant.

Reste à décider : ce dépôt n'a pas de `CLAUDE.md` racine, donc l'`AGENTS.md` généré
n'est chargé nulle part.
2026-08-10 09:25:01 +02:00

2.1 KiB

type, summary, triggers, vocabulary
type summary triggers vocabulary
overview What an application may rely on from @ng-eventually/sdk, and what it will have to delete
keywords paths
polyfill
sdk
surface
contract
publish
published
entry
export
migration
unlearn
consumer
app-facing
packages/sdk/src/index.ts
packages/sdk/src/surface/**
packages/sdk/README.md
examples/notebook/**
docs/api-contract.md
term gloss not see
reference a NURI that names a document and grants nothing — what an application circulates
link
lien
share-link
contract_sdk-surface
term gloss not
ReadCap upstream's word for what opens a document — a reference carrying its secret
token
credential
permission
term gloss not see
polyfill-era a published symbol with no counterpart in the target SDK, deleted at migration
transitional
shim-only
knowledge_what-an-app-deletes-at-migration

app-contract — the boundary between this library and the applications that use it

This library exists so an application can be written today against the NextGraph that does not ship yet, and keep its code when it does. Everything under this concept governs that boundary: what the package publishes, what a caller may rely on, what it must not, and what disappears at migration.

The distinguishing question, asked at every surface choice: would this make a caller learn something it has to UNLEARN? If yes it is a deviation, whatever it buys — see rule_would-the-caller-unlearn-it.

This repo is the provider of contract_sdk-surface; consuming applications live in other repos and pull it. The per-symbol ruling, with an epistemic label on every target-side claim, stays here in docs/api-contract.md — that is maintainer material, not the engagement.

Read first

  • contract_sdk-surface — the engagement itself, written from the caller's point of view.
  • rule_would-the-caller-unlearn-it — the test that decides what may be published.
  • knowledge_what-an-app-deletes-at-migration — the two fates a published symbol can have.