@openvtc/trust-tasks 0.26.19 → 0.26.21
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/CHANGELOG.md +106 -0
- package/dist/_shared/components.d.ts +328 -17
- package/dist/_shared/components.d.ts.map +1 -1
- package/dist/device/list/0.2/payload.d.ts +4 -4
- package/dist/device/list/0.2/payload.d.ts.map +1 -1
- package/dist/device/list/0.2/payload.js +4 -2
- package/dist/device/list/0.2/payload.js.map +1 -1
- package/dist/device/register/0.2/payload.d.ts +4 -4
- package/dist/device/register/0.2/payload.d.ts.map +1 -1
- package/dist/device/register/0.2/payload.js +4 -2
- package/dist/device/register/0.2/payload.js.map +1 -1
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -1
- package/dist/voting/_shared/0.1/voting.d.ts +16 -0
- package/dist/voting/_shared/0.1/voting.d.ts.map +1 -0
- package/dist/voting/_shared/0.1/voting.js +6 -0
- package/dist/voting/_shared/0.1/voting.js.map +1 -0
- package/dist/voting/ballot/cast/0.1/payload.d.ts +887 -0
- package/dist/voting/ballot/cast/0.1/payload.d.ts.map +1 -0
- package/dist/voting/ballot/cast/0.1/payload.js +506 -0
- package/dist/voting/ballot/cast/0.1/payload.js.map +1 -0
- package/dist/voting/board/consistency/0.1/payload.d.ts +389 -0
- package/dist/voting/board/consistency/0.1/payload.d.ts.map +1 -0
- package/dist/voting/board/consistency/0.1/payload.js +218 -0
- package/dist/voting/board/consistency/0.1/payload.js.map +1 -0
- package/dist/voting/board/head/0.1/payload.d.ts +380 -0
- package/dist/voting/board/head/0.1/payload.d.ts.map +1 -0
- package/dist/voting/board/head/0.1/payload.js +224 -0
- package/dist/voting/board/head/0.1/payload.js.map +1 -0
- package/dist/voting/board/inclusion/0.1/payload.d.ts +449 -0
- package/dist/voting/board/inclusion/0.1/payload.d.ts.map +1 -0
- package/dist/voting/board/inclusion/0.1/payload.js +246 -0
- package/dist/voting/board/inclusion/0.1/payload.js.map +1 -0
- package/dist/voting/board/read/0.1/payload.d.ts +1596 -0
- package/dist/voting/board/read/0.1/payload.d.ts.map +1 -0
- package/dist/voting/board/read/0.1/payload.js +920 -0
- package/dist/voting/board/read/0.1/payload.js.map +1 -0
- package/dist/voting/election/cancel/0.1/payload.d.ts +540 -0
- package/dist/voting/election/cancel/0.1/payload.d.ts.map +1 -0
- package/dist/voting/election/cancel/0.1/payload.js +331 -0
- package/dist/voting/election/cancel/0.1/payload.js.map +1 -0
- package/dist/voting/election/close/0.1/payload.d.ts +540 -0
- package/dist/voting/election/close/0.1/payload.d.ts.map +1 -0
- package/dist/voting/election/close/0.1/payload.js +330 -0
- package/dist/voting/election/close/0.1/payload.js.map +1 -0
- package/dist/voting/election/register/0.1/payload.d.ts +1920 -0
- package/dist/voting/election/register/0.1/payload.d.ts.map +1 -0
- package/dist/voting/election/register/0.1/payload.js +1166 -0
- package/dist/voting/election/register/0.1/payload.js.map +1 -0
- package/dist/voting/election/show/0.1/payload.d.ts +1824 -0
- package/dist/voting/election/show/0.1/payload.d.ts.map +1 -0
- package/dist/voting/election/show/0.1/payload.js +1112 -0
- package/dist/voting/election/show/0.1/payload.js.map +1 -0
- package/dist/voting/result/show/0.1/payload.d.ts +849 -0
- package/dist/voting/result/show/0.1/payload.d.ts.map +1 -0
- package/dist/voting/result/show/0.1/payload.js +498 -0
- package/dist/voting/result/show/0.1/payload.js.map +1 -0
- package/dist/vta/_shared/0.1/app-state-record.d.ts +1 -1
- package/dist/vta/_shared/0.1/app-state-record.d.ts.map +1 -1
- package/dist/vta/_shared/0.4/pcs-engine.d.ts +1 -1
- package/dist/vta/_shared/0.4/pcs-engine.d.ts.map +1 -1
- package/dist/vta/app-state/delete/1.0/payload.d.ts +1 -1
- package/dist/vta/app-state/delete/1.0/payload.d.ts.map +1 -1
- package/dist/vta/app-state/get/1.0/payload.d.ts +1 -1
- package/dist/vta/app-state/get/1.0/payload.d.ts.map +1 -1
- package/dist/vta/app-state/get-many/1.0/payload.d.ts +1 -1
- package/dist/vta/app-state/get-many/1.0/payload.d.ts.map +1 -1
- package/dist/vta/app-state/list/1.0/payload.d.ts +1 -1
- package/dist/vta/app-state/list/1.0/payload.d.ts.map +1 -1
- package/dist/vta/app-state/put/1.0/payload.d.ts +1 -1
- package/dist/vta/app-state/put/1.0/payload.d.ts.map +1 -1
- package/dist/vta/app-state/put-many/1.0/payload.d.ts +1 -1
- package/dist/vta/app-state/put-many/1.0/payload.d.ts.map +1 -1
- package/dist/vta/pcs/applications/create/0.1/payload.d.ts +1 -1
- package/dist/vta/pcs/applications/create/0.1/payload.d.ts.map +1 -1
- package/dist/vta/pcs/applications/show/0.1/payload.d.ts +1 -1
- package/dist/vta/pcs/applications/show/0.1/payload.d.ts.map +1 -1
- package/dist/vta/pcs/attest/0.1/payload.d.ts +1 -1
- package/dist/vta/pcs/attest/0.1/payload.d.ts.map +1 -1
- package/dist/vta/pcs/prove/0.1/payload.d.ts +1 -1
- package/dist/vta/pcs/prove/0.1/payload.d.ts.map +1 -1
- package/dist/vta/pcs/root-accept/0.1/payload.d.ts +1 -1
- package/dist/vta/pcs/root-accept/0.1/payload.d.ts.map +1 -1
- package/dist/vta/pcs/tokens/abandon/0.1/payload.d.ts +1 -1
- package/dist/vta/pcs/tokens/abandon/0.1/payload.d.ts.map +1 -1
- package/dist/vta/pcs/tokens/accept/0.1/payload.d.ts +1 -1
- package/dist/vta/pcs/tokens/accept/0.1/payload.d.ts.map +1 -1
- package/dist/vta/pcs/verify-attestation/0.1/payload.d.ts +1 -1
- package/dist/vta/pcs/verify-attestation/0.1/payload.d.ts.map +1 -1
- package/dist/vta/pcs/vetter/show/0.1/payload.d.ts +1 -1
- package/dist/vta/pcs/vetter/show/0.1/payload.d.ts.map +1 -1
- package/dist/vta/pcs/vote/0.1/payload.d.ts +2208 -0
- package/dist/vta/pcs/vote/0.1/payload.d.ts.map +1 -0
- package/dist/vta/pcs/vote/0.1/payload.js +1282 -0
- package/dist/vta/pcs/vote/0.1/payload.js.map +1 -0
- package/dist/vta/pcs/voter/accept/0.1/payload.d.ts +450 -0
- package/dist/vta/pcs/voter/accept/0.1/payload.d.ts.map +1 -0
- package/dist/vta/pcs/voter/accept/0.1/payload.js +247 -0
- package/dist/vta/pcs/voter/accept/0.1/payload.js.map +1 -0
- package/dist/vta/pcs/voter/receipt/0.1/payload.d.ts +531 -0
- package/dist/vta/pcs/voter/receipt/0.1/payload.d.ts.map +1 -0
- package/dist/vta/pcs/voter/receipt/0.1/payload.js +301 -0
- package/dist/vta/pcs/voter/receipt/0.1/payload.js.map +1 -0
- package/dist/vta/pcs/voter/register/0.1/payload.d.ts +1934 -0
- package/dist/vta/pcs/voter/register/0.1/payload.d.ts.map +1 -0
- package/dist/vta/pcs/voter/register/0.1/payload.js +1133 -0
- package/dist/vta/pcs/voter/register/0.1/payload.js.map +1 -0
- package/dist/vtc/directory/card/present/0.1/payload.d.ts +2 -2
- package/dist/vtc/directory/card/present/0.1/payload.js +1 -1
- package/dist/vtc/directory/card/present/0.1/payload.js.map +1 -1
- package/dist/vtc/directory/card/public/0.1/payload.d.ts +4 -4
- package/dist/vtc/directory/card/public/0.1/payload.js +2 -2
- package/dist/vtc/directory/card/public/0.1/payload.js.map +1 -1
- package/dist/vtc/directory/card/publish/0.1/payload.d.ts +4 -4
- package/dist/vtc/directory/card/publish/0.1/payload.js +2 -2
- package/dist/vtc/directory/card/publish/0.1/payload.js.map +1 -1
- package/dist/vtc/elections/cancel/0.1/payload.d.ts +301 -0
- package/dist/vtc/elections/cancel/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/elections/cancel/0.1/payload.js +183 -0
- package/dist/vtc/elections/cancel/0.1/payload.js.map +1 -0
- package/dist/vtc/elections/certify/0.1/payload.d.ts +914 -0
- package/dist/vtc/elections/certify/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/elections/certify/0.1/payload.js +512 -0
- package/dist/vtc/elections/certify/0.1/payload.js.map +1 -0
- package/dist/vtc/elections/close/0.1/payload.d.ts +301 -0
- package/dist/vtc/elections/close/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/elections/close/0.1/payload.js +182 -0
- package/dist/vtc/elections/close/0.1/payload.js.map +1 -0
- package/dist/vtc/elections/create/0.1/payload.d.ts +1656 -0
- package/dist/vtc/elections/create/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/elections/create/0.1/payload.js +994 -0
- package/dist/vtc/elections/create/0.1/payload.js.map +1 -0
- package/dist/vtc/elections/list/0.1/payload.d.ts +521 -0
- package/dist/vtc/elections/list/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/elections/list/0.1/payload.js +290 -0
- package/dist/vtc/elections/list/0.1/payload.js.map +1 -0
- package/dist/vtc/elections/show/0.1/payload.d.ts +2688 -0
- package/dist/vtc/elections/show/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/elections/show/0.1/payload.js +1581 -0
- package/dist/vtc/elections/show/0.1/payload.js.map +1 -0
- package/dist/vtc/elections/tickets/issue/0.1/payload.d.ts +597 -0
- package/dist/vtc/elections/tickets/issue/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/elections/tickets/issue/0.1/payload.js +318 -0
- package/dist/vtc/elections/tickets/issue/0.1/payload.js.map +1 -0
- package/dist/vtc/groups/create/0.1/payload.d.ts +4 -4
- package/dist/vtc/groups/create/0.1/payload.js +2 -2
- package/dist/vtc/groups/create/0.1/payload.js.map +1 -1
- package/dist/vtc/groups/list/0.1/payload.d.ts +4 -4
- package/dist/vtc/groups/list/0.1/payload.js +2 -2
- package/dist/vtc/groups/list/0.1/payload.js.map +1 -1
- package/dist/vtc/groups/managers/add/0.1/payload.d.ts +337 -0
- package/dist/vtc/groups/managers/add/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/groups/managers/add/0.1/payload.js +184 -0
- package/dist/vtc/groups/managers/add/0.1/payload.js.map +1 -0
- package/dist/vtc/groups/managers/remove/0.1/payload.d.ts +337 -0
- package/dist/vtc/groups/managers/remove/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/groups/managers/remove/0.1/payload.js +184 -0
- package/dist/vtc/groups/managers/remove/0.1/payload.js.map +1 -0
- package/dist/vtc/groups/show/0.1/payload.d.ts +4 -4
- package/dist/vtc/groups/show/0.1/payload.js +2 -2
- package/dist/vtc/groups/show/0.1/payload.js.map +1 -1
- package/dist/vtc/groups/update/0.1/payload.d.ts +4 -4
- package/dist/vtc/groups/update/0.1/payload.js +2 -2
- package/dist/vtc/groups/update/0.1/payload.js.map +1 -1
- package/package.json +1 -1
- package/src/_shared/components.ts +331 -17
- package/src/device/list/0.2/payload.ts +4 -2
- package/src/device/register/0.2/payload.ts +4 -2
- package/src/index.ts +24 -0
- package/src/voting/_shared/0.1/voting.ts +17 -0
- package/src/voting/ballot/cast/0.1/payload.ts +560 -0
- package/src/voting/board/consistency/0.1/payload.ts +264 -0
- package/src/voting/board/head/0.1/payload.ts +257 -0
- package/src/voting/board/inclusion/0.1/payload.ts +300 -0
- package/src/voting/board/read/0.1/payload.ts +981 -0
- package/src/voting/election/cancel/0.1/payload.ts +368 -0
- package/src/voting/election/close/0.1/payload.ts +367 -0
- package/src/voting/election/register/0.1/payload.ts +1207 -0
- package/src/voting/election/show/0.1/payload.ts +1149 -0
- package/src/voting/result/show/0.1/payload.ts +536 -0
- package/src/vta/_shared/0.1/app-state-record.ts +1 -1
- package/src/vta/_shared/0.4/pcs-engine.ts +1 -1
- package/src/vta/app-state/delete/1.0/payload.ts +1 -1
- package/src/vta/app-state/get/1.0/payload.ts +1 -1
- package/src/vta/app-state/get-many/1.0/payload.ts +1 -1
- package/src/vta/app-state/list/1.0/payload.ts +1 -1
- package/src/vta/app-state/put/1.0/payload.ts +1 -1
- package/src/vta/app-state/put-many/1.0/payload.ts +1 -1
- package/src/vta/pcs/applications/create/0.1/payload.ts +1 -1
- package/src/vta/pcs/applications/show/0.1/payload.ts +1 -1
- package/src/vta/pcs/attest/0.1/payload.ts +1 -1
- package/src/vta/pcs/prove/0.1/payload.ts +1 -1
- package/src/vta/pcs/root-accept/0.1/payload.ts +1 -1
- package/src/vta/pcs/tokens/abandon/0.1/payload.ts +1 -1
- package/src/vta/pcs/tokens/accept/0.1/payload.ts +1 -1
- package/src/vta/pcs/verify-attestation/0.1/payload.ts +1 -1
- package/src/vta/pcs/vetter/show/0.1/payload.ts +1 -1
- package/src/vta/pcs/vote/0.1/payload.ts +1365 -0
- package/src/vta/pcs/voter/accept/0.1/payload.ts +306 -0
- package/src/vta/pcs/voter/receipt/0.1/payload.ts +367 -0
- package/src/vta/pcs/voter/register/0.1/payload.ts +1211 -0
- package/src/vtc/directory/card/present/0.1/payload.ts +1 -1
- package/src/vtc/directory/card/public/0.1/payload.ts +2 -2
- package/src/vtc/directory/card/publish/0.1/payload.ts +2 -2
- package/src/vtc/elections/cancel/0.1/payload.ts +223 -0
- package/src/vtc/elections/certify/0.1/payload.ts +565 -0
- package/src/vtc/elections/close/0.1/payload.ts +222 -0
- package/src/vtc/elections/create/0.1/payload.ts +1041 -0
- package/src/vtc/elections/list/0.1/payload.ts +371 -0
- package/src/vtc/elections/show/0.1/payload.ts +1671 -0
- package/src/vtc/elections/tickets/issue/0.1/payload.ts +394 -0
- package/src/vtc/groups/create/0.1/payload.ts +2 -2
- package/src/vtc/groups/list/0.1/payload.ts +2 -2
- package/src/vtc/groups/managers/add/0.1/payload.ts +230 -0
- package/src/vtc/groups/managers/remove/0.1/payload.ts +230 -0
- package/src/vtc/groups/show/0.1/payload.ts +2 -2
- package/src/vtc/groups/update/0.1/payload.ts +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -11,6 +11,112 @@ The package versions over **its own API** — what a consumer compiles against
|
|
|
11
11
|
not over `SPEC.md`. Below 1.0 a breaking change bumps the leading non-zero
|
|
12
12
|
component.
|
|
13
13
|
|
|
14
|
+
## 0.26.21 — 2026-10-19
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
|
|
19
|
+
- **voting**: Community voting — voting/* (the ballot box), vtc/elections/* (the registrar) and vta/pcs/voter/* + vta/pcs/vote (the voter's agent) (#834)
|
|
20
|
+
|
|
21
|
+
* feat(voting): community voting — voting/* (the ballot box), vtc/elections/* (the registrar) and vta/pcs/voter/* + vta/pcs/vote (the voter's agent)
|
|
22
|
+
|
|
23
|
+
Twenty-one draft 0.1 tasks for VTI-VOT-001 – 100 (dtgwg-vti-spec, Community
|
|
24
|
+
Voting chapter). A member proves only that they may vote, never who they are,
|
|
25
|
+
and anyone permitted to read the board can recount it.
|
|
26
|
+
|
|
27
|
+
- voting/_shared/0.1: CONVENTIONS.md (separation of registrar and ballot box,
|
|
28
|
+
the exact cryptographic binding — deployment label, ticket class
|
|
29
|
+
voter/<electionId>, hash-to-G1 election point, framed ballot context, cast,
|
|
30
|
+
admission, RFC 9162 board hashing — authorization, VTA custody, privacy,
|
|
31
|
+
shared error local parts, retry safety) and voting.schema.json (Manifest,
|
|
32
|
+
Question, Ballot, Cast, BoardHead, BoardEntry, MerklePath, ElectionResult,
|
|
33
|
+
ElectionSummary, VotingParameters, Disclosure …).
|
|
34
|
+
- voting/*: election/{register,show,close,cancel}, ballot/cast (HTTPS binding
|
|
35
|
+
always accepted, one-time did:key issuer, signed receipt, idempotent),
|
|
36
|
+
board/{head,read,inclusion,consistency}, result/show. 0.1 serves open
|
|
37
|
+
elections only; sealed and tallied-encrypted await the trustee tasks.
|
|
38
|
+
- vtc/elections/*: create (binding elections park for a second
|
|
39
|
+
administrator), list, show (disclosure, kept checkpoints, certified result),
|
|
40
|
+
close, cancel, certify (the VTC verifies the board itself), tickets/issue
|
|
41
|
+
(blind, one per eligible party, recorded before answering).
|
|
42
|
+
- vta/pcs/voter/{register,accept,receipt} and vta/pcs/vote: a voter key per
|
|
43
|
+
election, the blinded ticket request, the signed cast document the client
|
|
44
|
+
sends itself, receipt keeping and inclusion checking. New capability
|
|
45
|
+
`pcsVoter` in device/_shared/0.2 Capability.
|
|
46
|
+
|
|
47
|
+
Bindings regenerated (Rust, TypeScript, Go, Dart); check-bindings agrees and
|
|
48
|
+
the Rust conformance suite passes. Reference implementation of the binding:
|
|
49
|
+
vti-voting in verifiable-trust-infrastructure.
|
|
50
|
+
|
|
51
|
+
- **vtc/groups**: Appointing group managers — vtc/groups/managers/{add,remove}/0.1; create refuses an unserved dynamic group (#833)
|
|
52
|
+
|
|
53
|
+
* feat(vtc/groups): appointing group managers — vtc/groups/managers/{add,remove}/0.1; create refuses an unserved dynamic group
|
|
54
|
+
|
|
55
|
+
The groups family made a manager an access-control resource grant,
|
|
56
|
+
`vtc.groups.manage` qualified `group:<groupId>`, "never this record". But no
|
|
57
|
+
task wrote that grant. The general `acl/grant` caps a grant by the holder's
|
|
58
|
+
role ceiling, so only an administrator could ever manage a group.
|
|
59
|
+
|
|
60
|
+
- vtc/groups/managers/add/0.1: a manager of the group, or a holder of the
|
|
61
|
+
unqualified capability, appoints an active member. The appointment is a
|
|
62
|
+
resource grant on the appointee's entry, delegated by the signer, which sits
|
|
63
|
+
beside the role and never inside its ceiling, so a member with no
|
|
64
|
+
administrative role may hold it. The signer must cover the grant. It is
|
|
65
|
+
reviewed like any delegated grant when its granter departs, and withdrawn
|
|
66
|
+
with the group or the holder's departure. The group's record never decides
|
|
67
|
+
who manages it. Codes: notFound, entryNotFound, alreadyManager.
|
|
68
|
+
- vtc/groups/managers/remove/0.1: a manager steps down, or a holder of the
|
|
69
|
+
unqualified capability removes another manager's appointment. Managers of
|
|
70
|
+
one group do not remove one another. Codes: notFound, notManager.
|
|
71
|
+
- vtc/groups/create: `kindNotServed` lets a community that serves only static
|
|
72
|
+
groups refuse a dynamic one after checking its rule. It never stores a
|
|
73
|
+
dynamic group it does not compute.
|
|
74
|
+
- group.schema.json: `managers` points at the new task.
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
### Fixed
|
|
79
|
+
|
|
80
|
+
- **device**: PcsVoter is appended to Capability, not inserted — no existing variant moves (#835)
|
|
81
|
+
- **vtc/directory/card/present**: A Data Integrity presentation binds through its signed nonce and domain (#831)
|
|
82
|
+
|
|
83
|
+
Producer conformance required a Data Integrity presentation's proof to carry `challenge` equal to the document's `id` and `domain` equal to the community's DID. Neither member is signed by the Data Integrity libraries the implementations use: a proof stating them either fails to verify or carries them unsigned, where they bind nothing. The presentations this ecosystem already produces for a verifier (`vta_sdk::vp::build_di_vp`, the OpenID4VP DI path, the personhood assertion) put `nonce` and `domain` on the presentation itself, which the holder's proof covers.
|
|
84
|
+
|
|
85
|
+
The binding is now the presentation's own `nonce` (this document's `id`) and `domain` (the community's DID), signed by the holder proof; a proof that also states `challenge` or `domain` must state the same values. The consumer's item 3 is unchanged: it verifies "the binding above".
|
|
86
|
+
|
|
87
|
+
No schema change beyond the presentation's description; the generated libraries carry the new text in their documentation.
|
|
88
|
+
|
|
89
|
+
## 0.26.20 — 2026-10-19
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
### Fixed
|
|
93
|
+
|
|
94
|
+
- **vtc/directory/images/upload**: TooLarge also refuses a picture beyond the decoding bound (#829)
|
|
95
|
+
|
|
96
|
+
images/upload declared `tooLarge` for `data` that decodes to more than 262144 bytes, and item 2 refuses it before decoding. But the payload schema already bounds `data` to exactly 262144 bytes, so a conforming community could never send the code. The schema answers malformedRequest first.
|
|
97
|
+
|
|
98
|
+
The bound that matters is the other one. A PNG of a few kilobytes can claim tens of thousands of pixels across, which is a decompression bomb, and nothing in the specification told a community to stop it. Item 2 now requires a community to bound what it decodes, the pixels a picture may claim and the memory its decoding may take, and to refuse a picture beyond either with `tooLarge`. The code's meaning says the same.
|
|
99
|
+
|
|
100
|
+
No schema change; the generated Rust carries the new meaning in its documentation.
|
|
101
|
+
|
|
102
|
+
- **vtc/directory/card/publish**: The card names its signer as issuer, so an agent-held key can sign it (#830)
|
|
103
|
+
|
|
104
|
+
card/publish allowed a card no members but `@type`, `version`, `uid`, `kind`, `updated` and `proof` besides its values. That left a member whose key their agent holds, the usual case, with no way to sign it: keys/sign-document signs a document only as the DID it names in `issuer` or `controller`, and the card could name neither.
|
|
105
|
+
|
|
106
|
+
The card now carries `issuer`, the membership DID, as a required member that carries no directory value. Item 4 checks it is the member's DID. The mapping section says why it is there, and a card/public reader checks it names the DID that signed. It adds no identifier: the proof's verificationMethod already names the DID, and the recognition record the card hangs from names it too. The correlation paragraph is corrected to say so.
|
|
107
|
+
|
|
108
|
+
The examples gain `issuer`, and their cardDigest is recomputed (zQmcjRKZd1TExLaEuMVv5xe2tTx4a1YkRQ58zwVrnByxYS4). The PublishedCard description in the shared schema lists `issuer` among the members a consumer checks; the bindings are regenerated for that description.
|
|
109
|
+
|
|
110
|
+
- **vtc/directory/card/publish**: Pin the JSContact mapping, and withdraw without waiting on the registry (#827)
|
|
111
|
+
|
|
112
|
+
card/publish item 4 compares a member's card with their public values "mapped as JSContactCard maps them", but JSContactCard names only where each base field lands, not its shape: not the map identifiers, not how a link list is laid out, and not what the avatar's `uri` is. Two conforming wallets could sign different bytes for the same values, and a community could not tell which was right.
|
|
113
|
+
|
|
114
|
+
*Mapping the public values* fixes it: one JSContact member per field, fixed map identifiers (k1, m1, p1, n1, l1…), the avatar as `media.m1` with `uri` `urn:vtc-directory:<entryId>:avatar:<sha256>` (what a reader sends to images/get), and every other field as a member named by its key. Item 4 now compares against that table, and lists `proof` among the members that carry no directory value.
|
|
115
|
+
|
|
116
|
+
Item 9 said to remove the registry pointer first, then stop serving the card. That kept a card the member had withdrawn on public view until the registry answered, which can be an hour when it is down. A withdrawal now stops serving and erases the card at once and removes the pointer, retried until it lands. A pointer read in the meantime names a card card/public answers notFound, which tells the reader nothing. card/update item 7 and the retention note follow.
|
|
117
|
+
|
|
118
|
+
Prose only: no schema or generated binding changes.
|
|
119
|
+
|
|
14
120
|
## 0.26.19 — 2026-10-19
|
|
15
121
|
|
|
16
122
|
|