@openvtc/trust-tasks 0.12.7 → 0.12.9

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 (51) hide show
  1. package/dist/vtc/community/profile/show/0.1/payload.d.ts +154 -0
  2. package/dist/vtc/community/profile/show/0.1/payload.d.ts.map +1 -1
  3. package/dist/vtc/community/profile/show/0.1/payload.js +72 -0
  4. package/dist/vtc/community/profile/show/0.1/payload.js.map +1 -1
  5. package/dist/vtc/community/profile/update/0.1/payload.d.ts +184 -0
  6. package/dist/vtc/community/profile/update/0.1/payload.d.ts.map +1 -1
  7. package/dist/vtc/community/profile/update/0.1/payload.js +76 -0
  8. package/dist/vtc/community/profile/update/0.1/payload.js.map +1 -1
  9. package/dist/vtc/config/export/0.1/payload.d.ts +154 -0
  10. package/dist/vtc/config/export/0.1/payload.d.ts.map +1 -1
  11. package/dist/vtc/config/export/0.1/payload.js +72 -0
  12. package/dist/vtc/config/export/0.1/payload.js.map +1 -1
  13. package/dist/vtc/config/import/0.1/payload.d.ts +154 -0
  14. package/dist/vtc/config/import/0.1/payload.d.ts.map +1 -1
  15. package/dist/vtc/config/import/0.1/payload.js +72 -0
  16. package/dist/vtc/config/import/0.1/payload.js.map +1 -1
  17. package/dist/vtc/endorsement-types/list/0.1/payload.d.ts +20 -0
  18. package/dist/vtc/endorsement-types/list/0.1/payload.d.ts.map +1 -1
  19. package/dist/vtc/endorsement-types/list/0.1/payload.js +8 -0
  20. package/dist/vtc/endorsement-types/list/0.1/payload.js.map +1 -1
  21. package/dist/vtc/endorsement-types/register/0.1/payload.d.ts +20 -0
  22. package/dist/vtc/endorsement-types/register/0.1/payload.d.ts.map +1 -1
  23. package/dist/vtc/endorsement-types/register/0.1/payload.js +8 -0
  24. package/dist/vtc/endorsement-types/register/0.1/payload.js.map +1 -1
  25. package/dist/vtc/join-requests/decide/0.1/payload.d.ts +42 -0
  26. package/dist/vtc/join-requests/decide/0.1/payload.d.ts.map +1 -1
  27. package/dist/vtc/join-requests/decide/0.1/payload.js +28 -0
  28. package/dist/vtc/join-requests/decide/0.1/payload.js.map +1 -1
  29. package/dist/vtc/members/list/0.1/payload.d.ts +108 -0
  30. package/dist/vtc/members/list/0.1/payload.d.ts.map +1 -1
  31. package/dist/vtc/members/list/0.1/payload.js +62 -0
  32. package/dist/vtc/members/list/0.1/payload.js.map +1 -1
  33. package/dist/vtc/members/show/0.1/payload.d.ts +108 -0
  34. package/dist/vtc/members/show/0.1/payload.d.ts.map +1 -1
  35. package/dist/vtc/members/show/0.1/payload.js +62 -0
  36. package/dist/vtc/members/show/0.1/payload.js.map +1 -1
  37. package/dist/vtc/members/update/0.1/payload.d.ts +120 -0
  38. package/dist/vtc/members/update/0.1/payload.d.ts.map +1 -1
  39. package/dist/vtc/members/update/0.1/payload.js +69 -0
  40. package/dist/vtc/members/update/0.1/payload.js.map +1 -1
  41. package/package.json +1 -1
  42. package/src/vtc/community/profile/show/0.1/payload.ts +94 -0
  43. package/src/vtc/community/profile/update/0.1/payload.ts +120 -0
  44. package/src/vtc/config/export/0.1/payload.ts +94 -0
  45. package/src/vtc/config/import/0.1/payload.ts +94 -0
  46. package/src/vtc/endorsement-types/list/0.1/payload.ts +12 -0
  47. package/src/vtc/endorsement-types/register/0.1/payload.ts +12 -0
  48. package/src/vtc/join-requests/decide/0.1/payload.ts +38 -0
  49. package/src/vtc/members/list/0.1/payload.ts +82 -0
  50. package/src/vtc/members/show/0.1/payload.ts +82 -0
  51. package/src/vtc/members/update/0.1/payload.ts +93 -0
@@ -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
  */
@@ -53,6 +75,28 @@ export interface CommunityProfile {
53
75
  * Trust-registry reachability. Populated on reads; not settable.
54
76
  */
55
77
  registryStatus?: "active" | "degraded";
78
+ personhood?: PersonhoodGovernance1;
79
+ }
80
+ /**
81
+ * What this community's governance asserts about the personhood of its members.
82
+ */
83
+ export interface PersonhoodGovernance1 {
84
+ /**
85
+ * 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.
86
+ */
87
+ realHuman?: boolean;
88
+ /**
89
+ * 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.
90
+ */
91
+ singleMembership?: boolean;
92
+ /**
93
+ * 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.
94
+ */
95
+ acceptedIdvps?: string[];
96
+ /**
97
+ * Where the governance framework these assertions refer to can be read.
98
+ */
99
+ governanceFrameworkUrl?: string | null;
56
100
  }
57
101
 
58
102
  /** Trust Task type URI. */
@@ -120,6 +164,10 @@ export const PAYLOAD_SCHEMA = {
120
164
  ],
121
165
  "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
166
  },
167
+ "personhood": {
168
+ "$ref": "#/$defs/PersonhoodGovernance",
169
+ "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."
170
+ },
123
171
  "extensions": {
124
172
  "type": "object",
125
173
  "description": "Opaque community-defined extension bag (maintainer-capped)."
@@ -221,6 +269,42 @@ export const PAYLOAD_SCHEMA = {
221
269
  "degraded"
222
270
  ],
223
271
  "description": "Trust-registry reachability. Populated on reads; not settable."
272
+ },
273
+ "personhood": {
274
+ "$ref": "#/$defs/PersonhoodGovernance",
275
+ "description": "What this community's governance asserts about the personhood of its members."
276
+ }
277
+ }
278
+ },
279
+ "PersonhoodGovernance": {
280
+ "$anchor": "personhoodGovernance",
281
+ "title": "PersonhoodGovernance",
282
+ "type": "object",
283
+ "additionalProperties": false,
284
+ "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.",
285
+ "properties": {
286
+ "realHuman": {
287
+ "type": "boolean",
288
+ "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."
289
+ },
290
+ "singleMembership": {
291
+ "type": "boolean",
292
+ "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."
293
+ },
294
+ "acceptedIdvps": {
295
+ "type": "array",
296
+ "items": {
297
+ "type": "string",
298
+ "minLength": 1
299
+ },
300
+ "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."
301
+ },
302
+ "governanceFrameworkUrl": {
303
+ "type": [
304
+ "string",
305
+ "null"
306
+ ],
307
+ "description": "Where the governance framework these assertions refer to can be read."
224
308
  }
225
309
  }
226
310
  }
@@ -324,6 +408,42 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
324
408
  "degraded"
325
409
  ],
326
410
  "description": "Trust-registry reachability. Populated on reads; not settable."
411
+ },
412
+ "personhood": {
413
+ "$ref": "#/$defs/PersonhoodGovernance",
414
+ "description": "What this community's governance asserts about the personhood of its members."
415
+ }
416
+ }
417
+ },
418
+ "PersonhoodGovernance": {
419
+ "$anchor": "personhoodGovernance",
420
+ "title": "PersonhoodGovernance",
421
+ "type": "object",
422
+ "additionalProperties": false,
423
+ "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.",
424
+ "properties": {
425
+ "realHuman": {
426
+ "type": "boolean",
427
+ "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."
428
+ },
429
+ "singleMembership": {
430
+ "type": "boolean",
431
+ "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."
432
+ },
433
+ "acceptedIdvps": {
434
+ "type": "array",
435
+ "items": {
436
+ "type": "string",
437
+ "minLength": 1
438
+ },
439
+ "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."
440
+ },
441
+ "governanceFrameworkUrl": {
442
+ "type": [
443
+ "string",
444
+ "null"
445
+ ],
446
+ "description": "Where the governance framework these assertions refer to can be read."
327
447
  }
328
448
  }
329
449
  }
@@ -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;
@@ -56,6 +56,7 @@ export interface CommunityProfileSnapshot {
56
56
  * 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.
57
57
  */
58
58
  relationshipIdentifierDefault?: "attributed" | "pairwise";
59
+ personhood?: PersonhoodGovernance;
59
60
  /**
60
61
  * Opaque community-defined extension bag.
61
62
  */
@@ -65,6 +66,27 @@ export interface CommunityProfileSnapshot {
65
66
  */
66
67
  createdAt?: string;
67
68
  }
69
+ /**
70
+ * 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.
71
+ */
72
+ export interface PersonhoodGovernance {
73
+ /**
74
+ * 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.
75
+ */
76
+ realHuman?: boolean;
77
+ /**
78
+ * 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.
79
+ */
80
+ singleMembership?: boolean;
81
+ /**
82
+ * 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.
83
+ */
84
+ acceptedIdvps?: string[];
85
+ /**
86
+ * Where the governance framework these assertions refer to can be read.
87
+ */
88
+ governanceFrameworkUrl?: string | null;
89
+ }
68
90
  /**
69
91
  * 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.
70
92
  */
@@ -375,6 +397,10 @@ export const PAYLOAD_SCHEMA = {
375
397
  ],
376
398
  "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."
377
399
  },
400
+ "personhood": {
401
+ "$ref": "#/$defs/PersonhoodGovernance",
402
+ "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."
403
+ },
378
404
  "extensions": {
379
405
  "type": "object",
380
406
  "description": "Opaque community-defined extension bag."
@@ -385,6 +411,38 @@ export const PAYLOAD_SCHEMA = {
385
411
  "description": "When the community was created. Provenance only — an import never writes it."
386
412
  }
387
413
  }
414
+ },
415
+ "PersonhoodGovernance": {
416
+ "$anchor": "personhoodGovernance",
417
+ "title": "PersonhoodGovernance",
418
+ "type": "object",
419
+ "additionalProperties": false,
420
+ "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.",
421
+ "properties": {
422
+ "realHuman": {
423
+ "type": "boolean",
424
+ "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."
425
+ },
426
+ "singleMembership": {
427
+ "type": "boolean",
428
+ "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."
429
+ },
430
+ "acceptedIdvps": {
431
+ "type": "array",
432
+ "items": {
433
+ "type": "string",
434
+ "minLength": 1
435
+ },
436
+ "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."
437
+ },
438
+ "governanceFrameworkUrl": {
439
+ "type": [
440
+ "string",
441
+ "null"
442
+ ],
443
+ "description": "Where the governance framework these assertions refer to can be read."
444
+ }
445
+ }
388
446
  }
389
447
  }
390
448
  } as const;
@@ -595,6 +653,10 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
595
653
  ],
596
654
  "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."
597
655
  },
656
+ "personhood": {
657
+ "$ref": "#/$defs/PersonhoodGovernance",
658
+ "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."
659
+ },
598
660
  "extensions": {
599
661
  "type": "object",
600
662
  "description": "Opaque community-defined extension bag."
@@ -605,6 +667,38 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
605
667
  "description": "When the community was created. Provenance only — an import never writes it."
606
668
  }
607
669
  }
670
+ },
671
+ "PersonhoodGovernance": {
672
+ "$anchor": "personhoodGovernance",
673
+ "title": "PersonhoodGovernance",
674
+ "type": "object",
675
+ "additionalProperties": false,
676
+ "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.",
677
+ "properties": {
678
+ "realHuman": {
679
+ "type": "boolean",
680
+ "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."
681
+ },
682
+ "singleMembership": {
683
+ "type": "boolean",
684
+ "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."
685
+ },
686
+ "acceptedIdvps": {
687
+ "type": "array",
688
+ "items": {
689
+ "type": "string",
690
+ "minLength": 1
691
+ },
692
+ "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."
693
+ },
694
+ "governanceFrameworkUrl": {
695
+ "type": [
696
+ "string",
697
+ "null"
698
+ ],
699
+ "description": "Where the governance framework these assertions refer to can be read."
700
+ }
701
+ }
608
702
  }
609
703
  }
610
704
  } as const;
@@ -30,6 +30,10 @@ export interface EndorsementType {
30
30
  */
31
31
  claimSchema?: {};
32
32
  createdAt?: string;
33
+ /**
34
+ * The member who registered this endorsement type. An endorsement vocabulary is community-defined and shapes what every later endorsement can claim, so who introduced a type is audit-relevant in a way its creation time alone is not.
35
+ */
36
+ createdByDid?: string;
33
37
  }
34
38
 
35
39
  /** Trust Task type URI. */
@@ -135,6 +139,10 @@ export const PAYLOAD_SCHEMA = {
135
139
  "createdAt": {
136
140
  "type": "string",
137
141
  "format": "date-time"
142
+ },
143
+ "createdByDid": {
144
+ "type": "string",
145
+ "description": "The member who registered this endorsement type. An endorsement vocabulary is community-defined and shapes what every later endorsement can claim, so who introduced a type is audit-relevant in a way its creation time alone is not."
138
146
  }
139
147
  }
140
148
  }
@@ -208,6 +216,10 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
208
216
  "createdAt": {
209
217
  "type": "string",
210
218
  "format": "date-time"
219
+ },
220
+ "createdByDid": {
221
+ "type": "string",
222
+ "description": "The member who registered this endorsement type. An endorsement vocabulary is community-defined and shapes what every later endorsement can claim, so who introduced a type is audit-relevant in a way its creation time alone is not."
211
223
  }
212
224
  }
213
225
  }
@@ -33,6 +33,10 @@ export interface EndorsementType {
33
33
  */
34
34
  claimSchema?: {};
35
35
  createdAt?: string;
36
+ /**
37
+ * The member who registered this endorsement type. An endorsement vocabulary is community-defined and shapes what every later endorsement can claim, so who introduced a type is audit-relevant in a way its creation time alone is not.
38
+ */
39
+ createdByDid?: string;
36
40
  }
37
41
 
38
42
  /** Trust Task type URI. */
@@ -137,6 +141,10 @@ export const PAYLOAD_SCHEMA = {
137
141
  "createdAt": {
138
142
  "type": "string",
139
143
  "format": "date-time"
144
+ },
145
+ "createdByDid": {
146
+ "type": "string",
147
+ "description": "The member who registered this endorsement type. An endorsement vocabulary is community-defined and shapes what every later endorsement can claim, so who introduced a type is audit-relevant in a way its creation time alone is not."
140
148
  }
141
149
  }
142
150
  }
@@ -201,6 +209,10 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
201
209
  "createdAt": {
202
210
  "type": "string",
203
211
  "format": "date-time"
212
+ },
213
+ "createdByDid": {
214
+ "type": "string",
215
+ "description": "The member who registered this endorsement type. An endorsement vocabulary is community-defined and shapes what every later endorsement can claim, so who introduced a type is audit-relevant in a way its creation time alone is not."
204
216
  }
205
217
  }
206
218
  }
@@ -33,6 +33,16 @@ export interface VTCJoinRequestsDecideResponsePayload {
33
33
  * The request's post-decision state; echoes the decision.
34
34
  */
35
35
  status: "approved" | "rejected";
36
+ /**
37
+ * The membership credential issued by this decision, delivered inline. Present only where the decision admitted the applicant.
38
+ *
39
+ * Inline because the alternative is worse: the applicant would poll for a status, learn they were admitted, and then fetch the credential separately — a second round trip whose only purpose is to collect something the community already had in hand when it decided.
40
+ */
41
+ vmc?: {} | null;
42
+ /**
43
+ * The endorsement credential carrying the role this decision granted, delivered inline alongside `vmc` and on the same reasoning. Present only where the decision admitted the applicant and granted a role.
44
+ */
45
+ roleVec?: {} | null;
36
46
  ext?: Ext;
37
47
  }
38
48
 
@@ -114,6 +124,20 @@ export const PAYLOAD_SCHEMA = {
114
124
  ],
115
125
  "description": "The request's post-decision state; echoes the decision."
116
126
  },
127
+ "vmc": {
128
+ "type": [
129
+ "object",
130
+ "null"
131
+ ],
132
+ "description": "The membership credential issued by this decision, delivered inline. Present only where the decision admitted the applicant.\n\nInline because the alternative is worse: the applicant would poll for a status, learn they were admitted, and then fetch the credential separately — a second round trip whose only purpose is to collect something the community already had in hand when it decided."
133
+ },
134
+ "roleVec": {
135
+ "type": [
136
+ "object",
137
+ "null"
138
+ ],
139
+ "description": "The endorsement credential carrying the role this decision granted, delivered inline alongside `vmc` and on the same reasoning. Present only where the decision admitted the applicant and granted a role."
140
+ },
117
141
  "ext": {
118
142
  "$ref": "#/$defs/Ext"
119
143
  }
@@ -160,6 +184,20 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
160
184
  ],
161
185
  "description": "The request's post-decision state; echoes the decision."
162
186
  },
187
+ "vmc": {
188
+ "type": [
189
+ "object",
190
+ "null"
191
+ ],
192
+ "description": "The membership credential issued by this decision, delivered inline. Present only where the decision admitted the applicant.\n\nInline because the alternative is worse: the applicant would poll for a status, learn they were admitted, and then fetch the credential separately — a second round trip whose only purpose is to collect something the community already had in hand when it decided."
193
+ },
194
+ "roleVec": {
195
+ "type": [
196
+ "object",
197
+ "null"
198
+ ],
199
+ "description": "The endorsement credential carrying the role this decision granted, delivered inline alongside `vmc` and on the same reasoning. Present only where the decision admitted the applicant and granted a role."
200
+ },
163
201
  "ext": {
164
202
  "$ref": "#/$defs/Ext"
165
203
  }