@openvtc/trust-tasks 0.12.8 → 0.12.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/vtc/_shared/0.1/endorsement.d.ts +1 -1
- package/dist/vtc/ceremonies/list/0.1/payload.d.ts +22 -0
- package/dist/vtc/ceremonies/list/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/ceremonies/list/0.1/payload.js +8 -0
- package/dist/vtc/ceremonies/list/0.1/payload.js.map +1 -1
- package/dist/vtc/community/profile/show/0.1/payload.d.ts +235 -22
- package/dist/vtc/community/profile/show/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/community/profile/show/0.1/payload.js +106 -8
- package/dist/vtc/community/profile/show/0.1/payload.js.map +1 -1
- package/dist/vtc/community/profile/update/0.1/payload.d.ts +265 -22
- package/dist/vtc/community/profile/update/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/community/profile/update/0.1/payload.js +110 -8
- package/dist/vtc/community/profile/update/0.1/payload.js.map +1 -1
- package/dist/vtc/config/export/0.1/payload.d.ts +154 -0
- package/dist/vtc/config/export/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/config/export/0.1/payload.js +72 -0
- package/dist/vtc/config/export/0.1/payload.js.map +1 -1
- package/dist/vtc/config/import/0.1/payload.d.ts +154 -0
- package/dist/vtc/config/import/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/config/import/0.1/payload.js +72 -0
- package/dist/vtc/config/import/0.1/payload.js.map +1 -1
- package/dist/vtc/endorsements/issue/0.1/payload.d.ts +65 -65
- package/dist/vtc/endorsements/issue/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/endorsements/issue/0.1/payload.js +36 -32
- package/dist/vtc/endorsements/issue/0.1/payload.js.map +1 -1
- package/dist/vtc/endorsements/list/0.1/payload.d.ts +41 -61
- package/dist/vtc/endorsements/list/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/endorsements/list/0.1/payload.js +24 -30
- package/dist/vtc/endorsements/list/0.1/payload.js.map +1 -1
- package/dist/vtc/endorsements/show/0.1/payload.d.ts +41 -61
- package/dist/vtc/endorsements/show/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/endorsements/show/0.1/payload.js +24 -30
- package/dist/vtc/endorsements/show/0.1/payload.js.map +1 -1
- package/dist/vtc/install/claim/start/0.1/payload.d.ts +18 -0
- package/dist/vtc/install/claim/start/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/install/claim/start/0.1/payload.js +5 -0
- package/dist/vtc/install/claim/start/0.1/payload.js.map +1 -1
- package/dist/vtc/registry/diagnostics/0.1/payload.d.ts +491 -0
- package/dist/vtc/registry/diagnostics/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/registry/diagnostics/0.1/payload.js +260 -0
- package/dist/vtc/registry/diagnostics/0.1/payload.js.map +1 -1
- package/dist/vtc/website/files/list/0.1/payload.d.ts +24 -0
- package/dist/vtc/website/files/list/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/website/files/list/0.1/payload.js +10 -0
- package/dist/vtc/website/files/list/0.1/payload.js.map +1 -1
- package/dist/vtc/website/generations/list/0.1/payload.d.ts +48 -0
- package/dist/vtc/website/generations/list/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/website/generations/list/0.1/payload.js +20 -0
- package/dist/vtc/website/generations/list/0.1/payload.js.map +1 -1
- package/package.json +1 -1
- package/src/vtc/_shared/0.1/endorsement.ts +1 -1
- package/src/vtc/ceremonies/list/0.1/payload.ts +14 -0
- package/src/vtc/community/profile/show/0.1/payload.ts +141 -10
- package/src/vtc/community/profile/update/0.1/payload.ts +167 -10
- package/src/vtc/config/export/0.1/payload.ts +94 -0
- package/src/vtc/config/import/0.1/payload.ts +94 -0
- package/src/vtc/endorsements/issue/0.1/payload.ts +45 -41
- package/src/vtc/endorsements/list/0.1/payload.ts +29 -39
- package/src/vtc/endorsements/show/0.1/payload.ts +29 -39
- package/src/vtc/install/claim/start/0.1/payload.ts +13 -0
- package/src/vtc/registry/diagnostics/0.1/payload.ts +343 -0
- package/src/vtc/website/files/list/0.1/payload.ts +14 -0
- package/src/vtc/website/generations/list/0.1/payload.ts +28 -0
|
@@ -13,10 +13,21 @@ export interface Ext {
|
|
|
13
13
|
[k: string]: unknown | undefined;
|
|
14
14
|
}
|
|
15
15
|
export interface VTCCommunityProfileShowResponsePayload {
|
|
16
|
-
profile:
|
|
16
|
+
profile: CommunityProfileView;
|
|
17
17
|
ext?: Ext;
|
|
18
18
|
}
|
|
19
|
-
|
|
19
|
+
/**
|
|
20
|
+
* The community's profile as read, including the immutable `communityDid` an update cannot set.
|
|
21
|
+
*/
|
|
22
|
+
export interface CommunityProfileView {
|
|
23
|
+
/**
|
|
24
|
+
* The community's own DID — the identifier every credential it issues names as `issuer`, and the one a member's credential binds them to. Immutable: set when the community is created and not settable through an update.
|
|
25
|
+
*/
|
|
26
|
+
communityDid: string;
|
|
27
|
+
/**
|
|
28
|
+
* When the community was created. Immutable, like `communityDid`.
|
|
29
|
+
*/
|
|
30
|
+
createdAt?: string;
|
|
20
31
|
name: string;
|
|
21
32
|
description?: string;
|
|
22
33
|
logoUrl?: string | null;
|
|
@@ -35,6 +46,28 @@ export interface CommunityProfile {
|
|
|
35
46
|
* Trust-registry reachability. Populated on reads; not settable.
|
|
36
47
|
*/
|
|
37
48
|
registryStatus?: "active" | "degraded";
|
|
49
|
+
personhood?: PersonhoodGovernance;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* What this community's governance asserts about the personhood of its members.
|
|
53
|
+
*/
|
|
54
|
+
export interface PersonhoodGovernance {
|
|
55
|
+
/**
|
|
56
|
+
* Governance requires that members are real humans. Defaults to `false` when absent: a community that has not considered the question asserts nothing, which is the only safe default for a claim a verifier may rely on.
|
|
57
|
+
*/
|
|
58
|
+
realHuman?: boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Governance requires that each person holds at most one membership in **this** community. Per-community by definition — the glossary says "exactly one membership in that VTC" — so a single community can satisfy it without any network above it.
|
|
61
|
+
*/
|
|
62
|
+
singleMembership?: boolean;
|
|
63
|
+
/**
|
|
64
|
+
* DIDs of the identity-verification providers whose credentials this community accepts as personhood evidence. A community that vets its own members in person lists its own community DID here — it is acting as its own IDVP, which §IDVC permits. An empty list means no list has been published, not that everything is accepted.
|
|
65
|
+
*/
|
|
66
|
+
acceptedIdvps?: string[];
|
|
67
|
+
/**
|
|
68
|
+
* Where the governance framework these assertions refer to can be read.
|
|
69
|
+
*/
|
|
70
|
+
governanceFrameworkUrl?: string | null;
|
|
38
71
|
}
|
|
39
72
|
|
|
40
73
|
/** Trust Task type URI. */
|
|
@@ -80,7 +113,8 @@ export const PAYLOAD_SCHEMA = {
|
|
|
80
113
|
],
|
|
81
114
|
"properties": {
|
|
82
115
|
"profile": {
|
|
83
|
-
"$ref": "#/$defs/
|
|
116
|
+
"$ref": "#/$defs/CommunityProfileView",
|
|
117
|
+
"description": "The community's profile as read, including the immutable `communityDid` an update cannot set."
|
|
84
118
|
},
|
|
85
119
|
"ext": {
|
|
86
120
|
"$ref": "#/$defs/Ext"
|
|
@@ -97,16 +131,28 @@ export const PAYLOAD_SCHEMA = {
|
|
|
97
131
|
"pattern": "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$"
|
|
98
132
|
}
|
|
99
133
|
},
|
|
100
|
-
"
|
|
101
|
-
"$anchor": "
|
|
102
|
-
"title": "
|
|
134
|
+
"CommunityProfileView": {
|
|
135
|
+
"$anchor": "communityProfileView",
|
|
136
|
+
"title": "CommunityProfileView",
|
|
103
137
|
"type": "object",
|
|
104
138
|
"additionalProperties": false,
|
|
139
|
+
"description": "A community profile **as read**: every member of CommunityProfile, plus the immutable identity a reader needs and an update must never set.\n\nCommunityProfile is the update-facing view and omits `communityDid` on purpose, so that a patch cannot re-point a community's identity. That is right for a payload and wrong for a response: a client holding a profile has no other way to learn which DID to verify that community's credentials against, and `community/profile/show` returning the update-facing view left the one member a consumer most needs undefined.\n\nSo reads get this and updates keep CommunityProfile. The split is the point — the immutability of `communityDid` is enforced by it being absent from the payload, not by prose asking implementers not to honour it.",
|
|
105
140
|
"required": [
|
|
141
|
+
"communityDid",
|
|
106
142
|
"name",
|
|
107
143
|
"language"
|
|
108
144
|
],
|
|
109
145
|
"properties": {
|
|
146
|
+
"communityDid": {
|
|
147
|
+
"type": "string",
|
|
148
|
+
"minLength": 1,
|
|
149
|
+
"description": "The community's own DID — the identifier every credential it issues names as `issuer`, and the one a member's credential binds them to. Immutable: set when the community is created and not settable through an update."
|
|
150
|
+
},
|
|
151
|
+
"createdAt": {
|
|
152
|
+
"type": "string",
|
|
153
|
+
"format": "date-time",
|
|
154
|
+
"description": "When the community was created. Immutable, like `communityDid`."
|
|
155
|
+
},
|
|
110
156
|
"name": {
|
|
111
157
|
"type": "string",
|
|
112
158
|
"minLength": 1
|
|
@@ -155,6 +201,42 @@ export const PAYLOAD_SCHEMA = {
|
|
|
155
201
|
"degraded"
|
|
156
202
|
],
|
|
157
203
|
"description": "Trust-registry reachability. Populated on reads; not settable."
|
|
204
|
+
},
|
|
205
|
+
"personhood": {
|
|
206
|
+
"$ref": "#/$defs/PersonhoodGovernance",
|
|
207
|
+
"description": "What this community's governance asserts about the personhood of its members."
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
},
|
|
211
|
+
"PersonhoodGovernance": {
|
|
212
|
+
"$anchor": "personhoodGovernance",
|
|
213
|
+
"title": "PersonhoodGovernance",
|
|
214
|
+
"type": "object",
|
|
215
|
+
"additionalProperties": false,
|
|
216
|
+
"description": "A community's published position on personhood.\n\nDTG Credentials §Personhood Credentials places PHC status here rather than in the credential — \"PHC status is determined by governance and trust registries, not by credential structure\" — so a verifier deciding whether a VMC carries personhood weight reads this, not the credential's type array. §Governance Considerations item 1 makes the acceptable-IDVP list the community's to define and publish.\n\nEvery member is a declaration, not an enforcement: what a community actually accepts is decided by its own policy. Absent means the community has not published a position, which is not the same as asserting the negative.",
|
|
217
|
+
"properties": {
|
|
218
|
+
"realHuman": {
|
|
219
|
+
"type": "boolean",
|
|
220
|
+
"description": "Governance requires that members are real humans. Defaults to `false` when absent: a community that has not considered the question asserts nothing, which is the only safe default for a claim a verifier may rely on."
|
|
221
|
+
},
|
|
222
|
+
"singleMembership": {
|
|
223
|
+
"type": "boolean",
|
|
224
|
+
"description": "Governance requires that each person holds at most one membership in **this** community. Per-community by definition — the glossary says \"exactly one membership in that VTC\" — so a single community can satisfy it without any network above it."
|
|
225
|
+
},
|
|
226
|
+
"acceptedIdvps": {
|
|
227
|
+
"type": "array",
|
|
228
|
+
"items": {
|
|
229
|
+
"type": "string",
|
|
230
|
+
"minLength": 1
|
|
231
|
+
},
|
|
232
|
+
"description": "DIDs of the identity-verification providers whose credentials this community accepts as personhood evidence. A community that vets its own members in person lists its own community DID here — it is acting as its own IDVP, which §IDVC permits. An empty list means no list has been published, not that everything is accepted."
|
|
233
|
+
},
|
|
234
|
+
"governanceFrameworkUrl": {
|
|
235
|
+
"type": [
|
|
236
|
+
"string",
|
|
237
|
+
"null"
|
|
238
|
+
],
|
|
239
|
+
"description": "Where the governance framework these assertions refer to can be read."
|
|
158
240
|
}
|
|
159
241
|
}
|
|
160
242
|
}
|
|
@@ -176,7 +258,8 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
176
258
|
],
|
|
177
259
|
"properties": {
|
|
178
260
|
"profile": {
|
|
179
|
-
"$ref": "#/$defs/
|
|
261
|
+
"$ref": "#/$defs/CommunityProfileView",
|
|
262
|
+
"description": "The community's profile as read, including the immutable `communityDid` an update cannot set."
|
|
180
263
|
},
|
|
181
264
|
"ext": {
|
|
182
265
|
"$ref": "#/$defs/Ext"
|
|
@@ -193,16 +276,28 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
193
276
|
"pattern": "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$"
|
|
194
277
|
}
|
|
195
278
|
},
|
|
196
|
-
"
|
|
197
|
-
"$anchor": "
|
|
198
|
-
"title": "
|
|
279
|
+
"CommunityProfileView": {
|
|
280
|
+
"$anchor": "communityProfileView",
|
|
281
|
+
"title": "CommunityProfileView",
|
|
199
282
|
"type": "object",
|
|
200
283
|
"additionalProperties": false,
|
|
284
|
+
"description": "A community profile **as read**: every member of CommunityProfile, plus the immutable identity a reader needs and an update must never set.\n\nCommunityProfile is the update-facing view and omits `communityDid` on purpose, so that a patch cannot re-point a community's identity. That is right for a payload and wrong for a response: a client holding a profile has no other way to learn which DID to verify that community's credentials against, and `community/profile/show` returning the update-facing view left the one member a consumer most needs undefined.\n\nSo reads get this and updates keep CommunityProfile. The split is the point — the immutability of `communityDid` is enforced by it being absent from the payload, not by prose asking implementers not to honour it.",
|
|
201
285
|
"required": [
|
|
286
|
+
"communityDid",
|
|
202
287
|
"name",
|
|
203
288
|
"language"
|
|
204
289
|
],
|
|
205
290
|
"properties": {
|
|
291
|
+
"communityDid": {
|
|
292
|
+
"type": "string",
|
|
293
|
+
"minLength": 1,
|
|
294
|
+
"description": "The community's own DID — the identifier every credential it issues names as `issuer`, and the one a member's credential binds them to. Immutable: set when the community is created and not settable through an update."
|
|
295
|
+
},
|
|
296
|
+
"createdAt": {
|
|
297
|
+
"type": "string",
|
|
298
|
+
"format": "date-time",
|
|
299
|
+
"description": "When the community was created. Immutable, like `communityDid`."
|
|
300
|
+
},
|
|
206
301
|
"name": {
|
|
207
302
|
"type": "string",
|
|
208
303
|
"minLength": 1
|
|
@@ -251,6 +346,42 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
251
346
|
"degraded"
|
|
252
347
|
],
|
|
253
348
|
"description": "Trust-registry reachability. Populated on reads; not settable."
|
|
349
|
+
},
|
|
350
|
+
"personhood": {
|
|
351
|
+
"$ref": "#/$defs/PersonhoodGovernance",
|
|
352
|
+
"description": "What this community's governance asserts about the personhood of its members."
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
},
|
|
356
|
+
"PersonhoodGovernance": {
|
|
357
|
+
"$anchor": "personhoodGovernance",
|
|
358
|
+
"title": "PersonhoodGovernance",
|
|
359
|
+
"type": "object",
|
|
360
|
+
"additionalProperties": false,
|
|
361
|
+
"description": "A community's published position on personhood.\n\nDTG Credentials §Personhood Credentials places PHC status here rather than in the credential — \"PHC status is determined by governance and trust registries, not by credential structure\" — so a verifier deciding whether a VMC carries personhood weight reads this, not the credential's type array. §Governance Considerations item 1 makes the acceptable-IDVP list the community's to define and publish.\n\nEvery member is a declaration, not an enforcement: what a community actually accepts is decided by its own policy. Absent means the community has not published a position, which is not the same as asserting the negative.",
|
|
362
|
+
"properties": {
|
|
363
|
+
"realHuman": {
|
|
364
|
+
"type": "boolean",
|
|
365
|
+
"description": "Governance requires that members are real humans. Defaults to `false` when absent: a community that has not considered the question asserts nothing, which is the only safe default for a claim a verifier may rely on."
|
|
366
|
+
},
|
|
367
|
+
"singleMembership": {
|
|
368
|
+
"type": "boolean",
|
|
369
|
+
"description": "Governance requires that each person holds at most one membership in **this** community. Per-community by definition — the glossary says \"exactly one membership in that VTC\" — so a single community can satisfy it without any network above it."
|
|
370
|
+
},
|
|
371
|
+
"acceptedIdvps": {
|
|
372
|
+
"type": "array",
|
|
373
|
+
"items": {
|
|
374
|
+
"type": "string",
|
|
375
|
+
"minLength": 1
|
|
376
|
+
},
|
|
377
|
+
"description": "DIDs of the identity-verification providers whose credentials this community accepts as personhood evidence. A community that vets its own members in person lists its own community DID here — it is acting as its own IDVP, which §IDVC permits. An empty list means no list has been published, not that everything is accepted."
|
|
378
|
+
},
|
|
379
|
+
"governanceFrameworkUrl": {
|
|
380
|
+
"type": [
|
|
381
|
+
"string",
|
|
382
|
+
"null"
|
|
383
|
+
],
|
|
384
|
+
"description": "Where the governance framework these assertions refer to can be read."
|
|
254
385
|
}
|
|
255
386
|
}
|
|
256
387
|
}
|
|
@@ -14,12 +14,34 @@ export interface VTCCommunityProfileUpdatePayload {
|
|
|
14
14
|
* Set the community's declared relationship-identifier default. See `CommunityProfile.relationshipIdentifierDefault` in the `vtc/_shared/0.1/community` schema. Omit to leave it unchanged.
|
|
15
15
|
*/
|
|
16
16
|
relationshipIdentifierDefault?: "attributed" | "pairwise";
|
|
17
|
+
personhood?: PersonhoodGovernance;
|
|
17
18
|
/**
|
|
18
19
|
* Opaque community-defined extension bag (maintainer-capped).
|
|
19
20
|
*/
|
|
20
21
|
extensions?: {};
|
|
21
22
|
ext?: Ext;
|
|
22
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* Set the community's published personhood position. See `CommunityProfile.personhood` in the `vtc/_shared/0.1/community` schema. Replaces the whole object — a partial update would leave a verifier unable to tell an unset member from a cleared one. Omit to leave it unchanged.
|
|
26
|
+
*/
|
|
27
|
+
export interface PersonhoodGovernance {
|
|
28
|
+
/**
|
|
29
|
+
* Governance requires that members are real humans. Defaults to `false` when absent: a community that has not considered the question asserts nothing, which is the only safe default for a claim a verifier may rely on.
|
|
30
|
+
*/
|
|
31
|
+
realHuman?: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Governance requires that each person holds at most one membership in **this** community. Per-community by definition — the glossary says "exactly one membership in that VTC" — so a single community can satisfy it without any network above it.
|
|
34
|
+
*/
|
|
35
|
+
singleMembership?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* DIDs of the identity-verification providers whose credentials this community accepts as personhood evidence. A community that vets its own members in person lists its own community DID here — it is acting as its own IDVP, which §IDVC permits. An empty list means no list has been published, not that everything is accepted.
|
|
38
|
+
*/
|
|
39
|
+
acceptedIdvps?: string[];
|
|
40
|
+
/**
|
|
41
|
+
* Where the governance framework these assertions refer to can be read.
|
|
42
|
+
*/
|
|
43
|
+
governanceFrameworkUrl?: string | null;
|
|
44
|
+
}
|
|
23
45
|
/**
|
|
24
46
|
* 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.
|
|
25
47
|
*/
|
|
@@ -27,14 +49,25 @@ export interface Ext {
|
|
|
27
49
|
[k: string]: unknown | undefined;
|
|
28
50
|
}
|
|
29
51
|
export interface VTCCommunityProfileUpdateResponsePayload {
|
|
30
|
-
profile:
|
|
52
|
+
profile: CommunityProfileView;
|
|
31
53
|
/**
|
|
32
54
|
* Names of the profile members this update actually changed, in the wire spelling. Empty when the submitted values all matched what was already stored. Lets a caller distinguish a no-op from an applied change without diffing the returned profile against the one it sent.
|
|
33
55
|
*/
|
|
34
56
|
fieldsChanged?: string[];
|
|
35
57
|
ext?: Ext;
|
|
36
58
|
}
|
|
37
|
-
|
|
59
|
+
/**
|
|
60
|
+
* The community's profile as read, including the immutable `communityDid` an update cannot set.
|
|
61
|
+
*/
|
|
62
|
+
export interface CommunityProfileView {
|
|
63
|
+
/**
|
|
64
|
+
* The community's own DID — the identifier every credential it issues names as `issuer`, and the one a member's credential binds them to. Immutable: set when the community is created and not settable through an update.
|
|
65
|
+
*/
|
|
66
|
+
communityDid: string;
|
|
67
|
+
/**
|
|
68
|
+
* When the community was created. Immutable, like `communityDid`.
|
|
69
|
+
*/
|
|
70
|
+
createdAt?: string;
|
|
38
71
|
name: string;
|
|
39
72
|
description?: string;
|
|
40
73
|
logoUrl?: string | null;
|
|
@@ -53,6 +86,28 @@ export interface CommunityProfile {
|
|
|
53
86
|
* Trust-registry reachability. Populated on reads; not settable.
|
|
54
87
|
*/
|
|
55
88
|
registryStatus?: "active" | "degraded";
|
|
89
|
+
personhood?: PersonhoodGovernance1;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* What this community's governance asserts about the personhood of its members.
|
|
93
|
+
*/
|
|
94
|
+
export interface PersonhoodGovernance1 {
|
|
95
|
+
/**
|
|
96
|
+
* Governance requires that members are real humans. Defaults to `false` when absent: a community that has not considered the question asserts nothing, which is the only safe default for a claim a verifier may rely on.
|
|
97
|
+
*/
|
|
98
|
+
realHuman?: boolean;
|
|
99
|
+
/**
|
|
100
|
+
* Governance requires that each person holds at most one membership in **this** community. Per-community by definition — the glossary says "exactly one membership in that VTC" — so a single community can satisfy it without any network above it.
|
|
101
|
+
*/
|
|
102
|
+
singleMembership?: boolean;
|
|
103
|
+
/**
|
|
104
|
+
* DIDs of the identity-verification providers whose credentials this community accepts as personhood evidence. A community that vets its own members in person lists its own community DID here — it is acting as its own IDVP, which §IDVC permits. An empty list means no list has been published, not that everything is accepted.
|
|
105
|
+
*/
|
|
106
|
+
acceptedIdvps?: string[];
|
|
107
|
+
/**
|
|
108
|
+
* Where the governance framework these assertions refer to can be read.
|
|
109
|
+
*/
|
|
110
|
+
governanceFrameworkUrl?: string | null;
|
|
56
111
|
}
|
|
57
112
|
|
|
58
113
|
/** Trust Task type URI. */
|
|
@@ -120,6 +175,10 @@ export const PAYLOAD_SCHEMA = {
|
|
|
120
175
|
],
|
|
121
176
|
"description": "Set the community's declared relationship-identifier default. See `CommunityProfile.relationshipIdentifierDefault` in the `vtc/_shared/0.1/community` schema. Omit to leave it unchanged."
|
|
122
177
|
},
|
|
178
|
+
"personhood": {
|
|
179
|
+
"$ref": "#/$defs/PersonhoodGovernance",
|
|
180
|
+
"description": "Set the community's published personhood position. See `CommunityProfile.personhood` in the `vtc/_shared/0.1/community` schema. Replaces the whole object — a partial update would leave a verifier unable to tell an unset member from a cleared one. Omit to leave it unchanged."
|
|
181
|
+
},
|
|
123
182
|
"extensions": {
|
|
124
183
|
"type": "object",
|
|
125
184
|
"description": "Opaque community-defined extension bag (maintainer-capped)."
|
|
@@ -139,7 +198,8 @@ export const PAYLOAD_SCHEMA = {
|
|
|
139
198
|
],
|
|
140
199
|
"properties": {
|
|
141
200
|
"profile": {
|
|
142
|
-
"$ref": "#/$defs/
|
|
201
|
+
"$ref": "#/$defs/CommunityProfileView",
|
|
202
|
+
"description": "The community's profile as read, including the immutable `communityDid` an update cannot set."
|
|
143
203
|
},
|
|
144
204
|
"fieldsChanged": {
|
|
145
205
|
"type": "array",
|
|
@@ -163,16 +223,28 @@ export const PAYLOAD_SCHEMA = {
|
|
|
163
223
|
"pattern": "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$"
|
|
164
224
|
}
|
|
165
225
|
},
|
|
166
|
-
"
|
|
167
|
-
"$anchor": "
|
|
168
|
-
"title": "
|
|
226
|
+
"CommunityProfileView": {
|
|
227
|
+
"$anchor": "communityProfileView",
|
|
228
|
+
"title": "CommunityProfileView",
|
|
169
229
|
"type": "object",
|
|
170
230
|
"additionalProperties": false,
|
|
231
|
+
"description": "A community profile **as read**: every member of CommunityProfile, plus the immutable identity a reader needs and an update must never set.\n\nCommunityProfile is the update-facing view and omits `communityDid` on purpose, so that a patch cannot re-point a community's identity. That is right for a payload and wrong for a response: a client holding a profile has no other way to learn which DID to verify that community's credentials against, and `community/profile/show` returning the update-facing view left the one member a consumer most needs undefined.\n\nSo reads get this and updates keep CommunityProfile. The split is the point — the immutability of `communityDid` is enforced by it being absent from the payload, not by prose asking implementers not to honour it.",
|
|
171
232
|
"required": [
|
|
233
|
+
"communityDid",
|
|
172
234
|
"name",
|
|
173
235
|
"language"
|
|
174
236
|
],
|
|
175
237
|
"properties": {
|
|
238
|
+
"communityDid": {
|
|
239
|
+
"type": "string",
|
|
240
|
+
"minLength": 1,
|
|
241
|
+
"description": "The community's own DID — the identifier every credential it issues names as `issuer`, and the one a member's credential binds them to. Immutable: set when the community is created and not settable through an update."
|
|
242
|
+
},
|
|
243
|
+
"createdAt": {
|
|
244
|
+
"type": "string",
|
|
245
|
+
"format": "date-time",
|
|
246
|
+
"description": "When the community was created. Immutable, like `communityDid`."
|
|
247
|
+
},
|
|
176
248
|
"name": {
|
|
177
249
|
"type": "string",
|
|
178
250
|
"minLength": 1
|
|
@@ -221,6 +293,42 @@ export const PAYLOAD_SCHEMA = {
|
|
|
221
293
|
"degraded"
|
|
222
294
|
],
|
|
223
295
|
"description": "Trust-registry reachability. Populated on reads; not settable."
|
|
296
|
+
},
|
|
297
|
+
"personhood": {
|
|
298
|
+
"$ref": "#/$defs/PersonhoodGovernance",
|
|
299
|
+
"description": "What this community's governance asserts about the personhood of its members."
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
},
|
|
303
|
+
"PersonhoodGovernance": {
|
|
304
|
+
"$anchor": "personhoodGovernance",
|
|
305
|
+
"title": "PersonhoodGovernance",
|
|
306
|
+
"type": "object",
|
|
307
|
+
"additionalProperties": false,
|
|
308
|
+
"description": "A community's published position on personhood.\n\nDTG Credentials §Personhood Credentials places PHC status here rather than in the credential — \"PHC status is determined by governance and trust registries, not by credential structure\" — so a verifier deciding whether a VMC carries personhood weight reads this, not the credential's type array. §Governance Considerations item 1 makes the acceptable-IDVP list the community's to define and publish.\n\nEvery member is a declaration, not an enforcement: what a community actually accepts is decided by its own policy. Absent means the community has not published a position, which is not the same as asserting the negative.",
|
|
309
|
+
"properties": {
|
|
310
|
+
"realHuman": {
|
|
311
|
+
"type": "boolean",
|
|
312
|
+
"description": "Governance requires that members are real humans. Defaults to `false` when absent: a community that has not considered the question asserts nothing, which is the only safe default for a claim a verifier may rely on."
|
|
313
|
+
},
|
|
314
|
+
"singleMembership": {
|
|
315
|
+
"type": "boolean",
|
|
316
|
+
"description": "Governance requires that each person holds at most one membership in **this** community. Per-community by definition — the glossary says \"exactly one membership in that VTC\" — so a single community can satisfy it without any network above it."
|
|
317
|
+
},
|
|
318
|
+
"acceptedIdvps": {
|
|
319
|
+
"type": "array",
|
|
320
|
+
"items": {
|
|
321
|
+
"type": "string",
|
|
322
|
+
"minLength": 1
|
|
323
|
+
},
|
|
324
|
+
"description": "DIDs of the identity-verification providers whose credentials this community accepts as personhood evidence. A community that vets its own members in person lists its own community DID here — it is acting as its own IDVP, which §IDVC permits. An empty list means no list has been published, not that everything is accepted."
|
|
325
|
+
},
|
|
326
|
+
"governanceFrameworkUrl": {
|
|
327
|
+
"type": [
|
|
328
|
+
"string",
|
|
329
|
+
"null"
|
|
330
|
+
],
|
|
331
|
+
"description": "Where the governance framework these assertions refer to can be read."
|
|
224
332
|
}
|
|
225
333
|
}
|
|
226
334
|
}
|
|
@@ -242,7 +350,8 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
242
350
|
],
|
|
243
351
|
"properties": {
|
|
244
352
|
"profile": {
|
|
245
|
-
"$ref": "#/$defs/
|
|
353
|
+
"$ref": "#/$defs/CommunityProfileView",
|
|
354
|
+
"description": "The community's profile as read, including the immutable `communityDid` an update cannot set."
|
|
246
355
|
},
|
|
247
356
|
"fieldsChanged": {
|
|
248
357
|
"type": "array",
|
|
@@ -266,16 +375,28 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
266
375
|
"pattern": "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$"
|
|
267
376
|
}
|
|
268
377
|
},
|
|
269
|
-
"
|
|
270
|
-
"$anchor": "
|
|
271
|
-
"title": "
|
|
378
|
+
"CommunityProfileView": {
|
|
379
|
+
"$anchor": "communityProfileView",
|
|
380
|
+
"title": "CommunityProfileView",
|
|
272
381
|
"type": "object",
|
|
273
382
|
"additionalProperties": false,
|
|
383
|
+
"description": "A community profile **as read**: every member of CommunityProfile, plus the immutable identity a reader needs and an update must never set.\n\nCommunityProfile is the update-facing view and omits `communityDid` on purpose, so that a patch cannot re-point a community's identity. That is right for a payload and wrong for a response: a client holding a profile has no other way to learn which DID to verify that community's credentials against, and `community/profile/show` returning the update-facing view left the one member a consumer most needs undefined.\n\nSo reads get this and updates keep CommunityProfile. The split is the point — the immutability of `communityDid` is enforced by it being absent from the payload, not by prose asking implementers not to honour it.",
|
|
274
384
|
"required": [
|
|
385
|
+
"communityDid",
|
|
275
386
|
"name",
|
|
276
387
|
"language"
|
|
277
388
|
],
|
|
278
389
|
"properties": {
|
|
390
|
+
"communityDid": {
|
|
391
|
+
"type": "string",
|
|
392
|
+
"minLength": 1,
|
|
393
|
+
"description": "The community's own DID — the identifier every credential it issues names as `issuer`, and the one a member's credential binds them to. Immutable: set when the community is created and not settable through an update."
|
|
394
|
+
},
|
|
395
|
+
"createdAt": {
|
|
396
|
+
"type": "string",
|
|
397
|
+
"format": "date-time",
|
|
398
|
+
"description": "When the community was created. Immutable, like `communityDid`."
|
|
399
|
+
},
|
|
279
400
|
"name": {
|
|
280
401
|
"type": "string",
|
|
281
402
|
"minLength": 1
|
|
@@ -324,6 +445,42 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
324
445
|
"degraded"
|
|
325
446
|
],
|
|
326
447
|
"description": "Trust-registry reachability. Populated on reads; not settable."
|
|
448
|
+
},
|
|
449
|
+
"personhood": {
|
|
450
|
+
"$ref": "#/$defs/PersonhoodGovernance",
|
|
451
|
+
"description": "What this community's governance asserts about the personhood of its members."
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
},
|
|
455
|
+
"PersonhoodGovernance": {
|
|
456
|
+
"$anchor": "personhoodGovernance",
|
|
457
|
+
"title": "PersonhoodGovernance",
|
|
458
|
+
"type": "object",
|
|
459
|
+
"additionalProperties": false,
|
|
460
|
+
"description": "A community's published position on personhood.\n\nDTG Credentials §Personhood Credentials places PHC status here rather than in the credential — \"PHC status is determined by governance and trust registries, not by credential structure\" — so a verifier deciding whether a VMC carries personhood weight reads this, not the credential's type array. §Governance Considerations item 1 makes the acceptable-IDVP list the community's to define and publish.\n\nEvery member is a declaration, not an enforcement: what a community actually accepts is decided by its own policy. Absent means the community has not published a position, which is not the same as asserting the negative.",
|
|
461
|
+
"properties": {
|
|
462
|
+
"realHuman": {
|
|
463
|
+
"type": "boolean",
|
|
464
|
+
"description": "Governance requires that members are real humans. Defaults to `false` when absent: a community that has not considered the question asserts nothing, which is the only safe default for a claim a verifier may rely on."
|
|
465
|
+
},
|
|
466
|
+
"singleMembership": {
|
|
467
|
+
"type": "boolean",
|
|
468
|
+
"description": "Governance requires that each person holds at most one membership in **this** community. Per-community by definition — the glossary says \"exactly one membership in that VTC\" — so a single community can satisfy it without any network above it."
|
|
469
|
+
},
|
|
470
|
+
"acceptedIdvps": {
|
|
471
|
+
"type": "array",
|
|
472
|
+
"items": {
|
|
473
|
+
"type": "string",
|
|
474
|
+
"minLength": 1
|
|
475
|
+
},
|
|
476
|
+
"description": "DIDs of the identity-verification providers whose credentials this community accepts as personhood evidence. A community that vets its own members in person lists its own community DID here — it is acting as its own IDVP, which §IDVC permits. An empty list means no list has been published, not that everything is accepted."
|
|
477
|
+
},
|
|
478
|
+
"governanceFrameworkUrl": {
|
|
479
|
+
"type": [
|
|
480
|
+
"string",
|
|
481
|
+
"null"
|
|
482
|
+
],
|
|
483
|
+
"description": "Where the governance framework these assertions refer to can be read."
|
|
327
484
|
}
|
|
328
485
|
}
|
|
329
486
|
}
|
|
@@ -61,6 +61,7 @@ export interface CommunityProfileSnapshot {
|
|
|
61
61
|
* The community's declared relationship-identifier default, as defined on `CommunityProfile` in the `vtc/_shared/0.1/community` schema. Carried in a config export so a restore reproduces the declaration rather than silently reverting it to the implementation default.
|
|
62
62
|
*/
|
|
63
63
|
relationshipIdentifierDefault?: "attributed" | "pairwise";
|
|
64
|
+
personhood?: PersonhoodGovernance;
|
|
64
65
|
/**
|
|
65
66
|
* Opaque community-defined extension bag.
|
|
66
67
|
*/
|
|
@@ -70,6 +71,27 @@ export interface CommunityProfileSnapshot {
|
|
|
70
71
|
*/
|
|
71
72
|
createdAt?: string;
|
|
72
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* The community's published personhood position, carried so an export restores it. Governance state, not runtime state — unlike `registryStatus`, which is deliberately absent here because reachability belongs to a running maintainer rather than to exported state.
|
|
76
|
+
*/
|
|
77
|
+
export interface PersonhoodGovernance {
|
|
78
|
+
/**
|
|
79
|
+
* Governance requires that members are real humans. Defaults to `false` when absent: a community that has not considered the question asserts nothing, which is the only safe default for a claim a verifier may rely on.
|
|
80
|
+
*/
|
|
81
|
+
realHuman?: boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Governance requires that each person holds at most one membership in **this** community. Per-community by definition — the glossary says "exactly one membership in that VTC" — so a single community can satisfy it without any network above it.
|
|
84
|
+
*/
|
|
85
|
+
singleMembership?: boolean;
|
|
86
|
+
/**
|
|
87
|
+
* DIDs of the identity-verification providers whose credentials this community accepts as personhood evidence. A community that vets its own members in person lists its own community DID here — it is acting as its own IDVP, which §IDVC permits. An empty list means no list has been published, not that everything is accepted.
|
|
88
|
+
*/
|
|
89
|
+
acceptedIdvps?: string[];
|
|
90
|
+
/**
|
|
91
|
+
* Where the governance framework these assertions refer to can be read.
|
|
92
|
+
*/
|
|
93
|
+
governanceFrameworkUrl?: string | null;
|
|
94
|
+
}
|
|
73
95
|
|
|
74
96
|
/** Trust Task type URI. */
|
|
75
97
|
export const TYPE_URI = "https://trusttasks.org/spec/vtc/config/export/0.1" as const;
|
|
@@ -224,6 +246,10 @@ export const PAYLOAD_SCHEMA = {
|
|
|
224
246
|
],
|
|
225
247
|
"description": "The community's declared relationship-identifier default, as defined on `CommunityProfile` in the `vtc/_shared/0.1/community` schema. Carried in a config export so a restore reproduces the declaration rather than silently reverting it to the implementation default."
|
|
226
248
|
},
|
|
249
|
+
"personhood": {
|
|
250
|
+
"$ref": "#/$defs/PersonhoodGovernance",
|
|
251
|
+
"description": "The community's published personhood position, carried so an export restores it. Governance state, not runtime state — unlike `registryStatus`, which is deliberately absent here because reachability belongs to a running maintainer rather than to exported state."
|
|
252
|
+
},
|
|
227
253
|
"extensions": {
|
|
228
254
|
"type": "object",
|
|
229
255
|
"description": "Opaque community-defined extension bag."
|
|
@@ -234,6 +260,38 @@ export const PAYLOAD_SCHEMA = {
|
|
|
234
260
|
"description": "When the community was created. Provenance only — an import never writes it."
|
|
235
261
|
}
|
|
236
262
|
}
|
|
263
|
+
},
|
|
264
|
+
"PersonhoodGovernance": {
|
|
265
|
+
"$anchor": "personhoodGovernance",
|
|
266
|
+
"title": "PersonhoodGovernance",
|
|
267
|
+
"type": "object",
|
|
268
|
+
"additionalProperties": false,
|
|
269
|
+
"description": "A community's published position on personhood.\n\nDTG Credentials §Personhood Credentials places PHC status here rather than in the credential — \"PHC status is determined by governance and trust registries, not by credential structure\" — so a verifier deciding whether a VMC carries personhood weight reads this, not the credential's type array. §Governance Considerations item 1 makes the acceptable-IDVP list the community's to define and publish.\n\nEvery member is a declaration, not an enforcement: what a community actually accepts is decided by its own policy. Absent means the community has not published a position, which is not the same as asserting the negative.",
|
|
270
|
+
"properties": {
|
|
271
|
+
"realHuman": {
|
|
272
|
+
"type": "boolean",
|
|
273
|
+
"description": "Governance requires that members are real humans. Defaults to `false` when absent: a community that has not considered the question asserts nothing, which is the only safe default for a claim a verifier may rely on."
|
|
274
|
+
},
|
|
275
|
+
"singleMembership": {
|
|
276
|
+
"type": "boolean",
|
|
277
|
+
"description": "Governance requires that each person holds at most one membership in **this** community. Per-community by definition — the glossary says \"exactly one membership in that VTC\" — so a single community can satisfy it without any network above it."
|
|
278
|
+
},
|
|
279
|
+
"acceptedIdvps": {
|
|
280
|
+
"type": "array",
|
|
281
|
+
"items": {
|
|
282
|
+
"type": "string",
|
|
283
|
+
"minLength": 1
|
|
284
|
+
},
|
|
285
|
+
"description": "DIDs of the identity-verification providers whose credentials this community accepts as personhood evidence. A community that vets its own members in person lists its own community DID here — it is acting as its own IDVP, which §IDVC permits. An empty list means no list has been published, not that everything is accepted."
|
|
286
|
+
},
|
|
287
|
+
"governanceFrameworkUrl": {
|
|
288
|
+
"type": [
|
|
289
|
+
"string",
|
|
290
|
+
"null"
|
|
291
|
+
],
|
|
292
|
+
"description": "Where the governance framework these assertions refer to can be read."
|
|
293
|
+
}
|
|
294
|
+
}
|
|
237
295
|
}
|
|
238
296
|
}
|
|
239
297
|
} as const;
|
|
@@ -362,6 +420,10 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
362
420
|
],
|
|
363
421
|
"description": "The community's declared relationship-identifier default, as defined on `CommunityProfile` in the `vtc/_shared/0.1/community` schema. Carried in a config export so a restore reproduces the declaration rather than silently reverting it to the implementation default."
|
|
364
422
|
},
|
|
423
|
+
"personhood": {
|
|
424
|
+
"$ref": "#/$defs/PersonhoodGovernance",
|
|
425
|
+
"description": "The community's published personhood position, carried so an export restores it. Governance state, not runtime state — unlike `registryStatus`, which is deliberately absent here because reachability belongs to a running maintainer rather than to exported state."
|
|
426
|
+
},
|
|
365
427
|
"extensions": {
|
|
366
428
|
"type": "object",
|
|
367
429
|
"description": "Opaque community-defined extension bag."
|
|
@@ -372,6 +434,38 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
372
434
|
"description": "When the community was created. Provenance only — an import never writes it."
|
|
373
435
|
}
|
|
374
436
|
}
|
|
437
|
+
},
|
|
438
|
+
"PersonhoodGovernance": {
|
|
439
|
+
"$anchor": "personhoodGovernance",
|
|
440
|
+
"title": "PersonhoodGovernance",
|
|
441
|
+
"type": "object",
|
|
442
|
+
"additionalProperties": false,
|
|
443
|
+
"description": "A community's published position on personhood.\n\nDTG Credentials §Personhood Credentials places PHC status here rather than in the credential — \"PHC status is determined by governance and trust registries, not by credential structure\" — so a verifier deciding whether a VMC carries personhood weight reads this, not the credential's type array. §Governance Considerations item 1 makes the acceptable-IDVP list the community's to define and publish.\n\nEvery member is a declaration, not an enforcement: what a community actually accepts is decided by its own policy. Absent means the community has not published a position, which is not the same as asserting the negative.",
|
|
444
|
+
"properties": {
|
|
445
|
+
"realHuman": {
|
|
446
|
+
"type": "boolean",
|
|
447
|
+
"description": "Governance requires that members are real humans. Defaults to `false` when absent: a community that has not considered the question asserts nothing, which is the only safe default for a claim a verifier may rely on."
|
|
448
|
+
},
|
|
449
|
+
"singleMembership": {
|
|
450
|
+
"type": "boolean",
|
|
451
|
+
"description": "Governance requires that each person holds at most one membership in **this** community. Per-community by definition — the glossary says \"exactly one membership in that VTC\" — so a single community can satisfy it without any network above it."
|
|
452
|
+
},
|
|
453
|
+
"acceptedIdvps": {
|
|
454
|
+
"type": "array",
|
|
455
|
+
"items": {
|
|
456
|
+
"type": "string",
|
|
457
|
+
"minLength": 1
|
|
458
|
+
},
|
|
459
|
+
"description": "DIDs of the identity-verification providers whose credentials this community accepts as personhood evidence. A community that vets its own members in person lists its own community DID here — it is acting as its own IDVP, which §IDVC permits. An empty list means no list has been published, not that everything is accepted."
|
|
460
|
+
},
|
|
461
|
+
"governanceFrameworkUrl": {
|
|
462
|
+
"type": [
|
|
463
|
+
"string",
|
|
464
|
+
"null"
|
|
465
|
+
],
|
|
466
|
+
"description": "Where the governance framework these assertions refer to can be read."
|
|
467
|
+
}
|
|
468
|
+
}
|
|
375
469
|
}
|
|
376
470
|
}
|
|
377
471
|
} as const;
|