feat: ancre la version que les citations de provenance decrivent
Une citation nomme un chemin et un symbole, jamais une version. Or le checkout contre lequel toutes les citations `engine/` et `sdk/` se resolvent declare des versions inferieures a celles que ce depot installe, donc une citation prouve "c'etait vrai a ces versions-la" la ou un lecteur lit "c'est vrai de ce qu'on construit". La version est une propriete du CHECKOUT, pas d'une citation : aucune des annotations n'est touchee. Elle est enregistree une seule fois, dans l'`ANCHOR` de provenance.test.ts, a cote du resolveur qui s'en sert. Ce que le mecanisme verifie maintenant, aux DEUX bouts de l'ecart, parce qu'un enonce d'ecart peut perimer par l'un ou l'autre et a deja perime par le bout eloigne : les versions que le checkout declare (a vide quand le checkout est absent, comme la verification de resolution), celles que les manifestes de l'espace de travail epinglent, et celle qui est reellement installee sous packages/polyfill. Pas un nouveau `kind` : les kinds classent la preuve d'UN symbole, l'anciennete de toute la preuve appartient a l'arbre.
This commit is contained in:
@@ -47,6 +47,10 @@ Answering *does the target do this?* once, in conversation, does not survive the
|
||||
| `invention` | nothing at any level answers — a deliberate, documented bet |
|
||||
| `divergent` | upstream does this, and we do it differently |
|
||||
|
||||
**A citation names a symbol, not a version - and the checkout is behind.** Every citation into `engine/` and `sdk/` resolves against one sibling checkout, which declares older releases than the packages this repo installs. So a citation proves *"this was true at the cited releases"*, never *"this is true of what we build against"*. The version is a property of that checkout, not of a citation, so it is recorded **once** - the `ANCHOR` in `packages/polyfill/test/provenance.test.ts` - and checked at **both** ends: the releases the checkout declares, and the ones the workspace pins and installs. Both, because a gap statement goes stale from either end, and it went stale from the far one already: the packages moved and the checkout, which cannot follow, was left describing releases nothing here installs.
|
||||
|
||||
The consequence is a rule about evidence, and it has already been broken here: **a claim about a shipped release cannot be refuted by reading the checkout.** Doing so refutes it against the older releases instead, which is a different statement. The tell is a sentence of the form *"the published package declares X, but upstream `foo()` still does Y"* - `foo()` at the cited release, and that says nothing about the release in the build. Worse, the usual shape of Y is an ABSENCE, and inferring from an absent implementation is what the top of this rule forbids: the pinned engine building its ORM config from `json!({})` behind a `// TODO` was read as *"the engine discards the config"* and written into two leaves, when the declaration it feeds is complete, every field of it is consumed downstream, and the only missing hop is a binding parameter the shipped binding already has. Settle a claim about a release against that release's own shipped artifact, and say plainly when the artifact cannot settle it.
|
||||
|
||||
A test requires the annotation on every published symbol; it cannot check that the citation is *true*, and that is fine — a citation is refutable by a reader in seconds, prose is not. It does check that the citation still **resolves**, which a reader cannot: into `nextgraph-rs` when that sibling checkout is present — absent, it asks nothing rather than going red for a reason that would only teach people to skip the suite — and into this working copy always, for the one kind whose record lives here. The classification also applies to unpublished code that **claims to resemble the target**: the mistake this section exists for was made on an internal function, and being unexported protected nobody.
|
||||
|
||||
**An announced target has no file to cite, and that is not a reason to call it ours.** `announced-not-written` covers the case the other kinds leave out: the developers have said what the direction is, and the tree carries nothing yet — no definition, not even a name. It is the **strongest** justification available there, because deviating *toward* what the target has announced is alignment, and it is the rest of the surface that will have to catch up. The two moves it replaces are both bad: citing an approximate symbol, which is the `readUnion` failure — a true citation attached to a false claim — or declaring `invention`, which understates the alignment and tells a later reader the shape is ours to change when it is not.
|
||||
|
||||
Reference in New Issue
Block a user