@interop/wallet-core 0.69.0 → 0.70.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.
Files changed (143) hide show
  1. package/README.md +17 -28
  2. package/dist/clientAnnex/ladder.d.ts +103 -57
  3. package/dist/clientAnnex/ladder.d.ts.map +1 -1
  4. package/dist/clientAnnex/ladder.js +254 -335
  5. package/dist/clientAnnex/ladder.js.map +1 -1
  6. package/dist/clientAnnex/ladderAnchored.d.ts.map +1 -1
  7. package/dist/clientAnnex/ladderAnchored.js +10 -5
  8. package/dist/clientAnnex/ladderAnchored.js.map +1 -1
  9. package/dist/clientAnnex/recoveryLadderAnchored.d.ts +3 -15
  10. package/dist/clientAnnex/recoveryLadderAnchored.d.ts.map +1 -1
  11. package/dist/clientAnnex/recoveryLadderAnchored.js +22 -3
  12. package/dist/clientAnnex/recoveryLadderAnchored.js.map +1 -1
  13. package/dist/clients/grantState.d.ts +67 -0
  14. package/dist/clients/grantState.d.ts.map +1 -0
  15. package/dist/clients/grantState.js +72 -0
  16. package/dist/clients/grantState.js.map +1 -0
  17. package/dist/clients/index.d.ts +7 -0
  18. package/dist/clients/index.d.ts.map +1 -1
  19. package/dist/clients/index.js +6 -0
  20. package/dist/clients/index.js.map +1 -1
  21. package/dist/enrollment/connectCode.d.ts +4 -3
  22. package/dist/enrollment/connectCode.d.ts.map +1 -1
  23. package/dist/enrollment/connectCode.js +4 -3
  24. package/dist/enrollment/connectCode.js.map +1 -1
  25. package/dist/enrollment/index.d.ts +2 -2
  26. package/dist/enrollment/index.js +2 -2
  27. package/dist/enrollment/onboardingInvite.d.ts +1 -1
  28. package/dist/enrollment/onboardingInvite.js +1 -1
  29. package/dist/enrollment/onboardingResponse.js +1 -1
  30. package/dist/identity/index.d.ts +1 -1
  31. package/dist/identity/index.js +1 -1
  32. package/dist/index.d.ts +4 -8
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +4 -8
  35. package/dist/index.js.map +1 -1
  36. package/dist/keyring/kdf.d.ts +33 -19
  37. package/dist/keyring/kdf.d.ts.map +1 -1
  38. package/dist/keyring/kdf.js +36 -25
  39. package/dist/keyring/kdf.js.map +1 -1
  40. package/dist/recovery/continuation.d.ts +5 -4
  41. package/dist/recovery/continuation.d.ts.map +1 -1
  42. package/dist/recovery/continuation.js +14 -13
  43. package/dist/recovery/continuation.js.map +1 -1
  44. package/dist/resourceLog/document.d.ts +10 -2
  45. package/dist/resourceLog/document.d.ts.map +1 -1
  46. package/dist/resourceLog/document.js +1 -2
  47. package/dist/resourceLog/document.js.map +1 -1
  48. package/dist/space/index.d.ts +4 -2
  49. package/dist/space/index.d.ts.map +1 -1
  50. package/dist/space/index.js +4 -2
  51. package/dist/space/index.js.map +1 -1
  52. package/dist/space/wasLink.d.ts +13 -2
  53. package/dist/space/wasLink.d.ts.map +1 -1
  54. package/dist/space/wasLink.js +28 -2
  55. package/dist/space/wasLink.js.map +1 -1
  56. package/dist/unlock/index.d.ts +1 -1
  57. package/dist/unlock/index.d.ts.map +1 -1
  58. package/dist/unlock/index.js.map +1 -1
  59. package/dist/unlock/standingWebvh.d.ts +81 -19
  60. package/dist/unlock/standingWebvh.d.ts.map +1 -1
  61. package/dist/unlock/standingWebvh.js +170 -30
  62. package/dist/unlock/standingWebvh.js.map +1 -1
  63. package/dist/webvh/did.d.ts +2 -4
  64. package/dist/webvh/did.d.ts.map +1 -1
  65. package/dist/webvh/did.js +2 -4
  66. package/dist/webvh/did.js.map +1 -1
  67. package/dist/webvh/didWebvh.d.ts +3 -2
  68. package/dist/webvh/didWebvh.d.ts.map +1 -1
  69. package/dist/webvh/didWebvh.js +2 -1
  70. package/dist/webvh/didWebvh.js.map +1 -1
  71. package/dist/webvh/revokeClient.d.ts +13 -7
  72. package/dist/webvh/revokeClient.d.ts.map +1 -1
  73. package/dist/webvh/revokeClient.js +14 -7
  74. package/dist/webvh/revokeClient.js.map +1 -1
  75. package/package.json +1 -16
  76. package/dist/request/appKey.d.ts +0 -295
  77. package/dist/request/appKey.d.ts.map +0 -1
  78. package/dist/request/appKey.js +0 -516
  79. package/dist/request/appKey.js.map +0 -1
  80. package/dist/request/capabilityRequest.d.ts +0 -41
  81. package/dist/request/capabilityRequest.d.ts.map +0 -1
  82. package/dist/request/capabilityRequest.js +0 -46
  83. package/dist/request/capabilityRequest.js.map +0 -1
  84. package/dist/request/classify.d.ts +0 -226
  85. package/dist/request/classify.d.ts.map +0 -1
  86. package/dist/request/classify.js +0 -416
  87. package/dist/request/classify.js.map +0 -1
  88. package/dist/request/composeVp.d.ts +0 -52
  89. package/dist/request/composeVp.d.ts.map +0 -1
  90. package/dist/request/composeVp.js +0 -176
  91. package/dist/request/composeVp.js.map +0 -1
  92. package/dist/request/ephemeralExchange.d.ts +0 -100
  93. package/dist/request/ephemeralExchange.d.ts.map +0 -1
  94. package/dist/request/ephemeralExchange.js +0 -230
  95. package/dist/request/ephemeralExchange.js.map +0 -1
  96. package/dist/request/exchangeClient.d.ts +0 -142
  97. package/dist/request/exchangeClient.d.ts.map +0 -1
  98. package/dist/request/exchangeClient.js +0 -241
  99. package/dist/request/exchangeClient.js.map +0 -1
  100. package/dist/request/index.d.ts +0 -59
  101. package/dist/request/index.d.ts.map +0 -1
  102. package/dist/request/index.js +0 -59
  103. package/dist/request/index.js.map +0 -1
  104. package/dist/request/interactionRequest.d.ts +0 -23
  105. package/dist/request/interactionRequest.d.ts.map +0 -1
  106. package/dist/request/interactionRequest.js +0 -46
  107. package/dist/request/interactionRequest.js.map +0 -1
  108. package/dist/request/interactionUrl.d.ts +0 -42
  109. package/dist/request/interactionUrl.d.ts.map +0 -1
  110. package/dist/request/interactionUrl.js +0 -104
  111. package/dist/request/interactionUrl.js.map +0 -1
  112. package/dist/request/matching.d.ts +0 -95
  113. package/dist/request/matching.d.ts.map +0 -1
  114. package/dist/request/matching.js +0 -205
  115. package/dist/request/matching.js.map +0 -1
  116. package/dist/request/onboarding.d.ts +0 -94
  117. package/dist/request/onboarding.d.ts.map +0 -1
  118. package/dist/request/onboarding.js +0 -167
  119. package/dist/request/onboarding.js.map +0 -1
  120. package/dist/request/parse.d.ts +0 -63
  121. package/dist/request/parse.d.ts.map +0 -1
  122. package/dist/request/parse.js +0 -153
  123. package/dist/request/parse.js.map +0 -1
  124. package/dist/request/presentationSuite.d.ts +0 -71
  125. package/dist/request/presentationSuite.d.ts.map +0 -1
  126. package/dist/request/presentationSuite.js +0 -143
  127. package/dist/request/presentationSuite.js.map +0 -1
  128. package/dist/request/processRequest.d.ts +0 -45
  129. package/dist/request/processRequest.d.ts.map +0 -1
  130. package/dist/request/processRequest.js +0 -147
  131. package/dist/request/processRequest.js.map +0 -1
  132. package/dist/request/queryPredicates.d.ts +0 -98
  133. package/dist/request/queryPredicates.d.ts.map +0 -1
  134. package/dist/request/queryPredicates.js +0 -107
  135. package/dist/request/queryPredicates.js.map +0 -1
  136. package/dist/request/types.d.ts +0 -257
  137. package/dist/request/types.d.ts.map +0 -1
  138. package/dist/request/types.js +0 -2
  139. package/dist/request/types.js.map +0 -1
  140. package/dist/request/walletInput.d.ts +0 -93
  141. package/dist/request/walletInput.d.ts.map +0 -1
  142. package/dist/request/walletInput.js +0 -179
  143. package/dist/request/walletInput.js.map +0 -1
package/README.md CHANGED
@@ -38,9 +38,10 @@ The subpaths:
38
38
  shared collection ids and descriptive specs (`private-credentials`,
39
39
  `public-credentials`, `wallet-activity`, `app-connections`), the
40
40
  `wallet-activity` wire shape with its pure `addHistory*` payload builders, the
41
- `publicCredentialUrl` derivation, and the `was-link` QR hand-off contract.
42
- Contacts collection specs live in
43
- [`@interop/social-core`](https://npm.im/@interop/social-core).
41
+ `publicCredentialUrl` derivation, and the `was-link` QR hand-off contract
42
+ (`buildWasLinkPayload` / `parseWasLinkPayload` / `encodeWasLinkSecret`) with
43
+ its structural recognizer, `isWasLinkPayload`. Contacts collection specs live
44
+ in [`@interop/social-core`](https://npm.im/@interop/social-core).
44
45
 
45
46
  - **`@interop/wallet-core/identity`** -- the WAS identity derivation both wallet
46
47
  apps must perform byte-for-byte identically: `agentsFromSecret` /
@@ -50,22 +51,6 @@ The subpaths:
50
51
  (the same assembly from a `CapabilityAgent` an app derived itself), and
51
52
  `singleKeyResolver`.
52
53
 
53
- - **`@interop/wallet-core/request`** -- wallet-request / exchange protocol
54
- handling: request classification and parsing (CHAPI get/store events,
55
- wallet-api messages and URLs), QueryByExample matching, cryptosuite
56
- negotiation, `composeVp` (signer and holder injected), the pure
57
- `processRequest` (consent runs in the caller; zcap / App Connect processing
58
- injected), the App Connect app-key credential module (query validation,
59
- matching, minting, store-time refusal, legacy re-issue), the
60
- `WalletOnboardingQuery` transport vocabulary (compose and classification), the
61
- VC-API exchange client, VCALM `interaction:` URL handling, the requester's
62
- half of a server's ephemeral exchange (`createEphemeralExchange` /
63
- `pollEphemeralExchange`, the poll bounded by a caller signal or its own
64
- deadline), and `composeCapabilityRequest`, the zcap-only VPR a requester
65
- stores on such an exchange. The VPR type vocabulary lives in
66
- [`@interop/data-integrity-core`](https://npm.im/@interop/data-integrity-core)
67
- and is re-exported here.
68
-
69
54
  - **`@interop/wallet-core/webvh`** -- the account's did:webvh identity: the
70
55
  hosted DID log, its per-client update-key rotation, the client enrollment
71
56
  entries, the one-entry client-revocation edit (verification methods, update
@@ -161,8 +146,9 @@ The subpaths:
161
146
  record codec (shell / bridge delegation / ladder members under a
162
147
  credential-authenticated binding, with the bridge-only re-mint), the merged
163
148
  document-inventory edit (a verbatim `keyAgreement` entry or a
164
- `publicKeyCommitment` entry for a low-entropy-derived key), and the
165
- self-enrolling continuation with its composed completion.
149
+ `publicKeyCommitment` entry for a low-entropy-derived key, either naming its
150
+ ladder's rung-0 hash as `ladderCommitment`), and the self-enrolling
151
+ continuation with its composed completion.
166
152
 
167
153
  - **`@interop/wallet-core/recovery`** -- recovery codes on the roster identity
168
154
  model, over the `unlock` machinery: a code as a minimal always-enrolled wallet
@@ -183,6 +169,10 @@ The subpaths:
183
169
  per-visit readiness ensure, and the transient-recovery continuation. It sits
184
170
  on top of the other subpaths and none of them import from it.
185
171
 
172
+ The request pipeline (input classification, VPR parsing, cryptosuite
173
+ negotiation, VP composition, the App Connect app-key credential) now lives in
174
+ [`@interop/wallet-request`](https://npm.im/@interop/wallet-request).
175
+
186
176
  ## Install
187
177
 
188
178
  - Node.js 24+ is recommended.
@@ -213,15 +203,14 @@ import {
213
203
  ```
214
204
 
215
205
  The `sync` and `space` subpaths are re-exported from the package root as well.
216
- Every other subpath (`identity`, `request`, `webvh`, `resourceLog`, `keys`,
217
- `clients`, `descriptors`, `keyring`, `enrollment`, `genesis`, `unlock`,
218
- `recovery`, `clientAnnex`) is import-directly-only, so consumers of the root
219
- never pull the signing / KMS / document-loader dependency graph.
206
+ Every other subpath (`identity`, `webvh`, `resourceLog`, `keys`, `clients`,
207
+ `descriptors`, `keyring`, `enrollment`, `genesis`, `unlock`, `recovery`,
208
+ `clientAnnex`) is import-directly-only, so consumers of the root never pull the
209
+ signing / KMS / document-loader dependency graph.
220
210
 
221
- Two further exports are leaves of that same isolation, carved out to stay
211
+ One further export is a leaf of that same isolation, carved out to stay
222
212
  dependency-light: `keys/clientKeyRecord` is the client-key record codec alone,
223
- so a wallet's storage tests load without the crypto graph, and
224
- `request/matching` is the QueryByExample matchers alone.
213
+ so a wallet's storage tests load without the crypto graph.
225
214
 
226
215
  ## Contribute
227
216
 
@@ -216,56 +216,97 @@ export declare function assertNextKeyHashesRemain({ nextKeyHashes, ceremony }: {
216
216
  }): string[];
217
217
  /**
218
218
  * The anchor a credential's ladder walk starts from when the caller holds no
219
- * recorded update key -- the log-only anchoring a cold browser needs. The
220
- * credential's own `keyAgreement` member id is the anchor: the entry that
221
- * FIRST introduced that member is the credential's bind entry, and what that
222
- * entry did to the standing parameters names rung 0.
223
- *
224
- * Two shapes are read, both fail-closed:
225
- *
226
- * - the entry authorized exactly one update key and that key signed it (a
227
- * prerotation reveal, the ladder-anchored genesis shape), so rung 0 is that
228
- * key outright;
229
- * - the entry authorized no key of its own and newly committed exactly one
230
- * hash (the `publishUnlockKey` bind an enrolled client signs, and the
231
- * recovery-code issuance sharing it), so rung 0's hash is that hash.
232
- *
233
- * A third shape is the recovery add-and-retire entry, which the two above
234
- * cannot read: the transient continuation's introduces the fresh credential's
235
- * member and the replacement code's together, and the remembered
236
- * continuation's introduces the replacement's beside an enrolled client. Both
237
- * are the HANDOVER of `decisions/0007`, read here as the anchor rule of
238
- * `decisions/0014`: the entry authorized exactly one key, that key signed it,
239
- * that key's hash was committed by an earlier reveal-and-commit entry whose
240
- * signer this entry retires, and that earlier entry appended exactly three
241
- * hashes with the successor's first. The reveal entry's LAST addition is then
242
- * the replacement code's rung-0 hash (what an entry hands to a successor
243
- * credential comes last), and the successor key is the fresh credential's
244
- * rung 0. Which member is which is read off the `keyAgreement` relation's
245
- * order, which the emitter fixes: the fresh credential's member precedes the
246
- * replacement code's. So a two-member bind that publishes no enrolled client
247
- * anchors its first member on the successor key and its second on the last
248
- * addition; a one-member bind that publishes an enrolled client anchors that
249
- * member on the last addition alone, since the successor key there is the
250
- * client's.
251
- *
252
- * Anything else is ambiguous and returns `undefined`, which the callers report
253
- * as unclaimed rather than acting on.
219
+ * recorded update key -- the log-only anchoring a cold browser needs. Every
220
+ * credential-class `keyAgreement` member names its own ladder's rung-0
221
+ * commitment (`ladderCommitment`, written by every bind site through
222
+ * `unlockKeyVerificationMethod`), so the anchor is read off the member
223
+ * itself rather than inferred from the shape of the entry that introduced
224
+ * it. The value is `hash(rung 0)` in the form `nextKeyHashes` carries, the
225
+ * same commitment the bind puts there.
226
+ *
227
+ * The value is taken from the entry that INTRODUCED the member, and only
228
+ * from an account-controlled member (an enrolled client's marked twin is
229
+ * never a credential). A member is introduced each time it appears after
230
+ * not standing, so a member re-bound after a retirement (the same passphrase
231
+ * added again) anchors on the fresh ladder's commitment, and a log read
232
+ * before the retirement entry that struck it still names it. What a later
233
+ * entry says about a member that already stood is checked, not adopted: the
234
+ * property is a document member any update-key holder can restate, and a
235
+ * value that changes while the member stands continuously is a retargeting
236
+ * no bind performs. Such a member names no anchor for the rest of that
237
+ * standing run, so the retargeting is reported as unclaimed rather than
238
+ * quietly walked from the substituted hash. The write side carries the same
239
+ * rule: `publishUnlockKey`, the one path in this library that rewrites a
240
+ * standing member, refuses a bind whose rung-0 hash differs from the value
241
+ * the member already names, so a retargeting in a served log is a foreign
242
+ * writer's and never a torn re-run's. The guard covers only a
243
+ * continuous run: the same update-key holder can strike the member in one
244
+ * entry and re-add it under a fresh commitment in the next, which reads as a
245
+ * legitimate re-bind and is not distinguishable from one seedlessly. That
246
+ * shape rests on the log's loudness and on `survivingClientKeyProtection`
247
+ * instead. A member without the property, or one nowhere in the log, names
248
+ * no anchor either.
249
+ *
250
+ * The named hash must also be one the log COMMITTED FOR THE MEMBER: newly
251
+ * added to `nextKeyHashes` by the introducing entry (the merged bind, the
252
+ * ladder-anchored genesis), by a later entry of the same standing run (the
253
+ * split bind's authority entry, two versions after its key entry), or by an
254
+ * earlier entry whose signer the introducing entry retires (the recovery
255
+ * continuations' reveal-and-commit entry, signed by the spent code's rung,
256
+ * which the add-and-retire entry introducing the replacement's member and
257
+ * the fresh credential's strikes -- every reveal entry of a torn and resumed
258
+ * continuation is that shape). A member naming a hash that stood in
259
+ * `nextKeyHashes` already, committed by some other entry for something else
260
+ * -- an enrolled client's staged hash, say, which any update-key holder can
261
+ * read off the log and restate as a commitment -- names no anchor. Without
262
+ * the check the walk would claim that hash for the credential, and a
263
+ * retirement that honored the claim would strike a surviving client's
264
+ * staged commitment. The check is necessary rather than sufficient: an
265
+ * approver can name a hash BEFORE the enrollment it approves commits it, and
266
+ * that is the shape `survivingClientKeyProtection`'s positional exemption
267
+ * closes. Every refusal returns `undefined`, which the callers report as
268
+ * unclaimed rather than acting on.
254
269
  *
255
270
  * @param options {object}
256
271
  * @param options.log {DIDLog} a resolved, caller-verified log
257
272
  * @param options.credentialVmId {string} the credential's `keyAgreement`
258
273
  * verification-method id
259
- * @returns {Promise<{ anchorKeyMultibase?: string, anchorHash?: string } |
260
- * undefined>}
274
+ * @returns {{ anchorHash: string } | undefined}
261
275
  */
262
276
  export declare function credentialLadderAnchor({ log, credentialVmId }: {
263
277
  log: DIDLog;
264
278
  credentialVmId: string;
265
- }): Promise<{
266
- anchorKeyMultibase?: string;
267
- anchorHash?: string;
268
- } | undefined>;
279
+ }): {
280
+ anchorHash: string;
281
+ } | undefined;
282
+ /**
283
+ * What the log says about a credential member's `ladderCommitment`, before
284
+ * {@link credentialLadderAnchor} decides whether it is an anchor: the value
285
+ * the entry introducing the member's latest standing run named (`named`),
286
+ * whether the member stands in the head document (`stands`), whether a later
287
+ * entry of that run restated the value (`retargeted`), and whether the log
288
+ * committed the named hash for the member (`committed`). The anchor reader
289
+ * is the refusing composition of these; the bind's write-side check reads
290
+ * them apart, since a split bind's authority entry meets a member that names
291
+ * its hash while the log has not committed it yet.
292
+ *
293
+ * @param options {object}
294
+ * @param options.log {DIDLog} a resolved, caller-verified log
295
+ * @param options.credentialVmId {string} the credential's `keyAgreement`
296
+ * verification-method id
297
+ * @returns {{ named?: string, stands: boolean, retargeted: boolean,
298
+ * committed: boolean } | undefined} `undefined` for a member the log
299
+ * never introduced
300
+ */
301
+ export declare function credentialLadderCommitment({ log, credentialVmId }: {
302
+ log: DIDLog;
303
+ credentialVmId: string;
304
+ }): {
305
+ named?: string;
306
+ stands: boolean;
307
+ retargeted: boolean;
308
+ committed: boolean;
309
+ } | undefined;
269
310
  /**
270
311
  * The ladder VMs the log introduced ALONGSIDE something of this credential's
271
312
  * -- the question a fail-closed retirement gate asks when its seedless walk
@@ -317,7 +358,7 @@ export declare function ladderVmIdsIntroducedWithCredential({ log, credentialVmI
317
358
  * lists, read off the log alone -- the latent commitments a client removal
318
359
  * must exclude before it attributes the removed client's staged hash. Each
319
360
  * credential-class `keyAgreement` member (an unmarked method, verbatim key or
320
- * commitment) is anchored from its bind entry and walked
361
+ * commitment) is anchored from its member's `ladderCommitment` and walked
321
362
  * ({@link attributeLadderInventory}); a credential whose anchor or walk
322
363
  * refuses claims nothing and is named on `unclaimedCredentialVmIds`, so the
323
364
  * caller can tell "no latent hashes stand" from "one credential's could not
@@ -407,9 +448,12 @@ export declare function retiredCredentialRungsBeforeKey({ log, authorizedKeyMult
407
448
  * than a property of the walk, because a mis-anchored walk landing on a
408
449
  * client's key would otherwise end that client's ability to extend the
409
450
  * account log for good. The walks therefore run FIRST, and the hashes they
410
- * claimed are passed to the protection as known-latent, so a retiring
451
+ * claimed are passed to the protection as walk-derived, so a retiring
411
452
  * credential's own rung cannot make a client's staged attribution ambiguous
412
- * and get itself protected as a candidate;
453
+ * and get itself protected as a candidate. The protection never lets such
454
+ * a claim prune the hash the decision-0007 position names as a client's
455
+ * staged hash, so a walk anchored on a member that names that hash claims
456
+ * it and is withheld, rather than striking it;
413
457
  * - a listed enrolled client whose ACTIVE update key the log cannot attribute
414
458
  * withholds the WHOLE strike: nothing is struck and every credential is
415
459
  * reported, since the structural guard cannot say what that client holds.
@@ -540,29 +584,31 @@ export declare function attributeRetiredCredentialRungs({ log, credentialVmIds,
540
584
  * once matches no legitimate history and fails closed ({@link
541
585
  * LadderAttributionError}).
542
586
  *
543
- * One shape is out of reach seedlessly, and it is reachable today. The
544
- * last-client transition strikes the ladder VM and reinstalls it in the same
545
- * run (`forgetLastEnrolledClient` stage 1): same seed, the credential's
546
- * member standing, the acting rung's hash still committed, and no hash added.
547
- * A later self-enrollment then spends that already-revealed rung, so its
587
+ * One shape is out of the backward walk's reach. The last-client transition
588
+ * strikes the ladder VM and reinstalls it in the same run
589
+ * (`forgetLastEnrolledClient` stage 1): same seed, the credential's member
590
+ * standing, the acting rung's hash still committed, and no hash added. A
591
+ * later self-enrollment then spends that already-revealed rung, so its
548
592
  * reveal-and-commit entry authorizes no key while committing the next rung's
549
593
  * hash, and the registry anchor advances to that next rung. The backward walk
550
594
  * climbs from the anchor by asking which key the entry that committed its
551
595
  * hash authorized; that entry authorized none, so the walk cannot name the
552
- * rung that signed it, and the earlier rung and the reinstalled VM go
553
- * unrecovered. A seedless retirement then reports the VM as `unclaimed` and
554
- * leaves it standing. Tracked as WC-158.
596
+ * rung that signed it, and a walk anchored on the registry key alone leaves
597
+ * the earlier rung and the reinstalled VM unrecovered. A walk anchored on the
598
+ * member's own rung-0 commitment reads that history forward with no climb,
599
+ * which is why the removal paths walk from both anchors
600
+ * (`attributeUnlockLadderInventory`) and act on the member's reading.
555
601
  *
556
602
  * The anchor comes in three forms, and the walk is the same afterwards. A
557
603
  * recorded update-key multibase (`anchorKeyMultibase`) is what a caller
558
604
  * holding a registry entry passes. A hash (`anchorHash`) is the same anchor
559
605
  * with the key withheld: the rung is picked up when the log reveals it, since
560
606
  * the reveal test already matches on the commitment. With neither, and a
561
- * `credentialVmId` in hand, the anchor is read off the credential's bind entry
562
- * ({@link credentialLadderAnchor}) -- the cold-browser mode, where no registry
563
- * is readable before the entry is written. An anchor the bind entry cannot
564
- * name unambiguously refuses with {@link LadderAttributionError} rather than
565
- * walking from a guess.
607
+ * `credentialVmId` in hand, the anchor is read off the credential's own
608
+ * `keyAgreement` member ({@link credentialLadderAnchor}) -- the cold-browser
609
+ * mode, where no registry is readable before the entry is written. A member
610
+ * naming no ladder commitment refuses with {@link LadderAttributionError}
611
+ * rather than walking from a guess.
566
612
  *
567
613
  * @param options {object}
568
614
  * @param options.log {DIDLog} a resolved, caller-verified log
@@ -1 +1 @@
1
- {"version":3,"file":"ladder.d.ts","sourceRoot":"","sources":["../../src/clientAnnex/ladder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ladder.d.ts","sourceRoot":"","sources":["../../src/clientAnnex/ladder.ts"],"names":[],"mappings":"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"}