feat: une cible annoncee mais pas encore ecrite a desormais sa categorie

This commit is contained in:
Sylvain Duchesne
2026-09-16 15:33:14 +02:00
parent 1a4857cb75
commit dd874bb9c4
7 changed files with 249 additions and 32 deletions
+16 -5
View File
@@ -47,16 +47,27 @@
//
// WHAT each symbol is aligned on is recorded BESIDE IT, not in a document that drifts:
//
// // @provenance <name> kind=<kind> level=<1|2|3|none> ref=<path:symbol|none> — <note>
// // @provenance <name> kind=<kind> level=<1|2|3|none> ref=<path:symbol|none> [announced-by=<who>@<date>] — <note>
//
// `level` numbers the target's stack from the bottom (1 engine, 2 wasm binding /
// `@ng-org/web`, 3 JS ORM); `ref` cites a SYMBOL in `nextgraph-rs`, never a line number.
// `kind` is closed: `passthrough` (upstream's own symbol, name and shape), `aligned` (our
// name or ergonomics, upstream's semantics), `declared-not-wired` (upstream DEFINES the
// shape and constructs it nowhere — an absence, which is NOT evidence the thing is ours),
// `@ng-org/web`, 3 JS ORM); `ref` cites a SYMBOL, never a line number — in `nextgraph-rs`
// for every kind that cites the target, and in THIS working copy for the one kind that
// has no upstream file to cite. `kind` is closed: `passthrough` (upstream's own symbol,
// name and shape), `aligned` (our name or ergonomics, upstream's semantics),
// `declared-not-wired` (upstream DEFINES the shape and constructs it nowhere — an
// absence, which is NOT evidence the thing is ours), `announced-not-written` (upstream's
// developers have STATED this direction and nothing in the tree carries it yet),
// `reserved-name` (upstream has declared a NAME with no shape behind it),
// `invention` (nothing answers, a documented bet), `divergent` (upstream does this, we do
// it differently). Pinned by `test/provenance.test.ts`; the reasoning behind each ruling
// stays in `docs/api-contract.md`, and where the two disagree the annotation wins.
//
// `announced-not-written` is the STRONGEST kind available to a symbol with no counterpart
// in the tree — deviating TOWARD what the target has announced is alignment, and calling
// it `invention` tells a later reader the shape is ours to change when it is not. Being
// the strongest, it is the hardest to assert: it carries `announced-by=<who>@<date>` and
// its `ref` is the `.md` in this working copy where the statement is on record. An
// announcement nobody wrote down is hearsay, so the test refuses it.
// A type is published only when a PUBLISHED SIGNATURE uses it. `export *` published
// eight in one gesture (2026-08-10: it was a blanket re-export), of which two named