@openvtc/trust-tasks 0.20.8 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/CHANGELOG.md +233 -0
  2. package/dist/_shared/components.d.ts +299 -2
  3. package/dist/_shared/components.d.ts.map +1 -1
  4. package/dist/auth/passkey/enroll/invite/0.2/payload.d.ts +456 -0
  5. package/dist/auth/passkey/enroll/invite/0.2/payload.d.ts.map +1 -0
  6. package/dist/auth/passkey/enroll/invite/0.2/payload.js +248 -0
  7. package/dist/auth/passkey/enroll/invite/0.2/payload.js.map +1 -0
  8. package/dist/auth/passkey/enroll/redeem/finish/0.1/payload.d.ts +728 -0
  9. package/dist/auth/passkey/enroll/redeem/finish/0.1/payload.d.ts.map +1 -0
  10. package/dist/auth/passkey/enroll/redeem/finish/0.1/payload.js +430 -0
  11. package/dist/auth/passkey/enroll/redeem/finish/0.1/payload.js.map +1 -0
  12. package/dist/auth/passkey/enroll/redeem/start/0.1/payload.d.ts +1043 -0
  13. package/dist/auth/passkey/enroll/redeem/start/0.1/payload.d.ts.map +1 -0
  14. package/dist/auth/passkey/enroll/redeem/start/0.1/payload.js +628 -0
  15. package/dist/auth/passkey/enroll/redeem/start/0.1/payload.js.map +1 -0
  16. package/dist/auth/passkey/revoke/finish/0.2/payload.d.ts +533 -0
  17. package/dist/auth/passkey/revoke/finish/0.2/payload.d.ts.map +1 -0
  18. package/dist/auth/passkey/revoke/finish/0.2/payload.js +315 -0
  19. package/dist/auth/passkey/revoke/finish/0.2/payload.js.map +1 -0
  20. package/dist/auth/passkey/revoke/start/0.2/payload.d.ts +511 -0
  21. package/dist/auth/passkey/revoke/start/0.2/payload.d.ts.map +1 -0
  22. package/dist/auth/passkey/revoke/start/0.2/payload.js +297 -0
  23. package/dist/auth/passkey/revoke/start/0.2/payload.js.map +1 -0
  24. package/dist/auth/step-up/approve-response/0.5/payload.d.ts +887 -0
  25. package/dist/auth/step-up/approve-response/0.5/payload.d.ts.map +1 -0
  26. package/dist/auth/step-up/approve-response/0.5/payload.js +504 -0
  27. package/dist/auth/step-up/approve-response/0.5/payload.js.map +1 -0
  28. package/dist/device/list/0.1/payload.d.ts +4 -4
  29. package/dist/device/list/0.1/payload.d.ts.map +1 -1
  30. package/dist/device/list/0.1/payload.js +4 -2
  31. package/dist/device/list/0.1/payload.js.map +1 -1
  32. package/dist/device/list/0.2/payload.d.ts +4 -4
  33. package/dist/device/list/0.2/payload.d.ts.map +1 -1
  34. package/dist/device/list/0.2/payload.js +4 -2
  35. package/dist/device/list/0.2/payload.js.map +1 -1
  36. package/dist/device/register/0.1/payload.d.ts +4 -4
  37. package/dist/device/register/0.1/payload.d.ts.map +1 -1
  38. package/dist/device/register/0.1/payload.js +4 -2
  39. package/dist/device/register/0.1/payload.js.map +1 -1
  40. package/dist/device/register/0.2/payload.d.ts +4 -4
  41. package/dist/device/register/0.2/payload.d.ts.map +1 -1
  42. package/dist/device/register/0.2/payload.js +4 -2
  43. package/dist/device/register/0.2/payload.js.map +1 -1
  44. package/dist/git-ns/_shared/0.4/git-ns.d.ts +16 -0
  45. package/dist/git-ns/_shared/0.4/git-ns.d.ts.map +1 -0
  46. package/dist/git-ns/_shared/0.4/git-ns.js +6 -0
  47. package/dist/git-ns/_shared/0.4/git-ns.js.map +1 -0
  48. package/dist/git-ns/account/link-status/0.1/payload.d.ts +2 -2
  49. package/dist/git-ns/account/link-status/0.1/payload.js +2 -2
  50. package/dist/git-ns/account/link-status/0.1/payload.js.map +1 -1
  51. package/dist/git-ns/account/unlink/0.1/payload.d.ts +411 -0
  52. package/dist/git-ns/account/unlink/0.1/payload.d.ts.map +1 -0
  53. package/dist/git-ns/account/unlink/0.1/payload.js +228 -0
  54. package/dist/git-ns/account/unlink/0.1/payload.js.map +1 -0
  55. package/dist/git-ns/bridge/event/0.3/payload.d.ts +1682 -0
  56. package/dist/git-ns/bridge/event/0.3/payload.d.ts.map +1 -0
  57. package/dist/git-ns/bridge/event/0.3/payload.js +971 -0
  58. package/dist/git-ns/bridge/event/0.3/payload.js.map +1 -0
  59. package/dist/git-ns/bridge/job/0.4/payload.d.ts +1068 -0
  60. package/dist/git-ns/bridge/job/0.4/payload.d.ts.map +1 -0
  61. package/dist/git-ns/bridge/job/0.4/payload.js +573 -0
  62. package/dist/git-ns/bridge/job/0.4/payload.js.map +1 -0
  63. package/dist/git-ns/drift/resolve/0.3/payload.d.ts +1072 -0
  64. package/dist/git-ns/drift/resolve/0.3/payload.d.ts.map +1 -0
  65. package/dist/git-ns/drift/resolve/0.3/payload.js +634 -0
  66. package/dist/git-ns/drift/resolve/0.3/payload.js.map +1 -0
  67. package/dist/git-ns/namespace/reseat/0.3/payload.d.ts +515 -0
  68. package/dist/git-ns/namespace/reseat/0.3/payload.d.ts.map +1 -0
  69. package/dist/git-ns/namespace/reseat/0.3/payload.js +296 -0
  70. package/dist/git-ns/namespace/reseat/0.3/payload.js.map +1 -0
  71. package/dist/git-ns/repo/create/0.3/payload.d.ts +1101 -0
  72. package/dist/git-ns/repo/create/0.3/payload.d.ts.map +1 -0
  73. package/dist/git-ns/repo/create/0.3/payload.js +646 -0
  74. package/dist/git-ns/repo/create/0.3/payload.js.map +1 -0
  75. package/dist/git-ns/right/break-glass/0.1/payload.d.ts +685 -0
  76. package/dist/git-ns/right/break-glass/0.1/payload.d.ts.map +1 -0
  77. package/dist/git-ns/right/break-glass/0.1/payload.js +397 -0
  78. package/dist/git-ns/right/break-glass/0.1/payload.js.map +1 -0
  79. package/dist/git-ns/right/break-glass-notice/0.1/payload.d.ts +384 -0
  80. package/dist/git-ns/right/break-glass-notice/0.1/payload.d.ts.map +1 -0
  81. package/dist/git-ns/right/break-glass-notice/0.1/payload.js +216 -0
  82. package/dist/git-ns/right/break-glass-notice/0.1/payload.js.map +1 -0
  83. package/dist/git-ns/right/grant/0.3/payload.d.ts +678 -0
  84. package/dist/git-ns/right/grant/0.3/payload.d.ts.map +1 -0
  85. package/dist/git-ns/right/grant/0.3/payload.js +383 -0
  86. package/dist/git-ns/right/grant/0.3/payload.js.map +1 -0
  87. package/dist/git-ns/right/ratify/0.1/payload.d.ts +702 -0
  88. package/dist/git-ns/right/ratify/0.1/payload.d.ts.map +1 -0
  89. package/dist/git-ns/right/ratify/0.1/payload.js +404 -0
  90. package/dist/git-ns/right/ratify/0.1/payload.js.map +1 -0
  91. package/dist/git-ns/right/revoke/0.3/payload.d.ts +664 -0
  92. package/dist/git-ns/right/revoke/0.3/payload.d.ts.map +1 -0
  93. package/dist/git-ns/right/revoke/0.3/payload.js +378 -0
  94. package/dist/git-ns/right/revoke/0.3/payload.js.map +1 -0
  95. package/dist/git-ns/roles/reproject/0.1/payload.d.ts +325 -0
  96. package/dist/git-ns/roles/reproject/0.1/payload.d.ts.map +1 -0
  97. package/dist/git-ns/roles/reproject/0.1/payload.js +176 -0
  98. package/dist/git-ns/roles/reproject/0.1/payload.js.map +1 -0
  99. package/dist/git-ns/view/0.1/payload.d.ts +2 -2
  100. package/dist/git-ns/view/0.1/payload.js +2 -2
  101. package/dist/git-ns/view/0.1/payload.js.map +1 -1
  102. package/dist/git-ns/view/0.2/payload.d.ts +2 -2
  103. package/dist/git-ns/view/0.2/payload.js +2 -2
  104. package/dist/git-ns/view/0.2/payload.js.map +1 -1
  105. package/dist/git-ns/view/0.3/payload.d.ts +2 -2
  106. package/dist/git-ns/view/0.3/payload.js +2 -2
  107. package/dist/git-ns/view/0.3/payload.js.map +1 -1
  108. package/dist/git-ns/view/0.4/payload.d.ts +1696 -0
  109. package/dist/git-ns/view/0.4/payload.d.ts.map +1 -0
  110. package/dist/git-ns/view/0.4/payload.js +1012 -0
  111. package/dist/git-ns/view/0.4/payload.js.map +1 -0
  112. package/dist/index.d.ts +30 -0
  113. package/dist/index.d.ts.map +1 -1
  114. package/dist/index.js +30 -0
  115. package/dist/index.js.map +1 -1
  116. package/dist/messaging/message/status/0.1/payload.d.ts +372 -0
  117. package/dist/messaging/message/status/0.1/payload.d.ts.map +1 -0
  118. package/dist/messaging/message/status/0.1/payload.js +214 -0
  119. package/dist/messaging/message/status/0.1/payload.js.map +1 -0
  120. package/dist/vta/_shared/0.3/did-key-roles.d.ts +16 -0
  121. package/dist/vta/_shared/0.3/did-key-roles.d.ts.map +1 -0
  122. package/dist/vta/_shared/0.3/did-key-roles.js +6 -0
  123. package/dist/vta/_shared/0.3/did-key-roles.js.map +1 -0
  124. package/dist/vta/attestation/mnemonic-export/1.0/payload.d.ts +326 -0
  125. package/dist/vta/attestation/mnemonic-export/1.0/payload.d.ts.map +1 -0
  126. package/dist/vta/attestation/mnemonic-export/1.0/payload.js +175 -0
  127. package/dist/vta/attestation/mnemonic-export/1.0/payload.js.map +1 -0
  128. package/dist/vta/webvh/dids/keys/add/1.0/payload.d.ts +1914 -0
  129. package/dist/vta/webvh/dids/keys/add/1.0/payload.d.ts.map +1 -0
  130. package/dist/vta/webvh/dids/keys/add/1.0/payload.js +1128 -0
  131. package/dist/vta/webvh/dids/keys/add/1.0/payload.js.map +1 -0
  132. package/dist/vta/webvh/dids/keys/list/1.0/payload.d.ts +1603 -0
  133. package/dist/vta/webvh/dids/keys/list/1.0/payload.d.ts.map +1 -0
  134. package/dist/vta/webvh/dids/keys/list/1.0/payload.js +942 -0
  135. package/dist/vta/webvh/dids/keys/list/1.0/payload.js.map +1 -0
  136. package/dist/vta/webvh/dids/keys/retire/1.0/payload.d.ts +1914 -0
  137. package/dist/vta/webvh/dids/keys/retire/1.0/payload.d.ts.map +1 -0
  138. package/dist/vta/webvh/dids/keys/retire/1.0/payload.js +1123 -0
  139. package/dist/vta/webvh/dids/keys/retire/1.0/payload.js.map +1 -0
  140. package/dist/vta/webvh/dids/keys/revoke/1.0/payload.d.ts +2021 -0
  141. package/dist/vta/webvh/dids/keys/revoke/1.0/payload.d.ts.map +1 -0
  142. package/dist/vta/webvh/dids/keys/revoke/1.0/payload.js +1168 -0
  143. package/dist/vta/webvh/dids/keys/revoke/1.0/payload.js.map +1 -0
  144. package/dist/vta/webvh/dids/rotate-keys/2.0/payload.d.ts +1992 -0
  145. package/dist/vta/webvh/dids/rotate-keys/2.0/payload.d.ts.map +1 -0
  146. package/dist/vta/webvh/dids/rotate-keys/2.0/payload.js +1151 -0
  147. package/dist/vta/webvh/dids/rotate-keys/2.0/payload.js.map +1 -0
  148. package/dist/vta/webvh/dids/update/2.0/payload.d.ts +1062 -0
  149. package/dist/vta/webvh/dids/update/2.0/payload.d.ts.map +1 -0
  150. package/dist/vta/webvh/dids/update/2.0/payload.js +616 -0
  151. package/dist/vta/webvh/dids/update/2.0/payload.js.map +1 -0
  152. package/dist/vtc/credentials/reissue/0.1/payload.d.ts +502 -0
  153. package/dist/vtc/credentials/reissue/0.1/payload.d.ts.map +1 -0
  154. package/dist/vtc/credentials/reissue/0.1/payload.js +282 -0
  155. package/dist/vtc/credentials/reissue/0.1/payload.js.map +1 -0
  156. package/dist/vtc/members/personhood/challenge/0.1/payload.d.ts +2 -2
  157. package/dist/vtc/members/personhood/challenge/0.1/payload.js +2 -2
  158. package/dist/vtc/members/personhood/challenge/0.1/payload.js.map +1 -1
  159. package/dist/vtc/vetting/vetters/profile/0.1/payload.d.ts +2 -2
  160. package/dist/vtc/vetting/vetters/profile/0.1/payload.js +2 -2
  161. package/dist/vtc/vetting/vetters/profile/0.1/payload.js.map +1 -1
  162. package/dist/vtc/vetting/vetters/resend/0.1/payload.d.ts +2 -2
  163. package/dist/vtc/vetting/vetters/resend/0.1/payload.js +2 -2
  164. package/dist/vtc/vetting/vetters/resend/0.1/payload.js.map +1 -1
  165. package/package.json +1 -1
  166. package/src/_shared/components.ts +313 -2
  167. package/src/auth/passkey/enroll/invite/0.2/payload.ts +325 -0
  168. package/src/auth/passkey/enroll/redeem/finish/0.1/payload.ts +499 -0
  169. package/src/auth/passkey/enroll/redeem/start/0.1/payload.ts +700 -0
  170. package/src/auth/passkey/revoke/finish/0.2/payload.ts +379 -0
  171. package/src/auth/passkey/revoke/start/0.2/payload.ts +349 -0
  172. package/src/auth/step-up/approve-response/0.5/payload.ts +593 -0
  173. package/src/device/list/0.1/payload.ts +4 -2
  174. package/src/device/list/0.2/payload.ts +4 -2
  175. package/src/device/register/0.1/payload.ts +4 -2
  176. package/src/device/register/0.2/payload.ts +4 -2
  177. package/src/git-ns/_shared/0.4/git-ns.ts +17 -0
  178. package/src/git-ns/account/link-status/0.1/payload.ts +2 -2
  179. package/src/git-ns/account/unlink/0.1/payload.ts +274 -0
  180. package/src/git-ns/bridge/event/0.3/payload.ts +1132 -0
  181. package/src/git-ns/bridge/job/0.4/payload.ts +691 -0
  182. package/src/git-ns/drift/resolve/0.3/payload.ts +707 -0
  183. package/src/git-ns/namespace/reseat/0.3/payload.ts +342 -0
  184. package/src/git-ns/repo/create/0.3/payload.ts +706 -0
  185. package/src/git-ns/right/break-glass/0.1/payload.ts +443 -0
  186. package/src/git-ns/right/break-glass-notice/0.1/payload.ts +258 -0
  187. package/src/git-ns/right/grant/0.3/payload.ts +434 -0
  188. package/src/git-ns/right/ratify/0.1/payload.ts +455 -0
  189. package/src/git-ns/right/revoke/0.3/payload.ts +425 -0
  190. package/src/git-ns/roles/reproject/0.1/payload.ts +220 -0
  191. package/src/git-ns/view/0.1/payload.ts +2 -2
  192. package/src/git-ns/view/0.2/payload.ts +2 -2
  193. package/src/git-ns/view/0.3/payload.ts +2 -2
  194. package/src/git-ns/view/0.4/payload.ts +1075 -0
  195. package/src/index.ts +30 -0
  196. package/src/messaging/message/status/0.1/payload.ts +270 -0
  197. package/src/vta/_shared/0.3/did-key-roles.ts +17 -0
  198. package/src/vta/attestation/mnemonic-export/1.0/payload.ts +232 -0
  199. package/src/vta/webvh/dids/keys/add/1.0/payload.ts +1217 -0
  200. package/src/vta/webvh/dids/keys/list/1.0/payload.ts +1004 -0
  201. package/src/vta/webvh/dids/keys/retire/1.0/payload.ts +1212 -0
  202. package/src/vta/webvh/dids/keys/revoke/1.0/payload.ts +1276 -0
  203. package/src/vta/webvh/dids/rotate-keys/2.0/payload.ts +1262 -0
  204. package/src/vta/webvh/dids/update/2.0/payload.ts +713 -0
  205. package/src/vtc/credentials/reissue/0.1/payload.ts +357 -0
  206. package/src/vtc/members/personhood/challenge/0.1/payload.ts +2 -2
  207. package/src/vtc/vetting/vetters/profile/0.1/payload.ts +2 -2
  208. package/src/vtc/vetting/vetters/resend/0.1/payload.ts +2 -2
@@ -71,7 +71,8 @@ export type Capability_DeviceV0_1 =
71
71
  | "memory-read"
72
72
  | "memory-write"
73
73
  | "room-present"
74
- | "room-open";
74
+ | "room-open"
75
+ | "key-export";
75
76
  /**
76
77
  * 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.
77
78
  */
@@ -89,7 +90,8 @@ export type Capability_DeviceV0_2 =
89
90
  | "memoryRead"
90
91
  | "memoryWrite"
91
92
  | "roomPresent"
92
- | "roomOpen";
93
+ | "roomOpen"
94
+ | "keyExport";
93
95
  /**
94
96
  * 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.
95
97
  */
@@ -179,6 +181,15 @@ export type DeviceAttestation_DeviceV0_2 =
179
181
  | Tpm_DeviceV0_2
180
182
  | NitroEnclave_DeviceV0_2
181
183
  | NoAttestation_DeviceV0_2;
184
+ /**
185
+ * A DID Core verification relationship.
186
+ */
187
+ export type DidVerificationRelationship =
188
+ | "authentication"
189
+ | "assertionMethod"
190
+ | "keyAgreement"
191
+ | "capabilityInvocation"
192
+ | "capabilityDelegation";
182
193
  /**
183
194
  * A DID, compared by exact string equality.
184
195
  */
@@ -211,6 +222,10 @@ export type DriftType =
211
222
  * Whether the subject is permitted. The ABSENCE of any grant is treated as `deny` (default-deny).
212
223
  */
213
224
  export type Effect_ConsentV0_1 = "allow" | "deny";
225
+ /**
226
+ * 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.
227
+ */
228
+ export type ElevatedRight = "git.ns.admin" | "git.repo.create" | "git.repo.own";
214
229
  /**
215
230
  * Lowercase hex SHA-256 of the whole bundle's bytes. Kept in the hex form the 1.0 descriptor published rather than moved to DigestMultibase, because it is an unchanged member of an existing descriptor and re-encoding it would break every stream producer for no gain in what it checks. For a chunked transfer it is the check over the reassembled bundle, applied after every chunk has verified individually, so that a correct set of chunks assembled in the wrong order is still caught.
216
231
  */
@@ -300,6 +315,18 @@ export type Key = string;
300
315
  * 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.
301
316
  */
302
317
  export type KeyOrigin = "derived" | "imported" | "internal";
318
+ /**
319
+ * The named key role a key occupies in the DID (VTI-KEY-070 onward). `attestation` — the only keys in `assertionMethod`; sign the DID's attestation artefacts (membership and role credentials, endorsements, status lists, every other credential the node issues), through the VTA's signing service and nowhere else. Generated inside the VTA, never derived, never exportable, never in a backup. `operational` — the only keys in `authentication`; sign the node's own traffic (Trust Task requests and responses, DIDComm and TSP message signatures, invitations, notices, audit checkpoints) with proof purpose `authentication`. `messaging` — the only keys in `keyAgreement`; sign nothing. `update` — the keys that authorize appending to the DID's log (a did:webvh `updateKeys` entry) and the pre-rotation commitments that authorize the next ones; never a verification method, never in `keyRoles`. Generated inside the VTA, never derived, never exportable, never in a backup. No role permits `capabilityInvocation` or `capabilityDelegation` (VTI-KEY-075); both are reserved for a future role. The mapping is normative and is set out in CONVENTIONS.md §1. The set is an extensible registry and growing it is a MINOR change: a consumer that receives a role it does not implement MUST refuse the document rather than map the key onto a role it does know.
320
+ */
321
+ export type KeyRole = "attestation" | "operational" | "messaging" | "update";
322
+ /**
323
+ * `preview` — nothing was written; the response carries the plan. `applied` — the entry was appended (and published, unless `serverless`). `pendingApproval` — the plan is recorded and awaits further approvals; nothing is published until they arrive (CONVENTIONS.md §3.3).
324
+ */
325
+ export type KeyRoleChangeOutcome = "preview" | "applied" | "pendingApproval";
326
+ /**
327
+ * Which view of the DID's key roles the caller was given (CONVENTIONS.md §5). `public` — only what the published document and log already reveal to anyone who resolves the DID. `custody` — additionally the VTA's own custody state: pending keys, the custodian record behind each key, overlap deadlines, who initiated and approved each change, and why. The response always states which it is, so a caller never mistakes an absent member for a statement that the thing does not exist.
328
+ */
329
+ export type KeyRoleProjection = "public" | "custody";
303
330
  /**
304
331
  * Lifecycle state. Only an `active` key may be named in a signing request; a `revoked` key is retained so historic signatures remain attributable, and MUST NOT be reactivated.
305
332
  */
@@ -520,6 +547,18 @@ export type RetentionPolicy = "chained" | "fromJoin";
520
547
  * 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.
521
548
  */
522
549
  export type Right = "git.ns.admin" | "git.repo.create" | "git.repo.own" | "git.repo.maintain" | "git.commit.sign";
550
+ /**
551
+ * Where a key is in its role's lifecycle. `pending` — planned by a preview or a change awaiting approval; not published; custody projection only. `staged` — published and bound to its role, but not yet used: a planned rotation publishes the successor and waits until the entry's cache horizon — publication plus the longer of the document's TTL and the verifier cache cap (CONVENTIONS.md §11.1) — before the VTA first uses it, so that no verifier holding a cached document sees a signature by a key it has never seen (VTI-KEY-122). Becomes `active` at the rotation's `activatesAt`. `active` — the key the VTA uses for new signatures (or, for `messaging`, advertises for new sessions). `retiring` — still published so that what it signed and sessions keyed to it keep working, but never used again: from the successor's first use the VTA MUST NOT sign with it, while a retiring `messaging` key stays usable for decryption, and senders may still encrypt to it, until it is retired (CONVENTIONS.md §11.3). `retired` — removed by planned rotation; what it signed while published remains valid, judged against the DID version current at issuance (CONVENTIONS.md §7). A retired `attestation` or `messaging` key is destroyed at retirement. `revoked` — removed from every relationship and from `keyRoles` in one entry, without overlap, because it is or may be compromised; what it signed from `compromisedSince` onward establishes nothing. `retired` and `revoked` are terminal.
552
+ */
553
+ export type RoleKeyState = "pending" | "staged" | "active" | "retiring" | "retired" | "revoked";
554
+ /**
555
+ * `planned` — a successor was staged, activated, and the predecessor retired on the operator's schedule. `compromise` — a key was revoked and, where the role would otherwise be empty, replaced in the same log entry. `addition` — a key was added to a role without anything leaving it (for example a post-quantum key alongside a classical one).
556
+ */
557
+ export type RotationKind = "planned" | "compromise" | "addition";
558
+ /**
559
+ * `pendingApproval` — awaiting the approvals the VTA's policy requires; nothing is published. `staged` — successor published, not yet used; predecessor still active. `overlapping` — successor active, predecessor `retiring`. `completed` — every predecessor retired (or, for `compromise` and `addition`, the entry is published and any overlap it began has ended). `aborted` — the successor was retired instead of the predecessor, which stayed or returned to `active`. `expired` — approvals were not gathered before the preview expired; nothing was published.
560
+ */
561
+ export type RotationState = "pendingApproval" | "staged" | "overlapping" | "completed" | "aborted" | "expired";
523
562
  /**
524
563
  * How a consent prompt reaches the approver: `wake` pushes to the approver's device for a DID-signed decision; `bridge-relay` renders it through an enrolled bridge (e.g. a numbered card in the operator's messaging app) for a bridge-attested decision.
525
564
  */
@@ -1444,6 +1483,35 @@ export interface Bootstrap {
1444
1483
  */
1445
1484
  requiredCheck: boolean;
1446
1485
  }
1486
+ /**
1487
+ * How a self-granted right came to be, and whether another administrator has since ratified it. A record whose `breakGlass` has no `ratifiedBy` is **unratified**: it is live and published like any other right, it does not count toward the last-owner or last-admin invariants, and any community administrator or namespace admin of its namespace may revoke it. Ratification (git-ns/right/ratify) sets `ratifiedBy` and `ratifiedAt`; from then on the record is an ordinary grant, and `breakGlass` stays as its history. Never published to the Trust Registry.
1488
+ */
1489
+ export interface BreakGlass {
1490
+ /**
1491
+ * Who broke the glass: always the record's `subject`, restated so the flag reads on its own.
1492
+ */
1493
+ by: Did_GitNsV0_3;
1494
+ /**
1495
+ * When the VTC recorded the break-glass.
1496
+ */
1497
+ at: string;
1498
+ /**
1499
+ * The actor's statement of why nobody else could grant this right. Shown to every community administrator, every namespace admin of the namespace and every owner of the resource; kept in the audit record; never published.
1500
+ */
1501
+ justification: string;
1502
+ /**
1503
+ * When the right takes effect, where the community's policy imposed a delay. Absent: it took effect at `at`. Until this instant the record confers nothing and is not published, and any administrator who may revoke it may do so.
1504
+ */
1505
+ effectiveAt?: string;
1506
+ /**
1507
+ * The administrator who ratified the record — never its subject. Absent while unratified.
1508
+ */
1509
+ ratifiedBy?: Did_GitNsV0_3;
1510
+ /**
1511
+ * When it was ratified. Present exactly when `ratifiedBy` is.
1512
+ */
1513
+ ratifiedAt?: string;
1514
+ }
1447
1515
  /**
1448
1516
  * The self-description of a pluggable community capability: the Trust Task families it serves, the trust-registry vocabulary it reads and writes, the roles that may operate it, the membership lifecycle hooks it consumes, and the external adapters that act on its decisions. The manifest is what governance approves, what discovery advertises, and what a management UX renders.
1449
1517
  */
@@ -2104,6 +2172,55 @@ export interface DeviceBinding_DeviceV0_2 {
2104
2172
  wipedAt?: string;
2105
2173
  ext?: Ext;
2106
2174
  }
2175
+ export interface DidDocumentChange {
2176
+ /**
2177
+ * `addKey` — a verification method is added, listed in its role's relationship and in `keyRoles`. `retireKey` — a verification method leaves its relationship, `keyRoles` and the document. `revokeKey` — a verification method leaves its relationship and `keyRoles`, and the compromise is recorded (CONVENTIONS.md §7). `rotateUpdateKey` — the log's update key moves to a committed successor. `setPreRotation` — the number of successors committed changes.
2178
+ */
2179
+ op: "addKey" | "retireKey" | "revokeKey" | "rotateUpdateKey" | "setPreRotation";
2180
+ role: KeyRole;
2181
+ verificationMethod?: string;
2182
+ keyType?: KeyType;
2183
+ publicKeyMultibase?: string;
2184
+ relationships?: DidVerificationRelationship[];
2185
+ preRotationCount?: number;
2186
+ }
2187
+ /**
2188
+ * What a change would publish, computed by the VTA by running the handler it would run to apply it, and nothing else (CONVENTIONS.md §3.1). This is what a consent surface renders and what an approval is bound to.
2189
+ */
2190
+ export interface DidDocumentPreview {
2191
+ /**
2192
+ * Opaque, unguessable identifier for this exact plan. Carried back by the apply request, and the thing every approval is bound to.
2193
+ */
2194
+ previewId: string;
2195
+ /**
2196
+ * versionId of the log entry the plan was computed against. The plan is void once the log moves past it.
2197
+ */
2198
+ baseVersionId: string;
2199
+ expiresAt: string;
2200
+ /**
2201
+ * Every change the entry would make, including the ones the caller did not ask for — in particular `rotateUpdateKey`, which accompanies every entry appended under pre-rotation.
2202
+ */
2203
+ changes: DidDocumentChange[];
2204
+ /**
2205
+ * The complete DID document the entry would publish. Public data by construction; no key material beyond public halves.
2206
+ */
2207
+ document: {};
2208
+ /**
2209
+ * Conditions a human should be shown before approving. `preRotationDisabled` — the entry leaves no committed successor, so a later update-key compromise can only end in deactivation. `singleKeyRole` — the role will hold one active key, so its next compromise empties it until replaced. `algorithmNotInAcceptedSet` — a verifier population the VTA knows of does not accept the new key's algorithm. `roleWillHaveNoClassicalKey` — every remaining key is post-quantum, which verifiers without post-quantum support cannot check. `attestationReissuanceRequired` — revoking this `attestation` key obliges the node to re-issue every attestation artefact still in force and re-sign every status list (VTI-KEY-133). `serverless` — the VTA will not publish the entry; the operator must.
2210
+ */
2211
+ warnings?: (
2212
+ | "preRotationDisabled"
2213
+ | "singleKeyRole"
2214
+ | "algorithmNotInAcceptedSet"
2215
+ | "roleWillHaveNoClassicalKey"
2216
+ | "attestationReissuanceRequired"
2217
+ | "serverless"
2218
+ )[];
2219
+ /**
2220
+ * True when appending this entry also moves the DID's update key to a committed successor. Stated as its own member, not left to be found in `changes`, because it is the consequence a reviewer most often misses.
2221
+ */
2222
+ updateKeyRotates: boolean;
2223
+ }
2107
2224
  export interface DidRecord {
2108
2225
  /**
2109
2226
  * Local path under which the DID is hosted (e.g. `alice`, `tenant/staff/alice`, `.well-known`). Compared by exact string equality (SPEC.md §4.8); producers SHOULD emit canonical form.
@@ -2927,6 +3044,27 @@ export interface KeyRecord {
2927
3044
  updatedAt?: string;
2928
3045
  ext?: Ext;
2929
3046
  }
3047
+ /**
3048
+ * Approval progress of a change the VTA's policy gates on more than one approval (CONVENTIONS.md §3.3).
3049
+ */
3050
+ export interface KeyRoleApprovalState {
3051
+ /**
3052
+ * Distinct approvals the VTA's policy requires.
3053
+ */
3054
+ required: number;
3055
+ /**
3056
+ * Distinct approvals recorded so far, including the initiator's own.
3057
+ */
3058
+ received: number;
3059
+ /**
3060
+ * VIDs whose approvals were recorded. Custody projection only; omitted from a response to anyone who is not themselves an eligible approver of this change.
3061
+ */
3062
+ approvers?: string[];
3063
+ /**
3064
+ * When the preview, and every approval bound to it, stops being usable.
3065
+ */
3066
+ expiresAt: string;
3067
+ }
2930
3068
  /**
2931
3069
  * 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.
2932
3070
  */
@@ -4102,6 +4240,129 @@ export interface RightRecord_GitNsV0_3 {
4102
4240
  */
4103
4241
  reason?: string;
4104
4242
  }
4243
+ /**
4244
+ * One recorded right. Implied rights (§4.2 of the rights model: `own` implies `maintain` implies `commit.sign` on the same resource; `ns.admin` implies `repo.create` and `own` across its namespace) are not records and never appear as RightRecords. A record carrying `breakGlass` was given by its subject to themselves through git-ns/right/break-glass; it is a real right, published like any other, and is shown with that flag on every surface that shows the record.
4245
+ */
4246
+ export interface RightRecord_GitNsV0_4 {
4247
+ /**
4248
+ * Who holds the right. For `git.commit.sign` this is the DID whose commit signatures the CI check accepts.
4249
+ */
4250
+ subject: Did_GitNsV0_3;
4251
+ right: Right;
4252
+ resource: Resource;
4253
+ /**
4254
+ * The actor whose task caused the right: the granter, the creator of a repository (for its first `own`), the adopting admin, the transferring owner, or the binding admin (for the first `git.ns.admin`). The VTC's own DID for a right it derives from its configuration.
4255
+ */
4256
+ grantedBy: Did_GitNsV0_3;
4257
+ grantedAt: string;
4258
+ /**
4259
+ * When the right lapses. Absent: no expiry.
4260
+ */
4261
+ expiresAt?: string;
4262
+ /**
4263
+ * The granter's free-text reason. Disclosed only to holders of `git.repo.own` on the resource and of `git.ns.admin` over it.
4264
+ */
4265
+ reason?: string;
4266
+ /**
4267
+ * Present exactly when the subject gave themselves this right through git-ns/right/break-glass. Absent for every other record.
4268
+ */
4269
+ breakGlass?: BreakGlass;
4270
+ }
4271
+ /**
4272
+ * One key in one role. A key is in exactly one role for its whole life; a change of role is a retirement from one and an addition to another, under a new verification-method identifier.
4273
+ */
4274
+ export interface RoleKey {
4275
+ /**
4276
+ * The full verification-method identifier (`did#fragment`) the document publishes the key under, and lists in `keyRoles`. Absent only for `update` keys, which are published as log parameters and never as verification methods (VTI-KEY-093). A VTA minting a new method SHOULD derive its fragment from the key (VTI-KEY-150).
4277
+ */
4278
+ verificationMethod?: string;
4279
+ role: KeyRole;
4280
+ /**
4281
+ * The relationships the key is (or, while `pending`, will be) listed in. Always exactly its role's single relationship (CONVENTIONS.md §1) — carried so a caller can check it against the document rather than trusting it. Empty for `update`, `retired` and `revoked` keys.
4282
+ */
4283
+ relationships?: DidVerificationRelationship[];
4284
+ keyType: KeyType;
4285
+ /**
4286
+ * The public half, multibase-encoded, exactly as published.
4287
+ */
4288
+ publicKeyMultibase: string;
4289
+ state: RoleKeyState;
4290
+ /**
4291
+ * versionId of the log entry that first published the key. Absent while `pending`.
4292
+ */
4293
+ publishedInVersionId?: string;
4294
+ /**
4295
+ * versionId of the log entry that retired or revoked the key.
4296
+ */
4297
+ removedInVersionId?: string;
4298
+ /**
4299
+ * For a `retiring` key: the end of its overlap window. Custody projection only.
4300
+ */
4301
+ retireAfter?: string;
4302
+ /**
4303
+ * For a `revoked` key: the compromise time (VTI-KEY-121) — the earliest instant from which the key is treated as compromised. Where the operator cannot establish it, the time the key was first published. Published, because it is what a verifier needs.
4304
+ */
4305
+ compromisedSince?: string;
4306
+ /**
4307
+ * The rotation this key was introduced or retired by, when it was.
4308
+ */
4309
+ rotationId?: string;
4310
+ /**
4311
+ * Operator-facing label. Custody projection only.
4312
+ */
4313
+ label?: string;
4314
+ custody?: RoleKeyCustody;
4315
+ ext?: Ext;
4316
+ /**
4317
+ * For a `staged` key: when the VTA will begin using it — no earlier than the publishing entry's cache horizon (CONVENTIONS.md §11.1).
4318
+ */
4319
+ activatesAt?: string;
4320
+ }
4321
+ /**
4322
+ * How the VTA holds a key. Present only in the custody projection. Carries no key material, and a conforming VTA MUST NOT place any in `ext`.
4323
+ */
4324
+ export interface RoleKeyCustody {
4325
+ /**
4326
+ * The custodian record identifier (`keys/*`'s `keyId`) behind this key.
4327
+ */
4328
+ keyId: string;
4329
+ origin?: KeyOrigin;
4330
+ /**
4331
+ * Whether the custodian would release the private half through `keys/export-secret`. Always `false` for `attestation` and `update` keys (CONVENTIONS.md §4). Stated explicitly — never absent — because this is the member an operator reads to confirm a role key cannot leave the VTA, and `keys/*`'s absent-means-exportable reading is the wrong default to leave them to infer.
4332
+ */
4333
+ exportable: boolean;
4334
+ /**
4335
+ * True when no authority can make the key exportable — the role forbids it, or the material exists only inside a module that cannot release it. `true` implies `exportable: false`.
4336
+ */
4337
+ neverExportable: boolean;
4338
+ /**
4339
+ * True when the private half is held by a hardware or enclave module that performs the operation without releasing it. Absent means the VTA does not say, not that it is false.
4340
+ */
4341
+ hardwareBacked?: boolean;
4342
+ /**
4343
+ * Whether the key, or material it can be re-derived from, is included in the VTA's backups or any state transfer. Always `false` for `attestation` and `update` keys (VTI-KEY-112): they are generated, not derived, so there is no seed that recovers them, and their loss is recovered by rotation, never by restore.
4344
+ */
4345
+ inBackups: boolean;
4346
+ /**
4347
+ * True once the private half has been destroyed — a retired `attestation` key (VTI-KEY-125). The record survives so the key's past signatures stay attributable.
4348
+ */
4349
+ destroyed?: boolean;
4350
+ }
4351
+ export interface RoleSummary {
4352
+ role: KeyRole;
4353
+ /**
4354
+ * The relationship this role owns (CONVENTIONS.md §1). Empty for `update`.
4355
+ */
4356
+ relationships: DidVerificationRelationship[];
4357
+ /**
4358
+ * The role's keys, in the order the document publishes them. Terminal-state keys are included only when the request asked for them.
4359
+ */
4360
+ keys: RoleKey[];
4361
+ /**
4362
+ * `update` only: successors the latest entry commits to. `0` means a compromise of the current update key cannot be recovered from by rotation, and the DID would have to be deactivated (VTI-KEY-124).
4363
+ */
4364
+ preRotationCommitments?: number;
4365
+ }
4105
4366
  /**
4106
4367
  * 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.
4107
4368
  */
@@ -4136,6 +4397,56 @@ export interface RollbackResult {
4136
4397
  serverless?: boolean;
4137
4398
  ext?: Ext;
4138
4399
  }
4400
+ /**
4401
+ * One change to a role's key set, from preview to completion. The rotation history of a DID is the list of these; the log is the authority for what was published, and this record adds what the log cannot say — which change was which, and (custody projection only) who asked, who approved, and why.
4402
+ */
4403
+ export interface RotationRecord {
4404
+ rotationId: string;
4405
+ role: KeyRole;
4406
+ kind: RotationKind;
4407
+ state: RotationState;
4408
+ /**
4409
+ * Verification-method identifiers (or, for `update`, public keys) leaving the role.
4410
+ */
4411
+ predecessors?: string[];
4412
+ /**
4413
+ * Verification-method identifiers (or, for `update`, public keys) entering the role.
4414
+ */
4415
+ successors?: string[];
4416
+ startedInVersionId?: string;
4417
+ endedInVersionId?: string;
4418
+ startedAt?: string;
4419
+ /**
4420
+ * Custody projection only. End of the overlap window.
4421
+ */
4422
+ overlapUntil?: string;
4423
+ /**
4424
+ * Custody projection only. Whether the VTA retires the predecessor itself at `overlapUntil`.
4425
+ */
4426
+ autoRetire?: boolean;
4427
+ endedAt?: string;
4428
+ /**
4429
+ * Custody projection only. VID of the administrator whose signed request started the change.
4430
+ */
4431
+ initiatedBy?: string;
4432
+ /**
4433
+ * Custody projection only.
4434
+ */
4435
+ approvals?: KeyRoleApprovalState;
4436
+ /**
4437
+ * Custody projection only. The operator's stated reason. Never published.
4438
+ */
4439
+ reason?: string;
4440
+ ext?: Ext;
4441
+ /**
4442
+ * When the successor becomes `active` and the predecessor `retiring`; never before `cacheHorizonAt`.
4443
+ */
4444
+ activatesAt?: string;
4445
+ /**
4446
+ * Planned rotations: the publishing entry's cache horizon — publication plus the longer of the document's TTL and the verifier cache cap (CONVENTIONS.md §11.1). The switch, and any retirement of the predecessor, happen no earlier. Public: it follows from the log and the published cap.
4447
+ */
4448
+ cacheHorizonAt?: string;
4449
+ }
4139
4450
  export interface Builtin_VtaV0_1 {
4140
4451
  type: "builtin";
4141
4452
  }