provident-storeroom 1.6.2 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.guide.md +56 -7
- package/README.md +1 -1
- package/RELEASE-NOTES.md +75 -2
- package/index.d.ts +290 -14
- package/index.mjs +98 -111
- package/package.json +6 -6
- package/src/entry/artefact.mjs +24 -4
- package/src/entry/constraints.mjs +25 -16
- package/src/entry/delivery.mjs +240 -99
- package/src/entry/frame.mjs +20 -5
- package/src/entry/kernel-registration.mjs +31 -8
package/README.guide.md
CHANGED
|
@@ -30,7 +30,7 @@ preflight REFUSES when these two lines do not read what it computed** (`scripts/
|
|
|
30
30
|
one check, read-only). **THE TWO LINES ARE THIS GUIDE'S OPERATIVE FIGURES; every dated paragraph below is the
|
|
31
31
|
reading of its own date and is read through them.**
|
|
32
32
|
|
|
33
|
-
PUBLISH-GUIDE-VERSION-LINE: THE VERSION THIS GUIDE DESCRIBES IS `1.
|
|
33
|
+
PUBLISH-GUIDE-VERSION-LINE: THE VERSION THIS GUIDE DESCRIBES IS `1.8.0`.
|
|
34
34
|
PUBLISH-GUIDE-CUT-STATE: NOT STATED -- this document describes the behaviour at the version line above, and the cut-state is the release's to state, not a shipped document's (`D-57`).
|
|
35
35
|
|
|
36
36
|
**⟶ AND THE CUT-STATE SENTENCE ABOVE IS WITHDRAWN, 2026-10-28 — THE CUT-STATE IS NOT A DOCUMENT'S TO STATE.** `RCA-8(g)` ANNOTATE-BESIDE, and the architect's ruling verbatim (`strata/decisions.md` · `D-57`): *"Drop the cut-state."* **The two marked lines above stand BYTE-FOR-BYTE as the reading of their own date and are read THROUGH this clause — not one byte of either is deleted — and the sentence this clause withdraws is the SECOND of them, the one that claims to say whether the release this guide travels in is cut.** **THE REASON IS MEASURED, THREE TIMES OVER, AND IT IS STRUCTURAL RATHER THAN A MISTAKE: A SHIPPED DOCUMENT IS SEALED BEFORE THE TAG THAT MAKES ITS CUT-STATE TRUE**, so every release packed before its tag ships a document denying itself, and a guard running in that release's own preflight can only ever confirm *"not cut"* — `1.2.0` shipped *"NOT CUT"*, `1.3.0` shipped *"`v1.3.0` DOES NOT EXIST"*, and the change list's head was stale within minutes of the tag that falsified it. **SO THE CUT-STATE SENTENCE IS DROPPED AS A CLAIM AND THE VERSION LINE STAYS**, because the version line is the ONE figure a tarball can be right about: the manifest knows it and travels beside it. **`scripts/publish.sh --figures` GENERATES AND ASSERTS THE VERSION LINE AND NOTHING ELSE** — the cut-state generation and its assertion are removed in the same act, so a tag set that moves can no longer redden this guide — **and the same one line is asserted in THREE shipped documents: this guide, `README.md` beside it, and the change list** (`DEF-AC`'s remaining demand, *"guard the release notes too"* and *"`README.md` still declares no version at all"*). **THE TAG SET IS NOT DELETED AND NOT DENIED: it is a RECORD OF RELEASES held in the change list, PAST TENSE — a list of what has been cut — and never a claim about the current one.** **AND WHAT THIS CLAUSE DOES NOT SAY, SAID PLAINLY BECAUSE A READER WILL LOOK FOR IT: it does not say whether the version this guide prints is cut.** That is not a document's to state; the record of what has been cut is in `RELEASE-NOTES.md`, and the registry is the registry.
|
|
@@ -917,6 +917,20 @@ adopts — a cross-KIND collision, rejected regardless of kind** (`D-27`, verbat
|
|
|
917
917
|
batch - regardless of listener/constraint type"*; `index.d.ts`, `StoreConfig.constraints`). **Both are refused
|
|
918
918
|
before any filesystem act, under `ConstraintListInvalid`; the package mints no code.**
|
|
919
919
|
|
|
920
|
+
**⟶ READ THROUGH THIS CLAUSE FROM 2026-11-01 — THE BATCH'S CROSS-KIND COLLISION IS THE HANDLE, AND THE ADDRESS IS NOT A
|
|
921
|
+
COLLISION AT ALL (`D-98`, `ACTIVE`, 2026-11-01).** `RCA-8(g)` ANNOTATE-BESIDE: **the two construction refusals above stand
|
|
922
|
+
BYTE-FOR-BYTE and are read THROUGH this clause; nothing above is deleted, and this clause is one dated correction and not
|
|
923
|
+
a second site.** **IT IS THE HANDLE RULE AND IT ALWAYS WAS** — `D-27`, verbatim: *"Reject duplicate handles in batch -
|
|
924
|
+
regardless of listener/constraint type"* — **and its sentence is spelled now as the rest of this corpus spells it: *a
|
|
925
|
+
listener and a constraint do not share one handle*** (`bindings/js/README.md:232`–`:233`, the hand-authored page that
|
|
926
|
+
already read this way and that this correction makes the others agree with rather than the file it edits). **AND ONE
|
|
927
|
+
SENTENCE THIS PARAGRAPH OWED ITS READER, THE SHARED ADDRESS BEING THE WHOLE OF WHAT THE RULING MAKES LAWFUL: an element's
|
|
928
|
+
`address` coinciding with an adopted listener's `address` is NOT a collision at all** — a constraint pair and a listener
|
|
929
|
+
MAY stand at ONE address, so the construction refuses the shared HANDLE and admits the shared address (`D-98` clauses
|
|
930
|
+
(i)–(iii); `docs/L1/cross-kind-handle-only.md` §3.4, §4.2). **Its member, its instant and its no-state-moves sentence are
|
|
931
|
+
unmoved**: `ConstraintListInvalid`, in the pre-create walk, before any filesystem act (`docs/L1/surface-deltas.md` §2's
|
|
932
|
+
`B-3` row).
|
|
933
|
+
|
|
920
934
|
### §7.3 A cross-kind duplicate is REJECTED, in both directions
|
|
921
935
|
|
|
922
936
|
**A duplicate handle of the SAME kind is an overwrite. A duplicate handle ACROSS KINDS — a listener where a
|
|
@@ -924,12 +938,47 @@ constraint stands, or a constraint where a listener stands — is REJECTED** (`D
|
|
|
924
938
|
overwrite a listener with a constraint or vice versa is rejected"*; `D-29`: *"Listen cannot overwrite constraint,
|
|
925
939
|
only other listeners"*).
|
|
926
940
|
|
|
927
|
-
|
|
928
|
-
`
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
941
|
+
**⟶ RE-DERIVED 2026-11-01 — THE RULE SENTENCE READS THE HANDLE, AND THE ADDRESS IT USED TO READ IS LAWFUL (`D-98`,
|
|
942
|
+
`ACTIVE`, 2026-11-01).** `RCA-8(g)` ANNOTATE-BESIDE: **`§7.3`'s heading and its first paragraph stand BYTE-FOR-BYTE and
|
|
943
|
+
are read THROUGH this clause; the paragraph that stood below them measured the DEFECT and has MOVED OUT, and its one
|
|
944
|
+
pointer stands where it stood.** **THE LAW, IN THREE CLAUSES** — `D-98` item 1, the architect, verbatim: *"A constraint and
|
|
945
|
+
a listener can share an address, as can multiple constraints/listeners. The restriction is that a listener and a
|
|
946
|
+
constraint cannot have the same **handle**."* **(i) A CONSTRAINT PAIR AND A LISTENER MAY STAND AT ONE ADDRESS** — different
|
|
947
|
+
handles, one address, both reached by the act: the pair ASKED by the pass, the listener DELIVERED after it. **(ii) MULTIPLE
|
|
948
|
+
CONSTRAINTS at one address, and MULTIPLE LISTENERS at one address, are LAWFUL.** **(iii) THE ONLY CROSS-KIND RESTRICTION IS
|
|
949
|
+
THE HANDLE** — a listener's handle equal to a constraint pair's `id`, and a pair whose `id` equals a live listener's
|
|
950
|
+
handle, are REFUSED, **in both directions**. **AND A `listen` AT A PAIR'S ADDRESS STANDS**: the act is lawful, it answers
|
|
951
|
+
its handle (`D-22`), it purges none of the pair's rows and installs the listener beside it — so an application that moved
|
|
952
|
+
a subscription off a constrained address to work around a refusal may reclaim that address, and whether it does is that
|
|
953
|
+
application's decision and not this guide's.
|
|
954
|
+
|
|
955
|
+
**⟶ AND (iii)'s *"live listener"* IS `§6.2`'s TWO ACTS, 2026-11-01 — A `listen` WITH NO `register` IS A RESERVATION, AND A
|
|
956
|
+
PAIR MAY TAKE ITS HANDLE.** `RCA-8(g)` ANNOTATE-BESIDE: **(iii) stands BYTE-FOR-BYTE and is read THROUGH this clause; the
|
|
957
|
+
sentence is not re-spelled, and nothing else in `§7.3` moves.** **THE ANCHOR, IN ONE SENTENCE: an entry `listen` wrote
|
|
958
|
+
that `register` has not filled is a RESERVATION — it fires nothing and carries no kind — and a pair may take its handle
|
|
959
|
+
(`D-24`'s same-kind overwrite); the refusal above is read for a listener a `register` has made live.** **So *live* names
|
|
960
|
+
the SECOND of the two acts and not the entry's existence: `listen` writes the entry and `register` fills it (`§6.2`;
|
|
961
|
+
`§6.3` rule 1 — an unregistered handle fires nothing, silently), and a live listener is `off === false` AND a function AND
|
|
962
|
+
`kind !== 'constraint'`** (`bindings/js/index.d.ts`'s `addConstraint` clause of this date; the `listenerStandingAt`
|
|
963
|
+
predicate at `bindings/js/src/entry/delivery.mjs`; `docs/L1/cross-kind-handle-only.md` §9.4). **MEASURED 2026-11-01 ON
|
|
964
|
+
THIS CHECKOUT'S `1.7.0` BUILD, ONE FRESH INSTANCE PER ARM — THE ARM FIRES FOR A LIVE LISTENER AT ANY ADDRESS AND IN BOTH
|
|
965
|
+
DIRECTIONS, AND THE RESERVED CASE IS THE DECLARED LAWFUL ARM:** `listen('dup', [['q']])` with no `register` leaves a
|
|
966
|
+
reservation, and the `addConstraint({address: ['q'], id: 'dup'})` after it is **ANSWERED**; with `register('dup', fn)`
|
|
967
|
+
before it, the same `addConstraint` **THROWS** `AddressMalformed`; a live listener at `['x']` and the pair at `['q']`
|
|
968
|
+
**THROWS** too — **the arm reads the HANDLE and not the address** — and a listener claiming a carried pair's `id`
|
|
969
|
+
**THROWS** in the other direction (`B-5`) (`strata/research.md` §9's drives; `§7.3`'s first paragraph;
|
|
970
|
+
`bindings/js/index.d.ts`'s `addConstraint` clause).
|
|
971
|
+
|
|
972
|
+
**THE RULE SENTENCE, RE-DERIVED IN PLACE: *a listener and a constraint do not share one handle*** — one word more than the
|
|
973
|
+
address reading, its spelling `bindings/js/README.md:232`–`:233`'s, and it is the clause half of all four refusal
|
|
974
|
+
messages (`docs/L1/cross-kind-handle-only.md` §3.4, §3.6). **WHAT DOES NOT MOVE:** a duplicate handle of the SAME kind is
|
|
975
|
+
still an OVERWRITE (`D-24`); the cross-kind refusal is still the surface's ONE thrown form `{status, message, log,
|
|
976
|
+
address}` — `status` `'AddressMalformed'` at the three single-registration arms and `'ConstraintListInvalid'` at the batch,
|
|
977
|
+
`log` `[]`, and `address` `null` because the subject is a string in the handle namespace and not a place — and **no state
|
|
978
|
+
moves**: each refusal is taken after the positions' class tests and above every store act and every purge (`index.d.ts`,
|
|
979
|
+
the `register`/`addConstraint`/`StoreConfig.constraints` clauses; `docs/L1/surface-deltas.md` §2).
|
|
980
|
+
|
|
981
|
+
**⟶ THE 2026-10-26 MEASURED PARAGRAPH THAT STOOD HERE HAS MOVED OUT BYTE-EXACTLY (`RCA-8(g)`, `D-98` item 5).** **the measurement that stood here measured the address refusal this guide's rule no longer makes; its bytes are at `docs/guides/backup/D98-2026-11-01-guide-move-out.md §1`.**
|
|
933
982
|
|
|
934
983
|
### §7.4 The toggles, and the read
|
|
935
984
|
|
package/README.md
CHANGED
|
@@ -31,7 +31,7 @@ an edit belongs.
|
|
|
31
31
|
|
|
32
32
|
**⟶ AND THE ONE FIGURE THIS PAGE CAN BE RIGHT ABOUT IS GENERATED AND ASSERTED, 2026-10-28 — `DEF-AC`'s third part, and `D-57`'s one surviving figure.** `RCA-8(g)` ANNOTATE-BESIDE: **every clause above stands BYTE-FOR-BYTE and is read THROUGH this one; nothing above moves.** **THE DEFECT THIS CLOSES: THIS PAGE DECLARED NO VERSION AT ALL** — a shipped document a consumer reads first, saying nothing about which release it describes — **so `scripts/publish.sh --figures` now GENERATES the line below from `bindings/js/package.json`'s `version` and REFUSES when it disagrees, exactly as it does at the guide's and the change list's own marked lines: three shipped documents, three version lines, one generator, one assertion.** **AND THE CUT-STATE IS NOT STATED HERE, OR ANYWHERE ELSE IN THIS PACKAGE'S DOCUMENTS** (`D-57`, the architect verbatim: *"Drop the cut-state"*): a document is sealed before the tag that would make its cut-state true, so **the cut-state is not a document's to state**; the record of what has been cut is the change list's, and it is past tense. **EVERY OTHER CLAIM OF THIS PAGE STANDS EXACTLY AS IT STOOD.**
|
|
33
33
|
|
|
34
|
-
PUBLISH-README-VERSION-LINE: THE VERSION THIS README DESCRIBES IS `1.
|
|
34
|
+
PUBLISH-README-VERSION-LINE: THE VERSION THIS README DESCRIBES IS `1.8.0`.
|
|
35
35
|
|
|
36
36
|
## The one entry
|
|
37
37
|
|
package/RELEASE-NOTES.md
CHANGED
|
@@ -16,7 +16,7 @@ claims to be installable.**
|
|
|
16
16
|
|
|
17
17
|
**⟶ AND THE CUT-STATE IS DROPPED FROM THIS FILE, 2026-10-28 — `D-57`, THE ARCHITECT VERBATIM: *"Drop the cut-state."*** `RCA-8(g)` ANNOTATE-BESIDE: **the title line and every dated paragraph of this file stand BYTE-FOR-BYTE as the reading of their own date, THIS clause is the one that reads them, and not one byte is deleted.** **THE REASON IS STRUCTURAL AND IT WAS MEASURED THREE TIMES: A SHIPPED DOCUMENT IS SEALED BEFORE THE TAG THAT MAKES ITS CUT-STATE TRUE**, so every release packed before its tag ships a document denying itself, and a guard running in that release's own preflight can only ever confirm *"not cut"* — `1.2.0` shipped *"NOT CUT"*, `1.3.0` shipped *"`v1.3.0` DOES NOT EXIST"*, and this file's own head was stale within minutes of the tag that falsified it. **SO EVERY SENTENCE BELOW THAT CLAIMS WHETHER SOME VERSION IS OR IS NOT CUT — *"PREPARED — NOT CUT"*, *"no `v1.3.0`"*, *"nothing in this section is cut"*, *"the release is not cut"*, *"what is installed today is still `1.1.0`"*, and each reading printed beside them — IS READ THROUGH THIS CLAUSE: the cut-state is not a document's to state.** **WHAT SURVIVES IS THE ONE FIGURE A SHIPPED DOCUMENT CAN BE RIGHT ABOUT, AND IT IS GENERATED FROM THE MANIFEST AND ASSERTED BY THE PREFLIGHT:**
|
|
18
18
|
|
|
19
|
-
PUBLISH-NOTES-VERSION-LINE: THE VERSION THIS CHANGE LIST DESCRIBES IS `1.
|
|
19
|
+
PUBLISH-NOTES-VERSION-LINE: THE VERSION THIS CHANGE LIST DESCRIBES IS `1.8.0`.
|
|
20
20
|
|
|
21
21
|
**AND THE TAG SET SURVIVES AS A RECORD OF RELEASES — PAST TENSE, A LIST OF WHAT HAS BEEN CUT, NEVER A CLAIM ABOUT THE CURRENT ONE** (the record stands in `§1.4.0` below — the section this file's head called `§main` until it was re-cut to name the version it prepares, 2026-10-28 — beside the section for the tree this file describes). (`D-57`; `DEF-AC` (b) — `scripts/publish.sh --figures` generates that line from `bindings/js/package.json`'s `version` and refuses on any disagreement, in this file, in `bindings/js/README.md` and in the shipped guide: three documents, three version lines, one generator, one assertion.)
|
|
22
22
|
|
|
@@ -55,7 +55,80 @@ the value to assert against, not the crate's own `Cargo.toml` version.
|
|
|
55
55
|
|
|
56
56
|
---
|
|
57
57
|
|
|
58
|
-
## §1.
|
|
58
|
+
## §1.8.0 · a MINOR — the typed declaration's landing: the six names a consumer can now annotate, the one type that NARROWS, what does not move, and the arithmetic that says how many commits
|
|
59
|
+
|
|
60
|
+
**⟶ THIS SECTION IS NEW, 2026-11-01, AND IT STATES THE VERSION AND NOT THE CUT-STATE.** `RCA-8(g)` ANNOTATE-BESIDE: **no byte of the sections below moves; this section is added above `§1.7.0`, whose body stands BYTE-FOR-BYTE as the reading of its own date and is read through no clause here.** **AND THIS SECTION DOES NOT STATE WHETHER `1.8.0` HAS BEEN RELEASED: the cut-state is the tag set's to carry and not a document's to state** (`D-57`; the head clause of 2026-10-28 and the authority clause of 2026-10-29 above, which govern every sentence here).
|
|
61
|
+
|
|
62
|
+
**THE VERSION IS `1.8.0` AND ITS CLASS IS A MINOR — `D-102`, THE ARCHITECT'S RULING OF 2026-11-01 (`strata/decisions.md` `D-102`), VERBATIM: *"Minor — 1.8.0"*.** **THE GROUND IS MEASURED AND IT IS TWO-ARMED, NOT A PREFERENCE (`D-102` items (i) and (ii)): an ADDITIVE TYPE SURFACE — six names the declaration did not carry — AND ONE DECLARED TYPE THAT NARROWS**, so the release is consumer-visible at the declaration while every answer a call *gives* is unmoved. **THE CLASS IS `PUB-DD-9`'s `MINOR` row** (`docs/specs/storeroom-publish/contract.md:117`, *"a MINOR adds a member to the declared surface"*): **what this minor adds is a TYPE surface, and what it can refuse is a consumer's own annotation at compile time.**
|
|
63
|
+
|
|
64
|
+
**THE ELEVEN CELLS MOVE TOGETHER AND NEVER SINGLY** — `bindings/js/package.json`'s `version`, its **five** exact `optionalDependencies` pins, and the **five** `bindings/js/platforms/*/package.json` `version` fields — **and the artefact is stamped from that manifest by `bindings/js/build.rs`, so `version()` answers `1.8.0` at the rebuilt artefact and at a package installed from it**; that, and not the crate's own `Cargo.toml` version, is the value the coupling rule is asserted against (`scripts/publish.sh`'s own cell enumeration, `§2.5` item `2`; `bindings/js/build.rs:58`–`:70`, whose `cargo:rerun-if-changed` on `package.json` is what makes a plain rebuild re-stamp it).
|
|
65
|
+
|
|
66
|
+
**THE ARITHMETIC, AT THIS TREE: `git rev-list --count v1.7.0..HEAD` READS `2`, AND THE SPLIT BY WHAT THE COMMITS ARE IS THIS RELEASE'S OWN STORY.** `D-102`'s clause names both by hash and by subject: **`9afb411`, the typing pass** — the declaration's six names, the typed `Constraint` line, the widened `write` position, the typecheck cells and their fixture, the eight re-anchoring marks, and the blind census — **and `06189fa`, the guide anchor**, which is the guide's own 2026-11-01 live-listener clause and the measurement it carries. **NEITHER COMMIT IS A BEHAVIOUR COMMIT: the typing pass's fraction is *"zero code bytes outside `bindings/js/index.d.ts`"* (`D-101` item 2), the guide anchor moves one document and no code, and the pass that seals this release adds the version cells, the three version lines, this section and the two staged landings — and no byte of `bindings/js/src/` or `src/`.** (`git rev-list --count v1.7.0..HEAD`; `git log --oneline v1.7.0..HEAD`; `strata/decisions.md` `D-102`.)
|
|
67
|
+
|
|
68
|
+
**WHAT A CONSUMER SEES, EACH AN ANNOTATION TO DRIVE RATHER THAN A SENTENCE TO TRUST:**
|
|
69
|
+
|
|
70
|
+
1. **SIX NAMES THE DECLARATION NOW CARRIES, EACH ONE A RECORD THE KERNEL ALREADY BUILDS** — `bindings/js/index.d.ts`: `AttemptContext` (`:1404`) · `RepairContext` (`:1429`) · `RegistrationRepairContext` (`:1455`) · `ConstraintOutcome` (`:1476`) · `RepairOutcome` (`:1504`) · `CommitCarrier` (`:1528`). **THE FIRST FIVE ARE `D-101` ITEM 1's AND THE SIXTH IS THAT ENTRY'S `⟶ ANSWERED` CLAUSE's** (`docs/L1/repair-outcome-types.md` §1 and its `Q-1` clause). **NO MEMBER IS MINTED**: every member of every alias is read at the build site the declaration cites, so the six are names for shapes the package has always handed back and never published.
|
|
71
|
+
2. **`Constraint` IS TYPED — AND IT IS NARROWED**: `export type Constraint = (context: AttemptContext) => ConstraintOutcome;` (`index.d.ts:1375`). **THE NARROWING IS THE ONE THING THIS RELEASE CAN BREAK, SAID PLAINLY RATHER THAN LEFT TO A COMPILER'S OWN WORDS: a body annotated `(context: unknown) => unknown` NO LONGER ASSIGNS to `Constraint`** — it is `TS2322`, exactly as a body handing back a widened `boolean` is — **so a consumer who annotated the context with `unknown` meets a compile error, and a consumer who annotated no context meets none and their code is unchanged** (`D-102` item (ii); the declaration's `⟶ RE-DERIVED BY NAME` clause above the line, `:1364`–`:1374`; `docs/L1/repair-outcome-types.md` §4, and §5.2's cells).
|
|
72
|
+
3. **`write`'s FOURTH POSITION IS TYPED, AT ITS OWN CLASS TEST**: `write(address: Address, tier: Tier, value: unknown, commit?: CommitCarrier): WriteRecord;` (`index.d.ts:904`). **THE TYPE FOLLOWS THE BEHAVIOUR AND NOT THE OTHER WAY ROUND**: `CommitCarrier` is ONE member — `readonly pending: readonly TriggerPair[]` — which is the predicate the kernel's own delivery check applies (a non-null, non-Proxy, non-array object carrying an own, defined `pending`; `bindings/js/src/entry/delivery.mjs:27`–`:54`). **SO THE GUIDE'S WORKED EXAMPLE, which passes the repair's OWN record as the fourth argument, and this package's own `repair-in-commit` drive, TYPE-CHECK AS WRITTEN — where the withdrawn `commit?: CommitRecord` refused both** (`D-101`'s `⟶ ANSWERED` clause, verbatim: *"Widen the position to its class test"*; `docs/L1/repair-outcome-types.md` §8's `Q-1` clause, whose refusal of the union `CommitRecord | RepairContext` is measured at this tree's own drive).
|
|
73
|
+
4. **THE GUIDE'S 2026-11-01 LIVE-LISTENER ANCHOR SHIPS WITH IT** — `docs/guides/package-use.md` `§7.3`'s clause that *"live"* names the SECOND of `§6.2`'s two acts, `:955`–`:970`: **an entry `listen` wrote that `register` has not filled is a RESERVATION — it delivers to no listener and carries no kind — and a pair may take its handle; the cross-kind refusal is read for a listener a `register` has made live** (`off === false` AND a function AND `kind !== 'constraint'`, the `listenerStandingAt` predicate at `bindings/js/src/entry/delivery.mjs`). **ITS MEASUREMENT IS NAMED AND NOT ASSERTED: one fresh instance per arm on 2026-11-01, the reserved case ANSWERED and the live case THROWN in both directions.** **AND IT MOVES NO REFUSAL AND NO STATUS: it says WHICH listener the refusal reads, and the four messages `§1.7.0` declares are untouched by it.**
|
|
74
|
+
|
|
75
|
+
**WHAT DOES NOT MOVE, ENUMERATED SO THE MINOR IS NOT READ AS WIDER THAN IT IS:**
|
|
76
|
+
|
|
77
|
+
- **NO BEHAVIOUR BYTE.** The six names are erased at run time, the kernel reads the same values it read before them, and `D-101` item 2's fraction is *"zero code bytes outside `bindings/js/index.d.ts`"*.
|
|
78
|
+
- **THE CLOSED STATUS SET IS TWENTY, ranked `1`…`20`, and no status is minted** (`src/error.rs:113`, `pub const CODES: [&str; 20]`; `D-102` item (iii)).
|
|
79
|
+
- **EVERY MEMBER, EVERY ARITY, AND THE MODULE NAMESPACE'S ONE NAME.** The instance's **fourteen own members** (`bindings/js/index.d.ts`'s `StoreInstance`; the count re-derived at `tsconfig.typecheck.json:57`–`:64`), the log entry's five, the failure form's four, `KC`'s nine tokens and `storeCreate` as the namespace's only value name are all unmoved (`D-102` item (iii)). **`write`'s fourth position keeps its ARITY: what moved is the type the position is declared at, never the number of positions.**
|
|
80
|
+
- **THE REFUSAL TEXT `D-88` (2) RECORDS IS UNMOVED, AND IT STAYS A RECORDED DEFECT RATHER THAN A FIX**: *"the repair `<id>` produced no op at `<address>`"* stands at `bindings/js/src/entry/kernel-attempt.mjs:911` and is copied whole into the guide's `§7.6` — **it names the ATTEMPT's address and is no claim about where the repair wrote; this release mints types describing the repair's RETURN and changes no byte of that sentence** (`D-101` item 4; `strata/research.md` §10's disposition).
|
|
81
|
+
|
|
82
|
+
**THE CELLS AND THE RECORDS THE TYPING PASS CARRIES, NAMED SO A READER CAN CHECK THE BATTERY AGAINST THEM:**
|
|
83
|
+
|
|
84
|
+
- **THE TYPED FIXTURE AND ITS `43` DIRECTIVES** — `typecheck/consumer-fixture.ts`, whose `^\s*// @ts-expect-error` lines stand at **`43`** at this tree; the count is the `nodenext` leg's own head figure, re-taken by the pass that added the cells (`tsconfig.typecheck.nodenext.json:27`–`:33`).
|
|
85
|
+
- **THE TWO `tsconfig` HEADS**, both re-derived 2026-11-01: **`tsconfig.typecheck.json:35`–`:46`** withdraws the head's *"the shipped declaration is UNREACHABLE to a `nodenext` consumer"* paragraph — false in fact since the package's `exports` map gained its `types` condition, its bytes standing and read through — and **`tsconfig.typecheck.nodenext.json:27`–`:33`** re-takes the refusal count, which printed `28` and was wrong by two, to `43`.
|
|
86
|
+
- **THE BLIND CENSUS AT `27`** — `tests/e2e/blind-entry-module.test.mjs`'s `DECLARED_TYPE_NAMES` (`:72`–`:101`) gains the six names, `21 → 27` (`13 + 4 = 17` interfaces and `8 + 2 = 10` aliases), and the figure is moved in the three places that file prints it: its head (`:4`), its assertion message (`:260`) and its second test's title (`:264`).
|
|
87
|
+
- **THE EIGHT RE-ANCHORING MARKS** — eight `⟶ RE-ANCHORED, 2026-11-01` clauses inside `index.d.ts`'s `Constraint` docblock (`:1273`, `:1287`, `:1291`, `:1294`, `:1310`, `:1314`, `:1334`, `:1344`), one per citation the `D-90`/`D-91`/`D-94` landings had moved, **each printing the superseded range and read through rather than rewritten** (`docs/L1/repair-outcome-types.md` §7.2's eight-row table; `RCA-8(g)`).
|
|
88
|
+
- **THE RECORDS**: `strata/decisions.md` **`D-101`** (`:5194`) — *"Mint the types"*, its `⟶ ANSWERED` clause being the sixth name and the widened position; this release's own **`D-102`** (`:5243`); and **`strata/research.md` §10** (`:323`–`:355`), the `ST-F2` intake whose third ask — *the return type is untyped* — this release answers by typing the return rather than by moving the sentence.
|
|
89
|
+
|
|
90
|
+
**AND WHAT THIS SECTION IS NOT: a restatement of `§1.7.0`.** **That section is the previous release's change list and stands BYTE-FOR-BYTE beneath this one; this release restates none of its findings and re-cites none of its figures.** **The one artifact the two releases share is the declaration, and they move two different parts of it: `§1.7.0` moved messages a consumer READS, and this one adds types a consumer ANNOTATES.**
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## §1.7.0 · a MINOR — the cross-kind correction's landing: the four refusal messages a consumer reads differently, what does not move, and the arithmetic that says how many commits
|
|
95
|
+
|
|
96
|
+
**⟶ THIS SECTION IS NEW, 2026-11-01, AND IT STATES THE VERSION AND NOT THE CUT-STATE.** `RCA-8(g)` ANNOTATE-BESIDE: **no byte of the sections below moves; this section is added above `§1.6.2`, whose heading is corrected at its own line in the same act.** **AND THIS SECTION DOES NOT STATE WHETHER `1.7.0` HAS BEEN RELEASED: the cut-state is the tag set's to carry and not a document's to state** (`D-57`; the head clause of 2026-10-28 and the authority clause of 2026-10-29 above, which govern every sentence here).
|
|
97
|
+
|
|
98
|
+
**THE VERSION IS `1.7.0` AND ITS CLASS IS A MINOR — `D-100`, THE ARCHITECT'S RULING OF 2026-11-01 (`strata/decisions.md` `D-100`), VERBATIM: *"Minor — 1.7.0"*.** **THE GROUND IS A MEASUREMENT AND NOT A PREFERENCE: FOUR REFUSAL MESSAGES CHANGE THEIR TEXT ON A PUBLISHED SURFACE**, which is more than this project's own `PUB-DD-9` row allows a PATCH (*"a fix inside the declared surface"*) and less than a break of any member — so the class is the MINOR the number names (`D-100` item (i)).
|
|
99
|
+
|
|
100
|
+
**THE ELEVEN CELLS MOVE TOGETHER AND NEVER SINGLY** — `bindings/js/package.json`'s `version`, its **five** exact `optionalDependencies` pins, and the **five** `bindings/js/platforms/*/package.json` `version` fields — **and the artefact is stamped from that manifest by `bindings/js/build.rs`, so `version()` answers `1.7.0` at the rebuilt artefact and at a package installed from it**; that, and not the crate's own `Cargo.toml` version, is the value the coupling rule is asserted against (`§1.6.2`'s version clause states the shape and is read through it; `scripts/publish.sh`'s own cell enumeration).
|
|
101
|
+
|
|
102
|
+
**THE ARITHMETIC, MEASURED AT THIS TREE: `git rev-list --count v1.6.2..HEAD` READS `1`.** **The one commit is `e024195`, *"Land the cross-kind correction: one address is lawful, the handle is the restriction (D-98–D-100)"*, and `git show --stat e024195` reads `33` files changed, `4506` insertions and `355` deletions — a split by what the commits ARE rather than by what they touch, in four kinds:** **the JS entry and its parts** (`index.mjs`, `src/entry/delivery.mjs`, `constraints.mjs`, `frame.mjs`, `kernel-registration.mjs`, `artefact.mjs`); **the addon's facade and the store's own message generator** (`bindings/js/src/facade.rs`, `src/error.rs`); **the declaration** (`bindings/js/index.d.ts`); **and the documents and the batteries** (the L1 declaration, the guide with its landing, the move-out record, two spec parts, three records, and eleven paths under `tests/e2e/`). **AND THE RELEASE'S OWN LANDING IS THIS PASS'S WORKING TREE AND NOT A COMMIT COUNT** — the bump, this section, `§1.6.2`'s heading repair, the two generated landings and the ledger row — **so the figure above is printed with its instrument and is not summed with them.** (`git rev-list --count v1.6.2..HEAD`; `git show --stat e024195`.)
|
|
103
|
+
|
|
104
|
+
**WHAT A CONSUMER SEES, EACH AN ARM TO DRIVE RATHER THAN A SENTENCE TO TRUST:**
|
|
105
|
+
|
|
106
|
+
1. **A CONSTRAINT PAIR AND A LISTENER MAY STAND AT ONE ADDRESS.** Before this release a `listen` at an address a carried pair stood at was refused; now the act stands, both actors are carried, and **a write at that address triggers the pair AND delivers the listener** (`D-98` item 1; `docs/L1/cross-kind-handle-only.md` §1 and its `XK-1`). **AND THE ONLY CROSS-KIND RESTRICTION IS THE HANDLE**: a listener's handle and a constraint's `id` are **one string**, and neither kind may claim a handle the other keeps (`D-98` item 1 (iii); `D-99`).
|
|
107
|
+
2. **THE FOUR CROSS-KIND REFUSALS PRINT NEW MESSAGE TEXT, AND THE RULE SENTENCE IS *"a listener and a constraint do not share one handle"*.** `AddressMalformed` stands at **three** arms — `listen` (`B-6`), `register` (`B-5`) and `addConstraint` (`B-4`) — and `ConstraintListInvalid` at **one**, the construction's batch element (`B-3`); the four texts whole are `docs/L1/cross-kind-handle-only.md` §3.6, and they are asserted **whole** at five cell homes, so a pass that edits one word of a message moves five cells. **THE STATUSES DO NOT MOVE; THE SENTENCES DO** — and the half they carried that was false at every arm, the store's segment sentence rendered with an empty container, is gone (`D-98` item 4, verbatim: *"the false half cannot stay"*).
|
|
108
|
+
3. **A DISABLED PAIR'S HANDLE BLOCKS A CALLER EXACTLY AS AN ENABLED ONE'S DOES** — a caller's `listen('<pair id>', …)` and a caller's `register('<pair id>', fn)` are both refused after `constraintOff`, where the second was admitted before (`D-99`; `docs/L1/cross-kind-handle-only.md` §9.4, and `XK-6` is the measurement).
|
|
109
|
+
4. **THE KERNEL REACHES THE STORE THROUGH ITS OWN ROUTE AND NO LONGER THROUGH A CALLER-FACING MEMBER.** That is the correction's one internal restructure (`D-99`'s ANSWERED clause: `listenOn`, the `LISTEN_ROUTE` symbol and `installListenRoute`, §9.2), **it deletes the `state.establishing` marker and its four brackets, and it changes no answer a consumer's own call receives** — which is why it is stated here rather than left to a reader who meets the changed call in a stack.
|
|
110
|
+
|
|
111
|
+
**WHAT DOES NOT MOVE, ENUMERATED SO THE MINOR IS NOT READ AS WIDER THAN IT IS:**
|
|
112
|
+
|
|
113
|
+
- **THE CLOSED STATUS SET IS TWENTY, ranked `1`…`20`, and no status is minted.** `AddressMalformed` keeps rank `1` and `ConstraintListInvalid` keeps `16` (`src/error.rs`'s `CODES`; `D-99` item 1; `D-100` item (ii)).
|
|
114
|
+
- **EVERY MEMBER, EVERY TYPE AND EVERY CONSUMER-VISIBLE ARITY.** The instance's fourteen members, the log entry's five, the failure form's four, `KC`'s nine tokens and the module namespace's one name are all unmoved (`D-100` item (ii)).
|
|
115
|
+
- **THE ONE ARITY THAT WIDENS IS THE ADDON'S OWN GENERATOR, AND IT IS ARTEFACT-INTERNAL.** `errorMessage` gains **one optional fourth position** carrying the closed arm token `'handle'`, so the artefact's internal range reads **`2`–`4`** where the census cell read `2`–`3`; **no named export of the module namespace and no subpath reaches it**, so this is a widening of the artefact's own generator and not of a consumer API (`D-100` item (iii); `docs/L1/cross-kind-handle-only.md` §3.7–§3.8).
|
|
116
|
+
- **THE SURFACE MAP IS UNMOVED AT `19` MODULES AND `61` ENDPOINTS** — the correction adds a part to a module and no endpoint (`D-100`; `docs/L1/cross-kind-handle-only.md` §6.3, which is the L2 reading this release declares).
|
|
117
|
+
|
|
118
|
+
**THE CELLS AND THE RECORDS THE CORRECTION CARRIES, NAMED SO A READER CAN CHECK THE BATTERY AGAINST THEM** (`docs/L1/cross-kind-handle-only.md` §6.1's write set, verbatim: *"§5.1's six rewrites, §5.2's two, §5.3's eight"*):
|
|
119
|
+
|
|
120
|
+
- **SIX REWRITTEN CELLS**, each one a cell that asserted the address dimension the ruling withdraws — `HLI-11.3` and `HLI-11.3.a`, `G3-22`, the two `constraints-publication` probes with their prose, the `blind-listener-surface` form cell, and `DEF-N`'s constant — beside **two kept cells whose MESSAGES are re-read** rather than weakened (§5.2).
|
|
121
|
+
- **EIGHT `XK` CELLS ADDED**, `XK-1`…`XK-8`, in the file `tests/e2e/cross-kind-handle-only.test.mjs`; **`XK-6` and `XK-8` are re-shaped by `D-99`** (§9.5), and `Q-1`'s residual is retired by name rather than carried.
|
|
122
|
+
- **THE MOVE-OUT RECORD**: the guide's 2026-10-26 measured paragraph left **byte-exactly** to `docs/guides/backup/D98-2026-11-01-guide-move-out.md`, with its source path, its pre-move position, its date, a computed `sha256` and why — and the delivered text states the rule in its place (`docs/L1/cross-kind-handle-only.md` §4.1).
|
|
123
|
+
- **THE CONTRACT'S `§2.2` ITEM 7 POINTER**: a **pure insertion** of 2026-11-01 at `docs/specs/storeroom-held-listener-identity/contract.md` `§2.2` item 7, which *"moves no position, no domain, no fail arm and no other item"* of that section.
|
|
124
|
+
|
|
125
|
+
**AND WHAT THIS SECTION IS NOT: a restatement of `§1.6.2`.** **That section is the change list of the previous release and stands BYTE-FOR-BYTE beneath this one; what this release carries of it is the version and the arithmetic and nothing else.**
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## §1.6.2 · **CUT AND PUBLISHED — tag `v1.6.2`** — a BEHAVIOUR release: what the thirty-four commits past the previous tag carry, the one additive member, the workaround it retires, and the four things it does not fix
|
|
130
|
+
|
|
131
|
+
**⟶ AND THIS HEADING CARRIED THE PRE-RELEASE MARKER UNTIL THE TAG WAS CUT, 2026-11-01 — `DEF-AC` at its fifth iteration, and the one red `D-82`'s ratchet refused on every run before this one.** `RCA-8(g)` ANNOTATE-BESIDE: **the withdrawn heading's bytes stand in the withdrawn record — `docs/guides/backup/D81-2026-10-29-notes-move-out.md` `§6`, which carries the source path, the pre-move line, the date, a computed `sha256` and why they moved — and are read THROUGH this clause; this sentence deliberately does not quote them, for the reason the `§1.6.1` clause above states and `D-80` measured: a quotation of a claim reads as a claim, and the scan cannot tell the two apart.** **AND THE CORRECTED HEADING IS THE PAST-TENSE RECORD THIS FILE'S OWN PRECEDENT USES** — the spelling `§1.6.0`, `§1.6.1`, `§1.5.0` and `§1.4.0` already carry — **because a cut-state belongs to the tag set: `git tag --list` answers `v1.6.2`, so this section names a past act and not a present claim, and `D-82`'s past-tense condition accepts the line for exactly that reason.** **AND WHAT THIS ACT DOES NOT DO: it moves no other byte of `§1.6.2`, whose body and items below stand BYTE-FOR-BYTE as the reading of their own date; it adds no entry to the exemption set, because a line whose bytes change must leave that set rather than join it and the set may only SHRINK; and it changes no figure the withdrawn line carried, which the record names.** (`D-57`; `D-82`; `git tag --list`.)
|
|
59
132
|
|
|
60
133
|
**THE VERSION: `1.6.2`, AT ELEVEN CELLS THAT MOVE TOGETHER AND NEVER SINGLY** — the main manifest's `version`, its **five** exact `optionalDependencies` pins, and the **five** `platforms/*/package.json` versions — **plus the three shipped documents' one generated version line each.** **The artefact is stamped from the manifest by `bindings/js/build.rs`, so `version()` answers the release figure** and that is the value the coupling rule is asserted against, not the crate's own `Cargo.toml` version.
|
|
61
134
|
|