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