docs: des contrats à deux voix, et une politique de version qui dit la vérité
Le régime des contrats est devenu bidirectionnel : chaque partie rédige sa position dans son dépôt et tire celle de l'autre. Le fournisseur écrit son engagement, chaque consommateur écrit sa déclaration — ce qu'il appelle vraiment, sous quelles contraintes, et avec quelles frictions. Ce dernier point change nos usages : la section Frictions est le chemin par lequel un consommateur expose un problème, le canal hors-bande ne portant que le signal. Les huit points que Festipod nous a remontés auraient dû arriver par là, et notre réponse appartient à l'engagement plutôt qu'à un échange qui s'évapore. Trois interfaces existaient, une seule était documentée. Elles ont maintenant leur dossier et leurs deux voix : la surface du polyfill, ng-e2e-helpers, et la couche d'indexation. On a écrit les engagements dont nous sommes l'auteur et les déclarations des consommateurs qui sont à nous — délibérément AUCUN usage_festipod : ce n'est pas notre dépôt, et décider à leur place ce qu'ils consomment viderait le mécanisme de son sens. Et la Change policy s'inverse. Elle disait « ce paquet n'offre pas de stabilité sémantique ». Refuser un schéma ne ralentit pas le mouvement — ça retire au consommateur le seul outil pour le gérer, alors qu'on faisait déjà le travail d'une publication versionnée sans lui en donner l'étiquette. Semver, donc, et les majeurs sont le cas NORMAL : une surface qui converge vers une cible qu'elle n'atteint pas encore casse souvent, et c'est le signal vrai. Le texte dit les déclencheurs plutôt que le nom du schéma — retirer un symbole publié ou resserrer un appel est un majeur, ajouter est un mineur. Version pleine sur main, pré-version sur une branche : Festipod peut épingler aujourd'hui sans qu'on lui promette du stable, et sans qu'on ait à lui retirer son adresse à la fusion. Au passage, la signature publiée de watchShape était fausse — elle annonçait un argument unique là où l'appel en prend deux. Rapporté par Festipod, confirmé indépendamment.
This commit is contained in:
+36
-5
@@ -1,11 +1,42 @@
|
||||
# Inter-repo contracts. `publish:` is this project's engagement toward its consumers —
|
||||
# listing a leaf here IS the act of publishing it; an unlisted `contract_` leaf is a draft.
|
||||
#
|
||||
# This project is a PROVIDER only for now: the applications that consume the polyfill live in
|
||||
# their own repos and pull `polyfill-surface` from here. Nothing is consumed in the other
|
||||
# direction — the NextGraph clone this library aligns on is a read-only reference we
|
||||
# verify against, not a contract anyone stamps.
|
||||
# This project is a PROVIDER of two interfaces, each hosted in an interface folder inside
|
||||
# its owning concept, with one `usage_<consumer>.md` per consumer beside the engagement:
|
||||
#
|
||||
# polyfill-surface (concepts/app-contract/polyfill-surface/)
|
||||
# consumers: the Festipod application (its own repo), `ng-helpers`
|
||||
# ng-e2e-helpers (concepts/e2e-harness/ng-e2e-helpers/)
|
||||
# consumers: this repo's own polyfill e2e suites (same repo — declared in place,
|
||||
# nothing to pull), `ng-helpers`, any NextGraph application
|
||||
#
|
||||
# `consume:` here is the PROVIDER side of the pair: we pull each consumer's own declaration
|
||||
# back, so we can see what is actually relied on and read its Frictions. We consume no
|
||||
# engagement — the NextGraph clone this library aligns on is a read-only reference we verify
|
||||
# against, not a contract anyone stamps.
|
||||
#
|
||||
# `pullFrom:` values are CANONICAL remote identities, because this file travels with the
|
||||
# branch. Per-developer local access lives in `.project/contracts.local.yaml`, which is
|
||||
# gitignored and must never be committed.
|
||||
|
||||
publish:
|
||||
# paths are relative to `.project/`
|
||||
polyfill-surface: concepts/app-contract/contract_polyfill-surface.md
|
||||
polyfill-surface: concepts/app-contract/polyfill-surface/contract_polyfill-surface.md
|
||||
ng-e2e-helpers: concepts/e2e-harness/ng-e2e-helpers/contract_ng-e2e-helpers.md
|
||||
|
||||
consume:
|
||||
# Festipod is NOT listed: it has not declared a usage leaf, and we do not author one for
|
||||
# a consumer whose repo is not ours. An interface with no declared consumer degrades to
|
||||
# the one-document mode, which is what `polyfill-surface` is for Festipod today.
|
||||
|
||||
- contract: ng-helpers-uses-polyfill-surface
|
||||
type: git
|
||||
pullFrom: git@gitea.reconnexion.apps.gueraud.net:Sylvain/ng-helpers.git/.project/concepts/indexing/polyfill-surface/usage_ng-helpers.md
|
||||
ref: main
|
||||
into: concepts/app-contract/polyfill-surface/
|
||||
|
||||
- contract: ng-helpers-uses-ng-e2e-helpers
|
||||
type: git
|
||||
pullFrom: git@gitea.reconnexion.apps.gueraud.net:Sylvain/ng-helpers.git/.project/concepts/indexing/ng-e2e-helpers/usage_ng-helpers.md
|
||||
ref: main
|
||||
into: concepts/e2e-harness/ng-e2e-helpers/
|
||||
|
||||
Reference in New Issue
Block a user