provident-storeroom 1.0.1 → 1.1.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 +86 -0
- package/index.d.ts +30 -0
- package/index.mjs +20 -6
- package/package.json +6 -6
- package/src/entry/constraints.mjs +772 -92
- package/src/entry/delivery.mjs +16 -2
- package/src/entry/kernel-attempt.mjs +145 -10
- package/src/entry/kernel-foundations.mjs +67 -0
- package/src/entry/kernel-registration.mjs +64 -10
- package/src/entry/state.mjs +313 -5
package/README.guide.md
CHANGED
|
@@ -30,6 +30,32 @@ pins, `§8.1`'s *"an installed `0.5.0`"*, and `§11`'s manifest table.** **AND T
|
|
|
30
30
|
IS UNMOVED: no `npm install` was run against the registry, so a registry-installed `1.0.0` is described here from
|
|
31
31
|
the manifest and from measurements on this checkout, and is still not witnessed.**
|
|
32
32
|
|
|
33
|
+
**⟶ AND THE FIGURE THAT CORRECTION CARRIES IS ITSELF ONE RELEASE BEHIND, 2026-10-27 — THE VERSION THIS GUIDE
|
|
34
|
+
DESCRIBES IS `1.0.1`, AND EVERY `1.0.0` THIS GUIDE PRINTS READS `1.0.1` FROM HERE ON.** `RCA-8(g)`
|
|
35
|
+
ANNOTATE-BESIDE: **the paragraph above stands BYTE-FOR-BYTE and is read THROUGH this clause — so do its reading of
|
|
36
|
+
`0.5.0` and its reading of `1.0.0`; each was true of the tree it was read on and each is one release behind the
|
|
37
|
+
shipped tree from this date.** **THE MANIFEST AT ITS OWN BYTES: `bindings/js/package.json`'s `version` is
|
|
38
|
+
`"1.0.1"`, and all five `optionalDependencies` pins are `1.0.1` with it** — the six figures move together and never
|
|
39
|
+
singly (§0 item 1; `PUB-DD-10`) — **and the tags the tree carries are `v1.0.0` and `v1.0.1`, with `main` sixteen
|
|
40
|
+
commits past `v1.0.1` and no version bump in any of them** (`git describe` at this date reads `v1.0.1-16-gdf3ef88`;
|
|
41
|
+
`D-41` item `1`'s semver ruling names the next release `1.1.0`, and that release has not been cut). **SO THE SITES
|
|
42
|
+
ARE RE-READ, NOT RE-SPELLED:** §2.2's five exact pins, §8.1's *"an installed `0.5.0`"* — itself already corrected to
|
|
43
|
+
`1.0.0` — and §11's manifest table all read `1.0.1`; **every `0.5.0` this guide prints is the figure of its writing
|
|
44
|
+
date and reads `1.0.1` from here on.** **AND THE ONE THING NO PASS WITNESSED IS STILL UNMOVED: no `npm install` was
|
|
45
|
+
run against the registry, so a registry-installed `1.0.1` is described here from the manifest and from
|
|
46
|
+
measurements on a locally packed, installed artefact, and is still not witnessed as a registry download.**
|
|
47
|
+
|
|
48
|
+
**AND ONE THING A READER OF THE INSTALLED PACKAGE SHOULD KNOW BEFORE THE CITATIONS: WHEN THIS DOCUMENT IS AT
|
|
49
|
+
`node_modules/provident-storeroom/README.guide.md`, IT IS THIS GUIDE.** **Its ONE authored home is
|
|
50
|
+
`docs/guides/package-use.md` in the repository, and the release's assembly stages it byte-for-byte at the packaging
|
|
51
|
+
root as `README.guide.md`, beside `README.md`, where the manifest's `files` row ships it** (`PUB-DD-11`;
|
|
52
|
+
`docs/specs/storeroom-publish/contract.md §2.3` item `3`; `scripts/publish.sh`'s guide stage). **The paths this guide
|
|
53
|
+
cites — `bindings/js/…`, `docs/specs/…`, `tests/…` — are the CHECKOUT's, and they do not travel in the tarball; a
|
|
54
|
+
consumer reading from `node_modules` has this guide's text and the package's own shipped bytes (`index.mjs`,
|
|
55
|
+
`index.d.ts`, `README.md`, `src/`), and every declaration a citation names is answered first by those bytes.** **So
|
|
56
|
+
nothing here is addressed to a checkout reader alone: the installed tree carries this text unaltered, and a clause
|
|
57
|
+
that names a repository path says where its authority lives, not where you must stand to use it.**
|
|
58
|
+
|
|
33
59
|
**Every figure carries one of four marks, and the four are not the same thing:**
|
|
34
60
|
|
|
35
61
|
| the mark | what it means |
|
|
@@ -156,6 +182,13 @@ range, all six figures moving together (§0 item 1; `PUB-DD-10`).** **`1.0.0` is
|
|
|
156
182
|
§11), so the main `version` and the five pins are one figure and a consumer who reads a `0.5.0` anywhere in a
|
|
157
183
|
manifest has the wrong package.**
|
|
158
184
|
|
|
185
|
+
**⟶ AND THE FIGURE MOVES AGAIN, 2026-10-27: each of the five is pinned to `1.0.1`, not `1.0.0`**
|
|
186
|
+
(`bindings/js/package.json`, read at its own bytes; §0's correction of this date; `RCA-8(g)` ANNOTATE-BESIDE — the
|
|
187
|
+
two clauses above stand and are read THROUGH this one). **THE READING THEY TEACH IS UNMOVED AND IS THE POINT: five
|
|
188
|
+
EXACT pins, no caret, no tilde and no range, all six figures moving together (§0 item 1; `PUB-DD-10`) — so `1.0.1`
|
|
189
|
+
is the package's own version and the five pins' one figure, and a consumer who reads anything else in a manifest
|
|
190
|
+
has the wrong package.**
|
|
191
|
+
|
|
159
192
|
### §2.3 The three rungs
|
|
160
193
|
|
|
161
194
|
1. **RUNG ONE — the scoped platform package for this runtime's `process.platform` × `process.arch` key.** This is
|
|
@@ -756,6 +789,11 @@ BYTE and is read THROUGH this clause). **(i) *"The store implements seventeen (`
|
|
|
756
789
|
NINETEEN**: `src/error.rs`'s `CODES` is `[&str; 19]`, ranks `18` and `19` being the two this set's 2026-10-26 ruling
|
|
757
790
|
appended — **so the declaration of record and the crate agree at nineteen, which is the row above.** **(ii)
|
|
758
791
|
*"installed `0.5.0`"* READS `1.0.0`** (`bindings/js/package.json`, read at its own bytes; §0's correction clause).
|
|
792
|
+
|
|
793
|
+
**⟶ AND THAT CORRECTED FIGURE IS ITSELF ONE RELEASE BEHIND, 2026-10-27: *"installed `0.5.0`"* READS `1.0.1`**
|
|
794
|
+
(`bindings/js/package.json` at its own bytes; §0's correction of this date; `RCA-8(g)` ANNOTATE-BESIDE — the
|
|
795
|
+
sentence above stands and is read THROUGH this one). **THE SENTENCE'S OWN POINT IS UNMOVED: the escape arm is what
|
|
796
|
+
keeps a member the set has since gained typeable in an installed copy, and the set is the store's to close.**
|
|
759
797
|
**(iii) THE SET HAS NOW MOVED FOUR TIMES, NOT THREE**: fourteen to fifteen, fifteen to sixteen, sixteen to
|
|
760
798
|
seventeen, **and seventeen to nineteen** — **the escape arm's argument is strengthened rather than weakened by the
|
|
761
799
|
fourth move, which is exactly the arm's own evidence.** **NO TABLE ROW, NO RANK AND NO TRIGGER MOVES, and the two
|
|
@@ -876,6 +914,21 @@ defect** (`DD-28`; `native/contract.md §7.2` item 6; `write-and-read.md §4.3`'
|
|
|
876
914
|
**What this means for you, in one line: durability is a property of `file`-tier WRITES. If you delete something
|
|
877
915
|
durable and the process then restarts, expect it back — and delete it again after the boot, or write over it.**
|
|
878
916
|
|
|
917
|
+
**⟶ AND THE SENTENCE ABOUT THE BYTES IS ONE PRODUCER SHORT, 2026-10-27 — A REFUSED REVERSAL'S RESTORE NOW WRITES
|
|
918
|
+
THEM WHERE IT MOVED A `file`-TIER NODE (`bd0fd8c`).** `RCA-8(g)` ANNOTATE-BESIDE: **the section above stands
|
|
919
|
+
BYTE-FOR-BYTE and is read THROUGH this clause; THIS clause is a PURE INSERTION and moves no verb, no tier, no status
|
|
920
|
+
and no record.** **WHAT MOVED: the restore a REFUSED `rollback` performs — the compensating act that puts the state
|
|
921
|
+
back before the reversal — takes the `file` tier's projection before it and again after it, and where a version
|
|
922
|
+
standing at `Tier::File` moved it SAVES the restored image with the store's one writer.** **SO THE BYTES AT
|
|
923
|
+
`filePath` ARE THE LAST SUCCESSFUL SAVE'S, whose producers are a `file`-tier `write`'s commit AND a restore that moved
|
|
924
|
+
a file-tier node** — and **`and no other state` stands whole: the boot reads the register image at the file tier and
|
|
925
|
+
nothing else** (`native/contract.md §6.6` item `5`'s clause of 2026-10-27, the declaration's one home; `DD-28`'s
|
|
926
|
+
amended cell). **WHAT DOES NOT MOVE, SAID SO THE READING IS NOT TAKEN WIDER THAN IT IS:** **a `delete` still performs
|
|
927
|
+
no file I/O and a SUCCESSFUL `rollback` still performs none either**, so the paragraph above holds for both — the
|
|
928
|
+
removed version still stands again after the re-boot; **the save is the REFUSED arm's alone, it appends no journal
|
|
929
|
+
entry (a save is an effect and not an op), and a save that cannot land is reported (`FileCommitFailed`, the
|
|
930
|
+
in-memory state restored and the bytes not updated) rather than swallowed.**
|
|
931
|
+
|
|
879
932
|
### §9.4 When the save itself fails
|
|
880
933
|
|
|
881
934
|
**On a `file`-tier write's save that fails — the act itself failing, not a constraint — the store rolls the write
|
|
@@ -1016,6 +1069,24 @@ contract.**
|
|
|
1016
1069
|
clause). **`name`, `type`, `license`, `engines`, `exports` and `files` are UNMOVED and were re-read at the same
|
|
1017
1070
|
bytes; the five `files` rows are still a fact of this tree and not a rule (the ★ paragraph below).**
|
|
1018
1071
|
|
|
1072
|
+
**⟶ AND THE TWO FIGURES THAT CLAUSE CORRECTS MOVE AGAIN, 2026-10-27: `version` is `1.0.1` and each of the five
|
|
1073
|
+
`optionalDependencies` is pinned to `1.0.1`** (`bindings/js/package.json`, read at its own bytes; §0's correction of
|
|
1074
|
+
this date; `RCA-8(g)` ANNOTATE-BESIDE — the table and the correction above stand and are read THROUGH this clause).
|
|
1075
|
+
**AND THE `files` ROW'S OWN FIGURE IS RE-READ AT ITS OWN SITE IN THE CLAUSE BELOW: it reads SIX rows, the sixth
|
|
1076
|
+
being the consumer guide's landed copy, `README.guide.md`.**
|
|
1077
|
+
|
|
1078
|
+
**⟶ AND THE FIVE FIGURES THIS GUIDE PRINTS ABOUT THE SHIPPED TREE ARE RE-MEASURED AT IT ON ONE DATE, 2026-10-27, SO
|
|
1079
|
+
THE GUIDE IS NOT LEFT ONE TREE BEHIND ANY OF THEM.** `RCA-8(g)` ANNOTATE-BESIDE: **every table row, every ★
|
|
1080
|
+
paragraph and every figure above stands BYTE-FOR-BYTE and is read THROUGH this clause; THIS clause adds no rule and
|
|
1081
|
+
moves no figure — it records, at one date, the reading of each figure the guide states about the shipped tree, and
|
|
1082
|
+
each is the figure its own clause already prints.** **THE FIVE, EACH WITH ITS MEASUREMENT:**
|
|
1083
|
+
1. **THE STATUS SET IS TWENTY** — `src/error.rs`'s `CODES` is `[&str; 20]`, ranks `1`…`20`, and the declaration of record (`index.d.ts`, `StoreStatus`) agrees with the crate at twenty (§8.1's heading, its table's `20` row and its dated clauses).
|
|
1084
|
+
2. **THE PACKED MEMBER SET IS NINETEEN BARE AND TWENTY ASSEMBLED** — measured with `npm pack --json` at `bindings/js`: the BARE tarball carries `19` paths (`1` `package.json` + `4` root files — `README.guide.md` among them + `13` entry modules + `1` kernel: `1 + 4 + 13 + 1 = 19` ✓), and the ASSEMBLED tarball — the same stage with the release's `LICENSE` copy — carries `20`, the nineteen plus the licence (the ★ re-read clause (ii) below; the installed battery's `INSTALL-01` prints `members=20` on every run).
|
|
1085
|
+
3. **THE ALLOWLIST IS SIX ROWS** — `bindings/js/package.json`'s `files` reads `index.mjs` · `README.md` · `README.guide.md` · `index.d.ts` · `src/entry/` · `src/constraint-kernel.mjs` (`6 = 4 + 2` ✓) — **and `README.guide.md` is THIS document's landed copy** (§0's clause on the landing; the ★ re-read clause (i) below).
|
|
1086
|
+
4. **THE INSTANCE CARRIES FOURTEEN OWN MEMBERS** — measured on an instance built in memory from the shipped artefact: `Object.keys` and `Object.getOwnPropertyNames` are both the same fourteen-name list, and `read`'s own descriptor reads `writable: true, enumerable: true, configurable: true` (§3's table; §3.1).
|
|
1087
|
+
5. **THE DEPTH CEILING IS `126`** — the crossing's guard reads `depth > 126` (`bindings/js/src/crossing.rs`), so a value of depth `126` is admitted and one of depth `127` is refused; the node ceiling stands at `1,000,000` beside it (`json-crossing/contract.md §4`'s clause; §10.4).
|
|
1088
|
+
**NO FIGURE MOVES BY THIS CLAUSE, AND THE ONE THING IT ADDS IS THE DATE ON WHICH ALL FIVE WERE READ AT THE SAME TREE.**
|
|
1089
|
+
|
|
1019
1090
|
**★ THE `exports` MAP HAS ONE ARM, AND THAT IS A PROMISE ABOUT WHAT IS REACHABLE:** **the addon is NOT reachable
|
|
1020
1091
|
as a subpath and neither is the constraint kernel.** **There is no wildcard export, no deep import to the addon
|
|
1021
1092
|
and no CJS arm** (`bindings/js/README.md`; `docs/specs/storeroom-publish/contract.md §1.3`;
|
|
@@ -1202,6 +1273,21 @@ that a read-back's prototype is or is not a particular object.** **What IS decla
|
|
|
1202
1273
|
tree sharing no mutable member with the store or with another crossing**, which is the guarantee worth relying on
|
|
1203
1274
|
(`json-crossing/contract.md §5`, item (3)(c)).
|
|
1204
1275
|
|
|
1276
|
+
### §12.6b The two known fail-states, and how you leave them
|
|
1277
|
+
|
|
1278
|
+
**⟶ ADDED `1.1.0` — THIS IS THE ONE PART OF THE PROMISE A CONSUMER READING ONLY `node_modules` HAD NOWHERE TO FIND, AND IT SHIPS HERE BECAUSE THIS DOCUMENT SHIPS.**
|
|
1279
|
+
|
|
1280
|
+
**Two windows in the constraint machinery are known and are NOT defects. Each is a state you can leave.**
|
|
1281
|
+
|
|
1282
|
+
1. **A `delete`'s listener delivery.** A listener invoked by a delete's delivery runs **no constraint pass** — there is no attempt for a pass to run over. **A `rollback` issued from inside it is unjudged, and its effect stands.**
|
|
1283
|
+
2. **A registration's own evaluation.** `addConstraint`'s and `constraintRegister`'s evaluation of a supplied body runs **no pass** for the same reason — **an action raised there is unjudged and its effect stands.**
|
|
1284
|
+
|
|
1285
|
+
**THE FIRST EXIT — RELOAD THE FILE.** Since `1.1.0`, **a restore that moved a version standing at the `file` tier SAVES the restored image**, so **the file records the state the store was restored to, and a fresh boot over that path returns to judged bytes.**
|
|
1286
|
+
|
|
1287
|
+
**THE SECOND EXIT — REGENERATE THE STORE.** Construct a new instance and replay your writes; **a judged state by construction.**
|
|
1288
|
+
|
|
1289
|
+
**Neither window is new and neither is a defect**: both are places **a pass does not begin**, not places a judgement was skipped mid-flight. **And every pass that DOES run drains its own restart request** — so the fail-state is bounded by the two acts that run none.
|
|
1290
|
+
|
|
1205
1291
|
### §12.7 A skip is not a green, and your own throws are not refusals
|
|
1206
1292
|
|
|
1207
1293
|
**WHAT BREAKS:** **a `skipped` cell is a cell that DID NOT RUN** — *"a skip is not a green"*, in the authority
|
package/index.d.ts
CHANGED
|
@@ -465,6 +465,26 @@ export interface DeleteRecord {
|
|
|
465
465
|
readonly tiers: readonly Tier[];
|
|
466
466
|
/** **THE TRIGGER'S PAIRS** (`contract.md §2.4` item 1; `PAR-HL-38`; `A43` — a delete fires its own set). */
|
|
467
467
|
readonly triggered: readonly TriggerPair[];
|
|
468
|
+
/**
|
|
469
|
+
* **THE OP THE `delete` LANDED — THE STORE'S OWN JOURNAL RECORD, `null` WHERE THE ACT REMOVED NOTHING**
|
|
470
|
+
* (`strata/decisions.md` · `D-43` item 3, the architect, verbatim: *"Delete should be journaled and
|
|
471
|
+
* reversible"*).
|
|
472
|
+
*
|
|
473
|
+
* **IT IS THE MEMBER `WriteRecord` CARRIES, AT THE SAME NAME AND THE SAME TYPE** (`WriteRecord.op` above,
|
|
474
|
+
* the store's own eight-member `JournalOp`), so a caller has **one spelling for "the op this act landed"**
|
|
475
|
+
* and one route to reversing it: `store.rollback(record.op.opId)` restores every version the delete
|
|
476
|
+
* removed, **at its own tier**, exactly as a write's reversal restores what the write replaced.
|
|
477
|
+
*
|
|
478
|
+
* **THE MEASURED FACT THIS MEMBER EXISTS FOR.** The delete was already journaled — the store appended one
|
|
479
|
+
* entry carrying the address, the per-tier before-state and an op id, and `rollback` already accepted that
|
|
480
|
+
* id — but the record carried no identity, so **the act could not be NAMED, and an act that cannot be
|
|
481
|
+
* named cannot be reversed**: that is why the kernel's unwinding could not reach a delete's effect at all.
|
|
482
|
+
*
|
|
483
|
+
* **AND `null` IS THE `D-3` ARM, SAID PLAINLY.** A delete that removes no version is a **success** with
|
|
484
|
+
* `tiers: []` (`§4.4` arm `D-3`; `native contract.md §6.5` item 11 adds `triggered: []`) and appends no
|
|
485
|
+
* journal entry, so there is no op to carry: **nothing is named because nothing was destroyed.**
|
|
486
|
+
*/
|
|
487
|
+
readonly op: JournalOp | null;
|
|
468
488
|
}
|
|
469
489
|
|
|
470
490
|
/**
|
|
@@ -665,6 +685,16 @@ export interface StoreInstance {
|
|
|
665
685
|
* call `a.rollback(w.op.opId)`, whose id is the string `write` returned, is a correct call.
|
|
666
686
|
*/
|
|
667
687
|
rollback(opId: string): RollbackRecord;
|
|
688
|
+
|
|
689
|
+
/**
|
|
690
|
+
* **⟶ AND IT THROWS: `1.1.0`'S DECLARATION, ADDED BESIDE THE SIGNATURE RATHER THAN IN IT.** **`rollback` was
|
|
691
|
+
* TOTAL at `1.0.1` — it answered a `RollbackRecord` and could not fail. It is PARTIAL now**: **a reversal the
|
|
692
|
+
* registered constraints do not admit REFUSES**, throwing the one plain form `{status, message, log}` with
|
|
693
|
+
* `status: 'ConstraintPassRefused'`, **and the store is restored to the state it stood at before the reversal**
|
|
694
|
+
* (`D-38`, `D-40`, `D-41`). **A TypeScript signature has no `throws` clause, so this is the honest place to say
|
|
695
|
+
* it**: *the return type describes what a call returns when it returns, and the throw is part of the contract.*
|
|
696
|
+
* **A lawful reversal is unchanged** — same record, same members, no `log`. **Callers on `1.0.1` must handle it.**
|
|
697
|
+
*/
|
|
668
698
|
/**
|
|
669
699
|
* Begin watching the addresses the caller names under the caller's own handle.
|
|
670
700
|
*
|
package/index.mjs
CHANGED
|
@@ -312,12 +312,20 @@ export function storeCreate(cfg) {
|
|
|
312
312
|
// the receiver is known to be one. **NO TOKEN IS MINTED AND NO SECOND FORM IS BUILT** — the entry's own
|
|
313
313
|
// refusal is what answers, reached by handing the receiver on.
|
|
314
314
|
if (!isStoreReceiver(this)) return decodeValue(carryRefusal(() => entryOf().write.call(this), []));
|
|
315
|
-
// **⟶ `§4.1`: `write` OPENS ONE —
|
|
316
|
-
//
|
|
317
|
-
//
|
|
318
|
-
//
|
|
319
|
-
//
|
|
320
|
-
|
|
315
|
+
// **⟶ `§4.1`: `write` OPENS ONE — UNLESS THE CALL NAMES A COMMIT AT THIS METHOD'S FOURTH POSITION, WHICH
|
|
316
|
+
// IS THE DISCRIMINATOR `D-46` SETS: A CALL THAT SUPPLIES IT JOINS THE COMMIT IT NAMES, AND A CALL THAT
|
|
317
|
+
// SUPPLIES NONE OPENS A NEW ONE** (`strata/decisions.md` · `D-46`). **THE POSITION IS READ HERE AND
|
|
318
|
+
// NOWHERE ELSE**, because this member is the one place a call's own entry names a commit: the kernel's
|
|
319
|
+
// store leg is a FOUR-position call (`store.write(address, tier, value, record)`, `kernel-commit.mjs`) and
|
|
320
|
+
// therefore JOINS the commit the caller's three-position write opened, while a caller's plain write, a
|
|
321
|
+
// listener body's write and a constraint body's write all supply three positions and OPEN — the listener's
|
|
322
|
+
// being `D-43` item `1`'s *"its own commit"*, reached by declaration rather than by an authorship the
|
|
323
|
+
// package used to infer. **A SUPPLIED POSITION NAMES A COMMIT WHETHER OR NOT IT IS IN THE POSITION'S CLASS
|
|
324
|
+
// DOMAIN**: the class test below refuses an outside value before any store act, and a refused write
|
|
325
|
+
// releases the bracket in the `finally` below like every other arm.
|
|
326
|
+
// **THE DECREMENT IS ON THE FINAL RETURN TO THE CLIENT** (`closeCommit`), taken in a `finally` so the
|
|
327
|
+
// bracket is released on every arm — a count left standing after a return is on `§5`'s failure list.
|
|
328
|
+
const opened = openCommit(instance, arguments.length >= 4 ? commit : undefined);
|
|
321
329
|
try {
|
|
322
330
|
// **⟶ `docs/specs/storeroom-js/surface.md §2.12` ITEM 1, STAGE 1, AMENDED 2026-10-18 — THE ENTRY→KERNEL EDGE IS UNCONDITIONAL: EVERY
|
|
323
331
|
// FOUR-POSITION WRITE ENTERS THE KERNEL'S `K-2`, AND THE `carriesConstraintAt` GATE THIS VERB ONCE TOOK
|
|
@@ -457,6 +465,11 @@ export function storeCreate(cfg) {
|
|
|
457
465
|
/// and the in-domain no-op arm a SUCCESS returning `tiers: []`. **Its declared NAME is `delete`, and it is
|
|
458
466
|
/// published under that name ALONE** (`package.md §1.3` item 3): `deleteOp` is a reserved-word workaround
|
|
459
467
|
/// for the declaration and never a member of the package's namespace.
|
|
468
|
+
///
|
|
469
|
+
/// **⟶ AND IT CARRIES THE DELETE'S OWN `op` FROM 2026-10-27** (`D-43` item 3; `index.d.ts`
|
|
470
|
+
/// `DeleteRecord.op`): the member `write`'s record carries, at the same name, so `rollback(record.op.opId)`
|
|
471
|
+
/// reverses the delete. `null` is the `D-3` arm that removed nothing — it appended no entry, so it names
|
|
472
|
+
/// no op — and it crosses unchanged rather than folding to `undefined` (`crossing.md §1.3`).
|
|
460
473
|
delete(address, tier) {
|
|
461
474
|
// **⟶ `§4.1`: `delete` OPENS ONE.**
|
|
462
475
|
const opened = openCommit(instance);
|
|
@@ -471,6 +484,7 @@ export function storeCreate(cfg) {
|
|
|
471
484
|
address: decodeSegments(answer.address),
|
|
472
485
|
tiers: answer.tiers,
|
|
473
486
|
triggered: crossTriggered(state, answer.triggered),
|
|
487
|
+
op: answer.op === null ? null : decodeJournalOp(answer.op),
|
|
474
488
|
};
|
|
475
489
|
// `A43`: a delete FIRES its own triggered set, on the same window as a write (`docs/specs/storeroom-js/surface.md §2.7` item 2).
|
|
476
490
|
deliver(state, receipt.triggered, answer.triggeringAddress);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "provident-storeroom",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.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",
|
|
@@ -40,11 +40,11 @@
|
|
|
40
40
|
"src/constraint-kernel.mjs"
|
|
41
41
|
],
|
|
42
42
|
"optionalDependencies": {
|
|
43
|
-
"@auspicion/provident-storeroom-js-linux-x64-gnu": "1.0
|
|
44
|
-
"@auspicion/provident-storeroom-js-linux-arm64-gnu": "1.0
|
|
45
|
-
"@auspicion/provident-storeroom-js-darwin-x64": "1.0
|
|
46
|
-
"@auspicion/provident-storeroom-js-darwin-arm64": "1.0
|
|
47
|
-
"@auspicion/provident-storeroom-js-win32-x64-msvc": "1.0
|
|
43
|
+
"@auspicion/provident-storeroom-js-linux-x64-gnu": "1.1.0",
|
|
44
|
+
"@auspicion/provident-storeroom-js-linux-arm64-gnu": "1.1.0",
|
|
45
|
+
"@auspicion/provident-storeroom-js-darwin-x64": "1.1.0",
|
|
46
|
+
"@auspicion/provident-storeroom-js-darwin-arm64": "1.1.0",
|
|
47
|
+
"@auspicion/provident-storeroom-js-win32-x64-msvc": "1.1.0"
|
|
48
48
|
},
|
|
49
49
|
"publishConfig": {
|
|
50
50
|
"access": "public"
|