@openvtc/trust-tasks 0.26.11 → 0.26.13
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 +303 -0
- package/dist/_shared/components.d.ts +18 -0
- package/dist/_shared/components.d.ts.map +1 -1
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -1
- package/dist/rooms/keys/act/0.3/payload.d.ts +546 -0
- package/dist/rooms/keys/act/0.3/payload.d.ts.map +1 -0
- package/dist/rooms/keys/act/0.3/payload.js +305 -0
- package/dist/rooms/keys/act/0.3/payload.js.map +1 -0
- package/dist/rooms/owner/group/add/0.2/payload.d.ts +417 -0
- package/dist/rooms/owner/group/add/0.2/payload.d.ts.map +1 -0
- package/dist/rooms/owner/group/add/0.2/payload.js +218 -0
- package/dist/rooms/owner/group/add/0.2/payload.js.map +1 -0
- package/dist/vta/_shared/0.6/witness-party.d.ts +16 -0
- package/dist/vta/_shared/0.6/witness-party.d.ts.map +1 -0
- package/dist/vta/_shared/0.6/witness-party.js +6 -0
- package/dist/vta/_shared/0.6/witness-party.js.map +1 -0
- package/dist/vta/witness/accept/0.2/payload.d.ts +499 -0
- package/dist/vta/witness/accept/0.2/payload.d.ts.map +1 -0
- package/dist/vta/witness/accept/0.2/payload.js +278 -0
- package/dist/vta/witness/accept/0.2/payload.js.map +1 -0
- package/dist/vta/witness/list/0.1/payload.d.ts +673 -0
- package/dist/vta/witness/list/0.1/payload.d.ts.map +1 -0
- package/dist/vta/witness/list/0.1/payload.js +351 -0
- package/dist/vta/witness/list/0.1/payload.js.map +1 -0
- package/dist/vta/witness/open/0.2/payload.d.ts +500 -0
- package/dist/vta/witness/open/0.2/payload.d.ts.map +1 -0
- package/dist/vta/witness/open/0.2/payload.js +259 -0
- package/dist/vta/witness/open/0.2/payload.js.map +1 -0
- package/dist/vta/witness/present/0.2/payload.d.ts +303 -0
- package/dist/vta/witness/present/0.2/payload.d.ts.map +1 -0
- package/dist/vta/witness/present/0.2/payload.js +170 -0
- package/dist/vta/witness/present/0.2/payload.js.map +1 -0
- package/dist/vtc/members/personhood/assert/0.2/payload.d.ts +536 -0
- package/dist/vtc/members/personhood/assert/0.2/payload.d.ts.map +1 -0
- package/dist/vtc/members/personhood/assert/0.2/payload.js +228 -0
- package/dist/vtc/members/personhood/assert/0.2/payload.js.map +1 -0
- package/dist/vtc/members/registry-consent/0.1/payload.d.ts +311 -0
- package/dist/vtc/members/registry-consent/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/members/registry-consent/0.1/payload.js +183 -0
- package/dist/vtc/members/registry-consent/0.1/payload.js.map +1 -0
- package/dist/vtc/members/update/0.1/payload.d.ts +3 -3
- package/dist/vtc/members/update/0.1/payload.js +1 -1
- package/dist/vtc/members/update/0.1/payload.js.map +1 -1
- package/dist/witness/_shared/0.1/outcome-evidence.d.ts +16 -0
- package/dist/witness/_shared/0.1/outcome-evidence.d.ts.map +1 -0
- package/dist/witness/_shared/0.1/outcome-evidence.js +6 -0
- package/dist/witness/_shared/0.1/outcome-evidence.js.map +1 -0
- package/dist/witness/session/0.2/payload.d.ts +274 -0
- package/dist/witness/session/0.2/payload.d.ts.map +1 -0
- package/dist/witness/session/0.2/payload.js +152 -0
- package/dist/witness/session/0.2/payload.js.map +1 -0
- package/dist/witness/session/submit/0.2/payload.d.ts +295 -0
- package/dist/witness/session/submit/0.2/payload.d.ts.map +1 -0
- package/dist/witness/session/submit/0.2/payload.js +166 -0
- package/dist/witness/session/submit/0.2/payload.js.map +1 -0
- package/package.json +1 -1
- package/src/_shared/components.ts +17 -0
- package/src/index.ts +12 -0
- package/src/rooms/keys/act/0.3/payload.ts +380 -0
- package/src/rooms/owner/group/add/0.2/payload.ts +288 -0
- package/src/vta/_shared/0.6/witness-party.ts +17 -0
- package/src/vta/witness/accept/0.2/payload.ts +330 -0
- package/src/vta/witness/list/0.1/payload.ts +441 -0
- package/src/vta/witness/open/0.2/payload.ts +336 -0
- package/src/vta/witness/present/0.2/payload.ts +210 -0
- package/src/vtc/members/personhood/assert/0.2/payload.ts +421 -0
- package/src/vtc/members/registry-consent/0.1/payload.ts +231 -0
- package/src/vtc/members/update/0.1/payload.ts +2 -2
- package/src/witness/_shared/0.1/outcome-evidence.ts +17 -0
- package/src/witness/session/0.2/payload.ts +197 -0
- package/src/witness/session/submit/0.2/payload.ts +212 -0
package/CHANGELOG.md
CHANGED
|
@@ -11,6 +11,309 @@ 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.13 — 2026-10-16
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
|
|
19
|
+
- **vta/witness**: List — read back stored witness credentials with their outcome evidence (#800)
|
|
20
|
+
|
|
21
|
+
vta/witness/accept stores a VWC with its outcome evidence (the
|
|
22
|
+
witness/session document and the witness's submit #response), and its
|
|
23
|
+
answer was the client's only copy of that evidence: vault/credentials/query
|
|
24
|
+
returns body-free descriptors and vault/credentials/get the credential alone.
|
|
25
|
+
A client that stopped between accept returning and recording the result, or
|
|
26
|
+
another device of the same principal, could see the VWC and not present it,
|
|
27
|
+
since a VWC without its evidence counts for nothing at a verifier.
|
|
28
|
+
|
|
29
|
+
vta/witness/list/0.1 returns every stored VWC the caller may read, each as
|
|
30
|
+
accept answered it (credentialId, witness, relationshipDid,
|
|
31
|
+
vwcDigestMultibase) plus acceptedAt and the evidence byte for byte, the VWC
|
|
32
|
+
travelling once inside evidence.outcome. Filters relationshipDid and witness
|
|
33
|
+
(AND-combined); pageSize (<= 100) / cursor / truncated as vta/credentials/list.
|
|
34
|
+
Only VWCs in contexts the caller may act in (witnessRequest, never sign alone),
|
|
35
|
+
active vault entries only; an unreachable or unknown DID matches nothing,
|
|
36
|
+
never an error. Lists VWCs accepted under 0.1 and 0.2 alike. A read:
|
|
37
|
+
sideEffects none, discloses secret, so request and response proofs and
|
|
38
|
+
issuedAt are REQUIRED; retention transient.
|
|
39
|
+
|
|
40
|
+
accept/0.2's "Reading the evidence back later" and the 0.6 conventions now
|
|
41
|
+
point at it. Bindings regenerated (Rust, TS, Go, Dart).
|
|
42
|
+
|
|
43
|
+
## 0.26.12 — 2026-10-16
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
### Added
|
|
47
|
+
|
|
48
|
+
- **vtc/members**: Registry-consent — a member grants or withdraws their own trust-registry consent (#798)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
### Documentation
|
|
52
|
+
|
|
53
|
+
- **keys**: Sign-jws and sign-csr name their known implementation (#792)
|
|
54
|
+
|
|
55
|
+
keys/sign-jws/0.1 and keys/sign-csr/0.1 declared no knownImplementations,
|
|
56
|
+
so the registry showed "Not declared" for both, although a runtime
|
|
57
|
+
implementation exists: OpenVTC/verifiable-trust-infrastructure#2057 (VTA
|
|
58
|
+
custodian; merged 2026-10-13 at dda501d) serves both tasks. Its test
|
|
59
|
+
suite reproduces the sign-jws example's signing input and SHA-256 digest,
|
|
60
|
+
and checks that a sign-csr request's signature verifies.
|
|
61
|
+
|
|
62
|
+
Front matter only; no wire or binding change.
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
### Specifications
|
|
67
|
+
|
|
68
|
+
- **witness**: Add 0.2 — a member presentation on submit, and outcome evidence on personhood/assert, replace the ext stop-gaps (#799)
|
|
69
|
+
|
|
70
|
+
Two members implementations carried in a vendor extension,
|
|
71
|
+
ext["org.openvtc.witness"], become specified members, so any witness and
|
|
72
|
+
any community reads them.
|
|
73
|
+
|
|
74
|
+
- witness/session/submit/0.2: optional memberPresentation — a VP by the
|
|
75
|
+
member DID, for authentication, bound to the session's challenge and
|
|
76
|
+
domain, carrying the eligibility credentials (a membership credential
|
|
77
|
+
naming the member DID). Neither party nor the witness; a failure where
|
|
78
|
+
relied on is presentationInvalid; a witness not using it MUST NOT treat it
|
|
79
|
+
as satisfying anything. The member DID never appears in the VWC, and the
|
|
80
|
+
witness keeps neither it nor the presentation. Privacy: links the pairwise
|
|
81
|
+
relationship DID to the member DID at the witness; proves co-possession in
|
|
82
|
+
one session, not one person; the alternatives are recorded.
|
|
83
|
+
- witness/session/0.2: same payload; its outcomeEvidence names
|
|
84
|
+
submit/0.2#response. The declaration belongs to the initiating document's
|
|
85
|
+
specification (SPEC §7.3 item 20, §4.9.4 check 3), so a 0.1 session cannot
|
|
86
|
+
close with a 0.2 submit. Versions pair one to one.
|
|
87
|
+
- vtc/members/personhood/assert/0.2: optional outcomeEvidence (1–16
|
|
88
|
+
entries, each {session, outcome} carried byte for byte). A VWC counts only
|
|
89
|
+
from a trusted witness, paired by §4.9.4's four checks and the witnessing
|
|
90
|
+
checks; unpaired entries are ignored. A member presents only the VWCs it
|
|
91
|
+
selects.
|
|
92
|
+
- witness/_shared/0.1/outcome-evidence: OutcomeEvidence, shared by
|
|
93
|
+
personhood/assert/0.2 and vta/witness/accept/0.2.
|
|
94
|
+
- vta/witness/{open,present,accept}/0.2 + vta/_shared/0.6 conventions:
|
|
95
|
+
conduct 0.2 sessions; present puts the member presentation in
|
|
96
|
+
memberPresentation; open drops memberLinkUnsupported; a 0.2 session is
|
|
97
|
+
continued only by 0.2 tasks. The 0.1 tasks are unchanged.
|
|
98
|
+
|
|
99
|
+
Bindings regenerated (Rust, TS, Go, Dart).
|
|
100
|
+
|
|
101
|
+
- **rooms/keys**: Act 0.3 — a member takes up a community's offer of a room as themself, with only a KeyPackage their key holder minted (#797)
|
|
102
|
+
|
|
103
|
+
`vtc/rooms/offers/list/0.1` and `vtc/rooms/offers/accept/0.1` must be signed
|
|
104
|
+
as the DID the community addressed its offer to. That DID is the member as
|
|
105
|
+
the community knows them — typically a persona their key holder holds — so
|
|
106
|
+
no surface the member acts from can sign either, and `rooms/keys/act/0.2`
|
|
107
|
+
could not complete them: its `type` pattern admits only `rooms/`, and its
|
|
108
|
+
closed table lists neither. A member could be offered a room and never
|
|
109
|
+
reach it.
|
|
110
|
+
|
|
111
|
+
act 0.3:
|
|
112
|
+
- The table gains `vtc/rooms/offers/list/0.1` and
|
|
113
|
+
`vtc/rooms/offers/accept/0.1`, with no presentation inserted: the member
|
|
114
|
+
holds no room authority yet, and the community checks the offer against
|
|
115
|
+
the document's proof. The `type` pattern admits `vtc/rooms/offers/` beside
|
|
116
|
+
`rooms/` and nothing else of the vtc family (new invalid example: an
|
|
117
|
+
administrator's `vtc/rooms/community/members/add` is refused by schema).
|
|
118
|
+
- Producer item 2: `issuer` REQUIRED for the offer types (the DID the offer
|
|
119
|
+
is addressed to); `recipient` is the community.
|
|
120
|
+
- Recipient item 2b (new): for the offer types, act as `issuer` iff the
|
|
121
|
+
recipient holds a key `issuer`'s DID document lists for `authentication`
|
|
122
|
+
and the caller may act as it; `issuerNotPrincipal` otherwise,
|
|
123
|
+
`principalAmbiguous` when absent; never pick for the caller. No room
|
|
124
|
+
credential is required.
|
|
125
|
+
- Recipient item 10 / Producer item 5 (new): an acceptance's `keyPackage`
|
|
126
|
+
is completed only when the recipient minted it with rooms/keys/key-package
|
|
127
|
+
for that room and that member and still holds its private half (unused,
|
|
128
|
+
unexpired), compared by KeyPackageRef, never by its leaf credential;
|
|
129
|
+
otherwise the new code `keyPackageNotHeld`.
|
|
130
|
+
- Security & Privacy: why item 10 is required — a KeyPackage the key holder
|
|
131
|
+
did not mint becomes the member's leaf with keys someone else holds (the
|
|
132
|
+
client), opening every later record and signing group messages as the
|
|
133
|
+
member outside the key holder and beyond any withdrawal of the client's
|
|
134
|
+
standing; the leaf credential is signed by the leaf key, not the member's
|
|
135
|
+
DID, so the community cannot tell, and only the minting key holder can.
|
|
136
|
+
And why the offer types belong in act rather than a task of their own:
|
|
137
|
+
same entitlement, same delegate refusal (item 3), same closed table — one
|
|
138
|
+
signing-as-the-member surface to audit, not two — and a key holder that
|
|
139
|
+
accepted itself would call the community and route the answer, which item
|
|
140
|
+
7 rules out.
|
|
141
|
+
- Examples: an acceptance completed as the member; a `keyPackageNotHeld`
|
|
142
|
+
refusal.
|
|
143
|
+
|
|
144
|
+
vtc/rooms/offers/{list,accept}/0.1, in place: one paragraph each under
|
|
145
|
+
Authorization pointing a surface without the member's keys at act 0.3.
|
|
146
|
+
Prose only; their wire is unchanged (SPEC §5.2 editorial, as #783).
|
|
147
|
+
|
|
148
|
+
- **vtc/rooms/community/members/remove**: The answer says what removal did in its structured members, not in a notice — clarified in place (#796)
|
|
149
|
+
|
|
150
|
+
Item 4 required the community to "say in its record and its answer that
|
|
151
|
+
removal does not recall what was read", but the response schema has no
|
|
152
|
+
member to say it in (`additionalProperties: false`). An implementation
|
|
153
|
+
could comply only through `ext`, which a caller cannot depend on — so the
|
|
154
|
+
requirement promised callers something the wire never guaranteed.
|
|
155
|
+
|
|
156
|
+
Two ways out: add an optional `notice` member, or drop "and its answer".
|
|
157
|
+
This drops it, and puts the obligation where it does its work:
|
|
158
|
+
|
|
159
|
+
- Community item 4: MUST NOT represent a removal, in its record or answer,
|
|
160
|
+
as recalling what was read, re-sealing what was written, or revoking the
|
|
161
|
+
authority credential. The answer's structured members are what it says:
|
|
162
|
+
`member.state` `removed`, `member.validUntil` (when a host stops honouring
|
|
163
|
+
the authority credential), and `epoch` (sealed tier, admitted member: the
|
|
164
|
+
first epoch sealed without them; absent means nothing was withdrawn
|
|
165
|
+
cryptographically — an open room, or a withdrawn offer).
|
|
166
|
+
- Producer (new): the administrator's surface SHOULD show what removal does
|
|
167
|
+
and does not do on the room's tier, and the member's `validUntil`, before
|
|
168
|
+
the request is signed and before any step-up gesture bound to it; SHOULD
|
|
169
|
+
report the answer from `validUntil`/`epoch`; MUST NOT report any removal
|
|
170
|
+
as ending access to what was already read.
|
|
171
|
+
- New subsection *Why the answer carries no notice*.
|
|
172
|
+
|
|
173
|
+
Why not a field: the statement is identical for every removal on a tier, so
|
|
174
|
+
it carries nothing the caller cannot render from the specification, the
|
|
175
|
+
tier, `validUntil` and `epoch`; as a field it would be server-chosen,
|
|
176
|
+
unlocalised prose shown to an administrator as guidance; and it would
|
|
177
|
+
arrive after the decision. The moment it matters is before the requester
|
|
178
|
+
commits, when a bound step-up ties them to this one document — which is a
|
|
179
|
+
producer obligation, not a response member. An implementation MAY still
|
|
180
|
+
carry a statement under `ext`; a caller MUST NOT depend on one.
|
|
181
|
+
|
|
182
|
+
- **rooms/owner/group**: Add 0.2 — a repeated admission is answered with its Welcome, not alreadyMember (#795)
|
|
183
|
+
|
|
184
|
+
`rooms/owner/group/add/0.1` item 6 settles a pending admission at the next
|
|
185
|
+
request, which keeps the room and the owner's group in step across a lost
|
|
186
|
+
host reply. But the next request is, in the case that matters, the same
|
|
187
|
+
request again: the caller lost the answer and retries. 0.1 settled the
|
|
188
|
+
pending admission, found `member` already in the group, and refused the
|
|
189
|
+
retry `alreadyMember`. The Welcome — the only way the newcomer can join —
|
|
190
|
+
was returned to nobody. The same happens when the recipient applied the
|
|
191
|
+
admission and its own reply to its caller was lost. `vtc/rooms/offers/accept`
|
|
192
|
+
already promises its callers that retrying is safe; under 0.1 it was not.
|
|
193
|
+
|
|
194
|
+
add 0.2:
|
|
195
|
+
- Item 8 (new): the recipient keeps, with the group state, the last
|
|
196
|
+
admission it applied for the room — `member`, the KeyPackage's
|
|
197
|
+
`KeyPackageRef` (RFC 9420 §5.2), epoch, Welcome and ratchet tree — until
|
|
198
|
+
its next advance of the room or 24 hours, whichever comes first. A request
|
|
199
|
+
naming the same room, the same `member` (string-equal) and a KeyPackage of
|
|
200
|
+
the same `KeyPackageRef` is answered, once item 1 and the authorization
|
|
201
|
+
checks pass, with that admission's epoch, Welcome and tree; the recipient
|
|
202
|
+
does not advance the room, contact the host, change its group or build a
|
|
203
|
+
fresh Welcome. Anything else for a member with a leaf is `alreadyMember`.
|
|
204
|
+
- Item 6 hands over to item 8 when the pending admission it applies is the
|
|
205
|
+
one the request repeats.
|
|
206
|
+
- New section *Repeating an admission*: why re-serving is safe (the Welcome
|
|
207
|
+
is HPKE-sealed to the KeyPackage's init key and addressed by its
|
|
208
|
+
KeyPackageRef, RFC 9420 §12.4.3.1; the joiner discards the private half on
|
|
209
|
+
use or expiry, so a late copy opens nothing), why the match is exact (equal
|
|
210
|
+
KeyPackageRefs mean byte-identical KeyPackages, hence the same init key; a
|
|
211
|
+
different KeyPackage for the same member would be a second leaf), and why
|
|
212
|
+
retention is short.
|
|
213
|
+
- `alreadyMember` and `hostUnreachable` meanings updated; retention and
|
|
214
|
+
exposure rationales say what is kept. No code added; payload and response
|
|
215
|
+
schemas unchanged.
|
|
216
|
+
|
|
217
|
+
vtc/rooms/offers/accept/0.1, in place: "Repeating an accept" now points at
|
|
218
|
+
group/add 0.2 items 6 and 8, says the community repeats its own request to
|
|
219
|
+
its VTA unchanged, and that the community's VTA serves group/add at 0.2 or
|
|
220
|
+
later. Prose only; its wire is unchanged, and it now describes what its own
|
|
221
|
+
existing retry promise requires (SPEC §5.2 editorial, as #783).
|
|
222
|
+
|
|
223
|
+
- **vtc/vetting/vetters/pcs-root**: A member may recover a lost enrolment answer within the same label (#791)
|
|
224
|
+
|
|
225
|
+
pcs-root/0.1 refused every second enrolment under a label as
|
|
226
|
+
alreadyEnrolled. That is right for counting, but it made a lost answer
|
|
227
|
+
unrecoverable for the rest of the label: if the community issued and the
|
|
228
|
+
answer never reached the vetter in a form it could open (late arrival, a
|
|
229
|
+
client restart losing the blinding state, a transport drop), the vetter
|
|
230
|
+
held no credential and was locked out of hidden vetting until the next
|
|
231
|
+
vetter/<YYYY-MM> label. This happened in a live run.
|
|
232
|
+
|
|
233
|
+
vtc/vetting/vetters/pcs-root/0.1 (draft, in place per SPEC §5.2), new
|
|
234
|
+
"Recovering a lost answer" section under Authorization:
|
|
235
|
+
- A community MAY answer a second request under a label the member is
|
|
236
|
+
enrolled in with a fresh issuance over the new blinded request, when its
|
|
237
|
+
`id` is the one recorded for the member. Every first-enrolment check still
|
|
238
|
+
applies (live grant, proof, issuedAt, wrongLabel, badRequest).
|
|
239
|
+
- It MUST NOT re-issue unless its suite binds the blinded request to the
|
|
240
|
+
secret `id` is derived from, so every credential under one `id` yields
|
|
241
|
+
the same tags. That binding is what stops a re-issue counting as a second
|
|
242
|
+
vetter; without it the community refuses with alreadyEnrolled.
|
|
243
|
+
- A different `id` is still identifierRebound. No second enrolment is
|
|
244
|
+
recorded. Re-issues SHOULD be bounded per member per label, refused beyond
|
|
245
|
+
the bound with alreadyEnrolled, and audited.
|
|
246
|
+
- What this gives up is "exactly one credential object per member per
|
|
247
|
+
label", not "each member counted once". Distinctness is by tag.
|
|
248
|
+
- Client note: re-run vta/pcs/root-request for the label (it replaces the
|
|
249
|
+
blinding state and keeps the key, so the `id`), send, and pass the answer
|
|
250
|
+
to vta/pcs/root-accept. alreadyEnrolled now means the community does not
|
|
251
|
+
re-issue, or no longer will for this label.
|
|
252
|
+
|
|
253
|
+
The alreadyEnrolled meaning, the proof rationale and the "record only after
|
|
254
|
+
signing" note say the same. hidden/publish/0.1's pointer to pcs-root no
|
|
255
|
+
longer says a second enrolment is impossible. Bindings regenerated.
|
|
256
|
+
|
|
257
|
+
The issue's alternative, an administrator task to clear an enrolment, is
|
|
258
|
+
not taken: re-issuance under the same `id` recovers without an operator
|
|
259
|
+
and without a record of the member's enrolment being erased.
|
|
260
|
+
|
|
261
|
+
- **vtc/join-requests**: Submit and supplement say why a hidden-vetting challenge was refused (#790)
|
|
262
|
+
|
|
263
|
+
A hidden-vetting proof is bound to a single-use challenge issued over
|
|
264
|
+
vtc/vetting/pcs-challenge, and the community spends that challenge when it
|
|
265
|
+
counts the proof. Neither vtc/join-requests/submit nor
|
|
266
|
+
vtc/join-requests/supplement declared a code for a refused challenge, so
|
|
267
|
+
implementations fell back to malformedRequest. An applicant could not tell
|
|
268
|
+
an expired challenge from a spent one, or either from a client bug.
|
|
269
|
+
|
|
270
|
+
submit/0.2, submit/0.3 and supplement/0.1 (draft, in place per SPEC §5.2)
|
|
271
|
+
each declare four codes under the task's own name, none retryable:
|
|
272
|
+
- challengeNotIssued: no challenge held for the applicant's DID;
|
|
273
|
+
- challengeAlreadyUsed: spent by an earlier submission or supplement;
|
|
274
|
+
- challengeExpired: past expiresAt, details MAY carry expiredAt (the
|
|
275
|
+
details schema does not close the object, so an implementation's own
|
|
276
|
+
markers still validate);
|
|
277
|
+
- challengeMismatch: bound to a value other than the open challenge,
|
|
278
|
+
which this attempt spends.
|
|
279
|
+
|
|
280
|
+
A new "Hidden-vetting challenge" section in each says where the proof
|
|
281
|
+
travels (extensions.hiddenVetting), that counting it spends the open
|
|
282
|
+
challenge whether or not the applicant is then admitted, that the message
|
|
283
|
+
never echoes the challenge value, that the value is discarded on use, and
|
|
284
|
+
that a value-free spent marker MAY be kept until expiry so a repeat attempt
|
|
285
|
+
is told challengeAlreadyUsed rather than challengeNotIssued. Recovery is a
|
|
286
|
+
new challenge and a new proof. submit/0.3 adds that a producer SHOULD name
|
|
287
|
+
its criterion on a hidden-vetting submission. supplement/0.1's
|
|
288
|
+
`extensions` is no longer described as wholly uninterpreted, and
|
|
289
|
+
pcs-challenge/0.1's Retention permits the spent marker and points at the
|
|
290
|
+
codes.
|
|
291
|
+
|
|
292
|
+
The issue's note about several hidden-vetting criteria spending one
|
|
293
|
+
challenge is moot: vtc/vetting/hidden/publish refuses a second criterion
|
|
294
|
+
(otherCriterion, #734). Bindings regenerated (Rust ERROR_CODES).
|
|
295
|
+
|
|
296
|
+
- **vtc/members/update**: PublishConsent may be withdrawn by an administrator, never granted — consentGrantForbidden (#789)
|
|
297
|
+
|
|
298
|
+
A member's consent to trust-registry publication is the member's own
|
|
299
|
+
privacy decision, given with `registryConsent` on vtc/join-requests/submit.
|
|
300
|
+
update/0.1 listed `publishConsent` among the fields an administrator may
|
|
301
|
+
change with no direction, so an administrator could raise it and publish
|
|
302
|
+
someone who said no.
|
|
303
|
+
|
|
304
|
+
vtc/members/update/0.1 (draft, in place per SPEC §5.2):
|
|
305
|
+
- `publishConsent` MAY lower consent (true -> false, e.g. a takedown) and
|
|
306
|
+
MAY restate the current value. It MUST NOT raise it: consent becomes true
|
|
307
|
+
only through the member's own registryConsent on a join submit, including
|
|
308
|
+
a rejoin, which writes a fresh member record.
|
|
309
|
+
- New error vtc/members/update:consentGrantForbidden (not retryable),
|
|
310
|
+
checked after notFound and adminRoleForbidden. A refused raise rejects the
|
|
311
|
+
whole update; no other field in the request is applied.
|
|
312
|
+
- A withdrawal: the community SHOULD remove the member's published registry
|
|
313
|
+
record at its next sync, and MUST NOT publish the member again until the
|
|
314
|
+
member consents anew.
|
|
315
|
+
- Security & Privacy says why consent runs one way. Bindings regenerated.
|
|
316
|
+
|
|
14
317
|
## 0.26.11 — 2026-10-16
|
|
15
318
|
|
|
16
319
|
|
|
@@ -5537,6 +5537,11 @@ export interface EpochLink {
|
|
|
5537
5537
|
*/
|
|
5538
5538
|
nonce: string;
|
|
5539
5539
|
}
|
|
5540
|
+
/**
|
|
5541
|
+
* A whole Trust Task document — `id`, `type`, `payload` and every other member, `proof` included — carried exactly as it was sent or received, never re-serialised: a task digest and a proof are taken over its members, and a re-serialised copy reproduces neither reliably. Typed as an open object so every member survives; the checks that give it meaning belong to the task that reads it.
|
|
5542
|
+
*/
|
|
5543
|
+
export interface EvidenceDocument {
|
|
5544
|
+
}
|
|
5540
5545
|
/**
|
|
5541
5546
|
* The authoritative SPEC §7.3 item 14 exposure class of the pending task, derived by the executor from the compiled handler it is about to invoke — never from the registry's declared value.
|
|
5542
5547
|
*/
|
|
@@ -6617,6 +6622,19 @@ export interface OfferCredentials {
|
|
|
6617
6622
|
*/
|
|
6618
6623
|
authority: string;
|
|
6619
6624
|
}
|
|
6625
|
+
/**
|
|
6626
|
+
* One witnessing session's outcome evidence. `session` is the initiating witness/session document; `outcome` is the terminal witness/session/submit #response that the initiating document's own specification declares as its outcome evidence, under the witness's proof, delivering the VWC and its vwcDigestMultibase. A consumer pairs them with a presented VWC by SPEC §4.9.4's four checks and the witnessing checks of witness/session/submit (This response is the outcome evidence).
|
|
6627
|
+
*/
|
|
6628
|
+
export interface OutcomeEvidence {
|
|
6629
|
+
/**
|
|
6630
|
+
* The witness/session document that opened the session. The VWC's taskContext is its id and its taskDigestMultibase is computed over it (SPEC §4.9.3).
|
|
6631
|
+
*/
|
|
6632
|
+
session: EvidenceDocument;
|
|
6633
|
+
/**
|
|
6634
|
+
* The witness/session/submit #response that closed the session, under the witness's proof. It carries the VWC and its vwcDigestMultibase.
|
|
6635
|
+
*/
|
|
6636
|
+
outcome: EvidenceDocument;
|
|
6637
|
+
}
|
|
6620
6638
|
/**
|
|
6621
6639
|
* How the uploader will cut a blob for direct transfer, committed before any byte moves: one storage object, written in `partCount` parts of `partSize` bytes (the last may be shorter), each with its digest. Independent of the chunk manifest, because storage imposes part sizes a chunk document cannot carry; the chunk manifest still describes the blob and readers still check it.
|
|
6622
6640
|
*
|