@openvtc/trust-tasks 0.20.6 → 0.20.8

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 (152) hide show
  1. package/CHANGELOG.md +138 -0
  2. package/dist/_shared/components.d.ts +55 -6
  3. package/dist/_shared/components.d.ts.map +1 -1
  4. package/dist/auth/step-up/approve-request/0.3/payload.d.ts +613 -0
  5. package/dist/auth/step-up/approve-request/0.3/payload.d.ts.map +1 -0
  6. package/dist/auth/step-up/approve-request/0.3/payload.js +345 -0
  7. package/dist/auth/step-up/approve-request/0.3/payload.js.map +1 -0
  8. package/dist/auth/step-up/approve-response/0.4/payload.d.ts +887 -0
  9. package/dist/auth/step-up/approve-response/0.4/payload.d.ts.map +1 -0
  10. package/dist/auth/step-up/approve-response/0.4/payload.js +504 -0
  11. package/dist/auth/step-up/approve-response/0.4/payload.js.map +1 -0
  12. package/dist/backup/abort/0.1/payload.d.ts +262 -0
  13. package/dist/backup/abort/0.1/payload.d.ts.map +1 -0
  14. package/dist/backup/abort/0.1/payload.js +146 -0
  15. package/dist/backup/abort/0.1/payload.js.map +1 -0
  16. package/dist/backup/complete-export/0.1/payload.d.ts +262 -0
  17. package/dist/backup/complete-export/0.1/payload.d.ts.map +1 -0
  18. package/dist/backup/complete-export/0.1/payload.js +146 -0
  19. package/dist/backup/complete-export/0.1/payload.js.map +1 -0
  20. package/dist/backup/finalize-import/0.1/payload.d.ts +395 -0
  21. package/dist/backup/finalize-import/0.1/payload.d.ts.map +1 -0
  22. package/dist/backup/finalize-import/0.1/payload.js +209 -0
  23. package/dist/backup/finalize-import/0.1/payload.js.map +1 -0
  24. package/dist/backup/get-chunk/0.1/payload.d.ts +461 -0
  25. package/dist/backup/get-chunk/0.1/payload.d.ts.map +1 -0
  26. package/dist/backup/get-chunk/0.1/payload.js +250 -0
  27. package/dist/backup/get-chunk/0.1/payload.js.map +1 -0
  28. package/dist/backup/initiate-export/0.1/payload.d.ts +896 -0
  29. package/dist/backup/initiate-export/0.1/payload.d.ts.map +1 -0
  30. package/dist/backup/initiate-export/0.1/payload.js +507 -0
  31. package/dist/backup/initiate-export/0.1/payload.js.map +1 -0
  32. package/dist/backup/initiate-import/0.1/payload.d.ts +888 -0
  33. package/dist/backup/initiate-import/0.1/payload.d.ts.map +1 -0
  34. package/dist/backup/initiate-import/0.1/payload.js +504 -0
  35. package/dist/backup/initiate-import/0.1/payload.js.map +1 -0
  36. package/dist/backup/put-chunk/0.1/payload.d.ts +495 -0
  37. package/dist/backup/put-chunk/0.1/payload.d.ts.map +1 -0
  38. package/dist/backup/put-chunk/0.1/payload.js +265 -0
  39. package/dist/backup/put-chunk/0.1/payload.js.map +1 -0
  40. package/dist/git-ns/_shared/0.1/git-ns.d.ts +1 -1
  41. package/dist/git-ns/_shared/0.1/git-ns.d.ts.map +1 -1
  42. package/dist/git-ns/_shared/0.2/git-ns.d.ts +1 -1
  43. package/dist/git-ns/_shared/0.2/git-ns.d.ts.map +1 -1
  44. package/dist/git-ns/_shared/0.3/git-ns.d.ts +16 -0
  45. package/dist/git-ns/_shared/0.3/git-ns.d.ts.map +1 -0
  46. package/dist/git-ns/_shared/0.3/git-ns.js +6 -0
  47. package/dist/git-ns/_shared/0.3/git-ns.js.map +1 -0
  48. package/dist/git-ns/bridge/job/0.1/payload.d.ts +1 -1
  49. package/dist/git-ns/bridge/job/0.1/payload.d.ts.map +1 -1
  50. package/dist/git-ns/bridge/job/0.2/payload.d.ts +1 -1
  51. package/dist/git-ns/bridge/job/0.2/payload.d.ts.map +1 -1
  52. package/dist/git-ns/bridge/job/0.3/payload.d.ts +1068 -0
  53. package/dist/git-ns/bridge/job/0.3/payload.d.ts.map +1 -0
  54. package/dist/git-ns/bridge/job/0.3/payload.js +573 -0
  55. package/dist/git-ns/bridge/job/0.3/payload.js.map +1 -0
  56. package/dist/git-ns/drift/resolve/0.1/payload.d.ts +1 -1
  57. package/dist/git-ns/drift/resolve/0.1/payload.d.ts.map +1 -1
  58. package/dist/git-ns/drift/resolve/0.2/payload.d.ts +1060 -0
  59. package/dist/git-ns/drift/resolve/0.2/payload.d.ts.map +1 -0
  60. package/dist/git-ns/drift/resolve/0.2/payload.js +630 -0
  61. package/dist/git-ns/drift/resolve/0.2/payload.js.map +1 -0
  62. package/dist/git-ns/namespace/reseat/0.1/payload.d.ts +1 -1
  63. package/dist/git-ns/namespace/reseat/0.1/payload.d.ts.map +1 -1
  64. package/dist/git-ns/namespace/reseat/0.2/payload.d.ts +515 -0
  65. package/dist/git-ns/namespace/reseat/0.2/payload.d.ts.map +1 -0
  66. package/dist/git-ns/namespace/reseat/0.2/payload.js +296 -0
  67. package/dist/git-ns/namespace/reseat/0.2/payload.js.map +1 -0
  68. package/dist/git-ns/repo/adopt/0.1/payload.d.ts +1 -1
  69. package/dist/git-ns/repo/adopt/0.1/payload.d.ts.map +1 -1
  70. package/dist/git-ns/repo/adopt/0.2/payload.d.ts +962 -0
  71. package/dist/git-ns/repo/adopt/0.2/payload.d.ts.map +1 -0
  72. package/dist/git-ns/repo/adopt/0.2/payload.js +583 -0
  73. package/dist/git-ns/repo/adopt/0.2/payload.js.map +1 -0
  74. package/dist/git-ns/repo/archive/0.1/payload.d.ts +1 -1
  75. package/dist/git-ns/repo/archive/0.1/payload.d.ts.map +1 -1
  76. package/dist/git-ns/repo/archive/0.2/payload.d.ts +959 -0
  77. package/dist/git-ns/repo/archive/0.2/payload.d.ts.map +1 -0
  78. package/dist/git-ns/repo/archive/0.2/payload.js +584 -0
  79. package/dist/git-ns/repo/archive/0.2/payload.js.map +1 -0
  80. package/dist/git-ns/repo/create/0.1/payload.d.ts +1 -1
  81. package/dist/git-ns/repo/create/0.1/payload.d.ts.map +1 -1
  82. package/dist/git-ns/repo/create/0.2/payload.d.ts +1074 -0
  83. package/dist/git-ns/repo/create/0.2/payload.d.ts.map +1 -0
  84. package/dist/git-ns/repo/create/0.2/payload.js +636 -0
  85. package/dist/git-ns/repo/create/0.2/payload.js.map +1 -0
  86. package/dist/git-ns/repo/transfer/0.1/payload.d.ts +1 -1
  87. package/dist/git-ns/repo/transfer/0.1/payload.d.ts.map +1 -1
  88. package/dist/git-ns/repo/transfer/0.2/payload.d.ts +947 -0
  89. package/dist/git-ns/repo/transfer/0.2/payload.d.ts.map +1 -0
  90. package/dist/git-ns/repo/transfer/0.2/payload.js +577 -0
  91. package/dist/git-ns/repo/transfer/0.2/payload.js.map +1 -0
  92. package/dist/git-ns/right/grant/0.1/payload.d.ts +1 -1
  93. package/dist/git-ns/right/grant/0.1/payload.d.ts.map +1 -1
  94. package/dist/git-ns/right/grant/0.2/payload.d.ts +506 -0
  95. package/dist/git-ns/right/grant/0.2/payload.d.ts.map +1 -0
  96. package/dist/git-ns/right/grant/0.2/payload.js +289 -0
  97. package/dist/git-ns/right/grant/0.2/payload.js.map +1 -0
  98. package/dist/git-ns/right/revoke/0.1/payload.d.ts +1 -1
  99. package/dist/git-ns/right/revoke/0.1/payload.d.ts.map +1 -1
  100. package/dist/git-ns/right/revoke/0.2/payload.d.ts +492 -0
  101. package/dist/git-ns/right/revoke/0.2/payload.d.ts.map +1 -0
  102. package/dist/git-ns/right/revoke/0.2/payload.js +284 -0
  103. package/dist/git-ns/right/revoke/0.2/payload.js.map +1 -0
  104. package/dist/git-ns/view/0.1/payload.d.ts +1 -1
  105. package/dist/git-ns/view/0.1/payload.d.ts.map +1 -1
  106. package/dist/git-ns/view/0.2/payload.d.ts +1 -1
  107. package/dist/git-ns/view/0.2/payload.d.ts.map +1 -1
  108. package/dist/git-ns/view/0.3/payload.d.ts +1524 -0
  109. package/dist/git-ns/view/0.3/payload.d.ts.map +1 -0
  110. package/dist/git-ns/view/0.3/payload.js +918 -0
  111. package/dist/git-ns/view/0.3/payload.js.map +1 -0
  112. package/dist/index.d.ts +20 -0
  113. package/dist/index.d.ts.map +1 -1
  114. package/dist/index.js +20 -0
  115. package/dist/index.js.map +1 -1
  116. package/package.json +1 -1
  117. package/src/_shared/components.ts +55 -6
  118. package/src/auth/step-up/approve-request/0.3/payload.ts +421 -0
  119. package/src/auth/step-up/approve-response/0.4/payload.ts +593 -0
  120. package/src/backup/abort/0.1/payload.ts +191 -0
  121. package/src/backup/complete-export/0.1/payload.ts +191 -0
  122. package/src/backup/finalize-import/0.1/payload.ts +279 -0
  123. package/src/backup/get-chunk/0.1/payload.ts +308 -0
  124. package/src/backup/initiate-export/0.1/payload.ts +564 -0
  125. package/src/backup/initiate-import/0.1/payload.ts +561 -0
  126. package/src/backup/put-chunk/0.1/payload.ts +331 -0
  127. package/src/git-ns/_shared/0.1/git-ns.ts +1 -1
  128. package/src/git-ns/_shared/0.2/git-ns.ts +1 -1
  129. package/src/git-ns/_shared/0.3/git-ns.ts +17 -0
  130. package/src/git-ns/bridge/job/0.1/payload.ts +1 -1
  131. package/src/git-ns/bridge/job/0.2/payload.ts +1 -1
  132. package/src/git-ns/bridge/job/0.3/payload.ts +691 -0
  133. package/src/git-ns/drift/resolve/0.1/payload.ts +1 -1
  134. package/src/git-ns/drift/resolve/0.2/payload.ts +699 -0
  135. package/src/git-ns/namespace/reseat/0.1/payload.ts +1 -1
  136. package/src/git-ns/namespace/reseat/0.2/payload.ts +342 -0
  137. package/src/git-ns/repo/adopt/0.1/payload.ts +1 -1
  138. package/src/git-ns/repo/adopt/0.2/payload.ts +628 -0
  139. package/src/git-ns/repo/archive/0.1/payload.ts +1 -1
  140. package/src/git-ns/repo/archive/0.2/payload.ts +626 -0
  141. package/src/git-ns/repo/create/0.1/payload.ts +1 -1
  142. package/src/git-ns/repo/create/0.2/payload.ts +689 -0
  143. package/src/git-ns/repo/transfer/0.1/payload.ts +1 -1
  144. package/src/git-ns/repo/transfer/0.2/payload.ts +619 -0
  145. package/src/git-ns/right/grant/0.1/payload.ts +1 -1
  146. package/src/git-ns/right/grant/0.2/payload.ts +340 -0
  147. package/src/git-ns/right/revoke/0.1/payload.ts +1 -1
  148. package/src/git-ns/right/revoke/0.2/payload.ts +331 -0
  149. package/src/git-ns/view/0.1/payload.ts +1 -1
  150. package/src/git-ns/view/0.2/payload.ts +1 -1
  151. package/src/git-ns/view/0.3/payload.ts +981 -0
  152. package/src/index.ts +20 -0
@@ -0,0 +1,1060 @@
1
+ /**
2
+ * Generated by scripts/build-ts-bindings.mjs — DO NOT EDIT BY HAND.
3
+ * Source: specs/git-ns/drift/resolve/0.2/payload.schema.json
4
+ */
5
+ import type { Did_GitNsV0_3 as Did, DriftItem, DriftType, Ext, ForgeAccount, ForgeHost, ForgeId, RepoResource, Resource, Right, RightRecord_GitNsV0_3 as RightRecord, Sync } from "../../../../_shared/components.js";
6
+ /**
7
+ * An owner of a repository, or a namespace admin over it, resolves one reported drift item: `adopt` records the forge-side role as a VTC right, under the same rules as git-ns/right/grant; `revert` has the bridge undo the forge-side change.
8
+ */
9
+ export interface GitNamespacesResolveDriftPayload {
10
+ /**
11
+ * The repository whose drift is resolved.
12
+ */
13
+ resource: RepoResource;
14
+ drift: DriftSelector;
15
+ /**
16
+ * `adopt` — record the forge-side role as a VTC right, so the projection comes to match the forge. `revert` — have the bridge make the forge match the projection again.
17
+ */
18
+ action: "adopt" | "revert";
19
+ /**
20
+ * Why, in the resolver's words. Kept in the VTC's audit record and, for `adopt`, as the recorded right's `reason`, disclosed only to the repository's owners and namespace admins.
21
+ */
22
+ reason?: string;
23
+ ext?: Ext;
24
+ }
25
+ /**
26
+ * Which of the repository's outstanding drift items to resolve. Drift items carry no identifier of their own: they are recomputed by the bridge and replaced wholesale by every git-ns/bridge/event. An item is selected by its `type`, and for the three role types also by the account whose role differs, which is unique among a repository's outstanding items.
27
+ */
28
+ export interface DriftSelector {
29
+ type: DriftType;
30
+ /**
31
+ * The account whose role differs, as the drift item reports it. Required for `roleAdded`, `roleRemoved` and `roleChanged`, and absent for every other type. Matched by `forge` and `id`; `login` is display only.
32
+ */
33
+ account?: ForgeAccount;
34
+ /**
35
+ * The item's `observed` value as the caller last read it. When present, the item is selected only if the forge still shows exactly this, so a decision made about one state is never applied to another. Required for `adopt`.
36
+ */
37
+ observed?: string;
38
+ }
39
+ /**
40
+ * What the resolution did, and where the repository's sync now stands.
41
+ */
42
+ export interface GitNamespacesResolveDriftResponsePayload {
43
+ /**
44
+ * The action taken, as requested.
45
+ */
46
+ action: "adopt" | "revert";
47
+ /**
48
+ * For `adopt`: the recorded right — newly recorded, or the live record that already existed. Absent for `revert`.
49
+ */
50
+ right?: RightRecord;
51
+ /**
52
+ * The repository's sync after the resolution. The resolved item is no longer outstanding; the state is `drift` while other items remain, and otherwise `pending` until the bridge confirms the forge matches.
53
+ */
54
+ sync: Sync;
55
+ ext?: Ext;
56
+ }
57
+ /** Shared definitions this specification references, re-exported under the names it used to declare them with. */
58
+ export type { Did, DriftItem, DriftType, Ext, ForgeAccount, ForgeHost, ForgeId, RepoResource, Resource, Right, RightRecord, Sync };
59
+ /** Trust Task type URI. */
60
+ export declare const TYPE_URI: "https://trusttasks.org/spec/git-ns/drift/resolve/0.2";
61
+ /** Stable alias for this specification's request payload shape. */
62
+ export type Payload = GitNamespacesResolveDriftPayload;
63
+ /** Trust Task response type URI (request type URI + "#response"). */
64
+ export declare const RESPONSE_TYPE_URI: "https://trusttasks.org/spec/git-ns/drift/resolve/0.2#response";
65
+ /** Stable alias for this specification's success-response payload shape. */
66
+ export type Response = GitNamespacesResolveDriftResponsePayload;
67
+ /**
68
+ * This specification's payload schema, as a value.
69
+ *
70
+ * SPEC.md §7.2 item 2 is performed against this. It is shipped as data
71
+ * rather than only as a `.json` file because TypeScript types are erased
72
+ * at runtime: without a schema a consumer has nothing to validate, and
73
+ * every REQUIRED payload member is optional in practice. Cross-file
74
+ * `$ref`s are already inlined, so it needs no resolver.
75
+ */
76
+ export declare const PAYLOAD_SCHEMA: {
77
+ readonly $schema: "https://json-schema.org/draft/2020-12/schema";
78
+ readonly $id: "https://trusttasks.org/spec/git-ns/drift/resolve/0.2";
79
+ readonly title: "Git Namespaces — Resolve Drift — payload";
80
+ readonly description: "An owner of a repository, or a namespace admin over it, resolves one reported drift item: `adopt` records the forge-side role as a VTC right, under the same rules as git-ns/right/grant; `revert` has the bridge undo the forge-side change.";
81
+ readonly type: "object";
82
+ readonly additionalProperties: false;
83
+ readonly required: readonly ["resource", "drift", "action"];
84
+ readonly properties: {
85
+ readonly resource: {
86
+ readonly $ref: "#/$defs/RepoResource";
87
+ readonly description: "The repository whose drift is resolved.";
88
+ };
89
+ readonly drift: {
90
+ readonly $ref: "#/$defs/DriftSelector";
91
+ };
92
+ readonly action: {
93
+ readonly type: "string";
94
+ readonly enum: readonly ["adopt", "revert"];
95
+ readonly description: "`adopt` — record the forge-side role as a VTC right, so the projection comes to match the forge. `revert` — have the bridge make the forge match the projection again.";
96
+ };
97
+ readonly reason: {
98
+ readonly type: "string";
99
+ readonly maxLength: 1024;
100
+ readonly description: "Why, in the resolver's words. Kept in the VTC's audit record and, for `adopt`, as the recorded right's `reason`, disclosed only to the repository's owners and namespace admins.";
101
+ };
102
+ readonly ext: {
103
+ readonly $ref: "#/$defs/Ext";
104
+ };
105
+ };
106
+ readonly $defs: {
107
+ readonly DriftSelector: {
108
+ readonly title: "DriftSelector";
109
+ readonly description: "Which of the repository's outstanding drift items to resolve. Drift items carry no identifier of their own: they are recomputed by the bridge and replaced wholesale by every git-ns/bridge/event. An item is selected by its `type`, and for the three role types also by the account whose role differs, which is unique among a repository's outstanding items.";
110
+ readonly type: "object";
111
+ readonly additionalProperties: false;
112
+ readonly required: readonly ["type"];
113
+ readonly properties: {
114
+ readonly type: {
115
+ readonly $ref: "#/$defs/DriftType";
116
+ };
117
+ readonly account: {
118
+ readonly $ref: "#/$defs/ForgeAccount";
119
+ readonly description: "The account whose role differs, as the drift item reports it. Required for `roleAdded`, `roleRemoved` and `roleChanged`, and absent for every other type. Matched by `forge` and `id`; `login` is display only.";
120
+ };
121
+ readonly observed: {
122
+ readonly type: "string";
123
+ readonly maxLength: 256;
124
+ readonly description: "The item's `observed` value as the caller last read it. When present, the item is selected only if the forge still shows exactly this, so a decision made about one state is never applied to another. Required for `adopt`.";
125
+ };
126
+ };
127
+ };
128
+ readonly Response: {
129
+ readonly $anchor: "response";
130
+ readonly title: "Git Namespaces — Resolve Drift — response payload";
131
+ readonly description: "What the resolution did, and where the repository's sync now stands.";
132
+ readonly type: "object";
133
+ readonly additionalProperties: false;
134
+ readonly required: readonly ["action", "sync"];
135
+ readonly properties: {
136
+ readonly action: {
137
+ readonly type: "string";
138
+ readonly enum: readonly ["adopt", "revert"];
139
+ readonly description: "The action taken, as requested.";
140
+ };
141
+ readonly right: {
142
+ readonly $ref: "#/$defs/RightRecord";
143
+ readonly description: "For `adopt`: the recorded right — newly recorded, or the live record that already existed. Absent for `revert`.";
144
+ };
145
+ readonly sync: {
146
+ readonly $ref: "#/$defs/Sync";
147
+ readonly description: "The repository's sync after the resolution. The resolved item is no longer outstanding; the state is `drift` while other items remain, and otherwise `pending` until the bridge confirms the forge matches.";
148
+ };
149
+ readonly ext: {
150
+ readonly $ref: "#/$defs/Ext";
151
+ };
152
+ };
153
+ };
154
+ readonly Ext: {
155
+ readonly title: "Ext";
156
+ readonly description: "Vendor-namespaced extension object per SPEC.md §4.5.1. Each immediate key MUST be a reverse-DNS namespace; structure under each namespace is opaque to the framework.";
157
+ readonly type: "object";
158
+ readonly minProperties: 1;
159
+ readonly additionalProperties: true;
160
+ readonly propertyNames: {
161
+ readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
162
+ };
163
+ };
164
+ readonly Sync: {
165
+ readonly title: "Sync";
166
+ readonly description: "How the forge compares with the VTC's projection for one repository.";
167
+ readonly type: "object";
168
+ readonly additionalProperties: false;
169
+ readonly required: readonly ["state", "drift"];
170
+ readonly properties: {
171
+ readonly state: {
172
+ readonly type: "string";
173
+ readonly enum: readonly ["inSync", "drift", "pending", "unchecked"];
174
+ readonly description: "`inSync` — the last comparison found no drift. `drift` — it found some, listed in `drift`. `pending` — a change has been sent to the forge and not yet confirmed. `unchecked` — nothing compares this repository (a manual-mode namespace).";
175
+ };
176
+ readonly checkedAt: {
177
+ readonly type: "string";
178
+ readonly format: "date-time";
179
+ readonly description: "When the forge was last compared. Absent if never.";
180
+ };
181
+ readonly drift: {
182
+ readonly type: "array";
183
+ readonly items: {
184
+ readonly $ref: "#/$defs/DriftItem";
185
+ };
186
+ readonly description: "Outstanding drift. Empty unless `state` is `drift`.";
187
+ };
188
+ };
189
+ };
190
+ readonly DriftItem: {
191
+ readonly title: "DriftItem";
192
+ readonly description: "One difference between the forge's observed state and the VTC's projection of a repository.";
193
+ readonly type: "object";
194
+ readonly additionalProperties: false;
195
+ readonly required: readonly ["type", "resource"];
196
+ readonly properties: {
197
+ readonly type: {
198
+ readonly type: "string";
199
+ readonly enum: readonly ["roleAdded", "roleRemoved", "roleChanged", "requiredCheckMissing", "protectionWeakened", "bootstrapMissing"];
200
+ readonly description: "`roleAdded` — someone holds a forge role the projection does not give them. `roleRemoved` — a projected role is missing. `roleChanged` — a projected role is present at another level. `requiredCheckMissing` — the verify-trust check is no longer required. `protectionWeakened` — branch protection or a ruleset is weaker than the projection in another way (force-push allowed, bypass actors added). `bootstrapMissing` — a bootstrap file or variable is gone.";
201
+ };
202
+ readonly resource: {
203
+ readonly $ref: "#/$defs/RepoResource";
204
+ };
205
+ readonly account: {
206
+ readonly $ref: "#/$defs/ForgeAccount";
207
+ readonly description: "Whose role differs, for the three role types.";
208
+ };
209
+ readonly observed: {
210
+ readonly type: "string";
211
+ readonly maxLength: 256;
212
+ readonly description: "What the forge shows, in the forge's own vocabulary (a role name such as `maintain`, a setting name). Absent when nothing is there.";
213
+ };
214
+ readonly expected: {
215
+ readonly type: "string";
216
+ readonly maxLength: 256;
217
+ readonly description: "What the projection calls for, in the forge's own vocabulary. Absent when the projection calls for nothing.";
218
+ };
219
+ };
220
+ };
221
+ readonly ForgeAccount: {
222
+ readonly title: "ForgeAccount";
223
+ readonly description: "A person's account on one forge. `id` is authoritative; `login` is for display only, because logins can be renamed and re-registered.";
224
+ readonly type: "object";
225
+ readonly additionalProperties: false;
226
+ readonly required: readonly ["forge", "id", "login"];
227
+ readonly properties: {
228
+ readonly forge: {
229
+ readonly $ref: "#/$defs/ForgeHost";
230
+ };
231
+ readonly id: {
232
+ readonly $ref: "#/$defs/ForgeId";
233
+ };
234
+ readonly login: {
235
+ readonly type: "string";
236
+ readonly minLength: 1;
237
+ readonly maxLength: 100;
238
+ readonly description: "The account's current login, as the forge reported it when last seen. Display only.";
239
+ };
240
+ };
241
+ };
242
+ readonly ForgeId: {
243
+ readonly title: "ForgeId";
244
+ readonly description: "An identifier the forge itself assigns — a repository id, a user or organisation id — carried as a string so a forge whose ids are not numbers needs no new version. GitHub and Forgejo ids are decimal integers written as strings (`\"812736451\"`). Unlike a name, it survives renames and transfers, which is why rights and bindings are keyed by it.";
245
+ readonly type: "string";
246
+ readonly minLength: 1;
247
+ readonly maxLength: 64;
248
+ };
249
+ readonly ForgeHost: {
250
+ readonly title: "ForgeHost";
251
+ readonly description: "The lowercased DNS host of a forge: `github.com`, a GitHub Enterprise Server host, `codeberg.org`, or a self-hosted Forgejo instance such as `git.example.org`. No scheme, no port, no path. The host is a segment of every resource, so a right never crosses forges.";
252
+ readonly type: "string";
253
+ readonly minLength: 3;
254
+ readonly maxLength: 253;
255
+ readonly pattern: "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+$";
256
+ };
257
+ readonly RepoResource: {
258
+ readonly title: "RepoResource";
259
+ readonly description: "A forge-qualified resource naming exactly one repository: `<forge-host>/<owner>/<repo>`, lowercase.";
260
+ readonly type: "string";
261
+ readonly maxLength: 455;
262
+ readonly pattern: "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+/[a-z0-9_-][a-z0-9._-]{0,99}/[a-z0-9_-][a-z0-9._-]{0,99}$";
263
+ };
264
+ readonly RightRecord: {
265
+ readonly title: "RightRecord";
266
+ readonly description: "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.";
267
+ readonly type: "object";
268
+ readonly additionalProperties: false;
269
+ readonly required: readonly ["subject", "right", "resource", "grantedBy", "grantedAt"];
270
+ readonly properties: {
271
+ readonly subject: {
272
+ readonly $ref: "#/$defs/Did";
273
+ readonly description: "Who holds the right. For `git.commit.sign` this is the DID whose commit signatures the CI check accepts.";
274
+ };
275
+ readonly right: {
276
+ readonly $ref: "#/$defs/Right";
277
+ };
278
+ readonly resource: {
279
+ readonly $ref: "#/$defs/Resource";
280
+ };
281
+ readonly grantedBy: {
282
+ readonly $ref: "#/$defs/Did";
283
+ readonly description: "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.";
284
+ };
285
+ readonly grantedAt: {
286
+ readonly type: "string";
287
+ readonly format: "date-time";
288
+ };
289
+ readonly expiresAt: {
290
+ readonly type: "string";
291
+ readonly format: "date-time";
292
+ readonly description: "When the right lapses. Absent: no expiry.";
293
+ };
294
+ readonly reason: {
295
+ readonly type: "string";
296
+ readonly maxLength: 1024;
297
+ readonly description: "The granter's free-text reason. Disclosed only to holders of `git.repo.own` on the resource and of `git.ns.admin` over it.";
298
+ };
299
+ };
300
+ };
301
+ readonly Did: {
302
+ readonly title: "Did";
303
+ readonly description: "A bare DID in the W3C DID Core syntax (§3.1): `did:`, a method name of lowercase letters and digits, `:`, and a method-specific id of colon-separated segments drawn from `A-Z a-z 0-9 . - _` and percent-encoded octets, the last segment non-empty. A DID URL is not a DID: no path, query or fragment (`/`, `?`, `#`), so a verification-method id such as `did:key:z6Mk…#z6Mk…` is refused. Compared by exact string equality — no case folding or percent-decoding. A consumer MUST still treat the value as data: the pattern keeps shell metacharacters, whitespace and quotes out of the wire form, but it does not make a DID safe to splice into a command or markup.";
304
+ readonly type: "string";
305
+ readonly maxLength: 2048;
306
+ readonly pattern: "^did:[a-z0-9]+:(?:(?:[A-Za-z0-9._-]|%[0-9A-Fa-f]{2})*:)*(?:[A-Za-z0-9._-]|%[0-9A-Fa-f]{2})+$";
307
+ };
308
+ readonly Resource: {
309
+ readonly title: "Resource";
310
+ readonly description: "A forge-qualified resource: `<forge-host>/<owner>` for a namespace, or `<forge-host>/<owner>/<repo>` for one repository, all lowercase — `github.com/acme`, `github.com/acme/widgets`, `codeberg.org/acme`. The forge is never implied: `acme/widgets` alone is not a resource. Containment is by whole segment: `github.com/acme` contains `github.com/acme/widgets` and does not contain `github.com/acme-labs/x` or `codeberg.org/acme/widgets`.";
311
+ readonly type: "string";
312
+ readonly maxLength: 455;
313
+ readonly pattern: "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+(?:/[a-z0-9_-][a-z0-9._-]{0,99}){1,2}$";
314
+ };
315
+ readonly Right: {
316
+ readonly title: "Right";
317
+ readonly description: "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.";
318
+ readonly type: "string";
319
+ readonly enum: readonly ["git.ns.admin", "git.repo.create", "git.repo.own", "git.repo.maintain", "git.commit.sign"];
320
+ };
321
+ readonly DriftType: {
322
+ readonly title: "DriftType";
323
+ readonly type: "string";
324
+ readonly enum: readonly ["roleAdded", "roleRemoved", "roleChanged", "requiredCheckMissing", "protectionWeakened", "bootstrapMissing"];
325
+ readonly description: "The kinds of drift, named so that a task can select a drift item by kind. The same values, with the same meanings, as `DriftItem`'s `type`, which keeps its own inline list so that `DriftItem` stays textually identical to 0.1; the two lists change together. `roleAdded` — someone holds a forge role the projection does not give them. `roleRemoved` — a projected role is missing. `roleChanged` — a projected role is present at another level. `requiredCheckMissing` — the verify-trust check is no longer required. `protectionWeakened` — branch protection or a ruleset is weaker than the projection in another way (force-push allowed, bypass actors added). `bootstrapMissing` — a bootstrap file or variable is gone.";
326
+ };
327
+ };
328
+ };
329
+ /** As {@link PAYLOAD_SCHEMA}, for the success-response variant. */
330
+ export declare const RESPONSE_PAYLOAD_SCHEMA: {
331
+ readonly $schema: "https://json-schema.org/draft/2020-12/schema";
332
+ readonly $ref: "#/$defs/Response";
333
+ readonly $defs: {
334
+ readonly DriftSelector: {
335
+ readonly title: "DriftSelector";
336
+ readonly description: "Which of the repository's outstanding drift items to resolve. Drift items carry no identifier of their own: they are recomputed by the bridge and replaced wholesale by every git-ns/bridge/event. An item is selected by its `type`, and for the three role types also by the account whose role differs, which is unique among a repository's outstanding items.";
337
+ readonly type: "object";
338
+ readonly additionalProperties: false;
339
+ readonly required: readonly ["type"];
340
+ readonly properties: {
341
+ readonly type: {
342
+ readonly $ref: "#/$defs/DriftType";
343
+ };
344
+ readonly account: {
345
+ readonly $ref: "#/$defs/ForgeAccount";
346
+ readonly description: "The account whose role differs, as the drift item reports it. Required for `roleAdded`, `roleRemoved` and `roleChanged`, and absent for every other type. Matched by `forge` and `id`; `login` is display only.";
347
+ };
348
+ readonly observed: {
349
+ readonly type: "string";
350
+ readonly maxLength: 256;
351
+ readonly description: "The item's `observed` value as the caller last read it. When present, the item is selected only if the forge still shows exactly this, so a decision made about one state is never applied to another. Required for `adopt`.";
352
+ };
353
+ };
354
+ };
355
+ readonly Response: {
356
+ readonly $anchor: "response";
357
+ readonly title: "Git Namespaces — Resolve Drift — response payload";
358
+ readonly description: "What the resolution did, and where the repository's sync now stands.";
359
+ readonly type: "object";
360
+ readonly additionalProperties: false;
361
+ readonly required: readonly ["action", "sync"];
362
+ readonly properties: {
363
+ readonly action: {
364
+ readonly type: "string";
365
+ readonly enum: readonly ["adopt", "revert"];
366
+ readonly description: "The action taken, as requested.";
367
+ };
368
+ readonly right: {
369
+ readonly $ref: "#/$defs/RightRecord";
370
+ readonly description: "For `adopt`: the recorded right — newly recorded, or the live record that already existed. Absent for `revert`.";
371
+ };
372
+ readonly sync: {
373
+ readonly $ref: "#/$defs/Sync";
374
+ readonly description: "The repository's sync after the resolution. The resolved item is no longer outstanding; the state is `drift` while other items remain, and otherwise `pending` until the bridge confirms the forge matches.";
375
+ };
376
+ readonly ext: {
377
+ readonly $ref: "#/$defs/Ext";
378
+ };
379
+ };
380
+ };
381
+ readonly Ext: {
382
+ readonly title: "Ext";
383
+ readonly description: "Vendor-namespaced extension object per SPEC.md §4.5.1. Each immediate key MUST be a reverse-DNS namespace; structure under each namespace is opaque to the framework.";
384
+ readonly type: "object";
385
+ readonly minProperties: 1;
386
+ readonly additionalProperties: true;
387
+ readonly propertyNames: {
388
+ readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
389
+ };
390
+ };
391
+ readonly Sync: {
392
+ readonly title: "Sync";
393
+ readonly description: "How the forge compares with the VTC's projection for one repository.";
394
+ readonly type: "object";
395
+ readonly additionalProperties: false;
396
+ readonly required: readonly ["state", "drift"];
397
+ readonly properties: {
398
+ readonly state: {
399
+ readonly type: "string";
400
+ readonly enum: readonly ["inSync", "drift", "pending", "unchecked"];
401
+ readonly description: "`inSync` — the last comparison found no drift. `drift` — it found some, listed in `drift`. `pending` — a change has been sent to the forge and not yet confirmed. `unchecked` — nothing compares this repository (a manual-mode namespace).";
402
+ };
403
+ readonly checkedAt: {
404
+ readonly type: "string";
405
+ readonly format: "date-time";
406
+ readonly description: "When the forge was last compared. Absent if never.";
407
+ };
408
+ readonly drift: {
409
+ readonly type: "array";
410
+ readonly items: {
411
+ readonly $ref: "#/$defs/DriftItem";
412
+ };
413
+ readonly description: "Outstanding drift. Empty unless `state` is `drift`.";
414
+ };
415
+ };
416
+ };
417
+ readonly DriftItem: {
418
+ readonly title: "DriftItem";
419
+ readonly description: "One difference between the forge's observed state and the VTC's projection of a repository.";
420
+ readonly type: "object";
421
+ readonly additionalProperties: false;
422
+ readonly required: readonly ["type", "resource"];
423
+ readonly properties: {
424
+ readonly type: {
425
+ readonly type: "string";
426
+ readonly enum: readonly ["roleAdded", "roleRemoved", "roleChanged", "requiredCheckMissing", "protectionWeakened", "bootstrapMissing"];
427
+ readonly description: "`roleAdded` — someone holds a forge role the projection does not give them. `roleRemoved` — a projected role is missing. `roleChanged` — a projected role is present at another level. `requiredCheckMissing` — the verify-trust check is no longer required. `protectionWeakened` — branch protection or a ruleset is weaker than the projection in another way (force-push allowed, bypass actors added). `bootstrapMissing` — a bootstrap file or variable is gone.";
428
+ };
429
+ readonly resource: {
430
+ readonly $ref: "#/$defs/RepoResource";
431
+ };
432
+ readonly account: {
433
+ readonly $ref: "#/$defs/ForgeAccount";
434
+ readonly description: "Whose role differs, for the three role types.";
435
+ };
436
+ readonly observed: {
437
+ readonly type: "string";
438
+ readonly maxLength: 256;
439
+ readonly description: "What the forge shows, in the forge's own vocabulary (a role name such as `maintain`, a setting name). Absent when nothing is there.";
440
+ };
441
+ readonly expected: {
442
+ readonly type: "string";
443
+ readonly maxLength: 256;
444
+ readonly description: "What the projection calls for, in the forge's own vocabulary. Absent when the projection calls for nothing.";
445
+ };
446
+ };
447
+ };
448
+ readonly ForgeAccount: {
449
+ readonly title: "ForgeAccount";
450
+ readonly description: "A person's account on one forge. `id` is authoritative; `login` is for display only, because logins can be renamed and re-registered.";
451
+ readonly type: "object";
452
+ readonly additionalProperties: false;
453
+ readonly required: readonly ["forge", "id", "login"];
454
+ readonly properties: {
455
+ readonly forge: {
456
+ readonly $ref: "#/$defs/ForgeHost";
457
+ };
458
+ readonly id: {
459
+ readonly $ref: "#/$defs/ForgeId";
460
+ };
461
+ readonly login: {
462
+ readonly type: "string";
463
+ readonly minLength: 1;
464
+ readonly maxLength: 100;
465
+ readonly description: "The account's current login, as the forge reported it when last seen. Display only.";
466
+ };
467
+ };
468
+ };
469
+ readonly ForgeId: {
470
+ readonly title: "ForgeId";
471
+ readonly description: "An identifier the forge itself assigns — a repository id, a user or organisation id — carried as a string so a forge whose ids are not numbers needs no new version. GitHub and Forgejo ids are decimal integers written as strings (`\"812736451\"`). Unlike a name, it survives renames and transfers, which is why rights and bindings are keyed by it.";
472
+ readonly type: "string";
473
+ readonly minLength: 1;
474
+ readonly maxLength: 64;
475
+ };
476
+ readonly ForgeHost: {
477
+ readonly title: "ForgeHost";
478
+ readonly description: "The lowercased DNS host of a forge: `github.com`, a GitHub Enterprise Server host, `codeberg.org`, or a self-hosted Forgejo instance such as `git.example.org`. No scheme, no port, no path. The host is a segment of every resource, so a right never crosses forges.";
479
+ readonly type: "string";
480
+ readonly minLength: 3;
481
+ readonly maxLength: 253;
482
+ readonly pattern: "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+$";
483
+ };
484
+ readonly RepoResource: {
485
+ readonly title: "RepoResource";
486
+ readonly description: "A forge-qualified resource naming exactly one repository: `<forge-host>/<owner>/<repo>`, lowercase.";
487
+ readonly type: "string";
488
+ readonly maxLength: 455;
489
+ readonly pattern: "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+/[a-z0-9_-][a-z0-9._-]{0,99}/[a-z0-9_-][a-z0-9._-]{0,99}$";
490
+ };
491
+ readonly RightRecord: {
492
+ readonly title: "RightRecord";
493
+ readonly description: "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.";
494
+ readonly type: "object";
495
+ readonly additionalProperties: false;
496
+ readonly required: readonly ["subject", "right", "resource", "grantedBy", "grantedAt"];
497
+ readonly properties: {
498
+ readonly subject: {
499
+ readonly $ref: "#/$defs/Did";
500
+ readonly description: "Who holds the right. For `git.commit.sign` this is the DID whose commit signatures the CI check accepts.";
501
+ };
502
+ readonly right: {
503
+ readonly $ref: "#/$defs/Right";
504
+ };
505
+ readonly resource: {
506
+ readonly $ref: "#/$defs/Resource";
507
+ };
508
+ readonly grantedBy: {
509
+ readonly $ref: "#/$defs/Did";
510
+ readonly description: "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.";
511
+ };
512
+ readonly grantedAt: {
513
+ readonly type: "string";
514
+ readonly format: "date-time";
515
+ };
516
+ readonly expiresAt: {
517
+ readonly type: "string";
518
+ readonly format: "date-time";
519
+ readonly description: "When the right lapses. Absent: no expiry.";
520
+ };
521
+ readonly reason: {
522
+ readonly type: "string";
523
+ readonly maxLength: 1024;
524
+ readonly description: "The granter's free-text reason. Disclosed only to holders of `git.repo.own` on the resource and of `git.ns.admin` over it.";
525
+ };
526
+ };
527
+ };
528
+ readonly Did: {
529
+ readonly title: "Did";
530
+ readonly description: "A bare DID in the W3C DID Core syntax (§3.1): `did:`, a method name of lowercase letters and digits, `:`, and a method-specific id of colon-separated segments drawn from `A-Z a-z 0-9 . - _` and percent-encoded octets, the last segment non-empty. A DID URL is not a DID: no path, query or fragment (`/`, `?`, `#`), so a verification-method id such as `did:key:z6Mk…#z6Mk…` is refused. Compared by exact string equality — no case folding or percent-decoding. A consumer MUST still treat the value as data: the pattern keeps shell metacharacters, whitespace and quotes out of the wire form, but it does not make a DID safe to splice into a command or markup.";
531
+ readonly type: "string";
532
+ readonly maxLength: 2048;
533
+ readonly pattern: "^did:[a-z0-9]+:(?:(?:[A-Za-z0-9._-]|%[0-9A-Fa-f]{2})*:)*(?:[A-Za-z0-9._-]|%[0-9A-Fa-f]{2})+$";
534
+ };
535
+ readonly Resource: {
536
+ readonly title: "Resource";
537
+ readonly description: "A forge-qualified resource: `<forge-host>/<owner>` for a namespace, or `<forge-host>/<owner>/<repo>` for one repository, all lowercase — `github.com/acme`, `github.com/acme/widgets`, `codeberg.org/acme`. The forge is never implied: `acme/widgets` alone is not a resource. Containment is by whole segment: `github.com/acme` contains `github.com/acme/widgets` and does not contain `github.com/acme-labs/x` or `codeberg.org/acme/widgets`.";
538
+ readonly type: "string";
539
+ readonly maxLength: 455;
540
+ readonly pattern: "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+(?:/[a-z0-9_-][a-z0-9._-]{0,99}){1,2}$";
541
+ };
542
+ readonly Right: {
543
+ readonly title: "Right";
544
+ readonly description: "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.";
545
+ readonly type: "string";
546
+ readonly enum: readonly ["git.ns.admin", "git.repo.create", "git.repo.own", "git.repo.maintain", "git.commit.sign"];
547
+ };
548
+ readonly DriftType: {
549
+ readonly title: "DriftType";
550
+ readonly type: "string";
551
+ readonly enum: readonly ["roleAdded", "roleRemoved", "roleChanged", "requiredCheckMissing", "protectionWeakened", "bootstrapMissing"];
552
+ readonly description: "The kinds of drift, named so that a task can select a drift item by kind. The same values, with the same meanings, as `DriftItem`'s `type`, which keeps its own inline list so that `DriftItem` stays textually identical to 0.1; the two lists change together. `roleAdded` — someone holds a forge role the projection does not give them. `roleRemoved` — a projected role is missing. `roleChanged` — a projected role is present at another level. `requiredCheckMissing` — the verify-trust check is no longer required. `protectionWeakened` — branch protection or a ruleset is weaker than the projection in another way (force-push allowed, bypass actors added). `bootstrapMissing` — a bootstrap file or variable is gone.";
553
+ };
554
+ };
555
+ };
556
+ /**
557
+ * SPEC.md §7.2 policy for the request variant, from this specification's
558
+ * front matter. Pass to `consumeInbound` — items 5b, 7 and 8 are
559
+ * per-specification and cannot be derived from the document alone, and
560
+ * item 2 needs the schema this carries.
561
+ */
562
+ export declare const SPEC: {
563
+ readonly typeUri: "https://trusttasks.org/spec/git-ns/drift/resolve/0.2";
564
+ readonly isBearer: false;
565
+ readonly isProofRequired: true;
566
+ readonly isRecipientRequired: true;
567
+ readonly isIssuedAtRequired: true;
568
+ readonly payloadSchema: {
569
+ readonly $schema: "https://json-schema.org/draft/2020-12/schema";
570
+ readonly $id: "https://trusttasks.org/spec/git-ns/drift/resolve/0.2";
571
+ readonly title: "Git Namespaces — Resolve Drift — payload";
572
+ readonly description: "An owner of a repository, or a namespace admin over it, resolves one reported drift item: `adopt` records the forge-side role as a VTC right, under the same rules as git-ns/right/grant; `revert` has the bridge undo the forge-side change.";
573
+ readonly type: "object";
574
+ readonly additionalProperties: false;
575
+ readonly required: readonly ["resource", "drift", "action"];
576
+ readonly properties: {
577
+ readonly resource: {
578
+ readonly $ref: "#/$defs/RepoResource";
579
+ readonly description: "The repository whose drift is resolved.";
580
+ };
581
+ readonly drift: {
582
+ readonly $ref: "#/$defs/DriftSelector";
583
+ };
584
+ readonly action: {
585
+ readonly type: "string";
586
+ readonly enum: readonly ["adopt", "revert"];
587
+ readonly description: "`adopt` — record the forge-side role as a VTC right, so the projection comes to match the forge. `revert` — have the bridge make the forge match the projection again.";
588
+ };
589
+ readonly reason: {
590
+ readonly type: "string";
591
+ readonly maxLength: 1024;
592
+ readonly description: "Why, in the resolver's words. Kept in the VTC's audit record and, for `adopt`, as the recorded right's `reason`, disclosed only to the repository's owners and namespace admins.";
593
+ };
594
+ readonly ext: {
595
+ readonly $ref: "#/$defs/Ext";
596
+ };
597
+ };
598
+ readonly $defs: {
599
+ readonly DriftSelector: {
600
+ readonly title: "DriftSelector";
601
+ readonly description: "Which of the repository's outstanding drift items to resolve. Drift items carry no identifier of their own: they are recomputed by the bridge and replaced wholesale by every git-ns/bridge/event. An item is selected by its `type`, and for the three role types also by the account whose role differs, which is unique among a repository's outstanding items.";
602
+ readonly type: "object";
603
+ readonly additionalProperties: false;
604
+ readonly required: readonly ["type"];
605
+ readonly properties: {
606
+ readonly type: {
607
+ readonly $ref: "#/$defs/DriftType";
608
+ };
609
+ readonly account: {
610
+ readonly $ref: "#/$defs/ForgeAccount";
611
+ readonly description: "The account whose role differs, as the drift item reports it. Required for `roleAdded`, `roleRemoved` and `roleChanged`, and absent for every other type. Matched by `forge` and `id`; `login` is display only.";
612
+ };
613
+ readonly observed: {
614
+ readonly type: "string";
615
+ readonly maxLength: 256;
616
+ readonly description: "The item's `observed` value as the caller last read it. When present, the item is selected only if the forge still shows exactly this, so a decision made about one state is never applied to another. Required for `adopt`.";
617
+ };
618
+ };
619
+ };
620
+ readonly Response: {
621
+ readonly $anchor: "response";
622
+ readonly title: "Git Namespaces — Resolve Drift — response payload";
623
+ readonly description: "What the resolution did, and where the repository's sync now stands.";
624
+ readonly type: "object";
625
+ readonly additionalProperties: false;
626
+ readonly required: readonly ["action", "sync"];
627
+ readonly properties: {
628
+ readonly action: {
629
+ readonly type: "string";
630
+ readonly enum: readonly ["adopt", "revert"];
631
+ readonly description: "The action taken, as requested.";
632
+ };
633
+ readonly right: {
634
+ readonly $ref: "#/$defs/RightRecord";
635
+ readonly description: "For `adopt`: the recorded right — newly recorded, or the live record that already existed. Absent for `revert`.";
636
+ };
637
+ readonly sync: {
638
+ readonly $ref: "#/$defs/Sync";
639
+ readonly description: "The repository's sync after the resolution. The resolved item is no longer outstanding; the state is `drift` while other items remain, and otherwise `pending` until the bridge confirms the forge matches.";
640
+ };
641
+ readonly ext: {
642
+ readonly $ref: "#/$defs/Ext";
643
+ };
644
+ };
645
+ };
646
+ readonly Ext: {
647
+ readonly title: "Ext";
648
+ readonly description: "Vendor-namespaced extension object per SPEC.md §4.5.1. Each immediate key MUST be a reverse-DNS namespace; structure under each namespace is opaque to the framework.";
649
+ readonly type: "object";
650
+ readonly minProperties: 1;
651
+ readonly additionalProperties: true;
652
+ readonly propertyNames: {
653
+ readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
654
+ };
655
+ };
656
+ readonly Sync: {
657
+ readonly title: "Sync";
658
+ readonly description: "How the forge compares with the VTC's projection for one repository.";
659
+ readonly type: "object";
660
+ readonly additionalProperties: false;
661
+ readonly required: readonly ["state", "drift"];
662
+ readonly properties: {
663
+ readonly state: {
664
+ readonly type: "string";
665
+ readonly enum: readonly ["inSync", "drift", "pending", "unchecked"];
666
+ readonly description: "`inSync` — the last comparison found no drift. `drift` — it found some, listed in `drift`. `pending` — a change has been sent to the forge and not yet confirmed. `unchecked` — nothing compares this repository (a manual-mode namespace).";
667
+ };
668
+ readonly checkedAt: {
669
+ readonly type: "string";
670
+ readonly format: "date-time";
671
+ readonly description: "When the forge was last compared. Absent if never.";
672
+ };
673
+ readonly drift: {
674
+ readonly type: "array";
675
+ readonly items: {
676
+ readonly $ref: "#/$defs/DriftItem";
677
+ };
678
+ readonly description: "Outstanding drift. Empty unless `state` is `drift`.";
679
+ };
680
+ };
681
+ };
682
+ readonly DriftItem: {
683
+ readonly title: "DriftItem";
684
+ readonly description: "One difference between the forge's observed state and the VTC's projection of a repository.";
685
+ readonly type: "object";
686
+ readonly additionalProperties: false;
687
+ readonly required: readonly ["type", "resource"];
688
+ readonly properties: {
689
+ readonly type: {
690
+ readonly type: "string";
691
+ readonly enum: readonly ["roleAdded", "roleRemoved", "roleChanged", "requiredCheckMissing", "protectionWeakened", "bootstrapMissing"];
692
+ readonly description: "`roleAdded` — someone holds a forge role the projection does not give them. `roleRemoved` — a projected role is missing. `roleChanged` — a projected role is present at another level. `requiredCheckMissing` — the verify-trust check is no longer required. `protectionWeakened` — branch protection or a ruleset is weaker than the projection in another way (force-push allowed, bypass actors added). `bootstrapMissing` — a bootstrap file or variable is gone.";
693
+ };
694
+ readonly resource: {
695
+ readonly $ref: "#/$defs/RepoResource";
696
+ };
697
+ readonly account: {
698
+ readonly $ref: "#/$defs/ForgeAccount";
699
+ readonly description: "Whose role differs, for the three role types.";
700
+ };
701
+ readonly observed: {
702
+ readonly type: "string";
703
+ readonly maxLength: 256;
704
+ readonly description: "What the forge shows, in the forge's own vocabulary (a role name such as `maintain`, a setting name). Absent when nothing is there.";
705
+ };
706
+ readonly expected: {
707
+ readonly type: "string";
708
+ readonly maxLength: 256;
709
+ readonly description: "What the projection calls for, in the forge's own vocabulary. Absent when the projection calls for nothing.";
710
+ };
711
+ };
712
+ };
713
+ readonly ForgeAccount: {
714
+ readonly title: "ForgeAccount";
715
+ readonly description: "A person's account on one forge. `id` is authoritative; `login` is for display only, because logins can be renamed and re-registered.";
716
+ readonly type: "object";
717
+ readonly additionalProperties: false;
718
+ readonly required: readonly ["forge", "id", "login"];
719
+ readonly properties: {
720
+ readonly forge: {
721
+ readonly $ref: "#/$defs/ForgeHost";
722
+ };
723
+ readonly id: {
724
+ readonly $ref: "#/$defs/ForgeId";
725
+ };
726
+ readonly login: {
727
+ readonly type: "string";
728
+ readonly minLength: 1;
729
+ readonly maxLength: 100;
730
+ readonly description: "The account's current login, as the forge reported it when last seen. Display only.";
731
+ };
732
+ };
733
+ };
734
+ readonly ForgeId: {
735
+ readonly title: "ForgeId";
736
+ readonly description: "An identifier the forge itself assigns — a repository id, a user or organisation id — carried as a string so a forge whose ids are not numbers needs no new version. GitHub and Forgejo ids are decimal integers written as strings (`\"812736451\"`). Unlike a name, it survives renames and transfers, which is why rights and bindings are keyed by it.";
737
+ readonly type: "string";
738
+ readonly minLength: 1;
739
+ readonly maxLength: 64;
740
+ };
741
+ readonly ForgeHost: {
742
+ readonly title: "ForgeHost";
743
+ readonly description: "The lowercased DNS host of a forge: `github.com`, a GitHub Enterprise Server host, `codeberg.org`, or a self-hosted Forgejo instance such as `git.example.org`. No scheme, no port, no path. The host is a segment of every resource, so a right never crosses forges.";
744
+ readonly type: "string";
745
+ readonly minLength: 3;
746
+ readonly maxLength: 253;
747
+ readonly pattern: "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+$";
748
+ };
749
+ readonly RepoResource: {
750
+ readonly title: "RepoResource";
751
+ readonly description: "A forge-qualified resource naming exactly one repository: `<forge-host>/<owner>/<repo>`, lowercase.";
752
+ readonly type: "string";
753
+ readonly maxLength: 455;
754
+ readonly pattern: "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+/[a-z0-9_-][a-z0-9._-]{0,99}/[a-z0-9_-][a-z0-9._-]{0,99}$";
755
+ };
756
+ readonly RightRecord: {
757
+ readonly title: "RightRecord";
758
+ readonly description: "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.";
759
+ readonly type: "object";
760
+ readonly additionalProperties: false;
761
+ readonly required: readonly ["subject", "right", "resource", "grantedBy", "grantedAt"];
762
+ readonly properties: {
763
+ readonly subject: {
764
+ readonly $ref: "#/$defs/Did";
765
+ readonly description: "Who holds the right. For `git.commit.sign` this is the DID whose commit signatures the CI check accepts.";
766
+ };
767
+ readonly right: {
768
+ readonly $ref: "#/$defs/Right";
769
+ };
770
+ readonly resource: {
771
+ readonly $ref: "#/$defs/Resource";
772
+ };
773
+ readonly grantedBy: {
774
+ readonly $ref: "#/$defs/Did";
775
+ readonly description: "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.";
776
+ };
777
+ readonly grantedAt: {
778
+ readonly type: "string";
779
+ readonly format: "date-time";
780
+ };
781
+ readonly expiresAt: {
782
+ readonly type: "string";
783
+ readonly format: "date-time";
784
+ readonly description: "When the right lapses. Absent: no expiry.";
785
+ };
786
+ readonly reason: {
787
+ readonly type: "string";
788
+ readonly maxLength: 1024;
789
+ readonly description: "The granter's free-text reason. Disclosed only to holders of `git.repo.own` on the resource and of `git.ns.admin` over it.";
790
+ };
791
+ };
792
+ };
793
+ readonly Did: {
794
+ readonly title: "Did";
795
+ readonly description: "A bare DID in the W3C DID Core syntax (§3.1): `did:`, a method name of lowercase letters and digits, `:`, and a method-specific id of colon-separated segments drawn from `A-Z a-z 0-9 . - _` and percent-encoded octets, the last segment non-empty. A DID URL is not a DID: no path, query or fragment (`/`, `?`, `#`), so a verification-method id such as `did:key:z6Mk…#z6Mk…` is refused. Compared by exact string equality — no case folding or percent-decoding. A consumer MUST still treat the value as data: the pattern keeps shell metacharacters, whitespace and quotes out of the wire form, but it does not make a DID safe to splice into a command or markup.";
796
+ readonly type: "string";
797
+ readonly maxLength: 2048;
798
+ readonly pattern: "^did:[a-z0-9]+:(?:(?:[A-Za-z0-9._-]|%[0-9A-Fa-f]{2})*:)*(?:[A-Za-z0-9._-]|%[0-9A-Fa-f]{2})+$";
799
+ };
800
+ readonly Resource: {
801
+ readonly title: "Resource";
802
+ readonly description: "A forge-qualified resource: `<forge-host>/<owner>` for a namespace, or `<forge-host>/<owner>/<repo>` for one repository, all lowercase — `github.com/acme`, `github.com/acme/widgets`, `codeberg.org/acme`. The forge is never implied: `acme/widgets` alone is not a resource. Containment is by whole segment: `github.com/acme` contains `github.com/acme/widgets` and does not contain `github.com/acme-labs/x` or `codeberg.org/acme/widgets`.";
803
+ readonly type: "string";
804
+ readonly maxLength: 455;
805
+ readonly pattern: "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+(?:/[a-z0-9_-][a-z0-9._-]{0,99}){1,2}$";
806
+ };
807
+ readonly Right: {
808
+ readonly title: "Right";
809
+ readonly description: "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.";
810
+ readonly type: "string";
811
+ readonly enum: readonly ["git.ns.admin", "git.repo.create", "git.repo.own", "git.repo.maintain", "git.commit.sign"];
812
+ };
813
+ readonly DriftType: {
814
+ readonly title: "DriftType";
815
+ readonly type: "string";
816
+ readonly enum: readonly ["roleAdded", "roleRemoved", "roleChanged", "requiredCheckMissing", "protectionWeakened", "bootstrapMissing"];
817
+ readonly description: "The kinds of drift, named so that a task can select a drift item by kind. The same values, with the same meanings, as `DriftItem`'s `type`, which keeps its own inline list so that `DriftItem` stays textually identical to 0.1; the two lists change together. `roleAdded` — someone holds a forge role the projection does not give them. `roleRemoved` — a projected role is missing. `roleChanged` — a projected role is present at another level. `requiredCheckMissing` — the verify-trust check is no longer required. `protectionWeakened` — branch protection or a ruleset is weaker than the projection in another way (force-push allowed, bypass actors added). `bootstrapMissing` — a bootstrap file or variable is gone.";
818
+ };
819
+ };
820
+ };
821
+ };
822
+ /**
823
+ * SPEC.md §7.2 policy for the success-response variant. `isRecipientRequired`
824
+ * tracks the *issuer* party's requirement because a response swaps the
825
+ * parties (§7.3 item 5).
826
+ */
827
+ export declare const RESPONSE_SPEC: {
828
+ readonly typeUri: "https://trusttasks.org/spec/git-ns/drift/resolve/0.2#response";
829
+ readonly isBearer: false;
830
+ readonly isProofRequired: true;
831
+ readonly isRecipientRequired: true;
832
+ readonly isIssuedAtRequired: true;
833
+ readonly payloadSchema: {
834
+ readonly $schema: "https://json-schema.org/draft/2020-12/schema";
835
+ readonly $ref: "#/$defs/Response";
836
+ readonly $defs: {
837
+ readonly DriftSelector: {
838
+ readonly title: "DriftSelector";
839
+ readonly description: "Which of the repository's outstanding drift items to resolve. Drift items carry no identifier of their own: they are recomputed by the bridge and replaced wholesale by every git-ns/bridge/event. An item is selected by its `type`, and for the three role types also by the account whose role differs, which is unique among a repository's outstanding items.";
840
+ readonly type: "object";
841
+ readonly additionalProperties: false;
842
+ readonly required: readonly ["type"];
843
+ readonly properties: {
844
+ readonly type: {
845
+ readonly $ref: "#/$defs/DriftType";
846
+ };
847
+ readonly account: {
848
+ readonly $ref: "#/$defs/ForgeAccount";
849
+ readonly description: "The account whose role differs, as the drift item reports it. Required for `roleAdded`, `roleRemoved` and `roleChanged`, and absent for every other type. Matched by `forge` and `id`; `login` is display only.";
850
+ };
851
+ readonly observed: {
852
+ readonly type: "string";
853
+ readonly maxLength: 256;
854
+ readonly description: "The item's `observed` value as the caller last read it. When present, the item is selected only if the forge still shows exactly this, so a decision made about one state is never applied to another. Required for `adopt`.";
855
+ };
856
+ };
857
+ };
858
+ readonly Response: {
859
+ readonly $anchor: "response";
860
+ readonly title: "Git Namespaces — Resolve Drift — response payload";
861
+ readonly description: "What the resolution did, and where the repository's sync now stands.";
862
+ readonly type: "object";
863
+ readonly additionalProperties: false;
864
+ readonly required: readonly ["action", "sync"];
865
+ readonly properties: {
866
+ readonly action: {
867
+ readonly type: "string";
868
+ readonly enum: readonly ["adopt", "revert"];
869
+ readonly description: "The action taken, as requested.";
870
+ };
871
+ readonly right: {
872
+ readonly $ref: "#/$defs/RightRecord";
873
+ readonly description: "For `adopt`: the recorded right — newly recorded, or the live record that already existed. Absent for `revert`.";
874
+ };
875
+ readonly sync: {
876
+ readonly $ref: "#/$defs/Sync";
877
+ readonly description: "The repository's sync after the resolution. The resolved item is no longer outstanding; the state is `drift` while other items remain, and otherwise `pending` until the bridge confirms the forge matches.";
878
+ };
879
+ readonly ext: {
880
+ readonly $ref: "#/$defs/Ext";
881
+ };
882
+ };
883
+ };
884
+ readonly Ext: {
885
+ readonly title: "Ext";
886
+ readonly description: "Vendor-namespaced extension object per SPEC.md §4.5.1. Each immediate key MUST be a reverse-DNS namespace; structure under each namespace is opaque to the framework.";
887
+ readonly type: "object";
888
+ readonly minProperties: 1;
889
+ readonly additionalProperties: true;
890
+ readonly propertyNames: {
891
+ readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
892
+ };
893
+ };
894
+ readonly Sync: {
895
+ readonly title: "Sync";
896
+ readonly description: "How the forge compares with the VTC's projection for one repository.";
897
+ readonly type: "object";
898
+ readonly additionalProperties: false;
899
+ readonly required: readonly ["state", "drift"];
900
+ readonly properties: {
901
+ readonly state: {
902
+ readonly type: "string";
903
+ readonly enum: readonly ["inSync", "drift", "pending", "unchecked"];
904
+ readonly description: "`inSync` — the last comparison found no drift. `drift` — it found some, listed in `drift`. `pending` — a change has been sent to the forge and not yet confirmed. `unchecked` — nothing compares this repository (a manual-mode namespace).";
905
+ };
906
+ readonly checkedAt: {
907
+ readonly type: "string";
908
+ readonly format: "date-time";
909
+ readonly description: "When the forge was last compared. Absent if never.";
910
+ };
911
+ readonly drift: {
912
+ readonly type: "array";
913
+ readonly items: {
914
+ readonly $ref: "#/$defs/DriftItem";
915
+ };
916
+ readonly description: "Outstanding drift. Empty unless `state` is `drift`.";
917
+ };
918
+ };
919
+ };
920
+ readonly DriftItem: {
921
+ readonly title: "DriftItem";
922
+ readonly description: "One difference between the forge's observed state and the VTC's projection of a repository.";
923
+ readonly type: "object";
924
+ readonly additionalProperties: false;
925
+ readonly required: readonly ["type", "resource"];
926
+ readonly properties: {
927
+ readonly type: {
928
+ readonly type: "string";
929
+ readonly enum: readonly ["roleAdded", "roleRemoved", "roleChanged", "requiredCheckMissing", "protectionWeakened", "bootstrapMissing"];
930
+ readonly description: "`roleAdded` — someone holds a forge role the projection does not give them. `roleRemoved` — a projected role is missing. `roleChanged` — a projected role is present at another level. `requiredCheckMissing` — the verify-trust check is no longer required. `protectionWeakened` — branch protection or a ruleset is weaker than the projection in another way (force-push allowed, bypass actors added). `bootstrapMissing` — a bootstrap file or variable is gone.";
931
+ };
932
+ readonly resource: {
933
+ readonly $ref: "#/$defs/RepoResource";
934
+ };
935
+ readonly account: {
936
+ readonly $ref: "#/$defs/ForgeAccount";
937
+ readonly description: "Whose role differs, for the three role types.";
938
+ };
939
+ readonly observed: {
940
+ readonly type: "string";
941
+ readonly maxLength: 256;
942
+ readonly description: "What the forge shows, in the forge's own vocabulary (a role name such as `maintain`, a setting name). Absent when nothing is there.";
943
+ };
944
+ readonly expected: {
945
+ readonly type: "string";
946
+ readonly maxLength: 256;
947
+ readonly description: "What the projection calls for, in the forge's own vocabulary. Absent when the projection calls for nothing.";
948
+ };
949
+ };
950
+ };
951
+ readonly ForgeAccount: {
952
+ readonly title: "ForgeAccount";
953
+ readonly description: "A person's account on one forge. `id` is authoritative; `login` is for display only, because logins can be renamed and re-registered.";
954
+ readonly type: "object";
955
+ readonly additionalProperties: false;
956
+ readonly required: readonly ["forge", "id", "login"];
957
+ readonly properties: {
958
+ readonly forge: {
959
+ readonly $ref: "#/$defs/ForgeHost";
960
+ };
961
+ readonly id: {
962
+ readonly $ref: "#/$defs/ForgeId";
963
+ };
964
+ readonly login: {
965
+ readonly type: "string";
966
+ readonly minLength: 1;
967
+ readonly maxLength: 100;
968
+ readonly description: "The account's current login, as the forge reported it when last seen. Display only.";
969
+ };
970
+ };
971
+ };
972
+ readonly ForgeId: {
973
+ readonly title: "ForgeId";
974
+ readonly description: "An identifier the forge itself assigns — a repository id, a user or organisation id — carried as a string so a forge whose ids are not numbers needs no new version. GitHub and Forgejo ids are decimal integers written as strings (`\"812736451\"`). Unlike a name, it survives renames and transfers, which is why rights and bindings are keyed by it.";
975
+ readonly type: "string";
976
+ readonly minLength: 1;
977
+ readonly maxLength: 64;
978
+ };
979
+ readonly ForgeHost: {
980
+ readonly title: "ForgeHost";
981
+ readonly description: "The lowercased DNS host of a forge: `github.com`, a GitHub Enterprise Server host, `codeberg.org`, or a self-hosted Forgejo instance such as `git.example.org`. No scheme, no port, no path. The host is a segment of every resource, so a right never crosses forges.";
982
+ readonly type: "string";
983
+ readonly minLength: 3;
984
+ readonly maxLength: 253;
985
+ readonly pattern: "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+$";
986
+ };
987
+ readonly RepoResource: {
988
+ readonly title: "RepoResource";
989
+ readonly description: "A forge-qualified resource naming exactly one repository: `<forge-host>/<owner>/<repo>`, lowercase.";
990
+ readonly type: "string";
991
+ readonly maxLength: 455;
992
+ readonly pattern: "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+/[a-z0-9_-][a-z0-9._-]{0,99}/[a-z0-9_-][a-z0-9._-]{0,99}$";
993
+ };
994
+ readonly RightRecord: {
995
+ readonly title: "RightRecord";
996
+ readonly description: "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.";
997
+ readonly type: "object";
998
+ readonly additionalProperties: false;
999
+ readonly required: readonly ["subject", "right", "resource", "grantedBy", "grantedAt"];
1000
+ readonly properties: {
1001
+ readonly subject: {
1002
+ readonly $ref: "#/$defs/Did";
1003
+ readonly description: "Who holds the right. For `git.commit.sign` this is the DID whose commit signatures the CI check accepts.";
1004
+ };
1005
+ readonly right: {
1006
+ readonly $ref: "#/$defs/Right";
1007
+ };
1008
+ readonly resource: {
1009
+ readonly $ref: "#/$defs/Resource";
1010
+ };
1011
+ readonly grantedBy: {
1012
+ readonly $ref: "#/$defs/Did";
1013
+ readonly description: "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.";
1014
+ };
1015
+ readonly grantedAt: {
1016
+ readonly type: "string";
1017
+ readonly format: "date-time";
1018
+ };
1019
+ readonly expiresAt: {
1020
+ readonly type: "string";
1021
+ readonly format: "date-time";
1022
+ readonly description: "When the right lapses. Absent: no expiry.";
1023
+ };
1024
+ readonly reason: {
1025
+ readonly type: "string";
1026
+ readonly maxLength: 1024;
1027
+ readonly description: "The granter's free-text reason. Disclosed only to holders of `git.repo.own` on the resource and of `git.ns.admin` over it.";
1028
+ };
1029
+ };
1030
+ };
1031
+ readonly Did: {
1032
+ readonly title: "Did";
1033
+ readonly description: "A bare DID in the W3C DID Core syntax (§3.1): `did:`, a method name of lowercase letters and digits, `:`, and a method-specific id of colon-separated segments drawn from `A-Z a-z 0-9 . - _` and percent-encoded octets, the last segment non-empty. A DID URL is not a DID: no path, query or fragment (`/`, `?`, `#`), so a verification-method id such as `did:key:z6Mk…#z6Mk…` is refused. Compared by exact string equality — no case folding or percent-decoding. A consumer MUST still treat the value as data: the pattern keeps shell metacharacters, whitespace and quotes out of the wire form, but it does not make a DID safe to splice into a command or markup.";
1034
+ readonly type: "string";
1035
+ readonly maxLength: 2048;
1036
+ readonly pattern: "^did:[a-z0-9]+:(?:(?:[A-Za-z0-9._-]|%[0-9A-Fa-f]{2})*:)*(?:[A-Za-z0-9._-]|%[0-9A-Fa-f]{2})+$";
1037
+ };
1038
+ readonly Resource: {
1039
+ readonly title: "Resource";
1040
+ readonly description: "A forge-qualified resource: `<forge-host>/<owner>` for a namespace, or `<forge-host>/<owner>/<repo>` for one repository, all lowercase — `github.com/acme`, `github.com/acme/widgets`, `codeberg.org/acme`. The forge is never implied: `acme/widgets` alone is not a resource. Containment is by whole segment: `github.com/acme` contains `github.com/acme/widgets` and does not contain `github.com/acme-labs/x` or `codeberg.org/acme/widgets`.";
1041
+ readonly type: "string";
1042
+ readonly maxLength: 455;
1043
+ readonly pattern: "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+(?:/[a-z0-9_-][a-z0-9._-]{0,99}){1,2}$";
1044
+ };
1045
+ readonly Right: {
1046
+ readonly title: "Right";
1047
+ readonly description: "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.";
1048
+ readonly type: "string";
1049
+ readonly enum: readonly ["git.ns.admin", "git.repo.create", "git.repo.own", "git.repo.maintain", "git.commit.sign"];
1050
+ };
1051
+ readonly DriftType: {
1052
+ readonly title: "DriftType";
1053
+ readonly type: "string";
1054
+ readonly enum: readonly ["roleAdded", "roleRemoved", "roleChanged", "requiredCheckMissing", "protectionWeakened", "bootstrapMissing"];
1055
+ readonly description: "The kinds of drift, named so that a task can select a drift item by kind. The same values, with the same meanings, as `DriftItem`'s `type`, which keeps its own inline list so that `DriftItem` stays textually identical to 0.1; the two lists change together. `roleAdded` — someone holds a forge role the projection does not give them. `roleRemoved` — a projected role is missing. `roleChanged` — a projected role is present at another level. `requiredCheckMissing` — the verify-trust check is no longer required. `protectionWeakened` — branch protection or a ruleset is weaker than the projection in another way (force-push allowed, bypass actors added). `bootstrapMissing` — a bootstrap file or variable is gone.";
1056
+ };
1057
+ };
1058
+ };
1059
+ };
1060
+ //# sourceMappingURL=payload.d.ts.map