@openvtc/trust-tasks 0.26.20 → 0.26.22

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 (221) hide show
  1. package/CHANGELOG.md +84 -0
  2. package/dist/_shared/components.d.ts +328 -17
  3. package/dist/_shared/components.d.ts.map +1 -1
  4. package/dist/device/list/0.1/payload.d.ts +4 -4
  5. package/dist/device/list/0.1/payload.d.ts.map +1 -1
  6. package/dist/device/list/0.1/payload.js +4 -2
  7. package/dist/device/list/0.1/payload.js.map +1 -1
  8. package/dist/device/list/0.2/payload.d.ts +4 -4
  9. package/dist/device/list/0.2/payload.d.ts.map +1 -1
  10. package/dist/device/list/0.2/payload.js +4 -2
  11. package/dist/device/list/0.2/payload.js.map +1 -1
  12. package/dist/device/register/0.1/payload.d.ts +4 -4
  13. package/dist/device/register/0.1/payload.d.ts.map +1 -1
  14. package/dist/device/register/0.1/payload.js +4 -2
  15. package/dist/device/register/0.1/payload.js.map +1 -1
  16. package/dist/device/register/0.2/payload.d.ts +4 -4
  17. package/dist/device/register/0.2/payload.d.ts.map +1 -1
  18. package/dist/device/register/0.2/payload.js +4 -2
  19. package/dist/device/register/0.2/payload.js.map +1 -1
  20. package/dist/index.d.ts +24 -0
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +24 -0
  23. package/dist/index.js.map +1 -1
  24. package/dist/voting/_shared/0.1/voting.d.ts +16 -0
  25. package/dist/voting/_shared/0.1/voting.d.ts.map +1 -0
  26. package/dist/voting/_shared/0.1/voting.js +6 -0
  27. package/dist/voting/_shared/0.1/voting.js.map +1 -0
  28. package/dist/voting/ballot/cast/0.1/payload.d.ts +887 -0
  29. package/dist/voting/ballot/cast/0.1/payload.d.ts.map +1 -0
  30. package/dist/voting/ballot/cast/0.1/payload.js +506 -0
  31. package/dist/voting/ballot/cast/0.1/payload.js.map +1 -0
  32. package/dist/voting/board/consistency/0.1/payload.d.ts +389 -0
  33. package/dist/voting/board/consistency/0.1/payload.d.ts.map +1 -0
  34. package/dist/voting/board/consistency/0.1/payload.js +218 -0
  35. package/dist/voting/board/consistency/0.1/payload.js.map +1 -0
  36. package/dist/voting/board/head/0.1/payload.d.ts +380 -0
  37. package/dist/voting/board/head/0.1/payload.d.ts.map +1 -0
  38. package/dist/voting/board/head/0.1/payload.js +224 -0
  39. package/dist/voting/board/head/0.1/payload.js.map +1 -0
  40. package/dist/voting/board/inclusion/0.1/payload.d.ts +449 -0
  41. package/dist/voting/board/inclusion/0.1/payload.d.ts.map +1 -0
  42. package/dist/voting/board/inclusion/0.1/payload.js +246 -0
  43. package/dist/voting/board/inclusion/0.1/payload.js.map +1 -0
  44. package/dist/voting/board/read/0.1/payload.d.ts +1596 -0
  45. package/dist/voting/board/read/0.1/payload.d.ts.map +1 -0
  46. package/dist/voting/board/read/0.1/payload.js +920 -0
  47. package/dist/voting/board/read/0.1/payload.js.map +1 -0
  48. package/dist/voting/election/cancel/0.1/payload.d.ts +540 -0
  49. package/dist/voting/election/cancel/0.1/payload.d.ts.map +1 -0
  50. package/dist/voting/election/cancel/0.1/payload.js +331 -0
  51. package/dist/voting/election/cancel/0.1/payload.js.map +1 -0
  52. package/dist/voting/election/close/0.1/payload.d.ts +540 -0
  53. package/dist/voting/election/close/0.1/payload.d.ts.map +1 -0
  54. package/dist/voting/election/close/0.1/payload.js +330 -0
  55. package/dist/voting/election/close/0.1/payload.js.map +1 -0
  56. package/dist/voting/election/register/0.1/payload.d.ts +1920 -0
  57. package/dist/voting/election/register/0.1/payload.d.ts.map +1 -0
  58. package/dist/voting/election/register/0.1/payload.js +1166 -0
  59. package/dist/voting/election/register/0.1/payload.js.map +1 -0
  60. package/dist/voting/election/show/0.1/payload.d.ts +1824 -0
  61. package/dist/voting/election/show/0.1/payload.d.ts.map +1 -0
  62. package/dist/voting/election/show/0.1/payload.js +1112 -0
  63. package/dist/voting/election/show/0.1/payload.js.map +1 -0
  64. package/dist/voting/result/show/0.1/payload.d.ts +849 -0
  65. package/dist/voting/result/show/0.1/payload.d.ts.map +1 -0
  66. package/dist/voting/result/show/0.1/payload.js +498 -0
  67. package/dist/voting/result/show/0.1/payload.js.map +1 -0
  68. package/dist/vta/_shared/0.1/app-state-record.d.ts +1 -1
  69. package/dist/vta/_shared/0.1/app-state-record.d.ts.map +1 -1
  70. package/dist/vta/_shared/0.4/pcs-engine.d.ts +1 -1
  71. package/dist/vta/_shared/0.4/pcs-engine.d.ts.map +1 -1
  72. package/dist/vta/app-state/delete/1.0/payload.d.ts +1 -1
  73. package/dist/vta/app-state/delete/1.0/payload.d.ts.map +1 -1
  74. package/dist/vta/app-state/get/1.0/payload.d.ts +1 -1
  75. package/dist/vta/app-state/get/1.0/payload.d.ts.map +1 -1
  76. package/dist/vta/app-state/get-many/1.0/payload.d.ts +1 -1
  77. package/dist/vta/app-state/get-many/1.0/payload.d.ts.map +1 -1
  78. package/dist/vta/app-state/list/1.0/payload.d.ts +1 -1
  79. package/dist/vta/app-state/list/1.0/payload.d.ts.map +1 -1
  80. package/dist/vta/app-state/put/1.0/payload.d.ts +1 -1
  81. package/dist/vta/app-state/put/1.0/payload.d.ts.map +1 -1
  82. package/dist/vta/app-state/put-many/1.0/payload.d.ts +1 -1
  83. package/dist/vta/app-state/put-many/1.0/payload.d.ts.map +1 -1
  84. package/dist/vta/pcs/applications/create/0.1/payload.d.ts +1 -1
  85. package/dist/vta/pcs/applications/create/0.1/payload.d.ts.map +1 -1
  86. package/dist/vta/pcs/applications/show/0.1/payload.d.ts +1 -1
  87. package/dist/vta/pcs/applications/show/0.1/payload.d.ts.map +1 -1
  88. package/dist/vta/pcs/attest/0.1/payload.d.ts +1 -1
  89. package/dist/vta/pcs/attest/0.1/payload.d.ts.map +1 -1
  90. package/dist/vta/pcs/prove/0.1/payload.d.ts +1 -1
  91. package/dist/vta/pcs/prove/0.1/payload.d.ts.map +1 -1
  92. package/dist/vta/pcs/root-accept/0.1/payload.d.ts +1 -1
  93. package/dist/vta/pcs/root-accept/0.1/payload.d.ts.map +1 -1
  94. package/dist/vta/pcs/tokens/abandon/0.1/payload.d.ts +1 -1
  95. package/dist/vta/pcs/tokens/abandon/0.1/payload.d.ts.map +1 -1
  96. package/dist/vta/pcs/tokens/accept/0.1/payload.d.ts +1 -1
  97. package/dist/vta/pcs/tokens/accept/0.1/payload.d.ts.map +1 -1
  98. package/dist/vta/pcs/verify-attestation/0.1/payload.d.ts +1 -1
  99. package/dist/vta/pcs/verify-attestation/0.1/payload.d.ts.map +1 -1
  100. package/dist/vta/pcs/vetter/show/0.1/payload.d.ts +1 -1
  101. package/dist/vta/pcs/vetter/show/0.1/payload.d.ts.map +1 -1
  102. package/dist/vta/pcs/vote/0.1/payload.d.ts +2208 -0
  103. package/dist/vta/pcs/vote/0.1/payload.d.ts.map +1 -0
  104. package/dist/vta/pcs/vote/0.1/payload.js +1282 -0
  105. package/dist/vta/pcs/vote/0.1/payload.js.map +1 -0
  106. package/dist/vta/pcs/voter/accept/0.1/payload.d.ts +450 -0
  107. package/dist/vta/pcs/voter/accept/0.1/payload.d.ts.map +1 -0
  108. package/dist/vta/pcs/voter/accept/0.1/payload.js +247 -0
  109. package/dist/vta/pcs/voter/accept/0.1/payload.js.map +1 -0
  110. package/dist/vta/pcs/voter/receipt/0.1/payload.d.ts +531 -0
  111. package/dist/vta/pcs/voter/receipt/0.1/payload.d.ts.map +1 -0
  112. package/dist/vta/pcs/voter/receipt/0.1/payload.js +301 -0
  113. package/dist/vta/pcs/voter/receipt/0.1/payload.js.map +1 -0
  114. package/dist/vta/pcs/voter/register/0.1/payload.d.ts +1934 -0
  115. package/dist/vta/pcs/voter/register/0.1/payload.d.ts.map +1 -0
  116. package/dist/vta/pcs/voter/register/0.1/payload.js +1133 -0
  117. package/dist/vta/pcs/voter/register/0.1/payload.js.map +1 -0
  118. package/dist/vtc/directory/card/present/0.1/payload.d.ts +2 -2
  119. package/dist/vtc/directory/card/present/0.1/payload.js +1 -1
  120. package/dist/vtc/directory/card/present/0.1/payload.js.map +1 -1
  121. package/dist/vtc/elections/cancel/0.1/payload.d.ts +301 -0
  122. package/dist/vtc/elections/cancel/0.1/payload.d.ts.map +1 -0
  123. package/dist/vtc/elections/cancel/0.1/payload.js +183 -0
  124. package/dist/vtc/elections/cancel/0.1/payload.js.map +1 -0
  125. package/dist/vtc/elections/certify/0.1/payload.d.ts +914 -0
  126. package/dist/vtc/elections/certify/0.1/payload.d.ts.map +1 -0
  127. package/dist/vtc/elections/certify/0.1/payload.js +512 -0
  128. package/dist/vtc/elections/certify/0.1/payload.js.map +1 -0
  129. package/dist/vtc/elections/close/0.1/payload.d.ts +301 -0
  130. package/dist/vtc/elections/close/0.1/payload.d.ts.map +1 -0
  131. package/dist/vtc/elections/close/0.1/payload.js +182 -0
  132. package/dist/vtc/elections/close/0.1/payload.js.map +1 -0
  133. package/dist/vtc/elections/create/0.1/payload.d.ts +1656 -0
  134. package/dist/vtc/elections/create/0.1/payload.d.ts.map +1 -0
  135. package/dist/vtc/elections/create/0.1/payload.js +994 -0
  136. package/dist/vtc/elections/create/0.1/payload.js.map +1 -0
  137. package/dist/vtc/elections/list/0.1/payload.d.ts +521 -0
  138. package/dist/vtc/elections/list/0.1/payload.d.ts.map +1 -0
  139. package/dist/vtc/elections/list/0.1/payload.js +290 -0
  140. package/dist/vtc/elections/list/0.1/payload.js.map +1 -0
  141. package/dist/vtc/elections/show/0.1/payload.d.ts +2688 -0
  142. package/dist/vtc/elections/show/0.1/payload.d.ts.map +1 -0
  143. package/dist/vtc/elections/show/0.1/payload.js +1581 -0
  144. package/dist/vtc/elections/show/0.1/payload.js.map +1 -0
  145. package/dist/vtc/elections/tickets/issue/0.1/payload.d.ts +597 -0
  146. package/dist/vtc/elections/tickets/issue/0.1/payload.d.ts.map +1 -0
  147. package/dist/vtc/elections/tickets/issue/0.1/payload.js +318 -0
  148. package/dist/vtc/elections/tickets/issue/0.1/payload.js.map +1 -0
  149. package/dist/vtc/groups/create/0.1/payload.d.ts +4 -4
  150. package/dist/vtc/groups/create/0.1/payload.js +2 -2
  151. package/dist/vtc/groups/create/0.1/payload.js.map +1 -1
  152. package/dist/vtc/groups/list/0.1/payload.d.ts +4 -4
  153. package/dist/vtc/groups/list/0.1/payload.js +2 -2
  154. package/dist/vtc/groups/list/0.1/payload.js.map +1 -1
  155. package/dist/vtc/groups/managers/add/0.1/payload.d.ts +337 -0
  156. package/dist/vtc/groups/managers/add/0.1/payload.d.ts.map +1 -0
  157. package/dist/vtc/groups/managers/add/0.1/payload.js +184 -0
  158. package/dist/vtc/groups/managers/add/0.1/payload.js.map +1 -0
  159. package/dist/vtc/groups/managers/remove/0.1/payload.d.ts +337 -0
  160. package/dist/vtc/groups/managers/remove/0.1/payload.d.ts.map +1 -0
  161. package/dist/vtc/groups/managers/remove/0.1/payload.js +184 -0
  162. package/dist/vtc/groups/managers/remove/0.1/payload.js.map +1 -0
  163. package/dist/vtc/groups/show/0.1/payload.d.ts +4 -4
  164. package/dist/vtc/groups/show/0.1/payload.js +2 -2
  165. package/dist/vtc/groups/show/0.1/payload.js.map +1 -1
  166. package/dist/vtc/groups/update/0.1/payload.d.ts +4 -4
  167. package/dist/vtc/groups/update/0.1/payload.js +2 -2
  168. package/dist/vtc/groups/update/0.1/payload.js.map +1 -1
  169. package/package.json +1 -1
  170. package/src/_shared/components.ts +332 -17
  171. package/src/device/list/0.1/payload.ts +4 -2
  172. package/src/device/list/0.2/payload.ts +4 -2
  173. package/src/device/register/0.1/payload.ts +4 -2
  174. package/src/device/register/0.2/payload.ts +4 -2
  175. package/src/index.ts +24 -0
  176. package/src/voting/_shared/0.1/voting.ts +17 -0
  177. package/src/voting/ballot/cast/0.1/payload.ts +560 -0
  178. package/src/voting/board/consistency/0.1/payload.ts +264 -0
  179. package/src/voting/board/head/0.1/payload.ts +257 -0
  180. package/src/voting/board/inclusion/0.1/payload.ts +300 -0
  181. package/src/voting/board/read/0.1/payload.ts +981 -0
  182. package/src/voting/election/cancel/0.1/payload.ts +368 -0
  183. package/src/voting/election/close/0.1/payload.ts +367 -0
  184. package/src/voting/election/register/0.1/payload.ts +1207 -0
  185. package/src/voting/election/show/0.1/payload.ts +1149 -0
  186. package/src/voting/result/show/0.1/payload.ts +536 -0
  187. package/src/vta/_shared/0.1/app-state-record.ts +1 -1
  188. package/src/vta/_shared/0.4/pcs-engine.ts +1 -1
  189. package/src/vta/app-state/delete/1.0/payload.ts +1 -1
  190. package/src/vta/app-state/get/1.0/payload.ts +1 -1
  191. package/src/vta/app-state/get-many/1.0/payload.ts +1 -1
  192. package/src/vta/app-state/list/1.0/payload.ts +1 -1
  193. package/src/vta/app-state/put/1.0/payload.ts +1 -1
  194. package/src/vta/app-state/put-many/1.0/payload.ts +1 -1
  195. package/src/vta/pcs/applications/create/0.1/payload.ts +1 -1
  196. package/src/vta/pcs/applications/show/0.1/payload.ts +1 -1
  197. package/src/vta/pcs/attest/0.1/payload.ts +1 -1
  198. package/src/vta/pcs/prove/0.1/payload.ts +1 -1
  199. package/src/vta/pcs/root-accept/0.1/payload.ts +1 -1
  200. package/src/vta/pcs/tokens/abandon/0.1/payload.ts +1 -1
  201. package/src/vta/pcs/tokens/accept/0.1/payload.ts +1 -1
  202. package/src/vta/pcs/verify-attestation/0.1/payload.ts +1 -1
  203. package/src/vta/pcs/vetter/show/0.1/payload.ts +1 -1
  204. package/src/vta/pcs/vote/0.1/payload.ts +1365 -0
  205. package/src/vta/pcs/voter/accept/0.1/payload.ts +306 -0
  206. package/src/vta/pcs/voter/receipt/0.1/payload.ts +367 -0
  207. package/src/vta/pcs/voter/register/0.1/payload.ts +1211 -0
  208. package/src/vtc/directory/card/present/0.1/payload.ts +1 -1
  209. package/src/vtc/elections/cancel/0.1/payload.ts +223 -0
  210. package/src/vtc/elections/certify/0.1/payload.ts +565 -0
  211. package/src/vtc/elections/close/0.1/payload.ts +222 -0
  212. package/src/vtc/elections/create/0.1/payload.ts +1041 -0
  213. package/src/vtc/elections/list/0.1/payload.ts +371 -0
  214. package/src/vtc/elections/show/0.1/payload.ts +1671 -0
  215. package/src/vtc/elections/tickets/issue/0.1/payload.ts +394 -0
  216. package/src/vtc/groups/create/0.1/payload.ts +2 -2
  217. package/src/vtc/groups/list/0.1/payload.ts +2 -2
  218. package/src/vtc/groups/managers/add/0.1/payload.ts +230 -0
  219. package/src/vtc/groups/managers/remove/0.1/payload.ts +230 -0
  220. package/src/vtc/groups/show/0.1/payload.ts +2 -2
  221. package/src/vtc/groups/update/0.1/payload.ts +2 -2
@@ -419,6 +419,14 @@ export type BindingSpec = RoomBindingSpec | GrantsBindingSpec | RoleBindingSpec;
419
419
  * The name of one blob: the digest of its BlobManifest, taken over the manifest's RFC 8785 (JCS) canonicalization. sha2-256 is RECOMMENDED and MUST be implemented. Content addressing over ciphertext, never plaintext, so a BlobRef says nothing about what the file contains, and two uploads of one file have different BlobRefs (a fresh `fileId` gives a different key, and so different ciphertext). Rooms cannot be correlated by the files they share. Compared as decoded multihash bytes, never as encoded strings. A BlobRef is defined over the manifest's JSON, as this schema states it and RFC 8785 canonicalizes it, never over any binding's generated type: two bindings that model the manifest as distinct types still compute the same BlobRef from the same JSON.
420
420
  */
421
421
  export type BlobRef = DigestMultibase;
422
+ /**
423
+ * One leaf of a board. A leaf's hash is the RFC 9162 leaf hash of the JCS canonicalization of this object. Entries carry no time of arrival: the order is the board's, and a timestamp would hand anyone who reads the board the timing the registrar's log would need to pair a ticket with its cast.
424
+ */
425
+ export type BoardEntry = CastEntry | ReplacementEntry | LifecycleEntry | ResultEntry;
426
+ /**
427
+ * `public`: anyone reads the board. `private`: the community, the auditors the manifest names and, for one cast's inclusion, the holder of its receipt (VTI-VOT-052).
428
+ */
429
+ export type BoardVisibility = "public" | "private";
422
430
  /**
423
431
  * The control-plane account of a bundle transfer: which algorithm, on what terms, until when. Exactly one of the two shapes — they are mutually exclusive, since StreamDescriptor requires `transportUrl` and `transportToken` and forbids `chunks`, and ChunkedDescriptor requires `chunks` and forbids both.
424
432
  */
@@ -466,7 +474,8 @@ export type Capability_DeviceV0_1 =
466
474
  | "external-auth-use"
467
475
  | "pcs-vetter"
468
476
  | "pcs-applicant"
469
- | "witness-request";
477
+ | "witness-request"
478
+ | "pcs-voter";
470
479
  /**
471
480
  * Fine-grained capability flag scoped to the device's allowed contexts. See SPEC.md for the full semantics of each. Capability values are additive: a consumer MUST ignore a value it does not recognise rather than reject the binding, and MUST NOT treat an unrecognised value as conferring anything.
472
481
  */
@@ -494,7 +503,8 @@ export type Capability_DeviceV0_2 =
494
503
  | "externalAuthUse"
495
504
  | "pcsVetter"
496
505
  | "pcsApplicant"
497
- | "witnessRequest";
506
+ | "witnessRequest"
507
+ | "pcsVoter";
498
508
  /**
499
509
  * Number of chunks in the bundle, equal to ceil(expectedSizeBytes / chunkSize). Bounded at 4096 so that the manifest itself — one digest per chunk — fits in the single document that carries it under the same message-size reasoning as a chunk.
500
510
  */
@@ -669,6 +679,11 @@ export type Duration = string;
669
679
  * Whether the subject is permitted. The ABSENCE of any grant is treated as `deny` (default-deny).
670
680
  */
671
681
  export type Effect_ConsentV0_1 = "allow" | "deny";
682
+ /**
683
+ * An election's identifier, unique within its community. A closed alphabet: it appears in the ticket class label `voter/<electionId>` and is framed into every hash a cast is bound to.
684
+ */
685
+ export type ElectionId = string;
686
+ export type ElectionState = "registered" | "registration" | "voting" | "closed" | "tallied" | "cancelled";
672
687
  /**
673
688
  * The three rights that carry authority over other people's rights: `git.ns.admin`, `git.repo.create` (which makes its holder the owner of every repository they create) and `git.repo.own`. Separation of duties applies to these: nobody grants one to themselves through git-ns/right/grant, or records one for themselves through any other task that grants on the actor's own authority. The explicit self-grant is git-ns/right/break-glass. `git.repo.maintain` and `git.commit.sign` are not elevated.
674
689
  */
@@ -863,10 +878,6 @@ export type JoinRequestId = string;
863
878
  * An optional note from the member to the group's managers. Plain text.
864
879
  */
865
880
  export type JoinRequestMessage = string;
866
- /**
867
- * Application-chosen identifier for a record within a namespace. Opaque to the maintainer: it MUST NOT be parsed, normalized, or case-folded, and prefix matching in `list` is a byte-prefix comparison over the UTF-8 encoding. Applications SHOULD use `/`-delimited hierarchical keys (`community/acme`, `contact/z6Mk…`) so that `prefix` can address a record family, but the delimiter is a convention between an application and itself — the maintainer attaches no meaning to it.
868
- */
869
- export type Key = string;
870
881
  /**
871
882
  * Where the private key came from. `derived` means the maintainer generated it from a seed it holds and can reproduce it from `derivationPath`; `imported` means it arrived from outside and exists only as stored material; `internal` means the maintainer generated it from a CSPRNG and it is reproducible from nothing at all. The distinction is operationally load-bearing: a `derived` key survives a seed restore, an `imported` one is lost unless it was backed up separately, and an `internal` one cannot be recovered by any means once the maintainer's storage is gone. This member is also the only way a consumer can confirm that a `keys/create` request for an `internal` key was honoured rather than silently downgraded to a derived one — see that specification's `internal` member.
872
883
  */
@@ -895,6 +906,14 @@ export type KeyStatus = "active" | "revoked";
895
906
  * Cryptographic algorithm the key material belongs to. `ed25519` signs (EdDSA), `x25519` performs key agreement and never signs, `p256` signs (ES256), and `mldsa44` and `mldsa65` sign with the post-quantum ML-DSA scheme of US NIST FIPS 204. The set is expected to grow as algorithms are standardised, and growing it is a MINOR change under SPEC.md §5.2: `keyType` selects no schema branch, so adding a value relaxes a constraint rather than narrowing one, and the generated libraries mark this enumeration non-exhaustive so that a consumer absorbs a new value rather than failing to compile. Two ML-DSA parameter sets are carried because two specifications require different ones — W3C Quantum-Resistant Cryptosuites defines Data Integrity suites only for ML-DSA-44, while Trust Spanning Protocol Rev 3 §8.1 mandates ML-DSA-65 — so the parameter set is chosen by whatever consumes the key and the two are not redundant. A consumer that does not implement a value it receives MUST refuse the document rather than substitute one it does support.
896
907
  */
897
908
  export type KeyType = "ed25519" | "x25519" | "p256" | "mldsa44" | "mldsa65";
909
+ /**
910
+ * A question or option key, unique within its manifest or question.
911
+ */
912
+ export type Key_VotingV0_1 = string;
913
+ /**
914
+ * Application-chosen identifier for a record within a namespace. Opaque to the maintainer: it MUST NOT be parsed, normalized, or case-folded, and prefix matching in `list` is a byte-prefix comparison over the UTF-8 encoding. Applications SHOULD use `/`-delimited hierarchical keys (`community/acme`, `contact/z6Mk…`) so that `prefix` can address a record family, but the delimiter is a convention between an application and itself — the maintainer attaches no meaning to it.
915
+ */
916
+ export type Key_VtaV0_1 = string;
898
917
  /**
899
918
  * The interaction kind: a 1:1 direct message, a multi-party group, or a broadcast channel.
900
919
  */
@@ -961,14 +980,24 @@ export type MemberState = "offered" | "admitted" | "removed";
961
980
  * How the member came to be in the group. `added`: by a manager. `joined`: they joined an open group. `requestApproved`: a manager approved their request. `rule`: a dynamic group's rule admits them.
962
981
  */
963
982
  export type MembershipSource = "added" | "joined" | "requestApproved" | "rule";
983
+ /**
984
+ * An RFC 9162 audit or consistency path: the node hashes, in the order §2.1.3 / §2.1.4 define.
985
+ *
986
+ * @maxItems 64
987
+ */
988
+ export type MerklePath = DigestMultibase[];
964
989
  /**
965
990
  * How the request reaches the approver. A CLOSED list. Version 0.1 defines `scan`: the starter shows a trigger link (as a QR code that is also a clickable link, TRIGGER-LINK.md) and the approver's wallet reads it. `code` (a typed code of at least 8 characters, under strict rate limits) and `push` (sent to the approver's enrolled devices) are reserved names.
966
991
  */
967
992
  export type Mode = "scan";
993
+ /**
994
+ * A binary value, multibase base58btc over the suite's canonical (compressed) encoding.
995
+ */
996
+ export type Multibase_VotingV0_1 = string;
968
997
  /**
969
998
  * A binary value, multibase base58btc over the suite's canonical encoding.
970
999
  */
971
- export type Multibase = string;
1000
+ export type Multibase_VtaV0_4 = string;
972
1001
  /**
973
1002
  * Scopes one application's records within a context, so several tools can share a context without colliding — `openvtc`, `cnm`, an agent runtime. The maintainer MUST NOT interpret the value; it is an opaque partition name. Namespaces are first-come and unreserved, so an application SHOULD pick a stable, specific one: a future per-namespace ACL would grant on this exact string, which makes renaming a namespace a migration rather than an edit.
974
1003
  */
@@ -1300,6 +1329,10 @@ export type Purpose = "login";
1300
1329
  * A device's platform push channel — the body the device registers with its push GATEWAY (push wake-up binding, https://trusttasks.org/binding/push/0.1; modeled on Aries RFC 0699/0734). The gateway holds this token and returns an opaque WakeHandle in exchange; the token is held by the gateway ONLY, never by the mediator or the maintainer/VTA. The gateway uses it to send a contentless wake-up when an authorized trigger asks — the push payload never carries Trust Task content. Tagged union over the discriminator `platform`.
1301
1330
  */
1302
1331
  export type PushRegistration = Apns | Fcm | WebPush;
1332
+ /**
1333
+ * One question. Tagged union over `type`.
1334
+ */
1335
+ export type Question = ChoiceQuestion | RankingQuestion | ScoreQuestion | TextQuestion;
1303
1336
  /**
1304
1337
  * Which of an account's two queues. `receive` holds messages addressed to the account awaiting its pickup. `send` holds messages the account sent that are still held against it until their recipient deletes them — so a stalled recipient fills its senders' send queues.
1305
1338
  */
@@ -1408,6 +1441,10 @@ export type RetentionPolicy = "chained" | "fromJoin";
1408
1441
  * **Tiers.** On a `private` room a host MUST refuse a list carrying a `credential` or `subject` entry: a presentation there withholds the credential and its subject, so such an entry is one the host cannot apply and a disclosure of who was in the room. Only `room` entries are permitted, and a host serving a `private` room MUST refuse any presentation for which it cannot establish that no credential in it has a `validFrom` earlier than the latest `room` entry's `revokedAt`.
1409
1442
  */
1410
1443
  export type RevocationEntry = CredentialRevocation | SubjectRevocation | RoomRevocation;
1444
+ /**
1445
+ * What a later, different ballot under one ticket does: `replace` the earlier one, or be refused (`refuse`) (VTI-VOT-041).
1446
+ */
1447
+ export type Revote = "replace" | "refuse";
1411
1448
  /**
1412
1449
  * One of the five git rights. Each string is also the TRQP `action` the VTC publishes the right under in its Trust Registry, so it is carried verbatim. `git.ns.admin` and `git.repo.create` apply to a namespace resource; `git.repo.own` and `git.repo.maintain` to a repository resource; `git.commit.sign` to either.
1413
1450
  */
@@ -1501,6 +1538,10 @@ export type SealedEnvelope_VaultV0_2 =
1501
1538
  * A sealed-transfer bundle: OpenPGP-style ASCII armor around an HPKE-sealed `SealedPayloadV1` (base mode, X25519-HKDF-SHA256 KEM, HKDF-SHA256 KDF, ChaCha20-Poly1305 AEAD, info string `vta-sealed-transfer/v1`), with a producer assertion and Bundle-Id, Chunk and Digest-Algo headers bound into the associated data. Each task states the key it is sealed to: a single-use wrapping key from keys/import-wrapping-key for external/accounts/secret/set, and the caller's key-agreement key for external/credentials/issue. Its cleartext is an ExternalSecretPayload, an ExternalCredentialPayload or, from external/credentials/issue 0.2 for `s3-static-presign`, a PresignedRequestSet. The only form in which secret material crosses the wire in this family, in either direction: the seal is what keeps a terminating proxy, a relay, a request log or a debug dump of "the response" from ever holding a usable secret, whatever transport carried the document.
1502
1539
  */
1503
1540
  export type SealedTransferBundle = string;
1541
+ /**
1542
+ * `open`: ballots are recorded on the board as cast. `sealed`: ballots are encrypted to a jointly generated election key and decrypted after voting closes. `talliedEncrypted`: ballots are encrypted and only the totals are ever decrypted (VTI-VOT-060). Version 0.1 of the voting tasks carries open ballots only; a ballot box refuses to register any other level with `voting/election/register:unsupportedSecrecy` until the trustee tasks are specified.
1543
+ */
1544
+ export type SecrecyLevel = "open" | "sealed" | "talliedEncrypted";
1504
1545
  /**
1505
1546
  * Which secret is set, without being a way to test guesses at it. `hmacsha256:` followed by the base64url encoding, without padding, of the first 16 bytes of HMAC-SHA256 over the secret's bytes under a fingerprint key the custodian holds and never discloses. Comparable only between fingerprints made by the same custodian: a re-entered value can be confirmed, while the same secret at two custodians gives unrelated fingerprints. Never a bare hash of the secret, which would let anyone who reads it run a dictionary against it offline; and deliberately not a DigestMultibase, since multihash has no code for a keyed digest.
1506
1547
  */
@@ -4238,6 +4279,19 @@ export interface AgentNameEntry {
4238
4279
  createdAt?: number;
4239
4280
  ext?: Ext;
4240
4281
  }
4282
+ /**
4283
+ * The answer to one question. Exactly one member besides `question` is present, matching the question's type, or `abstain` for an optional question left unanswered.
4284
+ */
4285
+ export interface Answer {
4286
+ question: Key_VotingV0_1;
4287
+ choice?: Key_VotingV0_1[];
4288
+ ranking?: Key_VotingV0_1[];
4289
+ scores?: {
4290
+ [k: string]: number | undefined;
4291
+ };
4292
+ text?: string;
4293
+ abstain?: true;
4294
+ }
4241
4295
  /**
4242
4296
  * A record as the maintainer holds it. `value` is absent in three distinct situations and a consumer MUST NOT conflate them: the record is a tombstone (`deleted` is true); the caller asked for a metadata-only view (`list` without `includeValues`); or the value genuinely is the JSON literal `null`, in which case `value` is PRESENT and null. This is why `deleted` is required rather than defaulted — a consumer that has to infer deletion from an absent value gets the tombstone case wrong exactly when convergence depends on it.
4243
4297
  */
@@ -4247,7 +4301,7 @@ export interface AppStateRecord {
4247
4301
  */
4248
4302
  contextId: string;
4249
4303
  namespace: Namespace;
4250
- key: Key;
4304
+ key: Key_VtaV0_1;
4251
4305
  /**
4252
4306
  * The namespace counter value this record's most recent write took. Supply it as `expectedVersion` on the next write to make that write conditional on nothing having changed in between.
4253
4307
  */
@@ -4303,7 +4357,7 @@ export interface ApplicationSummary {
4303
4357
  /**
4304
4358
  * The applicant's PCS identifier: what a vetter attests to, carried in a vetting/request's `ext`.
4305
4359
  */
4306
- id: Multibase;
4360
+ id: Multibase_VtaV0_4;
4307
4361
  /**
4308
4362
  * The metadata of each attestation held, in the order received. Metadata names no vetter.
4309
4363
  */
@@ -4426,7 +4480,7 @@ export interface Attestation {
4426
4480
  /**
4427
4481
  * The attestation: a tag, a shown class credential and a proof. It names no vetter.
4428
4482
  */
4429
- attestation: Multibase;
4483
+ attestation: Multibase_VtaV0_4;
4430
4484
  meta: StatementMeta;
4431
4485
  token: AttestationToken;
4432
4486
  }
@@ -4441,11 +4495,11 @@ export interface AttestationToken {
4441
4495
  /**
4442
4496
  * The serial revealed by the spend.
4443
4497
  */
4444
- serial: Multibase;
4498
+ serial: Multibase_VtaV0_4;
4445
4499
  /**
4446
4500
  * The re-randomised token signature, verifiable under the published token key.
4447
4501
  */
4448
- shown: Multibase;
4502
+ shown: Multibase_VtaV0_4;
4449
4503
  }
4450
4504
  /**
4451
4505
  * One atomic fact a holder keeps about themselves. Several attributes MAY share a `type` — three phone numbers, a legal name and a preferred name — which is why `attributeId` is the identity of a fact and `type` is not. The pool is flat and unordered; ordering is a profile's concern.
@@ -4741,6 +4795,18 @@ export interface BackupEnvelope {
4741
4795
  */
4742
4796
  ciphertext: string;
4743
4797
  }
4798
+ /**
4799
+ * An open ballot: one answer per question of the manifest, in any order. The bytes a cast's proof binds are the RFC 8785 (JCS) canonicalization of this object as received.
4800
+ */
4801
+ export interface Ballot {
4802
+ electionId: ElectionId;
4803
+ manifestDigest: DigestMultibase;
4804
+ /**
4805
+ * @minItems 1
4806
+ * @maxItems 128
4807
+ */
4808
+ answers: [Answer, ...Answer[]];
4809
+ }
4744
4810
  /**
4745
4811
  * The ciphertext manifest of one blob, committed by the uploader before any byte moves. Its digest is the BlobRef. Every chunk is checked against `chunks.chunkDigests` on arrival and the reassembled blob against `digest`, so a host can neither accept nor serve bytes the uploader did not commit to. The manifest also appears, by its BlobRef, inside the sealed FileManifest the author signs; a reader who opens the record therefore knows which ciphertext its author meant, and a host cannot substitute a different blob under the same record.
4746
4812
  *
@@ -4759,6 +4825,39 @@ export interface BlobManifest {
4759
4825
  */
4760
4826
  digest: DigestMultibase;
4761
4827
  }
4828
+ export interface CastEntry {
4829
+ kind: "cast";
4830
+ cast: Cast;
4831
+ }
4832
+ /**
4833
+ * The cast at `replaces` is no longer counted: a later cast under the same tag is.
4834
+ */
4835
+ export interface ReplacementEntry {
4836
+ kind: "replaced";
4837
+ tag: Multibase_VotingV0_1;
4838
+ replaces: number;
4839
+ by: number;
4840
+ }
4841
+ export interface LifecycleEntry {
4842
+ kind: "opened" | "closed" | "closedEarly" | "cancelled";
4843
+ at: string;
4844
+ }
4845
+ export interface ResultEntry {
4846
+ kind: "result";
4847
+ result: ElectionResult;
4848
+ }
4849
+ /**
4850
+ * A board's tree head (RFC 9162 §2.1). A head is signed by being carried in a document the ballot box signs; whoever keeps a head keeps that whole document.
4851
+ */
4852
+ export interface BoardHead {
4853
+ electionId: ElectionId;
4854
+ treeSize: number;
4855
+ /**
4856
+ * The RFC 9162 Merkle tree hash (SHA-256) of the first `treeSize` entries, as a multihash.
4857
+ */
4858
+ rootHash: DigestMultibase;
4859
+ issuedAt: string;
4860
+ }
4762
4861
  /**
4763
4862
  * Whether each step that turns commit trust on for a repository is in place, as last reported. A step that this forge's plan does not need reads `true`.
4764
4863
  */
@@ -4968,6 +5067,14 @@ export interface CardValues {
4968
5067
  * A whole Trust Task document — `id`, `type`, `payload` and every other member, `proof` included — carried between the VTA and the witness by the client: one the VTA built and signed for the client to send, or one the witness returned for the client to hand back. Typed as an open object so every member survives a round trip: carried exactly as built or received, never re-serialised, because its proof is over itself. Its envelope is checked by the VTA against the session record (CONVENTIONS.md §3), not by this schema.
4969
5068
  */
4970
5069
  export interface CarriedDocument {}
5070
+ /**
5071
+ * A ballot and the PCS attestation that admits it (VTI-VOT-030). `attestation` is the suite's canonical encoding of the attestation made for the election point with the ballot context bound in (CONVENTIONS §3); `tag` repeats its tag so a ballot box can refuse a duplicate before the pairing check.
5072
+ */
5073
+ export interface Cast {
5074
+ ballot: Ballot;
5075
+ tag: Multibase_VotingV0_1;
5076
+ attestation: Multibase_VotingV0_1;
5077
+ }
4971
5078
  /**
4972
5079
  * The terms of a `chunkedTrustTask` transfer, committed before any chunk moves. On export the recipient states them in the descriptor; on import the producer pre-commits them in the request and the recipient echoes them. Either way the manifest arrives in a document whose proof is REQUIRED, so the per-chunk digests are authenticated by the party that computed them and each chunk can be verified — and a single bad chunk re-fetched or refused — on arrival rather than only after reassembly.
4973
5080
  *
@@ -6233,6 +6340,31 @@ export interface DisclosedField {
6233
6340
  */
6234
6341
  facet?: boolean;
6235
6342
  }
6343
+ /**
6344
+ * The statement a community publishes, and shows a member before they request a ticket, about how one election is run (VTI-VOT-090). Generated from the election's manifest and the community's configuration, never written by hand.
6345
+ */
6346
+ export interface Disclosure {
6347
+ /**
6348
+ * The ballot box's DID.
6349
+ */
6350
+ ballotBox: string;
6351
+ /**
6352
+ * Who operates the ballot box, as the community names them.
6353
+ */
6354
+ ballotBoxOperator: string;
6355
+ /**
6356
+ * Whether the party operating the community's VTC also operates the ballot box.
6357
+ */
6358
+ sameOperator: boolean;
6359
+ trustees?: Trustees;
6360
+ boardVisibility: BoardVisibility;
6361
+ auditors: string[];
6362
+ revote: Revote;
6363
+ /**
6364
+ * Always false: a voter can prove how they voted, so the community cannot protect a member against being made to vote a certain way.
6365
+ */
6366
+ coercionResistance: false;
6367
+ }
6236
6368
  /**
6237
6369
  * The member's three discoverability decisions, made separately.
6238
6370
  */
@@ -6514,6 +6646,33 @@ export interface EffectiveLimits {
6514
6646
  */
6515
6647
  hostCeilingBytes?: number;
6516
6648
  }
6649
+ /**
6650
+ * An election's result, computable by anyone who can read its board from the board and the registration alone (VTI-VOT-070).
6651
+ */
6652
+ export interface ElectionResult {
6653
+ electionId: ElectionId;
6654
+ manifestDigest: DigestMultibase;
6655
+ ballotsCounted: number;
6656
+ questions: QuestionResult[];
6657
+ /**
6658
+ * The head of the board as it stood at close: the result counts exactly its entries.
6659
+ */
6660
+ head: BoardHead;
6661
+ }
6662
+ /**
6663
+ * A ballot box's view of one election.
6664
+ */
6665
+ export interface ElectionSummary {
6666
+ electionId: ElectionId;
6667
+ community: string;
6668
+ manifestDigest: DigestMultibase;
6669
+ state: ElectionState;
6670
+ /**
6671
+ * Distinct tags with a counted ballot.
6672
+ */
6673
+ ballotsAdmitted: number;
6674
+ head: BoardHead;
6675
+ }
6517
6676
  export interface EncryptionParams {
6518
6677
  /**
6519
6678
  * AEAD identifier, e.g. `aes-256-gcm`.
@@ -6986,7 +7145,7 @@ export interface Group {
6986
7145
  */
6987
7146
  memberCount?: number;
6988
7147
  /**
6989
- * Entries holding `vtc.groups.manage` qualified to this group, read from the access-control list. Informational: managers are appointed by an access-control grant, never by this record.
7148
+ * Entries holding `vtc.groups.manage` qualified to this group, read from the access-control list. Informational: managers are appointed by an access-control grant (vtc/groups/managers/add), never by this record.
6990
7149
  *
6991
7150
  * @maxItems 256
6992
7151
  */
@@ -7070,7 +7229,7 @@ export interface HiddenVettingSubmission {
7070
7229
  /**
7071
7230
  * The applicant's PCS identifier for this application.
7072
7231
  */
7073
- id: Multibase;
7232
+ id: Multibase_VtaV0_4;
7074
7233
  /**
7075
7234
  * The DID the applicant joins as. Bound to `id` by `idBinding`.
7076
7235
  */
@@ -7092,7 +7251,7 @@ export interface HiddenVettingSubmission {
7092
7251
  /**
7093
7252
  * The issuance proof, which carries the attestations.
7094
7253
  */
7095
- proof: Multibase;
7254
+ proof: Multibase_VtaV0_4;
7096
7255
  }
7097
7256
  /**
7098
7257
  * One histogram's distribution, in the Prometheus cumulative-bucket convention: each bucket's `count` includes every observation at or below its `le`.
@@ -7555,6 +7714,51 @@ export interface LocalSettings {
7555
7714
  */
7556
7715
  root: string;
7557
7716
  }
7717
+ /**
7718
+ * What an election asks and how it is decided (VTI-VOT-010). Its digest (`manifestDigest`) is the SHA-256 multihash of its RFC 8785 (JCS) canonicalization, and every cast is bound to it (VTI-VOT-011).
7719
+ */
7720
+ export interface Manifest {
7721
+ electionId: ElectionId;
7722
+ /**
7723
+ * The community's DID.
7724
+ */
7725
+ community: string;
7726
+ title?: string;
7727
+ description?: string;
7728
+ /**
7729
+ * @minItems 1
7730
+ * @maxItems 128
7731
+ */
7732
+ questions: [Question, ...Question[]];
7733
+ secrecy: SecrecyLevel;
7734
+ roll: RollRule;
7735
+ registrationOpens: string;
7736
+ votingOpens: string;
7737
+ votingCloses: string;
7738
+ revote: Revote;
7739
+ board: {
7740
+ visibility: BoardVisibility;
7741
+ auditors: string[];
7742
+ };
7743
+ /**
7744
+ * The DID of the voting service that holds the board.
7745
+ */
7746
+ ballotBox: string;
7747
+ trustees?: Trustees;
7748
+ /**
7749
+ * Whether the community treats the result as deciding something; creating a binding election takes another administrator's consent (VTI-VOT-081).
7750
+ */
7751
+ binding: boolean;
7752
+ allowEarlyClose: boolean;
7753
+ /**
7754
+ * Open elections only: whether running totals may be read while voting is open (VTI-VOT-061).
7755
+ */
7756
+ resultsBeforeClose: boolean;
7757
+ /**
7758
+ * Counted ballots required before any text answer is disclosed (VTI-VOT-065).
7759
+ */
7760
+ textReleaseThreshold: number;
7761
+ }
7558
7762
  /**
7559
7763
  * The mediator's per-account access-control capability set, expressed as named booleans (the transport-agnostic form of the mediator's internal capability flags). On a set request, members omitted are left unchanged; a get/response carries the full realized set.
7560
7764
  */
@@ -8587,6 +8791,93 @@ export interface QueryContext {
8587
8791
  locator?: string;
8588
8792
  [k: string]: string | undefined;
8589
8793
  }
8794
+ /**
8795
+ * Select between `minSelections` and `maxSelections` of `options`. A yes/no/abstain motion is a choice of exactly one of three.
8796
+ */
8797
+ export interface ChoiceQuestion {
8798
+ key: Key_VotingV0_1;
8799
+ type: "choice";
8800
+ text?: string;
8801
+ /**
8802
+ * @minItems 2
8803
+ * @maxItems 256
8804
+ */
8805
+ options: [QuestionOption, QuestionOption, ...QuestionOption[]];
8806
+ minSelections: number;
8807
+ maxSelections: number;
8808
+ optional: boolean;
8809
+ }
8810
+ /**
8811
+ * Order `options`; a ballot ranks every option or, when `partial` is true, a prefix of them.
8812
+ */
8813
+ export interface RankingQuestion {
8814
+ key: Key_VotingV0_1;
8815
+ type: "ranking";
8816
+ text?: string;
8817
+ /**
8818
+ * @minItems 2
8819
+ * @maxItems 64
8820
+ */
8821
+ options: [QuestionOption, QuestionOption, ...QuestionOption[]];
8822
+ partial: boolean;
8823
+ optional: boolean;
8824
+ }
8825
+ /**
8826
+ * Give each option an integer score within [min, max].
8827
+ */
8828
+ export interface ScoreQuestion {
8829
+ key: Key_VotingV0_1;
8830
+ type: "score";
8831
+ text?: string;
8832
+ /**
8833
+ * @minItems 1
8834
+ * @maxItems 256
8835
+ */
8836
+ options: [QuestionOption, ...QuestionOption[]];
8837
+ min: number;
8838
+ max: number;
8839
+ optional: boolean;
8840
+ }
8841
+ /**
8842
+ * Free text of at most `maxLength` characters.
8843
+ */
8844
+ export interface TextQuestion {
8845
+ key: Key_VotingV0_1;
8846
+ type: "text";
8847
+ text?: string;
8848
+ maxLength: number;
8849
+ optional: boolean;
8850
+ }
8851
+ export interface QuestionOption {
8852
+ key: Key_VotingV0_1;
8853
+ /**
8854
+ * Display text. Absent from a manifest registered with a ballot box that holds no question text (VTI-VOT-014).
8855
+ */
8856
+ label?: string;
8857
+ }
8858
+ /**
8859
+ * One question's totals. `choice`: selections per option. `ranking`: per option, how many ballots placed it at each position (index 0 = first). `score`: per option, the sum and the number of ballots that scored it. `text`: the answers, in board order, withheld (`withheld: true`) below the manifest's `textReleaseThreshold`. `abstained` counts ballots that left the question unanswered.
8860
+ */
8861
+ export interface QuestionResult {
8862
+ question: Key_VotingV0_1;
8863
+ abstained: number;
8864
+ choice?: {
8865
+ [k: string]: number | undefined;
8866
+ };
8867
+ ranking?: {
8868
+ [k: string]: number[] | undefined;
8869
+ };
8870
+ score?: {
8871
+ [k: string]:
8872
+ | {
8873
+ sum: number;
8874
+ count: number;
8875
+ }
8876
+ | undefined;
8877
+ };
8878
+ text?: string[];
8879
+ withheld?: boolean;
8880
+ }
8590
8881
  /**
8591
8882
  * The depth of one queue and its effective limit.
8592
8883
  */
@@ -9239,6 +9530,13 @@ export interface RoleSummary {
9239
9530
  */
9240
9531
  preRotationCommitments?: number;
9241
9532
  }
9533
+ /**
9534
+ * Who may be issued a ticket (VTI-VOT-021): the community's active members, its active members and the parties `listed` names, or only the parties `listed` names.
9535
+ */
9536
+ export interface RollRule {
9537
+ rule: "members" | "membersAndListed" | "listed";
9538
+ listed?: string[];
9539
+ }
9242
9540
  /**
9243
9541
  * The outcome of a rollback. Distinct from ServiceMutationResult because a rollback can legitimately publish nothing: if the previous state already equals the current one there is no change to write, and `kind: "noOp"` says so with `logEntryVersionId` absent. Treating that as a failure would be wrong — the requested state holds — and treating it as an ordinary success would report a log entry that does not exist.
9244
9542
  */
@@ -10401,6 +10699,16 @@ export interface TrustRecord {
10401
10699
  };
10402
10700
  record_type: RecordType;
10403
10701
  }
10702
+ /**
10703
+ * The trustees of a sealed or tallied-encrypted election and the number of them decryption needs (VTI-VOT-062). Neither the community nor the ballot box may be one.
10704
+ */
10705
+ export interface Trustees {
10706
+ /**
10707
+ * @minItems 2
10708
+ */
10709
+ dids: [string, string, ...string[]];
10710
+ threshold: number;
10711
+ }
10404
10712
  /**
10405
10713
  * Trust Spanning Protocol message (https://trustoverip.github.io/tswg-tsp-specification/). Reserved variant; no OpenVTC component reads or emits this today. Listed in the union so implementations can declare intent to use TSP in discovery and so consumers reject `tsp-message` envelopes explicitly (`envelopeUnsupported`) until they're wired up — rather than silently failing in DIDComm parsing.
10406
10714
  */
@@ -10861,7 +11169,7 @@ export interface VetterSummary {
10861
11169
  /**
10862
11170
  * The vetter's PCS identifier for this community.
10863
11171
  */
10864
- id: Multibase;
11172
+ id: Multibase_VtaV0_4;
10865
11173
  /**
10866
11174
  * Class labels this vetter holds a credential under, newest first.
10867
11175
  */
@@ -11040,6 +11348,13 @@ export interface VettingRequirements {
11040
11348
  extCritical?: ExtCritical;
11041
11349
  [k: string]: unknown | undefined;
11042
11350
  }
11351
+ /**
11352
+ * The community's published voting parameters: the PCS suite and the voting verification key tickets are issued under (VTI-VOT-020). Distinct from its hidden-vetting helper key.
11353
+ */
11354
+ export interface VotingParameters {
11355
+ suite: "ps-ddh-bls12381";
11356
+ votingKey: Multibase_VotingV0_1;
11357
+ }
11043
11358
  /**
11044
11359
  * An opaque, gateway-issued reference to a device's push channel (push wake-up binding, https://trusttasks.org/binding/push/0.1). The push gateway returns it to the device at registration; the device conveys it to its VTA (device/set-wake), and the VTA provisions it to authorized triggers (its mediator and/or itself). The raw platform push token (APNs/FCM/WebPush) is held ONLY by the gateway and is never represented here — the handle abstracts the platform, so adding new push methods (e.g. PWA Web Push) needs no change to triggers or VTA config. A handle is a bearer capability to *request* a wake (subject to the gateway's allowlist), never to read the channel.
11045
11360
  */
@@ -11165,7 +11480,7 @@ export interface WitnessKey {
11165
11480
  * The outcome of one write within a `vta/app-state/put-many` batch. Per-record rather than per-batch, because the default batch mode applies each write on its own merits: a caller flushing ten unrelated edits needs to know which one conflicted, not merely that something did.
11166
11481
  */
11167
11482
  export interface WriteResult {
11168
- key: Key;
11483
+ key: Key_VtaV0_1;
11169
11484
  /**
11170
11485
  * `written`: applied, and `version` carries the new value. `conflict`: `expectedVersion` did not match; `currentVersion`, `currentValue` and `currentDeleted` carry the maintainer's view so the caller can resolve without a re-read. `tooLarge`: the value exceeded the per-record cap; `limitBytes` and `actualBytes` say by how much. `notFound`: a `mergePatch` write named an address with no live record. `skipped`: atomic mode only — this write was not attempted because another in the batch failed.
11171
11486
  */
@@ -257,7 +257,8 @@ export const PAYLOAD_SCHEMA = {
257
257
  "external-auth-use",
258
258
  "pcs-vetter",
259
259
  "pcs-applicant",
260
- "witness-request"
260
+ "witness-request",
261
+ "pcs-voter"
261
262
  ],
262
263
  "description": "Fine-grained capability flag scoped to the device's allowed contexts. See SPEC.md for the full semantics of each. Capability values are additive: a consumer MUST ignore a value it does not recognise rather than reject the binding, and MUST NOT treat an unrecognised value as conferring anything."
263
264
  },
@@ -605,7 +606,8 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
605
606
  "external-auth-use",
606
607
  "pcs-vetter",
607
608
  "pcs-applicant",
608
- "witness-request"
609
+ "witness-request",
610
+ "pcs-voter"
609
611
  ],
610
612
  "description": "Fine-grained capability flag scoped to the device's allowed contexts. See SPEC.md for the full semantics of each. Capability values are additive: a consumer MUST ignore a value it does not recognise rather than reject the binding, and MUST NOT treat an unrecognised value as conferring anything."
611
613
  },
@@ -257,7 +257,8 @@ export const PAYLOAD_SCHEMA = {
257
257
  "externalAuthUse",
258
258
  "pcsVetter",
259
259
  "pcsApplicant",
260
- "witnessRequest"
260
+ "witnessRequest",
261
+ "pcsVoter"
261
262
  ],
262
263
  "description": "Fine-grained capability flag scoped to the device's allowed contexts. See SPEC.md for the full semantics of each. Capability values are additive: a consumer MUST ignore a value it does not recognise rather than reject the binding, and MUST NOT treat an unrecognised value as conferring anything."
263
264
  },
@@ -605,7 +606,8 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
605
606
  "externalAuthUse",
606
607
  "pcsVetter",
607
608
  "pcsApplicant",
608
- "witnessRequest"
609
+ "witnessRequest",
610
+ "pcsVoter"
609
611
  ],
610
612
  "description": "Fine-grained capability flag scoped to the device's allowed contexts. See SPEC.md for the full semantics of each. Capability values are additive: a consumer MUST ignore a value it does not recognise rather than reject the binding, and MUST NOT treat an unrecognised value as conferring anything."
611
613
  },
@@ -225,7 +225,8 @@ export const PAYLOAD_SCHEMA = {
225
225
  "external-auth-use",
226
226
  "pcs-vetter",
227
227
  "pcs-applicant",
228
- "witness-request"
228
+ "witness-request",
229
+ "pcs-voter"
229
230
  ],
230
231
  "description": "Fine-grained capability flag scoped to the device's allowed contexts. See SPEC.md for the full semantics of each. Capability values are additive: a consumer MUST ignore a value it does not recognise rather than reject the binding, and MUST NOT treat an unrecognised value as conferring anything."
231
232
  },
@@ -563,7 +564,8 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
563
564
  "external-auth-use",
564
565
  "pcs-vetter",
565
566
  "pcs-applicant",
566
- "witness-request"
567
+ "witness-request",
568
+ "pcs-voter"
567
569
  ],
568
570
  "description": "Fine-grained capability flag scoped to the device's allowed contexts. See SPEC.md for the full semantics of each. Capability values are additive: a consumer MUST ignore a value it does not recognise rather than reject the binding, and MUST NOT treat an unrecognised value as conferring anything."
569
571
  },
@@ -225,7 +225,8 @@ export const PAYLOAD_SCHEMA = {
225
225
  "externalAuthUse",
226
226
  "pcsVetter",
227
227
  "pcsApplicant",
228
- "witnessRequest"
228
+ "witnessRequest",
229
+ "pcsVoter"
229
230
  ],
230
231
  "description": "Fine-grained capability flag scoped to the device's allowed contexts. See SPEC.md for the full semantics of each. Capability values are additive: a consumer MUST ignore a value it does not recognise rather than reject the binding, and MUST NOT treat an unrecognised value as conferring anything."
231
232
  },
@@ -563,7 +564,8 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
563
564
  "externalAuthUse",
564
565
  "pcsVetter",
565
566
  "pcsApplicant",
566
- "witnessRequest"
567
+ "witnessRequest",
568
+ "pcsVoter"
567
569
  ],
568
570
  "description": "Fine-grained capability flag scoped to the device's allowed contexts. See SPEC.md for the full semantics of each. Capability values are additive: a consumer MUST ignore a value it does not recognise rather than reject the binding, and MUST NOT treat an unrecognised value as conferring anything."
569
571
  },