provident-storeroom 1.7.0 → 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 +18 -1
- package/README.md +1 -1
- package/RELEASE-NOTES.md +37 -1
- package/index.d.ts +224 -2
- package/package.json +6 -6
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.
|
|
@@ -952,6 +952,23 @@ its handle (`D-22`), it purges none of the pair's rows and installs the listener
|
|
|
952
952
|
a subscription off a constrained address to work around a refusal may reclaim that address, and whether it does is that
|
|
953
953
|
application's decision and not this guide's.
|
|
954
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
|
+
|
|
955
972
|
**THE RULE SENTENCE, RE-DERIVED IN PLACE: *a listener and a constraint do not share one handle*** — one word more than the
|
|
956
973
|
address reading, its spelling `bindings/js/README.md:232`–`:233`'s, and it is the clause half of all four refusal
|
|
957
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
|
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,6 +55,42 @@ the value to assert against, not the crate's own `Cargo.toml` version.
|
|
|
55
55
|
|
|
56
56
|
---
|
|
57
57
|
|
|
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
|
+
|
|
58
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
|
|
59
95
|
|
|
60
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).
|
package/index.d.ts
CHANGED
|
@@ -108,6 +108,18 @@
|
|
|
108
108
|
// UNIT** (`kernel-surface.md §1` item 4's closed record enumeration; its `§2.1` item 2 for the record's
|
|
109
109
|
// four members; `attempt-lifecycle.md §2.4` item 1 for the one-member `AttemptRef`) — so the record position
|
|
110
110
|
// carries its own `pending` member and this file MINTS NO RECORD TYPE OF ITS OWN to carry it.
|
|
111
|
+
// **⟶ RE-DERIVED BY NAME, 2026-11-01 — THE SENTENCE ABOVE IS SUPERSEDED IN FACT AND STANDS AS THE READING OF ITS
|
|
112
|
+
// OWN DATE, READ THROUGH THIS CLAUSE** (`RCA-8(g)` ANNOTATE-BESIDE; `strata/decisions.md` · `D-101`, whose
|
|
113
|
+
// `⟶ ANSWERED` clause is the architect's word of that date, verbatim: *"Widen the position to its class test"*).
|
|
114
|
+
// **THE COMMIT POSITION'S DECLARED TYPE IS `CommitCarrier` — THE CLASS TEST'S OWN CLASS, ONE member, `pending`,
|
|
115
|
+
// spelled exactly as `CommitRecord.pending` spells it — declared and exported at this file's end, and `write`'s
|
|
116
|
+
// fourth position names it** (`bindings/js/src/entry/delivery.mjs:27`-`:54`, the predicate at `:39`; the position's
|
|
117
|
+
// own docblock already wrote the class test, and the type now agrees with it). **SO THE PASS DOES MINT ONE RECORD
|
|
118
|
+
// TYPE, AND THE SENTENCE'S *"this file MINTS NO RECORD TYPE OF ITS OWN to carry it"* IS WITHDRAWN BY NAME —
|
|
119
|
+
// withdrawn as a READING, while its bytes stand above byte-for-byte.** **`CommitRecord` KEEPS EVERY BYTE, ITS FOUR
|
|
120
|
+
// MEMBERS AND ITS EXPORT**: what it loses is being the position's SOLE declared type — it is ONE CARRIER of the
|
|
121
|
+
// class and never the position's only type — **and a `pending`-shaped name now stands in a file that said it
|
|
122
|
+
// minted none.**
|
|
111
123
|
// **`AttemptRef` and `CommitRecord` are therefore not STORE types either, and not store records**: they
|
|
112
124
|
// are kernel-side shapes, cited from their own unit's declaration.
|
|
113
125
|
// **⟶ AND THE POSITION THEY ARE CITED FOR MOVED WITH `settle`'s REMOVAL, 2026-10-18**: `settle`'s own
|
|
@@ -752,6 +764,15 @@ export interface AttemptRef {
|
|
|
752
764
|
* a record with exactly FOUR members, the FOURTH added at the `A108` landing pass of 2026-10-13"*; its
|
|
753
765
|
* `§1` item 4 counts it among the kernel's own named shapes).
|
|
754
766
|
*
|
|
767
|
+
* **⟶ RE-DERIVED BY NAME, 2026-11-01 — THE HEAD ABOVE IS THE READING OF ITS OWN DATE AND IS READ THROUGH THIS
|
|
768
|
+
* CLAUSE** (`RCA-8(g)` ANNOTATE-BESIDE; `strata/decisions.md` · `D-101`, verbatim: *"Widen the position to its
|
|
769
|
+
* class test"*). **THE POSITION IS NOW THE CLASS TEST'S OWN CLASS, `CommitCarrier`** — a non-null, non-Proxy,
|
|
770
|
+
* non-array object carrying an OWN `pending` member present and not `undefined`
|
|
771
|
+
* (`bindings/js/src/entry/delivery.mjs:27`-`:54`, the predicate at `:39`) — one member, spelled exactly as this
|
|
772
|
+
* record's own `pending` is spelled below, declared and exported at this file's end. **SO THIS RECORD IS ONE
|
|
773
|
+
* CARRIER OF THE POSITION'S CLASS AND NOT THE POSITION'S ONLY TYPE**: it keeps every byte, its four members, its
|
|
774
|
+
* export and its own clauses below, and what it no longer is, is the position's sole declared type.
|
|
775
|
+
*
|
|
755
776
|
* **THE RECORD THE KERNEL PASSES IS THIS ONE AND THE STORE'S IS NOT.** **The kernel passes the `CommitRecord`
|
|
756
777
|
* `commit` built and the pass's terminal arm reads again — one identity, at both instants** (`surface.md`
|
|
757
778
|
* `§2.4` item 9 (a)–(b)'s table: *"the record identity (the `CommitRecord` `commit` is building)"* then
|
|
@@ -880,7 +901,7 @@ export interface StoreInstance {
|
|
|
880
901
|
* **AND A SUPPLIED `undefined` AT THE `tier` POSITION IS PRESENT HERE TOO** (`parameter-semantics.md
|
|
881
902
|
* §2.6`; `PAR-JS-6`): it is not the absent tier and the store answers `AddressMalformed` for it.
|
|
882
903
|
*/
|
|
883
|
-
write(address: Address, tier: Tier, value: unknown, commit?:
|
|
904
|
+
write(address: Address, tier: Tier, value: unknown, commit?: CommitCarrier): WriteRecord;
|
|
884
905
|
/**
|
|
885
906
|
* Remove the versions the address names, and answer the operation's record.
|
|
886
907
|
*
|
|
@@ -1249,6 +1270,12 @@ export interface ConstraintPair {
|
|
|
1249
1270
|
* WRITE'S OWN EVALUATION a `message` that is not a NON-EMPTY STRING keeps the repair readable while the
|
|
1250
1271
|
* refusal answers the kernel's own unrecognized sentence** (the closed set, its order and this read stand at
|
|
1251
1272
|
* `bindings/js/src/entry/kernel-attempt.mjs:686-699`).
|
|
1273
|
+
* **⟶ RE-ANCHORED, 2026-11-01, `RCA-8(g)`: THE CITATION ABOVE NO LONGER RESOLVES TO ITS SUBJECTS AND IS READ
|
|
1274
|
+
* THROUGH THIS MARK.** **`bindings/js/src/entry/kernel-attempt.mjs:686-699` stands today as the body-throw arm's
|
|
1275
|
+
* terminal entry and its mark — `:687`-`:698` — and the two subjects this sentence cites it FOR stand at
|
|
1276
|
+
* `:705`-`:727` (the closed three-arm read) and `:718`-`:724` (the own-member read of `message` and `repair`).**
|
|
1277
|
+
* **The citation's bytes stand and are unmoved; its RANGE is the reading of the date it was written at, and
|
|
1278
|
+
* `D-90` · `D-91` · `D-94` are the landings that moved it** (`docs/L1/repair-outcome-types.md` §7.2 row `1`).
|
|
1252
1279
|
*
|
|
1253
1280
|
* **THE ATTACH: the `repair` your function returns IS A FUNCTION TAKING ONE ARGUMENT — ITS OWN RECORD,
|
|
1254
1281
|
* WHICH IS NOT YOUR CONSTRAINT'S AND IS NOT INTERCHANGEABLE WITH IT.** **The two records stand apart at
|
|
@@ -1257,6 +1284,18 @@ export interface ConstraintPair {
|
|
|
1257
1284
|
* (`bindings/js/src/entry/kernel-attempt.mjs:607-613`, `:756-782`; the kernel's own words at
|
|
1258
1285
|
* `bindings/js/src/entry/kernel-registration.mjs:373-374`). **No member census of either record is
|
|
1259
1286
|
* printed here.**
|
|
1287
|
+
* **⟶ RE-ANCHORED, 2026-11-01, `RCA-8(g)`: THE CITATION ABOVE — `bindings/js/src/entry/kernel-attempt.mjs:607-613`,
|
|
1288
|
+
* cited for the CONSTRAINT's record — stands today on the pair-application guard's clause (`:631`), and the
|
|
1289
|
+
* constraint's record build stands at `:635`-`:641`.** **The citation's bytes stand and are read through this
|
|
1290
|
+
* mark** (§7.2 row `5`).
|
|
1291
|
+
* **⟶ RE-ANCHORED, 2026-11-01, `RCA-8(g)`: THE CITATION ABOVE — `bindings/js/src/entry/kernel-attempt.mjs:756-782`,
|
|
1292
|
+
* cited for the REPAIR's record — stands today on the repeat arms' returns, and the repair's record build stands
|
|
1293
|
+
* at `:784`-`:810`.** **The citation's bytes stand and are read through this mark** (§7.2 row `6`).
|
|
1294
|
+
* **⟶ RE-ANCHORED, 2026-11-01, `RCA-8(g)`: THE CITATION ABOVE —
|
|
1295
|
+
* `bindings/js/src/entry/kernel-registration.mjs:373-374`, cited as *"the kernel's own words"* on the two records
|
|
1296
|
+
* — stands today on the `{message}` sentence of the registration instant's outcome read, and the kernel's own
|
|
1297
|
+
* statement of the two records stands at `:420`-`:424`.** **The citation's bytes stand and are read through this
|
|
1298
|
+
* mark** (§7.2 row `4`).
|
|
1260
1299
|
*
|
|
1261
1300
|
* **AT THE WRITE'S OWN EVALUATION — AT THAT INSTANT AND NO OTHER — THE KERNEL READS `message` AND
|
|
1262
1301
|
* `repair` AS OWN MEMBERS OF THE OBJECT YOUR FUNCTION RETURNED: a pair carried on a prototype is NOT SEEN
|
|
@@ -1268,6 +1307,14 @@ export interface ConstraintPair {
|
|
|
1268
1307
|
* at registration and no repair at a write — and that divergence is OWED to a code-bearing unit and is
|
|
1269
1308
|
* CONTRADICTED BY NO SENTENCE HERE** (`strata/decisions.md` · `D-35`, whose parameter-access rule the
|
|
1270
1309
|
* registration read does not yet hold).
|
|
1310
|
+
* **⟶ RE-ANCHORED, 2026-11-01, `RCA-8(g)`: THE CITATION ABOVE — `bindings/js/src/entry/kernel-attempt.mjs:690-696`
|
|
1311
|
+
* — stands today INSIDE the same body-throw arm's mark clause (`:691`-`:698`), and the rule it is cited for — the
|
|
1312
|
+
* own-member read of `message` and `repair` — stands at `:718`-`:724`.** **The citation's bytes stand and are read
|
|
1313
|
+
* through this mark** (§7.2 row `2`).
|
|
1314
|
+
* **⟶ RE-ANCHORED, 2026-11-01, `RCA-8(g)`: THE CITATION ABOVE —
|
|
1315
|
+
* `bindings/js/src/entry/kernel-registration.mjs:330-332` — stands today on the skip-is-not-a-refusal clause, and
|
|
1316
|
+
* the registration instant's outcome read — the one that reads the same closed outcome through the prototype
|
|
1317
|
+
* chain — stands at `:377`-`:380`.** **The citation's bytes stand and are read through this mark** (§7.2 row `3`).
|
|
1271
1318
|
*
|
|
1272
1319
|
* **THE REPAIR'S OWN RETURN IS A CLOSED TWO-ARM SET: `{ ok: true, op }` — the repairable arm, `op`
|
|
1273
1320
|
* REQUIRED and BEING THE OPERATION RECORD THE STORE'S OWN VERB RETURNED (`WriteRecord.op`, or
|
|
@@ -1284,20 +1331,48 @@ export interface ConstraintPair {
|
|
|
1284
1331
|
* `bindings/js/src/entry/kernel-foundations.mjs:1105-1131` — **and NO ORDINAL GROUND IS CLAIMED AT THE
|
|
1285
1332
|
* REGISTRATION INSTANT, whose credit check runs with no invoked-for op**
|
|
1286
1333
|
* (`bindings/js/src/entry/kernel-registration.mjs:510-517`).
|
|
1334
|
+
* **⟶ RE-ANCHORED, 2026-11-01, `RCA-8(g)`: THE CITATION ABOVE — `bindings/js/src/entry/kernel-registration.mjs:510-517`
|
|
1335
|
+
* — stands today on the synthetic attempt's nine-member docblock, and the credit call this sentence is about — the
|
|
1336
|
+
* one that runs with NO invoked-for op — stands at `:615`-`:616`.** **The citation's bytes stand and are read
|
|
1337
|
+
* through this mark** (`docs/L1/repair-outcome-types.md` §7.2 row `7`).
|
|
1287
1338
|
*
|
|
1288
1339
|
* **AND THE COMMIT YOUR REPAIR IS PART OF RIDES THAT ONE ARGUMENT: supply it at `write`'s DECLARED FOURTH
|
|
1289
1340
|
* POSITION and the write your repair makes JOINS the commit it is part of**
|
|
1290
1341
|
* (`bindings/js/index.d.ts:862`) — **the record the repair is handed carries that commit at its `pending`
|
|
1291
1342
|
* member, the `CommitRecord.pending` this file declares at `bindings/js/index.d.ts:772`, POINTED AT here
|
|
1292
1343
|
* and re-declared nowhere.** **That position's own class test is not restated.**
|
|
1344
|
+
* **⟶ RE-ANCHORED, 2026-11-01, `RCA-8(g)`: THE CITATION ABOVE PRINTS THIS FILE'S `:772`, WHICH WAS THE LINE AT THE
|
|
1345
|
+
* DATE IT WAS WRITTEN AND IS NOW MOVED TWICE OVER.** **At this date's bytes the `CommitRecord` docblock's `op`
|
|
1346
|
+
* sentence — the line `:772` stood on — stands at `:793`, and the `pending` member that sentence names is declared
|
|
1347
|
+
* at `:814` (`readonly pending: readonly TriggerPair[]`).** **THE TWO MOVES ARE DISTINCT AND NEITHER REWRITES THE
|
|
1348
|
+
* CITATION: the first is that block's own growth, which is why the figure was stale before this pass; the second is
|
|
1349
|
+
* THIS DATE'S MARKS — the head's and this record's block's — which stand above both lines.** **The citation's bytes
|
|
1350
|
+
* stand and are read through this mark; the typing pass's six names sit BELOW this block and moved no line above it
|
|
1351
|
+
* (`1,308 → 1,466` is that pass's own count), and the eight marks of this date are the only bytes this docs pass
|
|
1352
|
+
* adds inside the block** (§7.2 row `8`).
|
|
1353
|
+
* **AND THE SAME PARAGRAPH'S OTHER SELF-CITATION — `bindings/js/index.d.ts:862`, which is NOT one of §7.2's eight
|
|
1354
|
+
* rows and is therefore not one of this date's subjects — is moved by these marks nevertheless: the admitted forms
|
|
1355
|
+
* and the class test of that position stand at `:883`, and the position's own signature — with `commit?` typed as
|
|
1356
|
+
* `CommitCarrier` — at `:904`.**
|
|
1293
1357
|
*
|
|
1294
1358
|
* **AND NOTHING HERE MINTS A TYPE, A SYMBOL, AN ALIAS, A SEAM, A RECORD MEMBER OR AN EXPORT**: this clause
|
|
1295
1359
|
* DOCUMENTS the pair your function returns and a two-arm result the kernel already reads, and DECLARES
|
|
1296
1360
|
* nothing — `Constraint` below is unmoved, one `unknown` in and one `unknown` out. **Nor does it name an
|
|
1297
1361
|
* archived part as the place its rule is to be read: the rule IS the sentences above, and every point they
|
|
1298
1362
|
* cite is a live print of the kept contract or a live source range on this branch.**
|
|
1363
|
+
*
|
|
1364
|
+
* **⟶ RE-DERIVED BY NAME, 2026-11-01: THE SENTENCE ABOVE NO LONGER GOVERNS, AND IT IS NOT DELETED — IT IS READ THROUGH THIS
|
|
1365
|
+
* CLAUSE AS THE READING OF ITS OWN DATE.** The architect has approved minting the types that sentence declined, so what stands
|
|
1366
|
+
* now is: **FIVE NAMES ARE DECLARED BELOW THIS LINE — `AttemptContext` · `RepairContext` · `RegistrationRepairContext` ·
|
|
1367
|
+
* `ConstraintOutcome` · `RepairOutcome` — and `Constraint` below is TYPED rather than unmoved.** **EVERY MEMBER THEY CARRY IS ONE
|
|
1368
|
+
* THE KERNEL ALREADY BUILDS, AND NOTHING IS MINTED BUT THE NAMES**: no member, no symbol, no seam, no export, no route and no
|
|
1369
|
+
* arity moves, the module namespace keeps its ONE value name, and the closed sets these names carry are the ones this clause
|
|
1370
|
+
* already declares. **AND THE CENSUS SENTENCE ABOVE — *"No member census of either record is printed here"* — IS TRUE OF THIS
|
|
1371
|
+
* CLAUSE AND IS READ THROUGH THIS ONE: the census is DECLARED at the aliases below, in the only place a consumer's compiler can
|
|
1372
|
+
* hold it, and this clause still prints none.** **NO BEHAVIOUR BYTE MOVES: the aliases are erased at run time and the kernel
|
|
1373
|
+
* reads the same values it read on 2026-10-30.**
|
|
1299
1374
|
*/
|
|
1300
|
-
export type Constraint = (context:
|
|
1375
|
+
export type Constraint = (context: AttemptContext) => ConstraintOutcome;
|
|
1301
1376
|
|
|
1302
1377
|
/**
|
|
1303
1378
|
* **THE CONSTRAINT IDENTITY — `parameter-semantics.md §2.25` (`PAR-JS-25`)**: ONE OPAQUE VALUE THE PACKAGE
|
|
@@ -1306,3 +1381,150 @@ export type Constraint = (context: unknown) => unknown;
|
|
|
1306
1381
|
* accessor reaches a member of it, and a consumer compares identities and never contents.**
|
|
1307
1382
|
*/
|
|
1308
1383
|
export type ConstraintIdentity = object;
|
|
1384
|
+
|
|
1385
|
+
/**
|
|
1386
|
+
* **THE ATTEMPT'S OWN CONTEXT — THE ONE ARGUMENT A CONSTRAINT BODY IS INVOKED WITH** (`PAR-C-16`; the record this
|
|
1387
|
+
* file's `Constraint` docblock calls *"the attempt's own context"*), declared at
|
|
1388
|
+
* `docs/L1/repair-outcome-types.md` §1.1 of 2026-11-01. **THE NAME IS THE TREE'S OWN**: the kernel calls this
|
|
1389
|
+
* record `AttemptContext` (`bindings/js/src/entry/kernel-registration.mjs:421`, `:428`;
|
|
1390
|
+
* `kernel-attempt.mjs:483`) and so does this file at `:450`.
|
|
1391
|
+
*
|
|
1392
|
+
* **FIVE MEMBERS AND NO SIXTH: `address` · `attempt` · `op` · `tier` · `value`, and no other.** **THIS RECORD GAINS
|
|
1393
|
+
* NOTHING AT ANY INSTANT** — no `id`, no `pending` and no `write` (`strata/decisions.md` · `D-92` (1)) — **and its
|
|
1394
|
+
* census is printed HERE, because this is the only place a consumer's compiler can hold it** (the `Constraint`
|
|
1395
|
+
* docblock above prints none, and says so).
|
|
1396
|
+
*
|
|
1397
|
+
* **ONE MEMBER SET ACROSS THE THREE SITES THAT BUILD IT, AND THE SITE — NOT THE INSTANT — DECIDES THE VALUE.**
|
|
1398
|
+
* Built at the write's own evaluation (`kernel-attempt.mjs:635`-`:641`), at a registration's FIRST ask
|
|
1399
|
+
* (`kernel-registration.mjs:392`-`:403`) and at a registration's RE-RUN (`:728`-`:734`); only three members' VALUES
|
|
1400
|
+
* move, and the nullable arms are the FIRST ask's — `attempt`, `op` and `tier` are the LANDING's at the other two.
|
|
1401
|
+
* **SO A CONSUMER NARROWS `op` BEFORE READING IT**: at a landing and at a re-run `op` is never `null`, and that
|
|
1402
|
+
* narrowing is the declared price of one member set, printed rather than discovered (§1.1; §2's alternative `D`).
|
|
1403
|
+
*/
|
|
1404
|
+
export interface AttemptContext {
|
|
1405
|
+
readonly address: Address;
|
|
1406
|
+
readonly attempt: AttemptRef | null;
|
|
1407
|
+
readonly op: JournalOp | null;
|
|
1408
|
+
readonly tier: Tier | null;
|
|
1409
|
+
readonly value: unknown;
|
|
1410
|
+
}
|
|
1411
|
+
|
|
1412
|
+
/**
|
|
1413
|
+
* **THE REPAIR'S OWN RECORD — THE SIX-MEMBER `RepairContext`, THE ONE ARGUMENT THE KERNEL INVOKES A REPAIR WITH**,
|
|
1414
|
+
* built at the write's own evaluation (`bindings/js/src/entry/kernel-attempt.mjs:784`-`:810`) and declared at
|
|
1415
|
+
* `docs/L1/repair-outcome-types.md` §1.2 of 2026-11-01. **THE NAME IS THE KERNEL'S OWN** — *"the six-member
|
|
1416
|
+
* `RepairContext`"* (`kernel-registration.mjs:416`, `:421`) — and this alias IS that shape.
|
|
1417
|
+
*
|
|
1418
|
+
* **SIX MEMBERS: `address` · `id` · `op` · `tier` · `value` · `pending`. THE TWO RECORDS STAND APART AT THREE
|
|
1419
|
+
* PLACES** (the `Constraint` docblock above; `docs/guides/package-use.md §7.6`): **by COUNT, SIX against
|
|
1420
|
+
* `AttemptContext`'s FIVE; by `id`, which this record carries where the constraint's carries `attempt`; and by
|
|
1421
|
+
* `pending`, which rides this record ALONE.**
|
|
1422
|
+
*
|
|
1423
|
+
* **`op`'s `| null` ARM IS THE REGISTRATION'S, DECLARED ONCE BECAUSE THE SHAPE IS ONE SHAPE**: at this instant `op`
|
|
1424
|
+
* is the op the evaluation carried and is never `null`. **`pending` IS A FRESH LIST AND NEVER THE RECORD'S OWN
|
|
1425
|
+
* MEMBER** (`kernel-attempt.mjs:806`-`:809`); **`id`'s NON-EMPTINESS IS `PAR-JS-24`'s PROSE RULE and no type carries
|
|
1426
|
+
* it** (the same class of limit as `Handle`); **and the commit a repair is inside rides that `pending`, so the write
|
|
1427
|
+
* a repair makes JOINS the commit it is part of** — supplied at `write`'s DECLARED FOURTH POSITION (`D-46`).
|
|
1428
|
+
*/
|
|
1429
|
+
export interface RepairContext {
|
|
1430
|
+
readonly address: Address;
|
|
1431
|
+
readonly id: string;
|
|
1432
|
+
readonly op: JournalOp | null;
|
|
1433
|
+
readonly tier: Tier | null;
|
|
1434
|
+
readonly value: unknown;
|
|
1435
|
+
readonly pending: readonly TriggerPair[];
|
|
1436
|
+
}
|
|
1437
|
+
|
|
1438
|
+
/**
|
|
1439
|
+
* **THE REPAIR'S RECORD AT A REGISTRATION INSTANT — THE SAME SIX AND THE ROUTE THE REGISTRATION ADDS: SEVEN.**
|
|
1440
|
+
* Built at `bindings/js/src/entry/kernel-registration.mjs:447`-`:460`, with the route at `:492`-`:503`, and declared
|
|
1441
|
+
* at `docs/L1/repair-outcome-types.md` §1.3 of 2026-11-01. **`extends` puts each of the six members at ONE home, so no
|
|
1442
|
+
* member of the shared shape can drift between the two instants.**
|
|
1443
|
+
*
|
|
1444
|
+
* **`write` IS EXACTLY THE STORE'S FIRST THREE POSITIONS — `(address, tier, value) => WriteRecord` — AND THE COMMIT
|
|
1445
|
+
* IS NOT A POSITION OF IT**: the write joins the registration's own commit (`D-91` (2)), and a supplied fourth is
|
|
1446
|
+
* REFUSED BEFORE ANY STORE ACT (`kernel-registration.mjs:492`-`:503`). **So the instance's
|
|
1447
|
+
* `write(address, tier, value, commit?)` and this route's three positions are TWO positions and never one spelling.**
|
|
1448
|
+
*
|
|
1449
|
+
* **THE CONSTRAINT'S RECORD GAINS NOTHING AT ANY INSTANT** (`D-92` (1)): `AttemptContext` carries neither `write` nor
|
|
1450
|
+
* `pending`, and **the seventh member's PRESENCE is the discriminator the kernel itself uses, so `'write' in rc` is
|
|
1451
|
+
* the narrowing a repair has**. **AND A BODY ANNOTATED WITH THIS SEVEN-MEMBER ALIAS IS REFUSED** — the position's
|
|
1452
|
+
* parameter is `RepairContext | RegistrationRepairContext` — **so the lawful spellings are `RepairContext`, that
|
|
1453
|
+
* union narrowed with `'write' in`, or no annotation at all.**
|
|
1454
|
+
*/
|
|
1455
|
+
export interface RegistrationRepairContext extends RepairContext {
|
|
1456
|
+
readonly write: (address: Address, tier: Tier, value: unknown) => WriteRecord;
|
|
1457
|
+
}
|
|
1458
|
+
|
|
1459
|
+
/**
|
|
1460
|
+
* **WHAT A CONSTRAINT BODY ANSWERS — THE CLOSED THREE-ARM SET**, read in this order at the write's own evaluation
|
|
1461
|
+
* (`bindings/js/src/entry/kernel-attempt.mjs:705`-`:727`) and declared at `docs/L1/repair-outcome-types.md` §1.4 of
|
|
1462
|
+
* 2026-11-01: **`true` — THE ONLY PASS VALUE**; **`{ message, repair }` — A REPAIRABLE VIOLATION**; **`{ message }` —
|
|
1463
|
+
* AN UNREPAIRABLE VIOLATION**, its `message` the refusal's own sentence.
|
|
1464
|
+
*
|
|
1465
|
+
* **A VALUE OUTSIDE THE THREE IS READ AS THE `{ message }` ARM AND NEVER AS A FOURTH ARM**, so a return invented
|
|
1466
|
+
* beyond them declares an outcome this kernel does not distinguish — **and a return carrying only `repair` is that
|
|
1467
|
+
* outside value, whose repair IS NEVER SEEN** (`kernel-attempt.mjs:718`-`:724`).
|
|
1468
|
+
*
|
|
1469
|
+
* **`message` IS REQUIRED ON THE REPAIR ARM BECAUSE THE KERNEL READS IT FIRST**, and the repair is looked for only
|
|
1470
|
+
* inside that branch. **THE TYPE DECLARES THE SHAPE AND NEVER THE READ**: at the write's own evaluation `message` and
|
|
1471
|
+
* `repair` are read as OWN members, while at a registration instant the same closed outcome is read through the
|
|
1472
|
+
* prototype chain (`kernel-registration.mjs:377`-`:380`) — **ONE RETURNED SHAPE ANSWERING TWO DIFFERENT THINGS AT THE
|
|
1473
|
+
* TWO INSTANTS, which is `D-35`'s recorded defect and is OWED to a code-bearing unit**, and nothing here is read as
|
|
1474
|
+
* symmetric. **Nor does the type carry `message`'s NON-EMPTINESS or the repair's invocability beyond `function`.**
|
|
1475
|
+
*/
|
|
1476
|
+
export type ConstraintOutcome =
|
|
1477
|
+
| true
|
|
1478
|
+
| {
|
|
1479
|
+
readonly message: string;
|
|
1480
|
+
readonly repair: (
|
|
1481
|
+
context: RepairContext | RegistrationRepairContext,
|
|
1482
|
+
) => RepairOutcome;
|
|
1483
|
+
}
|
|
1484
|
+
| { readonly message: string };
|
|
1485
|
+
|
|
1486
|
+
/**
|
|
1487
|
+
* **WHAT A REPAIR ANSWERS — THE CLOSED TWO-ARM SET**, read at `bindings/js/src/entry/kernel-attempt.mjs:899`-`:914`
|
|
1488
|
+
* and declared at `docs/L1/repair-outcome-types.md` §1.5 of 2026-11-01. **`op` IS REQUIRED ON THE CREDITED ARM, THE
|
|
1489
|
+
* ARM IS CLOSED, AND `undefined` IS NOT ONE OF THE TWO** — so a repair answering `undefined` or a bare `{ ok: true }`
|
|
1490
|
+
* is a COMPILE ERROR instead of a `ConstraintPassRefused` (`ST-F2`'s measured defect, `strata/research.md` §10).
|
|
1491
|
+
*
|
|
1492
|
+
* **THE CREDITED ARM: `{ ok: true, op }`, `op` BEING THE OPERATION RECORD THE STORE'S OWN VERB RETURNED** — the
|
|
1493
|
+
* store's own journal record, reached by INDEXED ACCESS (`WriteRecord['op']`) so **NO SECOND CARRIER IS MINTED**, and
|
|
1494
|
+
* `op.opId` (`string`) and `op.seq` (`number`) are reached by naming that record. **`DeleteRecord['op']`'s declared
|
|
1495
|
+
* `null` arm is REFUSED here**: a `delete` that removed nothing answers `null` and credits nothing, so a repair
|
|
1496
|
+
* passing `removed.op` narrows first. **THE FAILED ARM: `{ ok: false, message }` — `op` ABSENT AND NEVER `null`**,
|
|
1497
|
+
* because an `op` there is read by nothing.
|
|
1498
|
+
*
|
|
1499
|
+
* **THE TYPE NAMES THE CARRIER; THE GROUND IS PROSE AND IS POINTED AT, NEVER RE-SPELLED HERE**
|
|
1500
|
+
* (`bindings/js/src/entry/kernel-foundations.mjs:1105`-`:1131`), **and NO ORDINAL GROUND IS CLAIMED AT THE REGISTRATION
|
|
1501
|
+
* INSTANT** (`kernel-registration.mjs:615`-`:616`). **A green compile is not evidence of a credit**, and `op` is read
|
|
1502
|
+
* as an OWN member at BOTH instants — a distinction structural typing cannot make.
|
|
1503
|
+
*/
|
|
1504
|
+
export type RepairOutcome =
|
|
1505
|
+
| { readonly ok: true; readonly op: WriteRecord['op'] }
|
|
1506
|
+
| { readonly ok: false; readonly message: string };
|
|
1507
|
+
|
|
1508
|
+
/**
|
|
1509
|
+
* **THE WRITE'S COMMIT POSITION AND ITS CLASS TEST — ONE MEMBER, `pending`, SPELLED EXACTLY AS `CommitRecord.pending`
|
|
1510
|
+
* SPELLS IT** (`:793`), so **no second TYPE is minted: what is minted is the NAME the class test's class never had**.
|
|
1511
|
+
* Declared at `docs/L1/repair-outcome-types.md` §8's `Q-1` clause of 2026-11-01 (`strata/decisions.md` · `D-101`,
|
|
1512
|
+
* verbatim: *"Widen the position to its class test"*), and **exported because a position's type no consumer can
|
|
1513
|
+
* annotate is the `ST-F2` gap in a new place**: the carrier is the one value a consumer CONSTRUCTS at a position
|
|
1514
|
+
* rather than receives.
|
|
1515
|
+
*
|
|
1516
|
+
* **THE KERNEL READS A MEMBER'S PRESENCE AND NEVER ITS MEMBER COUNT** — an OWN, defined `pending` on a non-null,
|
|
1517
|
+
* non-Proxy, non-array object (`bindings/js/src/entry/delivery.mjs:27`-`:54`, the predicate at `:39`) — **so
|
|
1518
|
+
* `CommitRecord` is ONE CARRIER of this class and not the position's only type; it keeps every byte, its four
|
|
1519
|
+
* members and its export.** **A REPAIR'S OWN `RepairContext` IS A CARRIER TOO**, which is why the guide's
|
|
1520
|
+
* four-position spelling type-checks as written (`D-46`; `docs/guides/package-use.md §7.6`).
|
|
1521
|
+
*
|
|
1522
|
+
* **WHAT NO GREEN HERE PROVES, PRINTED BECAUSE THE CLASS TEST IS THE DOMAIN'S KEEPER**: an INHERITED `pending`
|
|
1523
|
+
* (`Object.hasOwn` refuses it at run time) and a `Proxy` (`types.isProxy` refuses it before any member read) are both
|
|
1524
|
+
* admitted by the type, and **`commit?` admits a SUPPLIED `undefined`, which the class test refuses** — the
|
|
1525
|
+
* `?`-cannot-separate limit this file already declares for `read`'s `tier?` (`:131`-`:135`). **THE RUNTIME REFUSAL IS
|
|
1526
|
+
* WHAT KEEPS THE POSITION'S DOMAIN.**
|
|
1527
|
+
*/
|
|
1528
|
+
export interface CommitCarrier {
|
|
1529
|
+
readonly pending: readonly TriggerPair[];
|
|
1530
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "provident-storeroom",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.8.0",
|
|
4
4
|
"description": "U-STOREROOM-PUBLISH: the published Node ESM binding for the native Rust store of Provident-Storeroom — the entry resolves the scoped per-target platform package first, the checkout's own module-relative addon second, and answers the store's single declared absent-addon form when neither loads",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "AGPL-3.0",
|
|
@@ -41,11 +41,11 @@
|
|
|
41
41
|
"src/constraint-kernel.mjs"
|
|
42
42
|
],
|
|
43
43
|
"optionalDependencies": {
|
|
44
|
-
"@auspicion/provident-storeroom-js-linux-x64-gnu": "1.
|
|
45
|
-
"@auspicion/provident-storeroom-js-linux-arm64-gnu": "1.
|
|
46
|
-
"@auspicion/provident-storeroom-js-darwin-x64": "1.
|
|
47
|
-
"@auspicion/provident-storeroom-js-darwin-arm64": "1.
|
|
48
|
-
"@auspicion/provident-storeroom-js-win32-x64-msvc": "1.
|
|
44
|
+
"@auspicion/provident-storeroom-js-linux-x64-gnu": "1.8.0",
|
|
45
|
+
"@auspicion/provident-storeroom-js-linux-arm64-gnu": "1.8.0",
|
|
46
|
+
"@auspicion/provident-storeroom-js-darwin-x64": "1.8.0",
|
|
47
|
+
"@auspicion/provident-storeroom-js-darwin-arm64": "1.8.0",
|
|
48
|
+
"@auspicion/provident-storeroom-js-win32-x64-msvc": "1.8.0"
|
|
49
49
|
},
|
|
50
50
|
"publishConfig": {
|
|
51
51
|
"access": "public"
|