provident-storeroom 0.5.0 → 1.0.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.md +70 -10
- package/index.d.ts +313 -96
- package/index.mjs +1254 -3188
- package/package.json +7 -6
- package/src/constraint-kernel.mjs +4 -1753
- package/src/entry/artefact.mjs +376 -0
- package/src/entry/carrier.mjs +1002 -0
- package/src/entry/class-decision.mjs +1214 -0
- package/src/entry/constraints.mjs +844 -0
- package/src/entry/delivery.mjs +639 -0
- package/src/entry/frame.mjs +417 -0
- package/src/entry/kernel-attempt.mjs +598 -0
- package/src/entry/kernel-commit.mjs +166 -0
- package/src/entry/kernel-foundations.mjs +664 -0
- package/src/entry/kernel-registration.mjs +644 -0
- package/src/entry/kernel-terminal.mjs +324 -0
- package/src/entry/refusal.mjs +161 -0
- package/src/entry/state.mjs +602 -0
package/index.d.ts
CHANGED
|
@@ -10,29 +10,71 @@
|
|
|
10
10
|
// NAMED EXPORT SET — **ONE NAME, `storeCreate`, AND NOTHING ELSE** (`surface.md §2.9` item 1's `A127`
|
|
11
11
|
// clause; `docs/decisions.md` · `A127`/`A128`, 2026-10-16: the module-level count is `11 → 1` ✓, the
|
|
12
12
|
// deprecation window of `A128`'s fiat being declared away at that clause); (2) the instance's own member
|
|
13
|
-
// set, **
|
|
13
|
+
// set, **FOURTEEN OWN MEMBERS AND NOTHING ELSE — `10 + 1 + 1 + 2 = 14` ✓** (`distribution.md §5.2` item 2 read
|
|
14
14
|
// with `surface.md §2.4` item 9 (f)'s `A127` clause): **THE TEN METHODS** `read(address, tier?)` ·
|
|
15
15
|
// `readLiteral(address, tier?)` · `write(address, tier, value, commit?)` · `delete(address, tier?)` ·
|
|
16
|
-
// `rollback(opId)` · `listen(
|
|
16
|
+
// `rollback(opId)` · `listen(handle, addresses)` · `unlisten(handle)` · `addConstraint(pair, constraint)` ·
|
|
17
17
|
// `constraintOn(pair, constraint)` · `constraintOff(pair, constraint)`, **PLUS `register(handle, listener)
|
|
18
|
-
// -> undefined`
|
|
19
|
-
//
|
|
18
|
+
// -> undefined`, `constraints() -> ConstraintPair[]`, `removeListener(handle) -> undefined` AND
|
|
19
|
+
// `removeConstraint(pair) -> undefined`** — the first two the singles the 2026-10-18 clause below names, the
|
|
20
|
+
// last two the members `contract.md §2.7` item 9 adds — the first being the
|
|
21
|
+
// listener registration, the second the registered-pair read; **`settle(record) -> undefined` STOOD HERE
|
|
22
|
+
// AS THE ORDERING SEAM AND IS REMOVED WHOLE** (the clause below carries the mark and the ruling); and (3) the
|
|
23
|
+
// failure surface, a thrown plain object with exactly
|
|
20
24
|
// `{status, message, log}` — **THREE MEMBERS FROM 2026-10-16, `2 → 3`, on the architect's ruling *"Bubble
|
|
21
25
|
// the message log to the client on failure, override any clauses that forbid this."*** (`surface.md §2.5`'s
|
|
22
26
|
// clause of that date, the crossing form's ONE home; **the ONE figure that moves is the arity, and
|
|
23
27
|
// `storeCreate` remains the namespace's one name and the product its twelve own members**).
|
|
24
28
|
//
|
|
25
|
-
// **⟶ AND THE
|
|
26
|
-
//
|
|
27
|
-
//
|
|
28
|
-
//
|
|
29
|
-
//
|
|
30
|
-
//
|
|
31
|
-
//
|
|
32
|
-
//
|
|
33
|
-
//
|
|
34
|
-
//
|
|
35
|
-
//
|
|
29
|
+
// **⟶ AND THE METHOD LIST ABOVE CARRIES ONE STALE SPELLING AND ONE STALE ARITY, SUPERSEDED HERE, 2026-10-19:**
|
|
30
|
+
// **`listen` IS `listen(handle, addresses)` AND NOT `listen(address)` — arity `2`, position `1` the
|
|
31
|
+
// caller-spelled `handle` (a non-empty `string`) and position `2` `addresses`, a SET of addresses whose
|
|
32
|
+
// member is an address and whose EMPTY ARRAY is in the domain** (`docs/specs/storeroom-held-listener-identity/
|
|
33
|
+
// contract.md §2.2` item 1; `listen-verb.md §1` item 1 and `§2.2` items 1–2: the arity figure moves `1 → 2`
|
|
34
|
+
// at four declared sites, each needing its own dated clause). **THE BYTES LISTING `listen(address)` STAND AS
|
|
35
|
+
// THE PRE-2026-10-18 READING AND ARE READ THROUGH THIS CLAUSE** (`DEF-2026-10-02`: no whole-file rewrite).
|
|
36
|
+
//
|
|
37
|
+
// **⟶ AND THE MEMBER-SET FIGURE ABOVE IS SUPERSEDED AND IS READ THROUGH THIS CLAUSE, 2026-10-18: THE
|
|
38
|
+
// OPERATIVE SET IS TWELVE OWN MEMBERS, `10 + 1 + 1 = 12` ✓ — THE TEN METHODS, `register` AND `constraints`** —
|
|
39
|
+
// declared at `surface.md §2.4` item 9 (f)'s clause of that date, which moves the set `13 → 12` on the
|
|
40
|
+
// architect's rulings of 2026-10-18, VERBATIM: *"Settle is redundant because the kernel is always in the
|
|
41
|
+
// loop."* · *"Always route to the kernel, because the JS code does not decide whether constraints trigger."* ·
|
|
42
|
+
// *"The kernel is always supposed to be in the middle. Any occasion where the write path is not governed by
|
|
43
|
+
// the kernel is a hallucination."* **`settle` IS THE MEMBER THAT LEAVES AND NO OTHER MEMBER MOVES WITH IT**
|
|
44
|
+
// (`§2.4` item 9's `REMOVED-WHOLE` pointer of the same date, whose own words are *"NO DRIVE MAY ASSERT A CALL
|
|
45
|
+
// OF `settle` FROM THIS DATE, ON ANY INSTANCE, FOR ANY ARGUMENT"*). **THE TWO REMAINING SINGLES ARE `register`
|
|
46
|
+
// AND `constraints`, AND THEY ARE NAMED BECAUSE A LONE `+1` WOULD NOT COMPUTE.** **SO A DECLARATION FILE THAT
|
|
47
|
+
// STILL DECLARES A `settle(record) -> undefined` MEMBER AT ANY POSITION, OR THAT READS THIRTEEN OWN MEMBERS,
|
|
48
|
+
// AFTER THIS DATE IS A FINDING BY THAT CLAUSE'S OWN WORDS** (`surface.md §2.4` item 9 (f)'s clause of
|
|
49
|
+
// 2026-10-18, item 4: *"a declaration file that still reads THIRTEEN own members, or that declares a
|
|
50
|
+
// `settle(record) -> undefined` member at any position, after this date is a FINDING"*). **THE BYTES ABOVE
|
|
51
|
+
// STAND AS THE `A127` PASS'S READING (`DEF-2026-10-02`: no whole-file rewrite) and every "twelve own members"
|
|
52
|
+
// figure in this file is read through the 2026-10-17 thirteen-mark and through THIS clause as TWELVE AGAIN,
|
|
53
|
+
// with the thirteen being the 2026-10-17 reading and not the operative one.** **THE TWO ROUTES THAT WOULD
|
|
54
|
+
// HAVE MOVED THE SET EARLIER ARE STILL REFUSED BY NAME AND NEITHER IS ONE OF THESE** (`§2.5`'s clause of
|
|
55
|
+
// 2026-10-16: a `constraintLog(commit)` reader and a second module-namespace name).
|
|
56
|
+
//
|
|
57
|
+
// **⟶ AND THE MEMBER-SET FIGURE ABOVE IS SUPERSEDED AND IS READ THROUGH THIS CLAUSE, 2026-10-19: THE
|
|
58
|
+
// OPERATIVE SET IS FOURTEEN OWN MEMBERS, `10 + 1 + 1 + 2 = 14` ✓ — THE TEN METHODS, `register`, `constraints`
|
|
59
|
+
// AND THE TWO REMOVE MEMBERS `removeListener(handle)` AND `removeConstraint(pair)`** — **WHICH SUPERSEDES THE
|
|
60
|
+
// METHOD LIST'S OWN *"THE TWO REMAINING SINGLES ARE `register` AND `constraints`"* OF 2026-10-18: the singles
|
|
61
|
+
// that remain are still those two, and the fourteen-member set carries them PLUS the two remove members, so
|
|
62
|
+
// no reader counts the `+ 2` into the singles** — declared at
|
|
63
|
+
// `docs/specs/storeroom-held-listener-identity/contract.md §2.7` item 9, THE MEMBER SET `14`, whose own list
|
|
64
|
+
// is `{ read, readLiteral, write, delete, rollback, listen, unlisten, addConstraint, constraintOn,
|
|
65
|
+
// constraintOff, register, constraints, removeListener, removeConstraint }`. **THE FIGURE MOVES `12 → 14`
|
|
66
|
+
// and the two new members are reached through the factory's product ALONE — the module namespace keeps its
|
|
67
|
+
// ONE name (`11 → 1` ✓), because the two new members are NOT module exports** (`contract.md §2.7` item 9's
|
|
68
|
+
// `[CENSUS]` and its closing clause). **AND THE `12 → 13` FIGURE IS WITHDRAWN BY NAME: the thirteen-mark of
|
|
69
|
+
// 2026-10-17 is a SUPERSEDED READING and was never the operative one** (`P: docs/pending.md · (AA-5)`,
|
|
70
|
+
// verbatim: *"the member set is 14 and the `12 → 13` figure is withdrawn by name"*). **SO EVERY "twelve own
|
|
71
|
+
// members" FIGURE BELOW — the `A127` pass's reading at its own bytes, the 2026-10-18 clause's operative
|
|
72
|
+
// `TWELVE`, and `StoreInstance`'s `"THE TWELVE"` — IS READ THROUGH THIS CLAUSE AS FOURTEEN, and a
|
|
73
|
+
// declaration file that declares twelve while the product ships fourteen is the FINDING `contract.md §2.7`
|
|
74
|
+
// item 9 exists to prevent.** **THE TWO ROUTES THAT WOULD HAVE MOVED THE SET EARLIER ARE STILL REFUSED BY
|
|
75
|
+
// NAME AND NEITHER IS ONE OF THESE** (`§2.5`'s clause of 2026-10-16: a `constraintLog(commit)` reader and a
|
|
76
|
+
// second module-namespace name) — the 2026-10-18 paragraph's closing sentence above stands BYTE-FOR-BYTE and
|
|
77
|
+
// is read through this clause.
|
|
36
78
|
//
|
|
37
79
|
// **THE TEN METHODS TAKE THE RECEIVER'S OWN POSITION AWAY: `8 → 1` ✓ AND `4 → 12` ✓** (`surface.md §2.9`
|
|
38
80
|
// item 1's and `§2.4` item 9 (f)'s `A127` clauses). The seven verbs that reach the store are METHODS of the
|
|
@@ -49,16 +91,22 @@
|
|
|
49
91
|
// them is a STORE type**: no register, no anchor, no tier tree, no journal and no store verb is declared
|
|
50
92
|
// here (`§5.2` item 4).
|
|
51
93
|
//
|
|
52
|
-
// **AND TWO MORE SHAPES STAND BESIDE THOSE ELEVEN WITHOUT A BYTE OF EITHER BEING MINTED HERE, BECAUSE
|
|
53
|
-
//
|
|
94
|
+
// **AND TWO MORE SHAPES STAND BESIDE THOSE ELEVEN WITHOUT A BYTE OF EITHER BEING MINTED HERE, BECAUSE THE
|
|
95
|
+
// WRITE'S COMMIT POSITION IS THE KERNEL'S OWN RECORD AND NOT THIS PACKAGE'S** (`§2.4` item 9
|
|
54
96
|
// (f)'s *"each with its argument types"* read with its *"no `pending`-shaped record type this unit does
|
|
55
97
|
// not declare"*): **`AttemptRef` (`1` member) and `CommitRecord` (`4` members — `attempt` · `op` ·
|
|
56
98
|
// `triggered` · `pending`) are THE KERNEL'S OWN NAMED SHAPES, DECLARED BY THE KERNEL AND NOT BY THIS
|
|
57
99
|
// UNIT** (`kernel-surface.md §1` item 4's closed record enumeration; its `§2.1` item 2 for the record's
|
|
58
|
-
// four members; `attempt-lifecycle.md §2.4` item 1 for the one-member `AttemptRef`) — so the
|
|
59
|
-
//
|
|
100
|
+
// four members; `attempt-lifecycle.md §2.4` item 1 for the one-member `AttemptRef`) — so the record position
|
|
101
|
+
// carries its own `pending` member and this file MINTS NO RECORD TYPE OF ITS OWN to carry it.
|
|
60
102
|
// **`AttemptRef` and `CommitRecord` are therefore not STORE types either, and not store records**: they
|
|
61
|
-
// are kernel-side shapes
|
|
103
|
+
// are kernel-side shapes, cited from their own unit's declaration.
|
|
104
|
+
// **⟶ AND THE POSITION THEY ARE CITED FOR MOVED WITH `settle`'s REMOVAL, 2026-10-18**: `settle`'s own
|
|
105
|
+
// argument is gone with the member, and these two shapes now stand here for the ONE position that still
|
|
106
|
+
// reads a `CommitRecord` — the `commit` argument of `write` (`§2.4` item 9 (g) item 1's class test, the
|
|
107
|
+
// record position `A120` (1) admits). **THE SHAPES THEMSELVES ARE UNMOVED AND `CommitRecord` KEEPS ITS
|
|
108
|
+
// `FOUR` MEMBERS, `pending` AMONG THEM** (`§2.4` item 9's adoption-machinery clause of that date, item
|
|
109
|
+
// `(vi)`: *"THE ADOPTION SYSTEM CONSUMED IT AND DID NOT OWN IT"*).
|
|
62
110
|
//
|
|
63
111
|
// **AND THE ONE THING THIS DECLARATION MUST NOT CARRY, STATED SO THE FINDING RULE IS CHECKABLE**
|
|
64
112
|
// (`distribution.md §5.2` item 4): **it declares NO store type, NO store verb, NO `findAddress`, NO
|
|
@@ -82,7 +130,10 @@
|
|
|
82
130
|
// `AddressMalformed`. The narrowest lawful widening a declaration can make is `number`, and this file
|
|
83
131
|
// makes it.
|
|
84
132
|
// 3. **THE INSTANCE'S *"TWELVE OWN MEMBERS AND NOTHING ELSE"* IS NOT STRUCTURALLY ENFORCEABLE HERE**
|
|
85
|
-
// (`§2.4` item 9 (f)'s `A127` clause; `§2.9` item 1's)
|
|
133
|
+
// (`§2.4` item 9 (f)'s `A127` clause; `§2.9` item 1's) — **AND THE COUNT IT NAMES IS THE SUPERSEDED ONE:
|
|
134
|
+
// THE OPERATIVE FIGURE IS FOURTEEN, read through the member-set clause of 2026-10-19 above**
|
|
135
|
+
// (`docs/specs/storeroom-held-listener-identity/contract.md §2.7` item 9). An interface declares the
|
|
136
|
+
// members a value HAS
|
|
86
137
|
// and constrains no excess member, so a product carrying a thirteenth own member still satisfies
|
|
87
138
|
// `StoreInstance`. The count is driven at the boundary instead (`a127-surface.test.mjs`'s
|
|
88
139
|
// `Object.getOwnPropertyNames` cell, which exists precisely because this declaration cannot fail on it).
|
|
@@ -152,8 +203,45 @@ export interface StoreConfig {
|
|
|
152
203
|
* no-constraint store, and no default is declared for it"* — **and every element and every shape outside
|
|
153
204
|
* the list is refused at the store's own construction with ITS OWN code and ITS OWN message**, which is
|
|
154
205
|
* why the element type is the caller's own shape and not a narrowed record here.
|
|
206
|
+
*
|
|
207
|
+
* **⟶ AMENDED 2026-10-24 (`D-26`, verbatim: *"The batch in cfg.constraints must supply functions"*): THE
|
|
208
|
+
* ELEMENT IS THREE MEMBERS AND THE FUNCTION IS REQUIRED. The pair is the element's ADDRESSING and the
|
|
209
|
+
* function is its SUBSTANCE — the reading the use-case record has carried since 2026-10-16, now the
|
|
210
|
+
* declaration's own. THE STORE NEVER SEES THE FUNCTION**: a JavaScript function cannot cross into Rust at
|
|
211
|
+
* any depth, so the crossing carries the pair and **the PACKAGE arms the substance** at construction
|
|
212
|
+
* through the same act the add route performs (`D-26` items 3–4). The state this key's earlier prose named
|
|
213
|
+
* — *"a well-formed element that carried no function … is NOT a carried pair"* — therefore **HAS NO
|
|
214
|
+
* PRODUCER ON THIS ROUTE**: a batch element is always carried.
|
|
215
|
+
*
|
|
216
|
+
* **AND THE ELEMENT'S `id` IS THE PAIR'S HANDLE, A HANDLE IS INSTANCE-SCOPED AND UNIQUE, AND TWO RULES
|
|
217
|
+
* FOLLOW THAT ARE DIFFERENT RULES FOR DIFFERENT ACTS — a declaration that conflates them gets both wrong**
|
|
218
|
+
* (`D-23`, verbatim: *"Setting a constraint should expect a handle name to be used for handle and
|
|
219
|
+
* process/error logging purposes"*; `D-24`, verbatim: *"The handle becomes the id - the handle needs to be
|
|
220
|
+
* unique regardless, and setting a duplicate handle is an overwrite"*; `D-27`'s own table):
|
|
221
|
+
*
|
|
222
|
+
* | act | a repeated handle |
|
|
223
|
+
* |---|---|
|
|
224
|
+
* | **this key, `cfg.constraints`** | **REJECTED** — the list is ONE supplied act, so an internal ambiguity is malformed input and not a second write |
|
|
225
|
+
* | **`addConstraint(pair, constraint)`** | **OVERWRITE** — acts are separate in time, so a later one replaces the earlier |
|
|
226
|
+
*
|
|
227
|
+
* **SO, AT CONSTRUCTION, TWO REFUSALS THAT THE STORE CANNOT TAKE AND THE PACKAGE OWNS** (`D-27`): **no two
|
|
228
|
+
* elements of one `cfg.constraints` may name one `id`; and no element's `id` may equal a `handle` this
|
|
229
|
+
* construction's `listeners` adopts** — a cross-KIND collision, rejected regardless of kind (`D-27`:
|
|
230
|
+
* *"Reject duplicate handles in batch - regardless of listener/constraint type"*). **The second is not an
|
|
231
|
+
* overwrite and the first is not a second registration.** Both are refused **before any filesystem act**,
|
|
232
|
+
* in the surface's one thrown form `{status, message, log}`, under the store's existing
|
|
233
|
+
* `ConstraintListInvalid` — **the package mints no code**.
|
|
234
|
+
*
|
|
235
|
+
* **AND THE NAME'S OTHER TWO READERS NEED NOTHING** (`D-24` items 2–3, both recorded so no pass adds a
|
|
236
|
+
* member): `constraints()` already returns the bare `id`, so its four exclusions stand exactly as written;
|
|
237
|
+
* and `LogEntry` already carries `id`, so **the name's logging role moves no member-set** and no undeclared
|
|
238
|
+
* seventh member exists.
|
|
155
239
|
*/
|
|
156
|
-
readonly constraints?: readonly {
|
|
240
|
+
readonly constraints?: readonly {
|
|
241
|
+
readonly address: Address;
|
|
242
|
+
readonly id: string;
|
|
243
|
+
readonly constraint: Constraint;
|
|
244
|
+
}[];
|
|
157
245
|
}
|
|
158
246
|
|
|
159
247
|
/**
|
|
@@ -182,6 +270,24 @@ export interface StoreConfig {
|
|
|
182
270
|
* construction/startup, or of the LOADED state against that list at load — **and the store writes no byte of
|
|
183
271
|
* that list into the file and holds no register key for it** (`contract.md §7.1` step 4 and `§7.2` item 6 as
|
|
184
272
|
* amended 2026-10-15; `seams-and-lifecycle.md §8.1`).
|
|
273
|
+
*
|
|
274
|
+
* **⟶ AMENDED 2026-10-24 (`docs/specs/storeroom-native/contract.md §8.1`'s 2026-10-23 amendment (`A148` Q3,
|
|
275
|
+
* folded into `U-STOREROOM-JSON-CROSSING`); `strata/decisions.md`'s `FINDING` of this date; `R-3`'s `Q4`;
|
|
276
|
+
* `REVIEW-2026-10-24.md`'s `Q4`) — THE SET IS SEVENTEEN AND THE DECLARATION WAS ONE BEHIND THE STORE.** The
|
|
277
|
+
* amendment widens the closed set `16 → 17` with **`ValueRefusedAtBoundary` at rank `17`**, and *"the
|
|
278
|
+
* operative set is `17` members ranked `1`…`17`"* with the spelling moved to `[&'static str; 17]`; the store
|
|
279
|
+
* implements seventeen (`src/error.rs`'s `CODES`). **So `ValueRefusedAtBoundary` is written among the
|
|
280
|
+
* literals at rank `17`, LAST of the seventeen and BEFORE the escape — the position `ConstraintListInvalid`
|
|
281
|
+
* held, because the amendment APPENDS and moves no rank of `1`…`16`.** **THE ALGEBRA NOW READS
|
|
282
|
+
* `11 + 2 + 1 + 1 + 1 + 1 = 17` ✓, and the four figures this paragraph carries are read through this clause:
|
|
283
|
+
* *"THE SIXTEEN MEMBERS BELOW"* reads SEVENTEEN; *"its set has already moved twice … and 2026-10-15 to
|
|
284
|
+
* SIXTEEN"* reads THREE times, the third being this amendment, **which is the escape arm's own evidence and
|
|
285
|
+
* therefore reinforces §the arm rather than weakening it**; *"THE SIXTEENTH MEMBER … LAST of the sixteen"*
|
|
286
|
+
* reads `ValueRefusedAtBoundary` as the SEVENTEENTH and last of the seventeen, with `ConstraintListInvalid`
|
|
287
|
+
* at rank `16`; and `constraints()`' *"the store's closed `16`-member set is not reached"* keeps its
|
|
288
|
+
* statement about THAT READ while its FIGURE moves to `17`. **`ValueNotAdmitted` STAYS AT RANK `14` AND IS
|
|
289
|
+
* NOT REMOVED** — it remains the store's own answer on the native route — **so a pass that reads rank `17`
|
|
290
|
+
* as a RENAME of rank `14` has destroyed a member** (`DEF-2026-10-02`: no whole-file rewrite).
|
|
185
291
|
*/
|
|
186
292
|
export type StoreStatus =
|
|
187
293
|
| 'AddressMalformed'
|
|
@@ -200,6 +306,7 @@ export type StoreStatus =
|
|
|
200
306
|
| 'ValueNotAdmitted'
|
|
201
307
|
| 'FileCommitFailed'
|
|
202
308
|
| 'ConstraintListInvalid'
|
|
309
|
+
| 'ValueRefusedAtBoundary'
|
|
203
310
|
| (string & {});
|
|
204
311
|
|
|
205
312
|
/**
|
|
@@ -245,8 +352,17 @@ export interface StoreRefusal {
|
|
|
245
352
|
readonly log: LogEntry[];
|
|
246
353
|
}
|
|
247
354
|
|
|
248
|
-
/**
|
|
249
|
-
|
|
355
|
+
/**
|
|
356
|
+
* **⟶ `U-STOREROOM-HELD-LISTENER-IDENTITY` (`D-GP-SHLI`): `Handle` MOVES `object → string`**
|
|
357
|
+
* (`contract.md §2.1` item 1; `P: docs/pending.md · P-6`, the type ruling, verbatim: *"Refuse handles that
|
|
358
|
+
* aren't strings."*). **THE CALLER SPELLS IT, HOLDS IT AND PASSES IT BACK; NOTHING MINTS IT.** The value the
|
|
359
|
+
* store reports in a trigger pair and the value the caller holds ARE ONE VALUE, and its domain is
|
|
360
|
+
* `{ s : s ∈ String ∧ s ≠ "" }` (`identity-and-domain.md §2` item 1).
|
|
361
|
+
*
|
|
362
|
+
* **THIS IS A CONSUMER-VISIBLE BREAK** (§7 item 2 of the contract): every signature below that names a
|
|
363
|
+
* handle is re-typed with it, and the release class is the release gate's (`P: docs/pending.md · (AA-4)`).
|
|
364
|
+
*/
|
|
365
|
+
export type Handle = string;
|
|
250
366
|
|
|
251
367
|
/** The caller's listener: any JS function, invoked with the triggering address as its ONE argument. */
|
|
252
368
|
export type Listener = (address: Address) => void;
|
|
@@ -295,14 +411,33 @@ export interface JournalOp {
|
|
|
295
411
|
export interface WriteRecord {
|
|
296
412
|
readonly op: JournalOp;
|
|
297
413
|
readonly watched: readonly Address[];
|
|
298
|
-
|
|
414
|
+
/** **THE TRIGGER'S PAIRS** (`contract.md §2.4` item 1; `PAR-HL-38`): the pair REPLACES a bare handle list. */
|
|
415
|
+
readonly triggered: readonly TriggerPair[];
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
/**
|
|
419
|
+
* **⟶ `U-STOREROOM-HELD-LISTENER-IDENTITY`: THE TRIGGER'S PAIR, `{handle, address}`** (`contract.md §2.4`
|
|
420
|
+
* item 1; `trigger-and-pair.md §1`; `PAR-HL-19`, `PAR-HL-20`, `PAR-HL-21`).
|
|
421
|
+
*
|
|
422
|
+
* **`handle` IS THE CALLER'S OWN STRING** and **`address` IS THE BINDING'S OWN ADDRESS** — the address the
|
|
423
|
+
* listener was bound at, never the address the write targeted. **THE TWO ARE TOLD APART**: the write's own
|
|
424
|
+
* address crosses as the record's `triggeringAddress`, and the invocation's ONE argument is that write
|
|
425
|
+
* address (`contract.md §2.4` item 7).
|
|
426
|
+
*
|
|
427
|
+
* **NO PARALLEL `triggeredAddresses` ARRAY EXISTS AND NONE MAY BE ADDED** — the aligned form is an i-th
|
|
428
|
+
* correspondence, which reverses `DD-37` (`contract.md §2.4` item 1; `trigger-and-pair.md §2` item 4).
|
|
429
|
+
*/
|
|
430
|
+
export interface TriggerPair {
|
|
431
|
+
readonly handle: Handle;
|
|
432
|
+
readonly address: Address;
|
|
299
433
|
}
|
|
300
434
|
|
|
301
435
|
/** The record a `delete` answers. */
|
|
302
436
|
export interface DeleteRecord {
|
|
303
437
|
readonly address: Address;
|
|
304
438
|
readonly tiers: readonly Tier[];
|
|
305
|
-
|
|
439
|
+
/** **THE TRIGGER'S PAIRS** (`contract.md §2.4` item 1; `PAR-HL-38`; `A43` — a delete fires its own set). */
|
|
440
|
+
readonly triggered: readonly TriggerPair[];
|
|
306
441
|
}
|
|
307
442
|
|
|
308
443
|
/**
|
|
@@ -327,8 +462,11 @@ export interface RollbackRecord {
|
|
|
327
462
|
* it as a named kernel-side shape).
|
|
328
463
|
*
|
|
329
464
|
* **IT IS DECLARED HERE FOR ONE POSITION AND NO OTHER**: the `attempt` member of the `CommitRecord` the
|
|
330
|
-
*
|
|
331
|
-
*
|
|
465
|
+
* `write` member's `commit` position takes (`§2.4` item 9 (f)'s *"each with its argument types"* read
|
|
466
|
+
* with item 9 (g) item 1's record-position class test). **⟶ THE POSITION IT IS CITED FOR MOVED WITH
|
|
467
|
+
* `settle`'s REMOVAL, 2026-10-18**: that member's argument is gone with the member, and the ONE position
|
|
468
|
+
* that still reads a `CommitRecord` is the `commit` argument above. **No verb of this entry answers with it
|
|
469
|
+
* and this package mints it nowhere.**
|
|
332
470
|
*/
|
|
333
471
|
export interface AttemptRef {
|
|
334
472
|
/** The attempt's identity: a non-empty, kernel-unique token. */
|
|
@@ -336,8 +474,11 @@ export interface AttemptRef {
|
|
|
336
474
|
}
|
|
337
475
|
|
|
338
476
|
/**
|
|
339
|
-
* **THE
|
|
340
|
-
* NOT THE STORE'S `WriteRecord`** (
|
|
477
|
+
* **THE WRITE'S COMMIT POSITION IS THIS RECORD — THE KERNEL'S OWN `{ attempt, op, triggered, pending }`, AND
|
|
478
|
+
* NOT THE STORE'S `WriteRecord`** (**⟶ RE-SPELLED 2026-10-18: this block read *"THE ORDERING SEAM'S ONE
|
|
479
|
+
* ARGUMENT"*, and the seam `settle` is REMOVED WHOLE from the product — the BYTES stand and are read through
|
|
480
|
+
* this clause; THE SHAPE IS UNMOVED and takes the ONE position that still reads it, the `write` member's
|
|
481
|
+
* `commit` argument) (`kernel-surface.md §2.1` item 2's return-shape block: *"`CommitRecord`,
|
|
341
482
|
* a record with exactly FOUR members, the FOURTH added at the `A108` landing pass of 2026-10-13"*; its
|
|
342
483
|
* `§1` item 4 counts it among the kernel's own named shapes).
|
|
343
484
|
*
|
|
@@ -366,18 +507,36 @@ export interface CommitRecord {
|
|
|
366
507
|
readonly attempt: AttemptRef;
|
|
367
508
|
/** The op the store's write returned, VERBATIM (`JournalOp` above; `§2.1` item 2). */
|
|
368
509
|
readonly op: JournalOp;
|
|
369
|
-
/** The store's own `triggered` member, VERBATIM, read as a SET (`§2.1` item 2). */
|
|
370
|
-
readonly triggered: readonly
|
|
371
|
-
/**
|
|
372
|
-
|
|
510
|
+
/** The store's own `triggered` member, VERBATIM, read as a SET (`§2.1` item 2) — now a PAIR LIST. */
|
|
511
|
+
readonly triggered: readonly TriggerPair[];
|
|
512
|
+
/**
|
|
513
|
+
* **THE WHOLE RETURNED SET OF TRIGGERED CONSTRAINTS, each entry leaving it only by being checked off as it
|
|
514
|
+
* passes — and now a PAIR list, because `pending` is SEEDED AS A CLONE OF `triggered` and therefore
|
|
515
|
+
* INHERITS ITS SHAPE** (`P: docs/pending.md · P-7`'s `pending` ruling, verbatim: *"Push the pair into
|
|
516
|
+
* pending. Pending is seeded as a clone of triggered."*; `(AA-7)`: *"Pop from set to check off"*;
|
|
517
|
+
* `contract.md §2.4` items 3–4; `PAR-HL-22`, `PAR-HL-39`).
|
|
518
|
+
*
|
|
519
|
+
* **ITS ELEMENT TYPE IS TOTAL — NO BARE HANDLE STANDS IN IT** (`contract.md §2.5` item 2): the bare-handle
|
|
520
|
+
* union the check-off and the discard once carried has no subject under POP, because the checked-off entry
|
|
521
|
+
* is REMOVED rather than carried beside.
|
|
522
|
+
*/
|
|
523
|
+
readonly pending: readonly TriggerPair[];
|
|
373
524
|
}
|
|
374
525
|
|
|
375
526
|
/**
|
|
376
|
-
* **THE INSTANCE `storeCreate` RETURNS — THE
|
|
377
|
-
*
|
|
527
|
+
* **THE INSTANCE `storeCreate` RETURNS — THE FOURTEEN OWN MEMBERS READ THROUGH `contract.md §2.7` ITEM 9,
|
|
528
|
+
* `10 + 1 + 1 + 2 = 14` ✓: THE TEN METHODS, `register`, `constraints` AND THE TWO REMOVE MEMBERS
|
|
529
|
+
* `removeListener(handle)` AND `removeConstraint(pair)`.** Each is reached through the
|
|
378
530
|
* factory's own product alone (`package.md §1.3` item 3) — **NO member below is a named export**, because
|
|
379
531
|
* the module namespace carries ONE name, `storeCreate` (`§2.9` item 1's `A127` clause; `11 → 1` ✓).
|
|
380
532
|
*
|
|
533
|
+
* **⟶ AND THE OPENING FIGURE ABOVE WAS *"THE TWELVE OWN MEMBERS OF `surface.md §2.4` item 9 (f)'s clause of
|
|
534
|
+
* 2026-10-18"*, SUPERSEDED HERE 2026-10-19: the operative set is the FOURTEEN of
|
|
535
|
+
* `docs/specs/storeroom-held-listener-identity/contract.md §2.7` item 9, the withdrawn `12 → 13` figure not
|
|
536
|
+
* among the readings** (`P: docs/pending.md · (AA-5)`: *"the member set is 14 and the `12 → 13` figure is
|
|
537
|
+
* withdrawn by name"*). **THE BYTES STAND AS THAT PASS'S READING AND ARE READ THROUGH THIS CLAUSE**
|
|
538
|
+
* (`DEF-2026-10-02`: no whole-file rewrite).
|
|
539
|
+
*
|
|
381
540
|
* **THE TEN METHODS ARE THE DECLARED POSITIONS OF `§2.2`, `§2.4`, `§2.10` AND `§2.12` WITH THE LEADING
|
|
382
541
|
* `instance` POSITION DROPPED** (`A127`): `a.read(address, tier?)` is the declared `read`, `a.write(address,
|
|
383
542
|
* tier, value, commit?)` the declared `write`, and so on — **the receiver IS the instance, so the position
|
|
@@ -387,9 +546,18 @@ export interface CommitRecord {
|
|
|
387
546
|
*
|
|
388
547
|
* **THE STATE IS PRIVATE AND NONE OF THE TWELVE IS A RELEASE VERB** (`surface.md §2.1` (e) item 1; `A74`):
|
|
389
548
|
* the instance's own state is released with the instance and by nothing else — no `dispose()`, no `close()`
|
|
390
|
-
* and no finalizer is declared here. **⟶ AND `"THE TWELVE"`
|
|
391
|
-
*
|
|
392
|
-
*
|
|
549
|
+
* and no finalizer is declared here. **⟶ AND `"THE TWELVE"` IS THE OPERATIVE FIGURE FROM 2026-10-18: the
|
|
550
|
+
* set read THIRTEEN from 2026-10-17 to that date, and `settle`'s removal brings it BACK TO TWELVE — the ten
|
|
551
|
+
* methods, `register` and `constraints`** (this interface's own clause for the last one below; the file's
|
|
552
|
+
* header carries the member-set mark, the architect's rulings and the two still-refused routes).
|
|
553
|
+
* **⟶ AND `"THE TWELVE"` IS SUPERSEDED IN TURN, 2026-10-19: THE OPERATIVE FIGURE IS `"THE FOURTEEN"` —
|
|
554
|
+
* `10 + 1 + 1 + 2 = 14` ✓, the ten methods, `register`, `constraints` AND the two remove members
|
|
555
|
+
* `removeListener(handle)` and `removeConstraint(pair)`** (`docs/specs/storeroom-held-listener-identity/
|
|
556
|
+
* contract.md §2.7` item 9; the file header's clause of this date names the two members and the arithmetic).
|
|
557
|
+
* **THIS SENTENCE'S ONWARD CLAIM IS UNMOVED AND IS THE POINT OF THE PASS: none of the fourteen is a RELEASE
|
|
558
|
+
* VERB** (`surface.md §2.1` (e) item 1; `A74`) — **the two remove members remove a LISTENER and a
|
|
559
|
+
* CONSTRAINT PAIR, never the instance's own state, and no `dispose()`, `close()` or finalizer stands beside
|
|
560
|
+
* them.**
|
|
393
561
|
*/
|
|
394
562
|
export interface StoreInstance {
|
|
395
563
|
/**
|
|
@@ -450,6 +618,16 @@ export interface StoreInstance {
|
|
|
450
618
|
* RESERVED WORD, so under the superseded module-level spelling the function had to be declared as
|
|
451
619
|
* `deleteOp` and re-exported (`export { deleteOp as delete }`). **A METHOD NAME IS NOT AN IDENTIFIER
|
|
452
620
|
* BINDING, so the member is declared under the one name the surface publishes** (`A127`).
|
|
621
|
+
*
|
|
622
|
+
* **⟶ AND THE WORKAROUND THAT SENTENCE DESCRIBES IS HISTORICAL AND NO LONGER EXISTS, 2026-10-19: `deleteOp`
|
|
623
|
+
* HAS BEEN DELETED FROM THE CODEBASE ENTIRELY** — the `P-8` merge removed the module-level spelling, so
|
|
624
|
+
* `grep -n "deleteOp" bindings/js/index.mjs` now returns THAT NAME ONLY INSIDE MOVED-POINTER COMMENTS
|
|
625
|
+
* (the `delete` member's own doc block, whose body was `deleteOp`'s) **and no live binding by that name
|
|
626
|
+
* stands at any site** (`P: docs/pending.md · P-8`; `archive/p8-merge/2026-10-18/blocks/deleteOp.md`).
|
|
627
|
+
* **SO `export { deleteOp as delete }` IS NOT A SHAPE THIS PACKAGE ANY LONGER HAS AND MUST NOT BE READ AS
|
|
628
|
+
* ONE — the module namespace is ONE name, `storeCreate` (`11 → 1` ✓), and `delete` is reached as the
|
|
629
|
+
* instance's own method alone** (`§2.9` item 1's `A127` clause). **THE DECLARATION BELOW IS UNCHANGED AND
|
|
630
|
+
* WAS ALWAYS CORRECT: `delete(address, tier?): DeleteRecord`.**
|
|
453
631
|
*/
|
|
454
632
|
delete(address: Address, tier?: Tier): DeleteRecord;
|
|
455
633
|
/**
|
|
@@ -461,17 +639,50 @@ export interface StoreInstance {
|
|
|
461
639
|
*/
|
|
462
640
|
rollback(opId: string): RollbackRecord;
|
|
463
641
|
/**
|
|
464
|
-
* Begin watching
|
|
642
|
+
* Begin watching the addresses the caller names under the caller's own handle.
|
|
643
|
+
*
|
|
644
|
+
* **⟶ THIS BLOCK'S FEATURE SENTENCE READ *"Begin watching an address, and answer the fresh opaque handle
|
|
645
|
+
* it is keyed by"*, AND BOTH HALVES OF IT ARE SUPERSEDED, 2026-10-19** (`DEF-2026-10-02`: no whole-file
|
|
646
|
+
* rewrite — the bytes stand above and are read through this clause; `docs/specs/storeroom-held-listener-
|
|
647
|
+
* identity/contract.md §2.2` items 1, 2 and 10; `listen-verb.md §1` item 1). **THE CALLER SPELLS THE
|
|
648
|
+
* HANDLE AND `listen` ANSWERS `undefined`** — a DECLARED change of the return shape `Handle → undefined`,
|
|
649
|
+
* forced because returning the supplied handle would be a second spelling of the caller's own datum
|
|
650
|
+
* (`contract.md §2.2` item 10) — and **THE ADDRESS POSITION IS A SET**: position `2` is `addresses`, an
|
|
651
|
+
* ARRAY of addresses with the EMPTY ARRAY in the domain. **(The declaration below already carries both:
|
|
652
|
+
* `listen(handle: Handle, addresses: readonly Address[]): void` — `listen-verb.md §2.2` item 1's arity
|
|
653
|
+
* `2`, with no third position.)**
|
|
465
654
|
*
|
|
466
655
|
* **AND IT IS AN ADDRESS SITE THAT DECLARES ITS ARGUMENT POSITION** (`parameter-semantics.md §2.17`'s
|
|
467
656
|
* dated clause; `surface.md §2.5` item 5 (b)'s position half): the address is `1` of `1`, so a CLASS
|
|
468
657
|
* refusal here — a `Proxy` over an array included — carries `a Proxy` AND `first argument` inside the one
|
|
469
|
-
* failure form's message, and NO trap is run (`NG-JS-I`).
|
|
658
|
+
* failure form's message, and NO trap is run (`NG-JS-I`). **⟶ READ WITH THE CLAUSE ABOVE, the class test
|
|
659
|
+
* this sentence describes is the SET POSITION'S: the six outside classes are `listen-verb.md §2.2` item 2's
|
|
660
|
+
* and the declared answer for every one of them is the surface's one thrown form with the store's
|
|
661
|
+
* `AddressMalformed` (`§2.2` item 3; the position figure `1` of `1` above is the PRE-2026-10-18 reading —
|
|
662
|
+
* position `1` is `1` OF TWO, `listen-verb.md §1` item 1's arity `2`).**
|
|
470
663
|
*
|
|
471
664
|
* **A REPEATED CALL AT A HELD ADDRESS MINTS NOTHING AND ANSWERS THE ADDRESS'S EXISTING ENTRY'S HANDLE**
|
|
472
665
|
* (`write-and-read.md §6.5` item 12 (c); `§0.4` clause 2), so the two calls answer ONE opaque value.
|
|
666
|
+
* **⟶ SUPERSEDED, 2026-10-19: `listen(h, S2)` AFTER `listen(h, S1)` IS SET-ASSIGNMENT AND NOT UNION —
|
|
667
|
+
* `S1` IS PURGED WHOLESALE AND `S2` INSTALLED, with no intermediate state observable — AND THE CALL
|
|
668
|
+
* ANSWERS NOTHING** (`contract.md §2.2` items 3 and 10; `listen-verb.md §3` item 1). **THE SURVIVING HALF
|
|
669
|
+
* IS THE MINTING HALF: the handle is the CALLER'S, so nothing mints one.** (`P: docs/pending.md · (R1)`,
|
|
670
|
+
* verbatim: *"`listen(h, S2)` AFTER `listen(h, S1)` IS SET-ASSIGNMENT, NOT UNION"*.)**
|
|
671
|
+
*
|
|
672
|
+
* **⟶ AMENDED 2026-10-24 (`strata/decisions.md` `D-22`, verbatim: *"Listen should return the handle on
|
|
673
|
+
* success, or error message on fail. Discard the noop prefix"*): `listen` ANSWERS THE HANDLE IT WATCHES
|
|
674
|
+
* UNDER ON SUCCESS — the caller's own spelling, returned as THE IDENTITY THE STORE HOLDS FOR THAT ENTRY —
|
|
675
|
+
* and EVERY FAILURE REMAINS THE SURFACE'S ONE THROWN FORM (`{status, message, log}`), because this ruling
|
|
676
|
+
* mints no second failure channel. THE RETURN IS A SUCCESS SIGNAL THAT CARRIES THE IDENTITY AND NOT AN ECHO
|
|
677
|
+
* TO BE SUPPRESSED**: the ground this block states above — *"returning the supplied handle would be a
|
|
678
|
+
* second spelling of the caller's own datum"* — is OVERRULED BY NAME, and the sentence stands as text read
|
|
679
|
+
* THROUGH this clause (`RCA-8(d)` ANNOTATE-BESIDE; `DEF-2026-10-02`: no whole-file rewrite). **What it is
|
|
680
|
+
* FOR, declared because the return has one consumer:** `K-1` ADOPTS the value, which is what
|
|
681
|
+
* `kernel-surface.md` declared all along (*"adopted, never minted by the kernel"*) and what the discarded
|
|
682
|
+
* `constraint@<JSON address>` prefix had replaced. **A caller that ignores the return is unaffected by
|
|
683
|
+
* widening `void → Handle`.**
|
|
473
684
|
*/
|
|
474
|
-
listen(
|
|
685
|
+
listen(handle: Handle, addresses: readonly Address[]): Handle;
|
|
475
686
|
/**
|
|
476
687
|
* Withdraw a watching, and answer `undefined` — a no-op success for every value outside the domain.
|
|
477
688
|
*
|
|
@@ -497,6 +708,17 @@ export interface StoreInstance {
|
|
|
497
708
|
*
|
|
498
709
|
* **Every outside form of either position throws ONE `TypeError`, whose `status` member is ABSENT, and
|
|
499
710
|
* nothing is added, enabled, disabled or otherwise changed.**
|
|
711
|
+
*
|
|
712
|
+
* **⟶ AMENDED 2026-10-24 (`D-25`, verbatim: *"Attempting to overwrite a listener with a constraint or vice
|
|
713
|
+
* versa is rejected"*; `D-29`, verbatim: *"Handle becomes the internal ID"*): THE OVERWRITE IS
|
|
714
|
+
* SAME-KIND ONLY.** The sentence above — *"throws nothing for the mere fact that the pair was held"* — is
|
|
715
|
+
* TRUE AND UNAFFECTED and is now read **SCOPED BY KIND**: a repeated handle of the SAME kind at this act is
|
|
716
|
+
* an overwrite (`D-24`), while **a pair whose `id` equals a LIVE LISTENER'S HANDLE is REJECTED** — it does
|
|
717
|
+
* not overwrite the listener and it does not throw nothing. **The rejection is the surface's one thrown
|
|
718
|
+
* form `{status, message, log}` with the store's `AddressMalformed`**, its `message` naming BOTH SIDES and
|
|
719
|
+
* carrying the shared rule sentence *"a listener and a constraint do not share one"*, and it is taken
|
|
720
|
+
* **after the two positions' class tests and before the held-pair purge and before any store call**, so
|
|
721
|
+
* **no state moves**. `register`'s own direction of the same rule stands at that member (§its own clause).
|
|
500
722
|
*/
|
|
501
723
|
addConstraint(pair: ConstraintPair, constraint: Constraint): ConstraintIdentity;
|
|
502
724
|
/** **THE ENABLE HALF** (`§2.12` item 2 (a) and item 3's `constraintOn` row): `undefined`. **The
|
|
@@ -510,66 +732,41 @@ export interface StoreInstance {
|
|
|
510
732
|
* refused is ACCEPTED**. The `constraint` position's rule is `constraintOn`'s, clause for clause.
|
|
511
733
|
* **Idempotent success where the pair already stands DISABLED.** */
|
|
512
734
|
constraintOff(pair: ConstraintPair, constraint: Constraint): void;
|
|
513
|
-
/** Register `listener` under the opaque `handle`, and answer `undefined` (`surface.md §2.4` item 5 (b)).
|
|
514
|
-
register(handle: Handle, listener: Listener): void;
|
|
515
|
-
/**
|
|
516
|
-
* **THE ORDERING SEAM — `settle(record) -> undefined`** (`surface.md §2.4` item 9; `A116` (D1)–(D2);
|
|
517
|
-
* `PAR-JS-19`): the one member THE KERNEL CALLS and the entry implements, at the two instants of a
|
|
518
|
-
* kernel-driven write — **the adoption at the first call for a record identity**, taken before the write
|
|
519
|
-
* verb (the write in flight is withheld: the in-window invocation set is empty), **and the delivery at
|
|
520
|
-
* the second call for that identity**, taken at the pass's terminal arm (the residue standing in the
|
|
521
|
-
* record's own `pending` member is delivered through this instance's own registry, one invocation per
|
|
522
|
-
* handle, each with the triggering address as its single argument). **Every other form at the record
|
|
523
|
-
* position — absent, `undefined`, `null`, a primitive, a function, a `Proxy`, an identity this instance
|
|
524
|
-
* never adopted — throws THE ORDERING SEAM'S OWN `TypeError`, whose `status` member is ABSENT and whose
|
|
525
|
-
* STRING `message` member is REQUIRED, and changes nothing.**
|
|
526
|
-
*
|
|
527
|
-
* **⟶ CORRECTED 2026-10-17 — THIS CELL ATTRIBUTED THAT `TypeError` TO *"the registration site's own"*
|
|
528
|
-
* FORM AND THAT ATTRIBUTION WAS FALSE** (`DEF-2026-10-16-Q`; `surface.md` §2.5 item 5 (g), the operative
|
|
529
|
-
* reading of the registration site; `§2.4` item 9 (b), landed 2026-10-15 on `A116` (D1), which re-spells
|
|
530
|
-
* the re-spelling this position takes). **THE REGISTRATION SITE ANSWERS A PLAIN `{status, message}` with
|
|
531
|
-
* `status` `AddressMalformed` — a `TypeError` there is a FAILURE** (`register.test.mjs`'s
|
|
532
|
-
* `isRegistrationRefusal`), and **the seam's own form is declared at `§2.4` item 9 (b) and not at item
|
|
533
|
-
* 5**: *"a `TypeError` with its `status` member ABSENT and a STRING `message` member REQUIRED AND NOT
|
|
534
|
-
* FORBIDDEN"* (`§2.5` item 5 (g)'s own record of that re-spelling, whose two dated readings of one
|
|
535
|
-
* phrase it reports and settles by no clause). **SO THE TWO SITES' FORMS ARE NOT ONE FORM, and this
|
|
536
|
-
* member's is the seam's.**
|
|
537
|
-
*
|
|
538
|
-
* **THE RECORD POSITION TAKES THE KERNEL'S OWN `CommitRecord` — `{ attempt, op, triggered, pending }`,
|
|
539
|
-
* FOUR MEMBERS — AND NOT THE STORE'S `WriteRecord`** (`surface.md` `§2.4` item 9 (f)'s *"each with its
|
|
540
|
-
* argument types"* read with item 9's own two-instant table; `PAR-JS-19`'s `supplier` cell; `A116` (D4):
|
|
541
|
-
* *"the carrier `CommitRecord.pending` and its two removal rules unchanged"*). **THE INSTANTS' OWN TABLE
|
|
542
|
-
* NAMES IT: the record is *"the `CommitRecord` `commit` is building"* at instant (a) and *"the SAME record
|
|
543
|
-
* identity"* at instant (b)** (`surface.md` `§2.4` item 9 (a)–(b)). **AND THE STORE'S RECORD IS NOT ONE:
|
|
544
|
-
* `WriteRecord` above is the three-member `{op, watched, triggered}` the `write` member answers with and
|
|
545
|
-
* carries NO `pending` member, `PAR-JS-13` is that record's returned `op` field (`parameter-semantics.md
|
|
546
|
-
* §2.13`) and not the record's own shape, and the kernel's record carries TWO of the store's members
|
|
547
|
-
* VERBATIM beside its own `attempt` identity and its own `pending` member** (`kernel-surface.md §2.1` item
|
|
548
|
-
* 2's *"WHAT IT IS NOT"* clause: *"the `CommitRecord` is the KERNEL'S OWN record and is NOT the store's
|
|
549
|
-
* `WriteResult`"*).
|
|
550
|
-
*
|
|
551
|
-
* **`CommitRecord` IS THE KERNEL'S DECLARED SHAPE AND IS NOT MINTED HERE** (`surface.md` `§2.4` item 9
|
|
552
|
-
* (f) forbids *"a `pending`-shaped record type this unit does not declare"*, and this unit declares none):
|
|
553
|
-
* the type is declared above with the kernel's own four members and cited from its own unit's declaration
|
|
554
|
-
* — `kernel-surface.md §1` item 4's closed record enumeration, `§2.1` item 2 for the record, and
|
|
555
|
-
* `attempt-lifecycle.md §2.4` item 1 for its `AttemptRef` — **and NO named export is added for it or for
|
|
556
|
-
* `settle`.**
|
|
735
|
+
/** Register `listener` under the opaque `handle`, and answer `undefined` (`surface.md §2.4` item 5 (b)).
|
|
557
736
|
*
|
|
558
|
-
*
|
|
559
|
-
*
|
|
560
|
-
|
|
561
|
-
|
|
737
|
+
* **⟶ AND IT REFUSES WHERE A CONSTRAINT'S `id` STANDS AT THE ADDRESS** (`D-25`'s *"vice versa"*; `D-29`):
|
|
738
|
+
* the cross-kind rule's register-side direction, in the surface's **own** thrown form
|
|
739
|
+
* `{status, message, log}` with the store's `AddressMalformed` — **not** the `TypeError` this member's
|
|
740
|
+
* conflict arm carried while a reserved `constraint@` prefix existed to be exempted — taken after the
|
|
741
|
+
* handle's domain and registry tests and **before the registry write and before the re-install `listen`**,
|
|
742
|
+
* so **no state moves**. **The exemption for kernel-prefixed handles is DELETED, not moved**: under `D-22`
|
|
743
|
+
* the kernel's handle is no longer a reserved spelling and under `D-25` **the kernel registers nothing**, so
|
|
744
|
+
* nothing needs to get past the test. */
|
|
745
|
+
register(handle: Handle, listener: Listener): void;
|
|
746
|
+
/** **`removeListener(handle) -> undefined`** — the entry removed WHOLE and its store entries withdrawn; every arm that is not a real removal THROWS (`contract.md §2.7` item 2; `PAR-HL-14`, `PAR-HL-15`). */
|
|
747
|
+
removeListener(handle: Handle): void;
|
|
748
|
+
/** **`removeConstraint(pair) -> undefined`** — the pair, its N address rows, the kernel's registration and the store's home entry all gone; it is the ONE act that deletes an identity (`contract.md §2.7` item 3; `PAR-HL-16`, `PAR-HL-17`). */
|
|
749
|
+
removeConstraint(pair: ConstraintPair): void;
|
|
562
750
|
/**
|
|
563
751
|
* **THE REGISTERED-PAIR READ — `constraints() -> ConstraintPair[]`** (`surface.md §2.4` item 9 (f)'s
|
|
564
752
|
* `constraints` clause of 2026-10-17, items 2–9; `§2.12` item 2-bis; `parameter-semantics.md §2.27` =
|
|
565
|
-
* `PAR-JS-27
|
|
566
|
-
*
|
|
567
|
-
*
|
|
753
|
+
* `PAR-JS-27`**) — **one of the FOURTEEN own members, `10 + 1 + 1 + 2 = 14` ✓, the SECOND of the two
|
|
754
|
+
* remaining singles** (`docs/specs/storeroom-held-listener-identity/contract.md §2.7` item 9 — the
|
|
755
|
+
* member-set clause of 2026-10-19, which moves the figure `12 → 14`). **⟶ AND THE FIGURE THAT STOOD HERE WAS
|
|
756
|
+
* *"THE TWELVE own members, `10 + 1 + 1 = 12`"*, read from `surface.md §2.4` item 9 (f)'s clause of
|
|
757
|
+
* 2026-10-18, `13 → 12`: THAT READING IS SUPERSEDED — the two remove members `removeListener(handle)` and
|
|
758
|
+
* `removeConstraint(pair)` are the `+ 2`** (`P: docs/pending.md · (AA-5)`, verbatim: *"the member set is 14
|
|
759
|
+
* and the `12 → 13` figure is withdrawn by name"*; `DEF-2026-10-02`: no whole-file rewrite). **AND THIS
|
|
760
|
+
* MEMBER'S OWN SIBLING AMONG THE NON-STORE-REACHING MEMBERS IS `register` ALONE FROM THAT DATE
|
|
761
|
+
* (2026-10-18)**: the sentence that read *"beside `register` and `settle`"* is re-spelled at its own bytes,
|
|
762
|
+
* and this is the operative reading — **and it is NOT read as a count of the fourteen-member set's
|
|
763
|
+
* classes, because no clause of this file asserts which members make up that class** (`contract.md §2.7`
|
|
764
|
+
* items 2–5 for the two new members' own clauses; `§2.7` item 9).
|
|
568
765
|
*
|
|
569
766
|
* **THE RECEIVER IS THE STORE, THE CALL TAKES NO ARGUMENT (arity `0`) AND IT THROWS NOTHING**: there is no
|
|
570
767
|
* outside argument for the class test to refuse, and the call makes NO STORE CALL, MINTS NO CODE, APPENDS
|
|
571
768
|
* NO JOURNAL ENTRY AND CHANGES NO NODE — so this member is one of the product's NON-STORE-REACHING members
|
|
572
|
-
*
|
|
769
|
+
* and `§2.4` item 9 (f)'s rule (ii) has no subject at it.
|
|
573
770
|
*
|
|
574
771
|
* **WHAT IS RETURNED, EXACTLY — THE PAIRS AND NOT THE FUNCTIONS:** a **FRESH JS ARRAY on every call**,
|
|
575
772
|
* whose **every element is a FRESH plain object carrying EXACTLY TWO MEMBERS** — `address` (a fresh array of
|
|
@@ -604,6 +801,12 @@ export interface StoreInstance {
|
|
|
604
801
|
* registration — at the batch loop or at `addConstraint` — leaves the entry exactly as it stood and does not
|
|
605
802
|
* appear. **An overwrite changes no membership**: a second `addConstraint` at a held pair replaces the
|
|
606
803
|
* function at the SAME pair and returns the SAME identity, so the pair is carried ONCE before and after.
|
|
804
|
+
* **⟶ AMENDED 2026-10-24 (`D-26` item 4; `D-27` item 1): THE BATCH HALF OF THAT EXCLUSION HAS NO PRODUCER
|
|
805
|
+
* AND IS READ THROUGH THIS CLAUSE.** A `cfg.constraints` element **must** carry its function, and the batch
|
|
806
|
+
* **arms** it (`D-27`: *"Functions are armed"*), so *"a well-formed `cfg.constraints` element that carried no
|
|
807
|
+
* function"* is an element the construction now REFUSES under `ConstraintListInvalid` **before any
|
|
808
|
+
* filesystem act** — and the exclusion above stands for **the add route's refused registration alone**, and
|
|
809
|
+
* for a pair whose function was never supplied by any route.
|
|
607
810
|
*
|
|
608
811
|
* **IT ADDS NO POPULATION ROUTE** (`§2.12` item 2-bis): the two routes stand at TWO, and a read closes none
|
|
609
812
|
* and opens none. **It is NOT a `pending()` reader, NOT an `attempts()` enumerator and NOT a live view of a
|
|
@@ -612,7 +815,7 @@ export interface StoreInstance {
|
|
|
612
815
|
* **AND IT MOVES NO OTHER FIGURE**: the module namespace keeps its ONE name `storeCreate` (`§2.9` item 1's
|
|
613
816
|
* `A127` clause, `11 → 1` ✓), the kernel's extent stays FIVE with no `K-6` proposed (`§2.4` item 9 (f),
|
|
614
817
|
* item 8 — the pairs are read from the entry's OWN registry, which is keyed exactly as the kernel's is), the
|
|
615
|
-
* store's closed `
|
|
818
|
+
* store's closed `17`-member set is not reached, the kernel's `KC` set stands closed at `8`, and the register
|
|
616
819
|
* keeps its `8` rows.
|
|
617
820
|
*
|
|
618
821
|
* **It is NOT a named export of this entry** (`package.md §1.3` item 3): it is reached through
|
|
@@ -650,7 +853,21 @@ export function storeCreate(cfg: StoreConfig): StoreInstance;
|
|
|
650
853
|
* the element**, so no third member is declared here and this interface is left exactly as it stood.
|
|
651
854
|
*/
|
|
652
855
|
export interface ConstraintPair {
|
|
653
|
-
|
|
856
|
+
/**
|
|
857
|
+
* **THE ADDRESS MEMBER'S TYPE MOVES.** At the CREATION act it is a single address (`constraint-identity.md
|
|
858
|
+
* §6`'s pair table: *"and, at the REGISTRATION act, a single address"*); on the READ and at the REMOVAL it
|
|
859
|
+
* is the pair's own SET (`P: docs/pending.md · P-7`'s answer clause: *"1. (one id, N addresses)"*;
|
|
860
|
+
* `contract.md §2.6` item 5; `PAR-HL-13`).
|
|
861
|
+
*/
|
|
862
|
+
readonly address: Address | readonly Address[];
|
|
863
|
+
/**
|
|
864
|
+
* **THE PAIR'S `id` — WHICH IS ITS HANDLE, ONE `id` NAMING ONE PAIR, ONE IDENTITY AND ONE HANDLE**
|
|
865
|
+
* (`D-23`/`D-24`, and `D-29`'s *"Handle becomes the internal ID"*, verbatim). **⟶ AND THE SENTENCE THE PAIR
|
|
866
|
+
* HAS CARRIED SINCE 2026-10-17 — *"two pairs at two addresses are TWO pairs"* — IS READ THROUGH THIS
|
|
867
|
+
* CLAUSE: the pair-local reuse of one `id` at two addresses is NO LONGER LAWFUL**, because a handle is
|
|
868
|
+
* INSTANCE-SCOPED and a repeated handle is REJECTED in one supplied list (`cfg.constraints`, `D-27`) and an
|
|
869
|
+
* OVERWRITE at the add route (`D-24`). **THE SHAPE IS UNCHANGED — NO FIELD IS ADDED** (`D-24` item 1).
|
|
870
|
+
*/
|
|
654
871
|
readonly id: string;
|
|
655
872
|
}
|
|
656
873
|
|