provident-storeroom 1.7.0 → 1.9.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/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
@@ -789,6 +810,19 @@ export interface CommitRecord {
789
810
  * **ITS ELEMENT TYPE IS TOTAL — NO BARE HANDLE STANDS IN IT** (`contract.md §2.5` item 2): the bare-handle
790
811
  * union the check-off and the discard once carried has no subject under POP, because the checked-off entry
791
812
  * is REMOVED rather than carried beside.
813
+ *
814
+ * **⟶ RE-DERIVED 2026-11-01 — `D-104`: THE SEED ABOVE IS NOT THE MEMBER'S WHOLE POPULATION ON A REPAIRED
815
+ * WRITE, AND NO TYPE, MEMBER OR ARITY MOVES WITH THIS CLAUSE** (`docs/L1/repair-listener-delivery.md` §4, §8;
816
+ * `strata/decisions.md` · `D-104` item `2`, whose item `4` fixes *"no status, no member, no arity, no type may
817
+ * move"*). The clause above stands BYTE-FOR-BYTE and is read THROUGH this one: `pending` is still seeded as a
818
+ * clone of `triggered` and still holds *"the whole returned set of triggered constraints"* **as its seed**, and
819
+ * from this date **A REPAIR'S WRITE'S TRIGGERED LISTENERS ARE MERGED INTO IT** — in the commit's one delivery,
820
+ * after the pass, one invocation per distinct handle — so **an entry may also be a listener a REPAIR's edit
821
+ * fired and the commit's own write never returned**. **`triggered` is unmoved**: it stays the store's own
822
+ * returned set for the commit's write, VERBATIM, so `pending` is no longer a subset of it on a repaired write.
823
+ * **THE ELEMENT SHAPE IS THE ONE ABOVE, UNCHANGED** (`{ handle, address }` — `contract.md §2.5` item 2's
824
+ * totality stands), and **a pair is never merged**: a carried pair's handle stays out of the member exactly as
825
+ * it is never delivered (`D-69`).
792
826
  */
793
827
  readonly pending: readonly TriggerPair[];
794
828
  }
@@ -880,7 +914,7 @@ export interface StoreInstance {
880
914
  * **AND A SUPPLIED `undefined` AT THE `tier` POSITION IS PRESENT HERE TOO** (`parameter-semantics.md
881
915
  * §2.6`; `PAR-JS-6`): it is not the absent tier and the store answers `AddressMalformed` for it.
882
916
  */
883
- write(address: Address, tier: Tier, value: unknown, commit?: CommitRecord): WriteRecord;
917
+ write(address: Address, tier: Tier, value: unknown, commit?: CommitCarrier): WriteRecord;
884
918
  /**
885
919
  * Remove the versions the address names, and answer the operation's record.
886
920
  *
@@ -1249,6 +1283,12 @@ export interface ConstraintPair {
1249
1283
  * WRITE'S OWN EVALUATION a `message` that is not a NON-EMPTY STRING keeps the repair readable while the
1250
1284
  * refusal answers the kernel's own unrecognized sentence** (the closed set, its order and this read stand at
1251
1285
  * `bindings/js/src/entry/kernel-attempt.mjs:686-699`).
1286
+ * **⟶ RE-ANCHORED, 2026-11-01, `RCA-8(g)`: THE CITATION ABOVE NO LONGER RESOLVES TO ITS SUBJECTS AND IS READ
1287
+ * THROUGH THIS MARK.** **`bindings/js/src/entry/kernel-attempt.mjs:686-699` stands today as the body-throw arm's
1288
+ * terminal entry and its mark — `:687`-`:698` — and the two subjects this sentence cites it FOR stand at
1289
+ * `:705`-`:727` (the closed three-arm read) and `:718`-`:724` (the own-member read of `message` and `repair`).**
1290
+ * **The citation's bytes stand and are unmoved; its RANGE is the reading of the date it was written at, and
1291
+ * `D-90` · `D-91` · `D-94` are the landings that moved it** (`docs/L1/repair-outcome-types.md` §7.2 row `1`).
1252
1292
  *
1253
1293
  * **THE ATTACH: the `repair` your function returns IS A FUNCTION TAKING ONE ARGUMENT — ITS OWN RECORD,
1254
1294
  * WHICH IS NOT YOUR CONSTRAINT'S AND IS NOT INTERCHANGEABLE WITH IT.** **The two records stand apart at
@@ -1257,6 +1297,18 @@ export interface ConstraintPair {
1257
1297
  * (`bindings/js/src/entry/kernel-attempt.mjs:607-613`, `:756-782`; the kernel's own words at
1258
1298
  * `bindings/js/src/entry/kernel-registration.mjs:373-374`). **No member census of either record is
1259
1299
  * printed here.**
1300
+ * **⟶ RE-ANCHORED, 2026-11-01, `RCA-8(g)`: THE CITATION ABOVE — `bindings/js/src/entry/kernel-attempt.mjs:607-613`,
1301
+ * cited for the CONSTRAINT's record — stands today on the pair-application guard's clause (`:631`), and the
1302
+ * constraint's record build stands at `:635`-`:641`.** **The citation's bytes stand and are read through this
1303
+ * mark** (§7.2 row `5`).
1304
+ * **⟶ RE-ANCHORED, 2026-11-01, `RCA-8(g)`: THE CITATION ABOVE — `bindings/js/src/entry/kernel-attempt.mjs:756-782`,
1305
+ * cited for the REPAIR's record — stands today on the repeat arms' returns, and the repair's record build stands
1306
+ * at `:784`-`:810`.** **The citation's bytes stand and are read through this mark** (§7.2 row `6`).
1307
+ * **⟶ RE-ANCHORED, 2026-11-01, `RCA-8(g)`: THE CITATION ABOVE —
1308
+ * `bindings/js/src/entry/kernel-registration.mjs:373-374`, cited as *"the kernel's own words"* on the two records
1309
+ * — stands today on the `{message}` sentence of the registration instant's outcome read, and the kernel's own
1310
+ * statement of the two records stands at `:420`-`:424`.** **The citation's bytes stand and are read through this
1311
+ * mark** (§7.2 row `4`).
1260
1312
  *
1261
1313
  * **AT THE WRITE'S OWN EVALUATION — AT THAT INSTANT AND NO OTHER — THE KERNEL READS `message` AND
1262
1314
  * `repair` AS OWN MEMBERS OF THE OBJECT YOUR FUNCTION RETURNED: a pair carried on a prototype is NOT SEEN
@@ -1268,6 +1320,14 @@ export interface ConstraintPair {
1268
1320
  * at registration and no repair at a write — and that divergence is OWED to a code-bearing unit and is
1269
1321
  * CONTRADICTED BY NO SENTENCE HERE** (`strata/decisions.md` · `D-35`, whose parameter-access rule the
1270
1322
  * registration read does not yet hold).
1323
+ * **⟶ RE-ANCHORED, 2026-11-01, `RCA-8(g)`: THE CITATION ABOVE — `bindings/js/src/entry/kernel-attempt.mjs:690-696`
1324
+ * — stands today INSIDE the same body-throw arm's mark clause (`:691`-`:698`), and the rule it is cited for — the
1325
+ * own-member read of `message` and `repair` — stands at `:718`-`:724`.** **The citation's bytes stand and are read
1326
+ * through this mark** (§7.2 row `2`).
1327
+ * **⟶ RE-ANCHORED, 2026-11-01, `RCA-8(g)`: THE CITATION ABOVE —
1328
+ * `bindings/js/src/entry/kernel-registration.mjs:330-332` — stands today on the skip-is-not-a-refusal clause, and
1329
+ * the registration instant's outcome read — the one that reads the same closed outcome through the prototype
1330
+ * chain — stands at `:377`-`:380`.** **The citation's bytes stand and are read through this mark** (§7.2 row `3`).
1271
1331
  *
1272
1332
  * **THE REPAIR'S OWN RETURN IS A CLOSED TWO-ARM SET: `{ ok: true, op }` — the repairable arm, `op`
1273
1333
  * REQUIRED and BEING THE OPERATION RECORD THE STORE'S OWN VERB RETURNED (`WriteRecord.op`, or
@@ -1284,20 +1344,48 @@ export interface ConstraintPair {
1284
1344
  * `bindings/js/src/entry/kernel-foundations.mjs:1105-1131` — **and NO ORDINAL GROUND IS CLAIMED AT THE
1285
1345
  * REGISTRATION INSTANT, whose credit check runs with no invoked-for op**
1286
1346
  * (`bindings/js/src/entry/kernel-registration.mjs:510-517`).
1347
+ * **⟶ RE-ANCHORED, 2026-11-01, `RCA-8(g)`: THE CITATION ABOVE — `bindings/js/src/entry/kernel-registration.mjs:510-517`
1348
+ * — stands today on the synthetic attempt's nine-member docblock, and the credit call this sentence is about — the
1349
+ * one that runs with NO invoked-for op — stands at `:615`-`:616`.** **The citation's bytes stand and are read
1350
+ * through this mark** (`docs/L1/repair-outcome-types.md` §7.2 row `7`).
1287
1351
  *
1288
1352
  * **AND THE COMMIT YOUR REPAIR IS PART OF RIDES THAT ONE ARGUMENT: supply it at `write`'s DECLARED FOURTH
1289
1353
  * POSITION and the write your repair makes JOINS the commit it is part of**
1290
1354
  * (`bindings/js/index.d.ts:862`) — **the record the repair is handed carries that commit at its `pending`
1291
1355
  * member, the `CommitRecord.pending` this file declares at `bindings/js/index.d.ts:772`, POINTED AT here
1292
1356
  * and re-declared nowhere.** **That position's own class test is not restated.**
1357
+ * **⟶ RE-ANCHORED, 2026-11-01, `RCA-8(g)`: THE CITATION ABOVE PRINTS THIS FILE'S `:772`, WHICH WAS THE LINE AT THE
1358
+ * DATE IT WAS WRITTEN AND IS NOW MOVED TWICE OVER.** **At this date's bytes the `CommitRecord` docblock's `op`
1359
+ * sentence — the line `:772` stood on — stands at `:793`, and the `pending` member that sentence names is declared
1360
+ * at `:814` (`readonly pending: readonly TriggerPair[]`).** **THE TWO MOVES ARE DISTINCT AND NEITHER REWRITES THE
1361
+ * CITATION: the first is that block's own growth, which is why the figure was stale before this pass; the second is
1362
+ * THIS DATE'S MARKS — the head's and this record's block's — which stand above both lines.** **The citation's bytes
1363
+ * stand and are read through this mark; the typing pass's six names sit BELOW this block and moved no line above it
1364
+ * (`1,308 → 1,466` is that pass's own count), and the eight marks of this date are the only bytes this docs pass
1365
+ * adds inside the block** (§7.2 row `8`).
1366
+ * **AND THE SAME PARAGRAPH'S OTHER SELF-CITATION — `bindings/js/index.d.ts:862`, which is NOT one of §7.2's eight
1367
+ * rows and is therefore not one of this date's subjects — is moved by these marks nevertheless: the admitted forms
1368
+ * and the class test of that position stand at `:883`, and the position's own signature — with `commit?` typed as
1369
+ * `CommitCarrier` — at `:904`.**
1293
1370
  *
1294
1371
  * **AND NOTHING HERE MINTS A TYPE, A SYMBOL, AN ALIAS, A SEAM, A RECORD MEMBER OR AN EXPORT**: this clause
1295
1372
  * DOCUMENTS the pair your function returns and a two-arm result the kernel already reads, and DECLARES
1296
1373
  * nothing — `Constraint` below is unmoved, one `unknown` in and one `unknown` out. **Nor does it name an
1297
1374
  * archived part as the place its rule is to be read: the rule IS the sentences above, and every point they
1298
1375
  * cite is a live print of the kept contract or a live source range on this branch.**
1376
+ *
1377
+ * **⟶ RE-DERIVED BY NAME, 2026-11-01: THE SENTENCE ABOVE NO LONGER GOVERNS, AND IT IS NOT DELETED — IT IS READ THROUGH THIS
1378
+ * CLAUSE AS THE READING OF ITS OWN DATE.** The architect has approved minting the types that sentence declined, so what stands
1379
+ * now is: **FIVE NAMES ARE DECLARED BELOW THIS LINE — `AttemptContext` · `RepairContext` · `RegistrationRepairContext` ·
1380
+ * `ConstraintOutcome` · `RepairOutcome` — and `Constraint` below is TYPED rather than unmoved.** **EVERY MEMBER THEY CARRY IS ONE
1381
+ * THE KERNEL ALREADY BUILDS, AND NOTHING IS MINTED BUT THE NAMES**: no member, no symbol, no seam, no export, no route and no
1382
+ * arity moves, the module namespace keeps its ONE value name, and the closed sets these names carry are the ones this clause
1383
+ * already declares. **AND THE CENSUS SENTENCE ABOVE — *"No member census of either record is printed here"* — IS TRUE OF THIS
1384
+ * CLAUSE AND IS READ THROUGH THIS ONE: the census is DECLARED at the aliases below, in the only place a consumer's compiler can
1385
+ * hold it, and this clause still prints none.** **NO BEHAVIOUR BYTE MOVES: the aliases are erased at run time and the kernel
1386
+ * reads the same values it read on 2026-10-30.**
1299
1387
  */
1300
- export type Constraint = (context: unknown) => unknown;
1388
+ export type Constraint = (context: AttemptContext) => ConstraintOutcome;
1301
1389
 
1302
1390
  /**
1303
1391
  * **THE CONSTRAINT IDENTITY — `parameter-semantics.md §2.25` (`PAR-JS-25`)**: ONE OPAQUE VALUE THE PACKAGE
@@ -1306,3 +1394,174 @@ export type Constraint = (context: unknown) => unknown;
1306
1394
  * accessor reaches a member of it, and a consumer compares identities and never contents.**
1307
1395
  */
1308
1396
  export type ConstraintIdentity = object;
1397
+
1398
+ /**
1399
+ * **THE ATTEMPT'S OWN CONTEXT — THE ONE ARGUMENT A CONSTRAINT BODY IS INVOKED WITH** (`PAR-C-16`; the record this
1400
+ * file's `Constraint` docblock calls *"the attempt's own context"*), declared at
1401
+ * `docs/L1/repair-outcome-types.md` §1.1 of 2026-11-01. **THE NAME IS THE TREE'S OWN**: the kernel calls this
1402
+ * record `AttemptContext` (`bindings/js/src/entry/kernel-registration.mjs:421`, `:428`;
1403
+ * `kernel-attempt.mjs:483`) and so does this file at `:450`.
1404
+ *
1405
+ * **FIVE MEMBERS AND NO SIXTH: `address` · `attempt` · `op` · `tier` · `value`, and no other.** **THIS RECORD GAINS
1406
+ * NOTHING AT ANY INSTANT** — no `id`, no `pending` and no `write` (`strata/decisions.md` · `D-92` (1)) — **and its
1407
+ * census is printed HERE, because this is the only place a consumer's compiler can hold it** (the `Constraint`
1408
+ * docblock above prints none, and says so).
1409
+ *
1410
+ * **ONE MEMBER SET ACROSS THE THREE SITES THAT BUILD IT, AND THE SITE — NOT THE INSTANT — DECIDES THE VALUE.**
1411
+ * Built at the write's own evaluation (`kernel-attempt.mjs:635`-`:641`), at a registration's FIRST ask
1412
+ * (`kernel-registration.mjs:392`-`:403`) and at a registration's RE-RUN (`:728`-`:734`); only three members' VALUES
1413
+ * move, and the nullable arms are the FIRST ask's — `attempt`, `op` and `tier` are the LANDING's at the other two.
1414
+ * **SO A CONSUMER NARROWS `op` BEFORE READING IT**: at a landing and at a re-run `op` is never `null`, and that
1415
+ * narrowing is the declared price of one member set, printed rather than discovered (§1.1; §2's alternative `D`).
1416
+ */
1417
+ export interface AttemptContext {
1418
+ readonly address: Address;
1419
+ readonly attempt: AttemptRef | null;
1420
+ readonly op: JournalOp | null;
1421
+ readonly tier: Tier | null;
1422
+ readonly value: unknown;
1423
+ }
1424
+
1425
+ /**
1426
+ * **THE REPAIR'S OWN RECORD — THE SIX-MEMBER `RepairContext`, THE ONE ARGUMENT THE KERNEL INVOKES A REPAIR WITH**,
1427
+ * built at the write's own evaluation (`bindings/js/src/entry/kernel-attempt.mjs:784`-`:810`) and declared at
1428
+ * `docs/L1/repair-outcome-types.md` §1.2 of 2026-11-01. **THE NAME IS THE KERNEL'S OWN** — *"the six-member
1429
+ * `RepairContext`"* (`kernel-registration.mjs:416`, `:421`) — and this alias IS that shape.
1430
+ *
1431
+ * **SIX MEMBERS: `address` · `id` · `op` · `tier` · `value` · `pending`. THE TWO RECORDS STAND APART AT THREE
1432
+ * PLACES** (the `Constraint` docblock above; `docs/guides/package-use.md §7.6`): **by COUNT, SIX against
1433
+ * `AttemptContext`'s FIVE; by `id`, which this record carries where the constraint's carries `attempt`; and by
1434
+ * `pending`, which rides this record ALONE.**
1435
+ *
1436
+ * **`op`'s `| null` ARM IS THE REGISTRATION'S, DECLARED ONCE BECAUSE THE SHAPE IS ONE SHAPE**: at this instant `op`
1437
+ * is the op the evaluation carried and is never `null`. **`pending` IS A FRESH LIST AND NEVER THE RECORD'S OWN
1438
+ * MEMBER** (`kernel-attempt.mjs:806`-`:809`); **`id`'s NON-EMPTINESS IS `PAR-JS-24`'s PROSE RULE and no type carries
1439
+ * it** (the same class of limit as `Handle`); **and the commit a repair is inside rides that `pending`, so the write
1440
+ * a repair makes JOINS the commit it is part of** — supplied at `write`'s DECLARED FOURTH POSITION (`D-46`).
1441
+ */
1442
+ export interface RepairContext {
1443
+ readonly address: Address;
1444
+ readonly id: string;
1445
+ readonly op: JournalOp | null;
1446
+ readonly tier: Tier | null;
1447
+ readonly value: unknown;
1448
+ readonly pending: readonly TriggerPair[];
1449
+ }
1450
+
1451
+ /**
1452
+ * **THE REPAIR'S RECORD AT A REGISTRATION INSTANT — THE SAME SIX AND THE ROUTE THE REGISTRATION ADDS: SEVEN.**
1453
+ * Built at `bindings/js/src/entry/kernel-registration.mjs:447`-`:460`, with the route at `:492`-`:503`, and declared
1454
+ * 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
1455
+ * member of the shared shape can drift between the two instants.**
1456
+ *
1457
+ * **`write` IS EXACTLY THE STORE'S FIRST THREE POSITIONS — `(address, tier, value) => WriteRecord` — AND THE COMMIT
1458
+ * IS NOT A POSITION OF IT**: the write joins the registration's own commit (`D-91` (2)), and a supplied fourth is
1459
+ * REFUSED BEFORE ANY STORE ACT (`kernel-registration.mjs:492`-`:503`). **So the instance's
1460
+ * `write(address, tier, value, commit?)` and this route's three positions are TWO positions and never one spelling.**
1461
+ *
1462
+ * **THE CONSTRAINT'S RECORD GAINS NOTHING AT ANY INSTANT** (`D-92` (1)): `AttemptContext` carries neither `write` nor
1463
+ * `pending`, and **the seventh member's PRESENCE is the discriminator the kernel itself uses, so `'write' in rc` is
1464
+ * the narrowing a repair has**. **AND A BODY ANNOTATED WITH THIS SEVEN-MEMBER ALIAS IS REFUSED** — the position's
1465
+ * parameter is `RepairContext | RegistrationRepairContext` — **so the lawful spellings are `RepairContext`, that
1466
+ * union narrowed with `'write' in`, or no annotation at all.**
1467
+ */
1468
+ export interface RegistrationRepairContext extends RepairContext {
1469
+ readonly write: (address: Address, tier: Tier, value: unknown) => WriteRecord;
1470
+ }
1471
+
1472
+ /**
1473
+ * **WHAT A CONSTRAINT BODY ANSWERS — THE CLOSED THREE-ARM SET**, read in this order at the write's own evaluation
1474
+ * (`bindings/js/src/entry/kernel-attempt.mjs:705`-`:727`) and declared at `docs/L1/repair-outcome-types.md` §1.4 of
1475
+ * 2026-11-01: **`true` — THE ONLY PASS VALUE**; **`{ message, repair }` — A REPAIRABLE VIOLATION**; **`{ message }` —
1476
+ * AN UNREPAIRABLE VIOLATION**, its `message` the refusal's own sentence.
1477
+ *
1478
+ * **A VALUE OUTSIDE THE THREE IS READ AS THE `{ message }` ARM AND NEVER AS A FOURTH ARM**, so a return invented
1479
+ * beyond them declares an outcome this kernel does not distinguish — **and a return carrying only `repair` is that
1480
+ * outside value, whose repair IS NEVER SEEN** (`kernel-attempt.mjs:718`-`:724`).
1481
+ *
1482
+ * **`message` IS REQUIRED ON THE REPAIR ARM BECAUSE THE KERNEL READS IT FIRST**, and the repair is looked for only
1483
+ * inside that branch. **THE TYPE DECLARES THE SHAPE AND NEVER THE READ**: at the write's own evaluation `message` and
1484
+ * `repair` are read as OWN members, while at a registration instant the same closed outcome is read through the
1485
+ * prototype chain (`kernel-registration.mjs:377`-`:380`) — **ONE RETURNED SHAPE ANSWERING TWO DIFFERENT THINGS AT THE
1486
+ * TWO INSTANTS, which is `D-35`'s recorded defect and is OWED to a code-bearing unit**, and nothing here is read as
1487
+ * symmetric. **Nor does the type carry `message`'s NON-EMPTINESS or the repair's invocability beyond `function`.**
1488
+ */
1489
+ export type ConstraintOutcome =
1490
+ | true
1491
+ | {
1492
+ readonly message: string;
1493
+ readonly repair: (
1494
+ context: RepairContext | RegistrationRepairContext,
1495
+ ) => RepairOutcome;
1496
+ }
1497
+ | { readonly message: string };
1498
+
1499
+ /**
1500
+ * **WHAT A REPAIR ANSWERS — THE CREDITED ARM, THE FAILED ARM, AND `void`**, read at
1501
+ * `bindings/js/src/entry/kernel-attempt.mjs`'s repair arm and **RE-DERIVED 2026-11-01 by `D-105`**
1502
+ * (`strata/decisions.md` · `D-105` item `1`; `docs/L1/op-free-repair-credit.md` §6.1). **THE SENTENCES THIS CLAUSE
1503
+ * SUPERSEDES ARE NAMED RATHER THAN OVERWRITTEN** (`RCA-8(g)` ANNOTATE-BESIDE): *"`op` IS REQUIRED ON THE CREDITED
1504
+ * ARM, THE ARM IS CLOSED, AND `undefined` IS NOT ONE OF THE TWO — so a repair answering `undefined` or a bare
1505
+ * `{ ok: true }` is a COMPILE ERROR instead of a `ConstraintPassRefused`"* (`docs/L1/repair-outcome-types.md` §1.5
1506
+ * of 2026-11-01). **THE RULING, VERBATIM: *"A repair that does its write and returns `undefined` — the natural
1507
+ * shape of `repair: () => { … }` — is NOT refused"***, **so the credited arm is `undefined` · `{ ok: true }` ·
1508
+ * `{ ok: true, op }` — three spellings of ONE arm — and `void` is what the body answers when it has no opinion.**
1509
+ * **`ST-F2`'s measured defect is CLOSED BY CARRIER and not by text.**
1510
+ *
1511
+ * **THE CREDITED ARM: `{ ok: true, op? }`, `op` OPTIONAL AND INFORMATIONAL** — the store's own journal record
1512
+ * where a body cares to hand it back, reached by INDEXED ACCESS (`WriteRecord['op']`) so **NO SECOND CARRIER IS
1513
+ * MINTED**. **NO READER IN THE KERNEL READS IT**: the credit is the FAILING PAIR's mark (`attempt.appliedRepairs`),
1514
+ * the op the attempt pins is the repair's write's OWN LEG (`D-105` item `2`), and the re-run's value is that leg's
1515
+ * `op.after.value` — the returned `op` sets no pin, joins no list, becomes no landing and is named by no sentence.
1516
+ * **`op` ADMITS `null`** because the member is informational: `DeleteRecord['op']`'s declared `null` arm — a
1517
+ * `delete` that removed nothing — costs a consumer nothing, and nothing is refused for it.
1518
+ * **THE FAILED ARM IS UNMOVED: `{ ok: false, message }` — `op` ABSENT AND NEVER `null`** — and it is the ONLY
1519
+ * return that fails the attempt (`D-105` item `4`: *"The failed arm still fails (`{ok: false, message}` — the
1520
+ * caller's words)"*, `bindings/js/src/entry/kernel-attempt.mjs`'s `(d1)`).
1521
+ *
1522
+ * **THE TYPE STAYS NARROWER THAN THE RUNTIME, ON PURPOSE, AND THE GAP IS DECLARED RATHER THAN CLOSED.** The runtime
1523
+ * CREDITS `true`, `false`, `7`, `'done'`, `{ ok: 'yes' }`, `{ ok: false }` WITHOUT A MESSAGE and
1524
+ * `{ ok: true, op: <a whole WriteRecord> }`; **this alias admits none of them** — it declares the shape a consumer
1525
+ * SHOULD return, and the runtime declines to judge what a consumer DOES return. **`{ ok: false }` with no message
1526
+ * is named on both sides deliberately**: the runtime credits it (the declared failed arm needs a non-empty
1527
+ * `message`) and the type refuses it. **THE MIRROR IMAGE OF `CommitCarrier`'s PRINTED LIMIT BELOW**: there an
1528
+ * inherited `pending` and a `Proxy` pass the type and the run-time refusal keeps the position's domain; **here the
1529
+ * RUNTIME IS THE WIDER SIDE — THE TYPE DECLINES, THE RUNTIME CREDITS, AND NOTHING HERE PROMISES THAT A GREEN
1530
+ * COMPILE IS A CREDIT OR THAT A REFUSED COMPILE IS A REFUSAL.** `exactOptionalPropertyTypes` is not set in either
1531
+ * `tsconfig` head, so `{ ok: true, op: undefined }` type-checks as written — a property of the config heads and
1532
+ * not of this alias.
1533
+ *
1534
+ * **THE GROUND IS PROSE AND IS POINTED AT, NEVER RE-SPELLED HERE** (`bindings/js/src/entry/kernel-foundations.mjs`'s
1535
+ * `landedOp`, whose ONE remaining caller is the registration instant — `kernel-registration.mjs:616` — and whose
1536
+ * ordinal ground RETIRES on the write path, `docs/L1/op-free-repair-credit.md` §4 `RB-4`).
1537
+ * **A green compile is not evidence of a credit**, and a returned `op` is read as an OWN member — a distinction
1538
+ * structural typing cannot make. **NO NAME IS MINTED: this declaration adds `0` types.**
1539
+ */
1540
+ export type RepairOutcome =
1541
+ | void
1542
+ | { readonly ok: true; readonly op?: WriteRecord['op'] | null }
1543
+ | { readonly ok: false; readonly message: string };
1544
+
1545
+ /**
1546
+ * **THE WRITE'S COMMIT POSITION AND ITS CLASS TEST — ONE MEMBER, `pending`, SPELLED EXACTLY AS `CommitRecord.pending`
1547
+ * SPELLS IT** (`:793`), so **no second TYPE is minted: what is minted is the NAME the class test's class never had**.
1548
+ * Declared at `docs/L1/repair-outcome-types.md` §8's `Q-1` clause of 2026-11-01 (`strata/decisions.md` · `D-101`,
1549
+ * verbatim: *"Widen the position to its class test"*), and **exported because a position's type no consumer can
1550
+ * annotate is the `ST-F2` gap in a new place**: the carrier is the one value a consumer CONSTRUCTS at a position
1551
+ * rather than receives.
1552
+ *
1553
+ * **THE KERNEL READS A MEMBER'S PRESENCE AND NEVER ITS MEMBER COUNT** — an OWN, defined `pending` on a non-null,
1554
+ * non-Proxy, non-array object (`bindings/js/src/entry/delivery.mjs:27`-`:54`, the predicate at `:39`) — **so
1555
+ * `CommitRecord` is ONE CARRIER of this class and not the position's only type; it keeps every byte, its four
1556
+ * members and its export.** **A REPAIR'S OWN `RepairContext` IS A CARRIER TOO**, which is why the guide's
1557
+ * four-position spelling type-checks as written (`D-46`; `docs/guides/package-use.md §7.6`).
1558
+ *
1559
+ * **WHAT NO GREEN HERE PROVES, PRINTED BECAUSE THE CLASS TEST IS THE DOMAIN'S KEEPER**: an INHERITED `pending`
1560
+ * (`Object.hasOwn` refuses it at run time) and a `Proxy` (`types.isProxy` refuses it before any member read) are both
1561
+ * admitted by the type, and **`commit?` admits a SUPPLIED `undefined`, which the class test refuses** — the
1562
+ * `?`-cannot-separate limit this file already declares for `read`'s `tier?` (`:131`-`:135`). **THE RUNTIME REFUSAL IS
1563
+ * WHAT KEEPS THE POSITION'S DOMAIN.**
1564
+ */
1565
+ export interface CommitCarrier {
1566
+ readonly pending: readonly TriggerPair[];
1567
+ }
package/index.mjs CHANGED
@@ -90,7 +90,7 @@ import { admittedConstraintBatch, constraintAddress, decodeBaseState, decodeJour
90
90
  // ⟶ `addressSpelling`'s import is DELETED 2026-11-01 with its last two readers (`B-6`'s and `B-4`'s messages,
91
91
  // which now name no address at all — `D-98` §3.4). The function keeps its home and its other readers in the
92
92
  // entry's other parts.
93
- import { FORGET_PAIR, INSTANCES, STORE_INDEX, STORE_RETIREMENT, TERMINAL_ARM, carryRefusal, closeCommit, crossTriggered, currentWindow, entryOf, installAttemptSeam, isStoreReceiver, openCommit, writeRefusal } from './src/entry/state.mjs';
93
+ import { FORGET_PAIR, INSTANCES, STORE_INDEX, STORE_RETIREMENT, TERMINAL_ARM, appendRepairLeg, carryRefusal, closeCommit, crossTriggered, currentWindow, entryOf, installAttemptSeam, isStoreReceiver, openCommit, writeRefusal } from './src/entry/state.mjs';
94
94
  import { commitPositionRefusal, constraintOverwrittenByListen, deliver, installListenRoute, installRegistrationSeam, listenerStandingAt, listenOn, registerOn, terminalArm } from './src/entry/delivery.mjs';
95
95
  import { ARGUMENT_POSITION_FIRST, addressSetKey, carryConstraint, constraintDetached, constraintPairKey, constraintRefuse, constraintSite, constraintUncarried, constraintDelete, constraintWrite, constraintsKernel, currentRaise, defineDiscardWitness, enumerateConstraints, judgeReversal, registrationCrossing, restoreHeldPair, reversalWatch, unionAddressSets, withEmptyLog, witnessDiscardedReversal, witnessRaise, withdrawStanding } from './src/entry/constraints.mjs';
96
96
  const require_ = createRequire(import.meta.url);
@@ -450,6 +450,17 @@ export function storeCreate(cfg) {
450
450
  // stage 2): a kernel-driven write takes the record THIS VERY WRITE returned and not a copy of it, and the
451
451
  // slot is read before the pass that may write again, so a repair's own write can never be mistaken for it.
452
452
  state.leg = record;
453
+ // **⟶ AND THE SAME RECORD'S RETURNED ELEMENTS ARE HANDED TO THE INVOCATION'S OWN LEG LIST — `D-104`,
454
+ // 2026-11-01** (`docs/L1/repair-listener-delivery.md` §3.2, §8's `js-surface` row;
455
+ // `strata/decisions.md` · `D-104` item `3`'s mechanism `(a)`). **THE LEG SLOT IS UNTOUCHED**: its four
456
+ // readers — `delivery.mjs`'s `answer`, the save's gate and the triggering address, and `constraints.mjs`'s
457
+ // `answer` — take no byte, and this line adds no fifth. **AND THE HAND-OVER IS TAKEN AT THIS SEAT ONLY,
458
+ // INSIDE THE `n >= 4` ARM AND NEVER AT THE `n <= 3` ROUTE**: the kernel's store leg is this arm, so a
459
+ // repair's write and a CONSTRAINT body's write are told apart by the KERNEL and not here (§3.1 fact 3) —
460
+ // each appends to the leg list of the invocation it was made inside, and the kernel's repair arm is what
461
+ // reads the latter and not the former. **WITH NO INVOCATION BRACKET STANDING THE APPEND GOES NOWHERE**
462
+ // (`state.mjs`'s `appendRepairLeg`), which is a caller's own write and a direct `K-2` drive's store leg.
463
+ appendRepairLeg(record);
453
464
  // **THE INVOCATION WINDOW** (`docs/specs/storeroom-js/surface.md §2.7` item 2, `DD-22`): the record above is COMPLETE before the window
454
465
  // opens, the invocation is SYNCHRONOUS, it happens AFTER the addon's call returned, and **its ONE
455
466
  // argument is the TRIGGERING ADDRESS** (`PAR-JS-12`).
@@ -468,6 +479,16 @@ export function storeCreate(cfg) {
468
479
  // THE KERNEL TRIGGERS** — `record.pending`'s residue plus the checked-off identities — where the pass has
469
480
  // completed and the discard and the check-off have already decided what the set holds.
470
481
  //
482
+ // **⟶ RE-DERIVED 2026-11-01 — `D-104`: THAT RESIDUE GAINS A THIRD SOURCE, AND THIS SENTENCE ABOVE STANDS
483
+ // BYTE-FOR-BYTE AND IS READ THROUGH THIS CLAUSE** (`docs/L1/repair-listener-delivery.md` §4, §8's
484
+ // `js-surface` row; `strata/decisions.md` · `D-104` item `2`). The sentence above names the residue and the
485
+ // checked-off identities; **from this date a handle the commit's own write never returned may also stand in
486
+ // `record.pending`** — one that a REPAIR's write returned — because the kernel's repair arm MERGES a
487
+ // repair's write's triggered listeners into that member at its own seat, after the credit and before the
488
+ // re-run (`kernel-attempt.mjs`), de-duplicated by `handle` and never a pair's. **`triggered` IS UNMOVED**
489
+ // (it stays the store's own returned set for THIS write, VERBATIM) and **this frame moves no byte**: the one
490
+ // delivery, its one recipient snapshot and its one address are what they were.
491
+ //
471
492
  // **AND A WRITE WHOSE `commit` THE KERNEL DID NOT SUPPLY IS STILL DELIVERED HERE, AT ITS OWN POST-VERB
472
493
  // INSTANT** (`docs/specs/storeroom-js/surface.md §2.7` item 2): that is the `n <= 3` caller path never reaching this frame at all, so THIS
473
494
  // frame is reached only as the kernel's leg and its silence is total. **THE ONE INVOCATION PER DISTINCT
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "provident-storeroom",
3
- "version": "1.7.0",
3
+ "version": "1.9.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.7.0",
45
- "@auspicion/provident-storeroom-js-linux-arm64-gnu": "1.7.0",
46
- "@auspicion/provident-storeroom-js-darwin-x64": "1.7.0",
47
- "@auspicion/provident-storeroom-js-darwin-arm64": "1.7.0",
48
- "@auspicion/provident-storeroom-js-win32-x64-msvc": "1.7.0"
44
+ "@auspicion/provident-storeroom-js-linux-x64-gnu": "1.9.0",
45
+ "@auspicion/provident-storeroom-js-linux-arm64-gnu": "1.9.0",
46
+ "@auspicion/provident-storeroom-js-darwin-x64": "1.9.0",
47
+ "@auspicion/provident-storeroom-js-darwin-arm64": "1.9.0",
48
+ "@auspicion/provident-storeroom-js-win32-x64-msvc": "1.9.0"
49
49
  },
50
50
  "publishConfig": {
51
51
  "access": "public"