@openvtc/trust-tasks 0.20.7 → 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 (253) hide show
  1. package/CHANGELOG.md +320 -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-request/0.3/payload.d.ts +613 -0
  25. package/dist/auth/step-up/approve-request/0.3/payload.d.ts.map +1 -0
  26. package/dist/auth/step-up/approve-request/0.3/payload.js +345 -0
  27. package/dist/auth/step-up/approve-request/0.3/payload.js.map +1 -0
  28. package/dist/auth/step-up/approve-response/0.4/payload.d.ts +887 -0
  29. package/dist/auth/step-up/approve-response/0.4/payload.d.ts.map +1 -0
  30. package/dist/auth/step-up/approve-response/0.4/payload.js +504 -0
  31. package/dist/auth/step-up/approve-response/0.4/payload.js.map +1 -0
  32. package/dist/auth/step-up/approve-response/0.5/payload.d.ts +887 -0
  33. package/dist/auth/step-up/approve-response/0.5/payload.d.ts.map +1 -0
  34. package/dist/auth/step-up/approve-response/0.5/payload.js +504 -0
  35. package/dist/auth/step-up/approve-response/0.5/payload.js.map +1 -0
  36. package/dist/backup/abort/0.1/payload.d.ts +262 -0
  37. package/dist/backup/abort/0.1/payload.d.ts.map +1 -0
  38. package/dist/backup/abort/0.1/payload.js +146 -0
  39. package/dist/backup/abort/0.1/payload.js.map +1 -0
  40. package/dist/backup/complete-export/0.1/payload.d.ts +262 -0
  41. package/dist/backup/complete-export/0.1/payload.d.ts.map +1 -0
  42. package/dist/backup/complete-export/0.1/payload.js +146 -0
  43. package/dist/backup/complete-export/0.1/payload.js.map +1 -0
  44. package/dist/backup/finalize-import/0.1/payload.d.ts +395 -0
  45. package/dist/backup/finalize-import/0.1/payload.d.ts.map +1 -0
  46. package/dist/backup/finalize-import/0.1/payload.js +209 -0
  47. package/dist/backup/finalize-import/0.1/payload.js.map +1 -0
  48. package/dist/backup/get-chunk/0.1/payload.d.ts +461 -0
  49. package/dist/backup/get-chunk/0.1/payload.d.ts.map +1 -0
  50. package/dist/backup/get-chunk/0.1/payload.js +250 -0
  51. package/dist/backup/get-chunk/0.1/payload.js.map +1 -0
  52. package/dist/backup/initiate-export/0.1/payload.d.ts +896 -0
  53. package/dist/backup/initiate-export/0.1/payload.d.ts.map +1 -0
  54. package/dist/backup/initiate-export/0.1/payload.js +507 -0
  55. package/dist/backup/initiate-export/0.1/payload.js.map +1 -0
  56. package/dist/backup/initiate-import/0.1/payload.d.ts +888 -0
  57. package/dist/backup/initiate-import/0.1/payload.d.ts.map +1 -0
  58. package/dist/backup/initiate-import/0.1/payload.js +504 -0
  59. package/dist/backup/initiate-import/0.1/payload.js.map +1 -0
  60. package/dist/backup/put-chunk/0.1/payload.d.ts +495 -0
  61. package/dist/backup/put-chunk/0.1/payload.d.ts.map +1 -0
  62. package/dist/backup/put-chunk/0.1/payload.js +265 -0
  63. package/dist/backup/put-chunk/0.1/payload.js.map +1 -0
  64. package/dist/device/list/0.1/payload.d.ts +4 -4
  65. package/dist/device/list/0.1/payload.d.ts.map +1 -1
  66. package/dist/device/list/0.1/payload.js +4 -2
  67. package/dist/device/list/0.1/payload.js.map +1 -1
  68. package/dist/device/list/0.2/payload.d.ts +4 -4
  69. package/dist/device/list/0.2/payload.d.ts.map +1 -1
  70. package/dist/device/list/0.2/payload.js +4 -2
  71. package/dist/device/list/0.2/payload.js.map +1 -1
  72. package/dist/device/register/0.1/payload.d.ts +4 -4
  73. package/dist/device/register/0.1/payload.d.ts.map +1 -1
  74. package/dist/device/register/0.1/payload.js +4 -2
  75. package/dist/device/register/0.1/payload.js.map +1 -1
  76. package/dist/device/register/0.2/payload.d.ts +4 -4
  77. package/dist/device/register/0.2/payload.d.ts.map +1 -1
  78. package/dist/device/register/0.2/payload.js +4 -2
  79. package/dist/device/register/0.2/payload.js.map +1 -1
  80. package/dist/git-ns/_shared/0.4/git-ns.d.ts +16 -0
  81. package/dist/git-ns/_shared/0.4/git-ns.d.ts.map +1 -0
  82. package/dist/git-ns/_shared/0.4/git-ns.js +6 -0
  83. package/dist/git-ns/_shared/0.4/git-ns.js.map +1 -0
  84. package/dist/git-ns/account/link-status/0.1/payload.d.ts +2 -2
  85. package/dist/git-ns/account/link-status/0.1/payload.js +2 -2
  86. package/dist/git-ns/account/link-status/0.1/payload.js.map +1 -1
  87. package/dist/git-ns/account/unlink/0.1/payload.d.ts +411 -0
  88. package/dist/git-ns/account/unlink/0.1/payload.d.ts.map +1 -0
  89. package/dist/git-ns/account/unlink/0.1/payload.js +228 -0
  90. package/dist/git-ns/account/unlink/0.1/payload.js.map +1 -0
  91. package/dist/git-ns/bridge/event/0.3/payload.d.ts +1682 -0
  92. package/dist/git-ns/bridge/event/0.3/payload.d.ts.map +1 -0
  93. package/dist/git-ns/bridge/event/0.3/payload.js +971 -0
  94. package/dist/git-ns/bridge/event/0.3/payload.js.map +1 -0
  95. package/dist/git-ns/bridge/job/0.4/payload.d.ts +1068 -0
  96. package/dist/git-ns/bridge/job/0.4/payload.d.ts.map +1 -0
  97. package/dist/git-ns/bridge/job/0.4/payload.js +573 -0
  98. package/dist/git-ns/bridge/job/0.4/payload.js.map +1 -0
  99. package/dist/git-ns/drift/resolve/0.3/payload.d.ts +1072 -0
  100. package/dist/git-ns/drift/resolve/0.3/payload.d.ts.map +1 -0
  101. package/dist/git-ns/drift/resolve/0.3/payload.js +634 -0
  102. package/dist/git-ns/drift/resolve/0.3/payload.js.map +1 -0
  103. package/dist/git-ns/namespace/reseat/0.3/payload.d.ts +515 -0
  104. package/dist/git-ns/namespace/reseat/0.3/payload.d.ts.map +1 -0
  105. package/dist/git-ns/namespace/reseat/0.3/payload.js +296 -0
  106. package/dist/git-ns/namespace/reseat/0.3/payload.js.map +1 -0
  107. package/dist/git-ns/repo/create/0.3/payload.d.ts +1101 -0
  108. package/dist/git-ns/repo/create/0.3/payload.d.ts.map +1 -0
  109. package/dist/git-ns/repo/create/0.3/payload.js +646 -0
  110. package/dist/git-ns/repo/create/0.3/payload.js.map +1 -0
  111. package/dist/git-ns/right/break-glass/0.1/payload.d.ts +685 -0
  112. package/dist/git-ns/right/break-glass/0.1/payload.d.ts.map +1 -0
  113. package/dist/git-ns/right/break-glass/0.1/payload.js +397 -0
  114. package/dist/git-ns/right/break-glass/0.1/payload.js.map +1 -0
  115. package/dist/git-ns/right/break-glass-notice/0.1/payload.d.ts +384 -0
  116. package/dist/git-ns/right/break-glass-notice/0.1/payload.d.ts.map +1 -0
  117. package/dist/git-ns/right/break-glass-notice/0.1/payload.js +216 -0
  118. package/dist/git-ns/right/break-glass-notice/0.1/payload.js.map +1 -0
  119. package/dist/git-ns/right/grant/0.3/payload.d.ts +678 -0
  120. package/dist/git-ns/right/grant/0.3/payload.d.ts.map +1 -0
  121. package/dist/git-ns/right/grant/0.3/payload.js +383 -0
  122. package/dist/git-ns/right/grant/0.3/payload.js.map +1 -0
  123. package/dist/git-ns/right/ratify/0.1/payload.d.ts +702 -0
  124. package/dist/git-ns/right/ratify/0.1/payload.d.ts.map +1 -0
  125. package/dist/git-ns/right/ratify/0.1/payload.js +404 -0
  126. package/dist/git-ns/right/ratify/0.1/payload.js.map +1 -0
  127. package/dist/git-ns/right/revoke/0.3/payload.d.ts +664 -0
  128. package/dist/git-ns/right/revoke/0.3/payload.d.ts.map +1 -0
  129. package/dist/git-ns/right/revoke/0.3/payload.js +378 -0
  130. package/dist/git-ns/right/revoke/0.3/payload.js.map +1 -0
  131. package/dist/git-ns/roles/reproject/0.1/payload.d.ts +325 -0
  132. package/dist/git-ns/roles/reproject/0.1/payload.d.ts.map +1 -0
  133. package/dist/git-ns/roles/reproject/0.1/payload.js +176 -0
  134. package/dist/git-ns/roles/reproject/0.1/payload.js.map +1 -0
  135. package/dist/git-ns/view/0.1/payload.d.ts +2 -2
  136. package/dist/git-ns/view/0.1/payload.js +2 -2
  137. package/dist/git-ns/view/0.1/payload.js.map +1 -1
  138. package/dist/git-ns/view/0.2/payload.d.ts +2 -2
  139. package/dist/git-ns/view/0.2/payload.js +2 -2
  140. package/dist/git-ns/view/0.2/payload.js.map +1 -1
  141. package/dist/git-ns/view/0.3/payload.d.ts +2 -2
  142. package/dist/git-ns/view/0.3/payload.js +2 -2
  143. package/dist/git-ns/view/0.3/payload.js.map +1 -1
  144. package/dist/git-ns/view/0.4/payload.d.ts +1696 -0
  145. package/dist/git-ns/view/0.4/payload.d.ts.map +1 -0
  146. package/dist/git-ns/view/0.4/payload.js +1012 -0
  147. package/dist/git-ns/view/0.4/payload.js.map +1 -0
  148. package/dist/index.d.ts +39 -0
  149. package/dist/index.d.ts.map +1 -1
  150. package/dist/index.js +39 -0
  151. package/dist/index.js.map +1 -1
  152. package/dist/messaging/message/status/0.1/payload.d.ts +372 -0
  153. package/dist/messaging/message/status/0.1/payload.d.ts.map +1 -0
  154. package/dist/messaging/message/status/0.1/payload.js +214 -0
  155. package/dist/messaging/message/status/0.1/payload.js.map +1 -0
  156. package/dist/vta/_shared/0.3/did-key-roles.d.ts +16 -0
  157. package/dist/vta/_shared/0.3/did-key-roles.d.ts.map +1 -0
  158. package/dist/vta/_shared/0.3/did-key-roles.js +6 -0
  159. package/dist/vta/_shared/0.3/did-key-roles.js.map +1 -0
  160. package/dist/vta/attestation/mnemonic-export/1.0/payload.d.ts +326 -0
  161. package/dist/vta/attestation/mnemonic-export/1.0/payload.d.ts.map +1 -0
  162. package/dist/vta/attestation/mnemonic-export/1.0/payload.js +175 -0
  163. package/dist/vta/attestation/mnemonic-export/1.0/payload.js.map +1 -0
  164. package/dist/vta/webvh/dids/keys/add/1.0/payload.d.ts +1914 -0
  165. package/dist/vta/webvh/dids/keys/add/1.0/payload.d.ts.map +1 -0
  166. package/dist/vta/webvh/dids/keys/add/1.0/payload.js +1128 -0
  167. package/dist/vta/webvh/dids/keys/add/1.0/payload.js.map +1 -0
  168. package/dist/vta/webvh/dids/keys/list/1.0/payload.d.ts +1603 -0
  169. package/dist/vta/webvh/dids/keys/list/1.0/payload.d.ts.map +1 -0
  170. package/dist/vta/webvh/dids/keys/list/1.0/payload.js +942 -0
  171. package/dist/vta/webvh/dids/keys/list/1.0/payload.js.map +1 -0
  172. package/dist/vta/webvh/dids/keys/retire/1.0/payload.d.ts +1914 -0
  173. package/dist/vta/webvh/dids/keys/retire/1.0/payload.d.ts.map +1 -0
  174. package/dist/vta/webvh/dids/keys/retire/1.0/payload.js +1123 -0
  175. package/dist/vta/webvh/dids/keys/retire/1.0/payload.js.map +1 -0
  176. package/dist/vta/webvh/dids/keys/revoke/1.0/payload.d.ts +2021 -0
  177. package/dist/vta/webvh/dids/keys/revoke/1.0/payload.d.ts.map +1 -0
  178. package/dist/vta/webvh/dids/keys/revoke/1.0/payload.js +1168 -0
  179. package/dist/vta/webvh/dids/keys/revoke/1.0/payload.js.map +1 -0
  180. package/dist/vta/webvh/dids/rotate-keys/2.0/payload.d.ts +1992 -0
  181. package/dist/vta/webvh/dids/rotate-keys/2.0/payload.d.ts.map +1 -0
  182. package/dist/vta/webvh/dids/rotate-keys/2.0/payload.js +1151 -0
  183. package/dist/vta/webvh/dids/rotate-keys/2.0/payload.js.map +1 -0
  184. package/dist/vta/webvh/dids/update/2.0/payload.d.ts +1062 -0
  185. package/dist/vta/webvh/dids/update/2.0/payload.d.ts.map +1 -0
  186. package/dist/vta/webvh/dids/update/2.0/payload.js +616 -0
  187. package/dist/vta/webvh/dids/update/2.0/payload.js.map +1 -0
  188. package/dist/vtc/credentials/reissue/0.1/payload.d.ts +502 -0
  189. package/dist/vtc/credentials/reissue/0.1/payload.d.ts.map +1 -0
  190. package/dist/vtc/credentials/reissue/0.1/payload.js +282 -0
  191. package/dist/vtc/credentials/reissue/0.1/payload.js.map +1 -0
  192. package/dist/vtc/members/personhood/challenge/0.1/payload.d.ts +2 -2
  193. package/dist/vtc/members/personhood/challenge/0.1/payload.js +2 -2
  194. package/dist/vtc/members/personhood/challenge/0.1/payload.js.map +1 -1
  195. package/dist/vtc/vetting/vetters/profile/0.1/payload.d.ts +2 -2
  196. package/dist/vtc/vetting/vetters/profile/0.1/payload.js +2 -2
  197. package/dist/vtc/vetting/vetters/profile/0.1/payload.js.map +1 -1
  198. package/dist/vtc/vetting/vetters/resend/0.1/payload.d.ts +2 -2
  199. package/dist/vtc/vetting/vetters/resend/0.1/payload.js +2 -2
  200. package/dist/vtc/vetting/vetters/resend/0.1/payload.js.map +1 -1
  201. package/package.json +1 -1
  202. package/src/_shared/components.ts +313 -2
  203. package/src/auth/passkey/enroll/invite/0.2/payload.ts +325 -0
  204. package/src/auth/passkey/enroll/redeem/finish/0.1/payload.ts +499 -0
  205. package/src/auth/passkey/enroll/redeem/start/0.1/payload.ts +700 -0
  206. package/src/auth/passkey/revoke/finish/0.2/payload.ts +379 -0
  207. package/src/auth/passkey/revoke/start/0.2/payload.ts +349 -0
  208. package/src/auth/step-up/approve-request/0.3/payload.ts +421 -0
  209. package/src/auth/step-up/approve-response/0.4/payload.ts +593 -0
  210. package/src/auth/step-up/approve-response/0.5/payload.ts +593 -0
  211. package/src/backup/abort/0.1/payload.ts +191 -0
  212. package/src/backup/complete-export/0.1/payload.ts +191 -0
  213. package/src/backup/finalize-import/0.1/payload.ts +279 -0
  214. package/src/backup/get-chunk/0.1/payload.ts +308 -0
  215. package/src/backup/initiate-export/0.1/payload.ts +564 -0
  216. package/src/backup/initiate-import/0.1/payload.ts +561 -0
  217. package/src/backup/put-chunk/0.1/payload.ts +331 -0
  218. package/src/device/list/0.1/payload.ts +4 -2
  219. package/src/device/list/0.2/payload.ts +4 -2
  220. package/src/device/register/0.1/payload.ts +4 -2
  221. package/src/device/register/0.2/payload.ts +4 -2
  222. package/src/git-ns/_shared/0.4/git-ns.ts +17 -0
  223. package/src/git-ns/account/link-status/0.1/payload.ts +2 -2
  224. package/src/git-ns/account/unlink/0.1/payload.ts +274 -0
  225. package/src/git-ns/bridge/event/0.3/payload.ts +1132 -0
  226. package/src/git-ns/bridge/job/0.4/payload.ts +691 -0
  227. package/src/git-ns/drift/resolve/0.3/payload.ts +707 -0
  228. package/src/git-ns/namespace/reseat/0.3/payload.ts +342 -0
  229. package/src/git-ns/repo/create/0.3/payload.ts +706 -0
  230. package/src/git-ns/right/break-glass/0.1/payload.ts +443 -0
  231. package/src/git-ns/right/break-glass-notice/0.1/payload.ts +258 -0
  232. package/src/git-ns/right/grant/0.3/payload.ts +434 -0
  233. package/src/git-ns/right/ratify/0.1/payload.ts +455 -0
  234. package/src/git-ns/right/revoke/0.3/payload.ts +425 -0
  235. package/src/git-ns/roles/reproject/0.1/payload.ts +220 -0
  236. package/src/git-ns/view/0.1/payload.ts +2 -2
  237. package/src/git-ns/view/0.2/payload.ts +2 -2
  238. package/src/git-ns/view/0.3/payload.ts +2 -2
  239. package/src/git-ns/view/0.4/payload.ts +1075 -0
  240. package/src/index.ts +39 -0
  241. package/src/messaging/message/status/0.1/payload.ts +270 -0
  242. package/src/vta/_shared/0.3/did-key-roles.ts +17 -0
  243. package/src/vta/attestation/mnemonic-export/1.0/payload.ts +232 -0
  244. package/src/vta/webvh/dids/keys/add/1.0/payload.ts +1217 -0
  245. package/src/vta/webvh/dids/keys/list/1.0/payload.ts +1004 -0
  246. package/src/vta/webvh/dids/keys/retire/1.0/payload.ts +1212 -0
  247. package/src/vta/webvh/dids/keys/revoke/1.0/payload.ts +1276 -0
  248. package/src/vta/webvh/dids/rotate-keys/2.0/payload.ts +1262 -0
  249. package/src/vta/webvh/dids/update/2.0/payload.ts +713 -0
  250. package/src/vtc/credentials/reissue/0.1/payload.ts +357 -0
  251. package/src/vtc/members/personhood/challenge/0.1/payload.ts +2 -2
  252. package/src/vtc/vetting/vetters/profile/0.1/payload.ts +2 -2
  253. package/src/vtc/vetting/vetters/resend/0.1/payload.ts +2 -2
package/CHANGELOG.md CHANGED
@@ -11,6 +11,326 @@ The package versions over **its own API** — what a consumer compiles against
11
11
  not over `SPEC.md`. Below 1.0 a breaking change bumps the leading non-zero
12
12
  component.
13
13
 
14
+ ## 0.21.0 — 2026-09-26
15
+
16
+
17
+ ### Added
18
+
19
+ - **git-ns**: Separation of duties for elevated rights, with an audited break-glass (#641)
20
+
21
+ * feat(git-ns): separation of duties for elevated rights, with an audited break-glass
22
+
23
+ An elevated git right (git.ns.admin, git.repo.create, git.repo.own) is now
24
+ always granted by someone other than its recipient, and the one way to give
25
+ oneself one is an explicit, justified, highly visible break-glass that another
26
+ administrator ratifies or revokes.
27
+
28
+ - git-ns/right/grant 0.3: fixed rule 7, separation of duties, refused with
29
+ git-ns:selfGrantNotAllowed. It binds every task that records a right on the
30
+ actor's own authority (drift/resolve adopt, repo/adopt, namespace/reseat);
31
+ bind and repo/create are not self-grants. Rules 3 and 4 count only records
32
+ with no expiry that are not unratified break-glass.
33
+ - git-ns/right/break-glass 0.1 (new): self-grant of an elevated right the
34
+ actor may already grant, or git.ns.admin on a headless namespace for a
35
+ community administrator. Mandatory justification, destructive, immediate,
36
+ no expiry, highest-severity audit, notice to every administrator, visible
37
+ until ratified or revoked. Policy may disable, delay or tighten it, never
38
+ quieten it.
39
+ - git-ns/right/ratify 0.1 (new): another administrator clears the flag,
40
+ bound to the breakGlass.at they read.
41
+ - git-ns/right/break-glass-notice 0.1 (new): the VTC's signed push to every
42
+ community administrator and namespace admin, for break-glass, ratified and
43
+ revoked.
44
+ - git-ns/right/revoke 0.3: any community administrator may revoke an
45
+ unratified break-glass record; policy cannot refuse that.
46
+ - git-ns/view 0.4: unratified break-glass records go to every administrator
47
+ they concern, whatever else the caller may see.
48
+ - git-ns/_shared 0.4: BreakGlass, RightRecord.breakGlass, ElevatedRight.
49
+
50
+ Rust, TypeScript, Go and Dart bindings regenerated.
51
+
52
+ - **git-ns**: Drift/resolve 0.3 binds an adoption to the member it names (#640)
53
+
54
+ * feat(git-ns): drift/resolve 0.3 binds an adoption to the member it names
55
+
56
+ A drift/resolve 0.2 adoption did not name who receives the right. The VTC
57
+ resolved the item's forge account to whoever had linked it when the task
58
+ ran, so an account unlinked and linked again, to someone else, between the
59
+ resolver reading the item and signing granted a right, published to the
60
+ Trust Registry, to a member the resolver never saw. The signed document
61
+ said nothing otherwise: observed bounded which role an adoption records,
62
+ nothing bounded to whom.
63
+
64
+ drift/resolve 0.3 adds `subject`, the DID of the member the resolver read
65
+ as linked to the account. It is required for adopt and absent for revert,
66
+ refused as malformedRequest otherwise (as a missing `observed` is, and
67
+ likewise stated in prose rather than a schema conditional). The VTC adopts
68
+ only while the account is still linked to exactly that member, re-checked
69
+ under the same exclusion as the write that records the right, and refuses
70
+ otherwise with the new git-ns/drift/resolve:subjectChanged.
71
+
72
+ Versioning. A 0.2 document is a 0.3 document with no `subject`: still a
73
+ valid revert, now a malformed adopt. Required-for-one-action is not
74
+ backwards-compatible, so this is a MINOR increment under the draft
75
+ allowance of SPEC 5.2. A VTC serving older versions SHOULD NOT accept a
76
+ 0.1 or 0.2 adopt, since it cannot know whom that resolver meant, and SHOULD
77
+ refuse one naming 0.3.
78
+
79
+ git-ns/view still returns a member only their own account links, so a
80
+ client that has only git-ns/view cannot adopt another member's role; the
81
+ spec says so. Invalid examples cover a DID URL, shell metacharacters and a
82
+ list as `subject`.
83
+
84
+ Bindings regenerated for Rust, TypeScript, Go and Dart.
85
+
86
+ - **git-ns**: Re-project roles on demand, and the bridge reports its role map (#639)
87
+
88
+ * feat(git-ns): re-project roles on demand, and the bridge reports its role map
89
+
90
+ A bridge's role map (which forge role own, maintain and commit.sign get)
91
+ is the community's to configure per bridge, forge, namespace and
92
+ repository, but nothing told the VTC what map was in force, and a
93
+ change reached a repository only at its next unrelated projection.
94
+
95
+ - git-ns/bridge/event 0.3: a new event type, roleMapReported. The bridge
96
+ reports, per namespace, its role map as the forge applies it (rounded
97
+ onto the forge's ladder: `none` < `read` < `triage` < `write` <
98
+ `maintain` < `admin`), each repository whose map differs (`repos`), and
99
+ each repository whose roles it last projected under a different map
100
+ (`stale`). Sent at start-up, on a map change and after bindCompleted.
101
+ The map has no member for git.ns.admin: a namespace admin projects to
102
+ no forge role whatever the configuration. The VTC refuses an unordered
103
+ map, confines `repos` and `stale` to the namespace, uses the map
104
+ wherever it shows or derives a forge role, and SHOULD re-project each
105
+ stale repository. Everything else is restated unchanged from 0.2; the
106
+ schema pins _shared/0.3, wire-identical for every event shape.
107
+
108
+ - git-ns/roles/reproject 0.1 (new): a community administrator, or a
109
+ namespace admin by explicit record, has the VTC send the complete
110
+ desiredRoles of one repository, or of every active or orphaned
111
+ repository in a namespace, again. No right changes and nothing is
112
+ published; the audit record says who asked and why. Refused in manual
113
+ mode (manualMode) and while the bridge has no access (noForgeAccess).
114
+
115
+ - git-ns/drift/resolve 0.2 (draft, in place): the projected right of a
116
+ role is the lowest right whose role in the bridge's reported map is
117
+ that role; the default map without a report.
118
+
119
+ Bindings regenerated for Rust, TypeScript, Go and Dart.
120
+
121
+ - **vta/webvh/dids/keys**: Named key roles and per-role rotation for a VTA's DIDs (#638)
122
+
123
+ * feat(vta/webvh/dids/keys): named key roles and per-role rotation for a VTA's DIDs
124
+
125
+ Adds the Trust Tasks every client uses to manage the key roles of the
126
+ did:webvh identities a VTA holds keys for (its own, and those of the
127
+ VTCs and VTNs provisioned on it), aligned with the VTI key-roles draft
128
+ (dtgwg-vti-spec#42): attestation, operational, messaging and update.
129
+
130
+ - **git-ns/account/unlink**: A member unlinks their own forge account (#636)
131
+
132
+ * feat(git-ns/account/unlink): a member unlinks their own forge account
133
+
134
+ git-ns/account/link said a binding lasts "until the member unlinks or
135
+ leaves", but no task unlinked: the only way to drop an account was to
136
+ link another on the same forge, or to leave the community.
137
+
138
+ - **git-ns**: Bridge/job 0.4 and namespace/reseat 0.3, a namespace admin gets no forge role (#635)
139
+
140
+ * feat(git-ns): bridge/job 0.4 and namespace/reseat 0.3 — a namespace admin gets no forge role
141
+
142
+ A namespace admin exercises git.ns.admin through the VTC and its bridge,
143
+ never through a forge role: the bridge does not make them an owner of the
144
+ organisation and gives them no role on any repository for it.
145
+
146
+ git-ns/bridge/job 0.4:
147
+ - desiredRoles carries, per person, the highest right recorded in their
148
+ own name on the repository (own, maintain or commit.sign there, or
149
+ commit.sign on the namespace), never one held only because git.ns.admin
150
+ implies it. A namespace admin with none is listed at git.ns.admin, which
151
+ every adapter maps to no role, so the bridge takes off a role it manages
152
+ that they still hold. An admin who is also a recorded owner is listed as
153
+ the owner.
154
+ - Each forge account appears in desiredRoles at most once.
155
+ - repo is required for projectRoles: the namespace-level job, which only
156
+ ever projected git.ns.admin as organisation owners, no longer exists.
157
+ - removeAccounts may name an account listed at git.ns.admin.
158
+ - A VTC must not send 0.4 to a bridge that has not shown it takes 0.4, and
159
+ should read an unsupportedType or unsupportedVersion refusal as the
160
+ bridge taking only earlier versions.
161
+
162
+ git-ns/namespace/reseat 0.3: step 8 no longer queues a namespace-level
163
+ forge projection. Wire-identical to 0.2.
164
+
165
+ Earlier versions are unchanged. Both are draft, so the breaking changes
166
+ ship as MINOR increments under the draft allowance of SPEC 5.2.
167
+
168
+
169
+
170
+ ### Security
171
+
172
+ - **didcomm**: A consumer may require a proof over DIDComm (#642)
173
+
174
+ The DIDComm binding lets a producer omit `proof` because the envelope
175
+ authenticates the sender. A consumer that authorizes on the sender's identity
176
+ now MAY decline that allowance and require an in-band proof on every document
177
+ it accepts over the binding, rejecting a document without one as
178
+ `proofRequired` and one whose proof does not identify the transport sender as
179
+ `identityMismatch`. A producer SHOULD include a proof on every document it
180
+ sends over DIDComm so it is accepted either way.
181
+
182
+ The tasks whose consumer authorizes or answers on the caller's identity alone
183
+ now declare `proof` REQUIRED, so the identity rests on the document on every
184
+ transport:
185
+
186
+ - vtc/vetting/vetters/profile/0.1
187
+ - vtc/vetting/vetters/resend/0.1
188
+ - vtc/members/personhood/challenge/0.1
189
+ - git-ns/view/0.1, 0.2 and 0.3
190
+ - git-ns/account/link-status/0.1
191
+
192
+ All are drafts, edited in place. Bindings regenerated for Rust, TS, Go and
193
+ Dart.
194
+
195
+ - **proof**: Check a proof's verificationMethod against its proofPurpose (#637)
196
+
197
+ * security(proof)!: check a proof's verificationMethod against its proofPurpose
198
+
199
+ The stock Verifier accepted a proof signed by any key listed under the
200
+ issuer's authentication or assertionMethod, whatever proofPurpose the proof
201
+ declared. It did not check that the verification method's controller was the
202
+ issuer. W3C Data Integrity requires both, through Controlled Identifiers
203
+ v1.0 §3.3.
204
+
205
+ - New ProofPurpose type (assertionMethod, authentication,
206
+ capabilityInvocation, capabilityDelegation). Parsing refuses keyAgreement
207
+ and unknown values.
208
+ - New ProofPurposeResolver trait resolves a verificationMethod for one
209
+ purpose. CachedDidResolver implements it. It requires the resolved
210
+ document's id and the method's controller to be the DID that names the
211
+ method. It requires the method to be listed under the relationship the
212
+ purpose names, by absolute DID URL, by a fragment relative to the
213
+ document id, or embedded. DidKeyResolver implements it with did:key's
214
+ implicit relationships: the key named `did:key:<id>#<id>` signs for all
215
+ four purposes, and an X25519 did:key signs for none.
216
+ - Verifier resolves through a ProofPurposeResolver, so every proof is
217
+ checked against its own purpose.
218
+ - New PurposeBound wraps a ProofPurposeResolver as an upstream
219
+ VerificationMethodResolver bound to one proof's purpose. It is for
220
+ callers of DataIntegrityProof::verify.
221
+ - sign_trust_task and ProofExt::sign default to proofPurpose authentication.
222
+ They refuse a purpose that names no signing relationship.
223
+ - Resolver errors name the rule that failed. They carry no DID, document or
224
+ key material.
225
+
226
+
227
+
228
+ ### Specifications
229
+
230
+ - **device**: Register the keyExport capability (#643)
231
+
232
+ keys/export-secret/0.1 authorizes against "standing over the key's
233
+ scope" and leaves the grant's shape to the implementation. Where it is a
234
+ device capability there should be a registered value, as there is for
235
+ roomPresent and roomOpen, so implementations do not each carry a private
236
+ one. The VTA already gates export on it.
237
+
238
+ keyExport (key-export in the 0.1 casing) is deliberately separate from
239
+ sign: a producer that may ask the custodian to use a key loses that the
240
+ moment its entitlement changes, while a producer that took the key keeps
241
+ it after its authority is withdrawn. export-secret now names the value
242
+ and says a sign grant is not a keyExport grant. The value is additive,
243
+ so a consumer that does not recognise it ignores it.
244
+
245
+ Bindings regenerated (Rust, TS, Go, Dart); no version bumps.
246
+
247
+ ## 0.20.8 — 2026-09-24
248
+
249
+
250
+ ### Added
251
+
252
+ - **backup**: A node-neutral backup and restore family (#633)
253
+
254
+ `vta/backup/*` is the agent's descriptor-based backup and restore: a slot,
255
+ digests pre-committed before any byte moves, the bundle carried either as an
256
+ HTTPS stream or chunk by chunk over the agent's own Trust Task transport, and a
257
+ finalize step that previews before it replaces. Nothing in that transfer is
258
+ specific to an agent, and a community node needs exactly the same thing for the
259
+ same reason: a backup of any real node is too large for one document, and a
260
+ node that bounds a document's size before checking its proof — as it must on a
261
+ binding that authenticates no sender — cannot accept one that way.
262
+ `vtc/backup/import/0.1`, which carries the whole envelope inline, is the case
263
+ in point.
264
+
265
+ This adds `backup/{initiate-export, get-chunk, complete-export,
266
+ initiate-import, put-chunk, finalize-import, abort}/0.1`, derived from the
267
+ latest `vta/backup/*` versions and made node-neutral:
268
+
269
+ - The parties, prose and error-code slugs name a node rather than an agent.
270
+ - What a backup contains is the node's to define. `finalize-import`'s
271
+ response replaces the agent-specific `keyCount` / `aclCount` /
272
+ `contextCount` / `auditCount` / `importedSecretCount` with one `counts` map
273
+ keyed by the node's own record kinds — an agent's `keys`, `acl`, `contexts`,
274
+ `audit`, `importedSecrets`; a community's backed-up keyspaces — still
275
+ counts, never contents.
276
+ - The transfer shapes (descriptor, chunk manifest, chunk data, bundle id) are
277
+ referenced from `vta/_shared/0.1/backup-transfer` rather than copied. A copy
278
+ with the node-neutral wording would have been a second definition that the
279
+ TypeScript generator disambiguates by renaming the published `ChunkData`,
280
+ `ChunkSize`, `ChunkManifest`, `ChunkedDescriptor` and `BundleDescriptor`
281
+ exports — a break for every TS consumer, for no difference on the wire.
282
+ - The "Changes from 1.0" history sections are dropped; a new 0.1 has no
283
+ predecessor, and the abstract says where the family came from.
284
+
285
+ `vta/backup/*` stays served while agents adopt this family, and
286
+ `vtc/backup/{export,import}` remain for a node small enough to fit one
287
+ document. Retiring the agent-specific versions is a later change.
288
+
289
+ Bindings regenerated for Rust, TypeScript, Go and Dart; the only change to
290
+ existing generated code is the new `backup` feature and index entries.
291
+
292
+
293
+
294
+ ### Specifications
295
+
296
+ - **auth/step-up**: A step-up bound to one operation needs no session (#631)
297
+
298
+ `approve-response/0.3` introduced the bound approval — one that authorizes a
299
+ single operation and elevates nothing, answered `recorded` — but
300
+ `approve-request` still required a `sessionId`, and `approve-response` echoed
301
+ one. So the only operations a step-up could be bound to were ones that arrived
302
+ over a session.
303
+
304
+ An operation that arrives as a signed Trust Task document has none: its
305
+ authority is its proof. Binding the human's gesture to one of their sessions
306
+ after the fact cannot say which, and a window opened on any of them is one a
307
+ process holding the signer's key can spend on acts the human never saw — the
308
+ same defect as a session elevation standing in for consent.
309
+
310
+ - `approve-request/0.3`: `sessionId` is omitted for a step-up bound to an
311
+ operation that arrived without a session, and a relying party MUST NOT fill
312
+ it with a session it chose after the fact. A new `boundTo` names the bound
313
+ operation — for a signed document, a digest of its type and payload salted
314
+ with the challenge, since an unsalted digest over a short, predictable
315
+ payload is a confirmation oracle. A new "Inline delivery" section lets a
316
+ relying party with no push channel carry the request in the refusal of the
317
+ operation it is for (`details.stepUpRequest`); it is authenticated by being
318
+ the relying party's own reply, so a producer must not surface one received
319
+ any other way, and it is for bound step-ups only. The four Security &
320
+ Privacy sub-headings are added.
321
+ - `approve-response/0.4`: `sessionId` is echoed exactly when the request
322
+ carried one, and a response carrying one for a session-less step-up is
323
+ refused (`subjectMismatch`), so a bound approval cannot be read as naming a
324
+ session to elevate. The subject is compared with the subject bound to the
325
+ pending step-up rather than with a session's.
326
+
327
+ Both are backward-compatible minors: a required member became optional and an
328
+ optional one was added. Motivated by the community node's signed-document
329
+ step-up (OpenVTC/verifiable-trust-infrastructure#1713) and by
330
+ trustoverip/dtgwg-vti-spec#40, which amends VTI-APV-003 to admit it.
331
+
332
+ Bindings regenerated for Rust, TypeScript, Go and Dart.
333
+
14
334
  ## 0.20.7 — 2026-09-24
15
335
 
16
336