@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.
Files changed (63) hide show
  1. package/dist/vtc/_shared/0.1/endorsement.d.ts +1 -1
  2. package/dist/vtc/ceremonies/list/0.1/payload.d.ts +22 -0
  3. package/dist/vtc/ceremonies/list/0.1/payload.d.ts.map +1 -1
  4. package/dist/vtc/ceremonies/list/0.1/payload.js +8 -0
  5. package/dist/vtc/ceremonies/list/0.1/payload.js.map +1 -1
  6. package/dist/vtc/community/profile/show/0.1/payload.d.ts +235 -22
  7. package/dist/vtc/community/profile/show/0.1/payload.d.ts.map +1 -1
  8. package/dist/vtc/community/profile/show/0.1/payload.js +106 -8
  9. package/dist/vtc/community/profile/show/0.1/payload.js.map +1 -1
  10. package/dist/vtc/community/profile/update/0.1/payload.d.ts +265 -22
  11. package/dist/vtc/community/profile/update/0.1/payload.d.ts.map +1 -1
  12. package/dist/vtc/community/profile/update/0.1/payload.js +110 -8
  13. package/dist/vtc/community/profile/update/0.1/payload.js.map +1 -1
  14. package/dist/vtc/config/export/0.1/payload.d.ts +154 -0
  15. package/dist/vtc/config/export/0.1/payload.d.ts.map +1 -1
  16. package/dist/vtc/config/export/0.1/payload.js +72 -0
  17. package/dist/vtc/config/export/0.1/payload.js.map +1 -1
  18. package/dist/vtc/config/import/0.1/payload.d.ts +154 -0
  19. package/dist/vtc/config/import/0.1/payload.d.ts.map +1 -1
  20. package/dist/vtc/config/import/0.1/payload.js +72 -0
  21. package/dist/vtc/config/import/0.1/payload.js.map +1 -1
  22. package/dist/vtc/endorsements/issue/0.1/payload.d.ts +65 -65
  23. package/dist/vtc/endorsements/issue/0.1/payload.d.ts.map +1 -1
  24. package/dist/vtc/endorsements/issue/0.1/payload.js +36 -32
  25. package/dist/vtc/endorsements/issue/0.1/payload.js.map +1 -1
  26. package/dist/vtc/endorsements/list/0.1/payload.d.ts +41 -61
  27. package/dist/vtc/endorsements/list/0.1/payload.d.ts.map +1 -1
  28. package/dist/vtc/endorsements/list/0.1/payload.js +24 -30
  29. package/dist/vtc/endorsements/list/0.1/payload.js.map +1 -1
  30. package/dist/vtc/endorsements/show/0.1/payload.d.ts +41 -61
  31. package/dist/vtc/endorsements/show/0.1/payload.d.ts.map +1 -1
  32. package/dist/vtc/endorsements/show/0.1/payload.js +24 -30
  33. package/dist/vtc/endorsements/show/0.1/payload.js.map +1 -1
  34. package/dist/vtc/install/claim/start/0.1/payload.d.ts +18 -0
  35. package/dist/vtc/install/claim/start/0.1/payload.d.ts.map +1 -1
  36. package/dist/vtc/install/claim/start/0.1/payload.js +5 -0
  37. package/dist/vtc/install/claim/start/0.1/payload.js.map +1 -1
  38. package/dist/vtc/registry/diagnostics/0.1/payload.d.ts +491 -0
  39. package/dist/vtc/registry/diagnostics/0.1/payload.d.ts.map +1 -1
  40. package/dist/vtc/registry/diagnostics/0.1/payload.js +260 -0
  41. package/dist/vtc/registry/diagnostics/0.1/payload.js.map +1 -1
  42. package/dist/vtc/website/files/list/0.1/payload.d.ts +24 -0
  43. package/dist/vtc/website/files/list/0.1/payload.d.ts.map +1 -1
  44. package/dist/vtc/website/files/list/0.1/payload.js +10 -0
  45. package/dist/vtc/website/files/list/0.1/payload.js.map +1 -1
  46. package/dist/vtc/website/generations/list/0.1/payload.d.ts +48 -0
  47. package/dist/vtc/website/generations/list/0.1/payload.d.ts.map +1 -1
  48. package/dist/vtc/website/generations/list/0.1/payload.js +20 -0
  49. package/dist/vtc/website/generations/list/0.1/payload.js.map +1 -1
  50. package/package.json +1 -1
  51. package/src/vtc/_shared/0.1/endorsement.ts +1 -1
  52. package/src/vtc/ceremonies/list/0.1/payload.ts +14 -0
  53. package/src/vtc/community/profile/show/0.1/payload.ts +141 -10
  54. package/src/vtc/community/profile/update/0.1/payload.ts +167 -10
  55. package/src/vtc/config/export/0.1/payload.ts +94 -0
  56. package/src/vtc/config/import/0.1/payload.ts +94 -0
  57. package/src/vtc/endorsements/issue/0.1/payload.ts +45 -41
  58. package/src/vtc/endorsements/list/0.1/payload.ts +29 -39
  59. package/src/vtc/endorsements/show/0.1/payload.ts +29 -39
  60. package/src/vtc/install/claim/start/0.1/payload.ts +13 -0
  61. package/src/vtc/registry/diagnostics/0.1/payload.ts +343 -0
  62. package/src/vtc/website/files/list/0.1/payload.ts +14 -0
  63. package/src/vtc/website/generations/list/0.1/payload.ts +28 -0
@@ -37,7 +37,8 @@ export const PAYLOAD_SCHEMA = {
37
37
  ],
38
38
  "properties": {
39
39
  "profile": {
40
- "$ref": "#/$defs/CommunityProfile"
40
+ "$ref": "#/$defs/CommunityProfileView",
41
+ "description": "The community's profile as read, including the immutable `communityDid` an update cannot set."
41
42
  },
42
43
  "ext": {
43
44
  "$ref": "#/$defs/Ext"
@@ -54,16 +55,28 @@ export const PAYLOAD_SCHEMA = {
54
55
  "pattern": "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$"
55
56
  }
56
57
  },
57
- "CommunityProfile": {
58
- "$anchor": "communityProfile",
59
- "title": "CommunityProfile",
58
+ "CommunityProfileView": {
59
+ "$anchor": "communityProfileView",
60
+ "title": "CommunityProfileView",
60
61
  "type": "object",
61
62
  "additionalProperties": false,
63
+ "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.",
62
64
  "required": [
65
+ "communityDid",
63
66
  "name",
64
67
  "language"
65
68
  ],
66
69
  "properties": {
70
+ "communityDid": {
71
+ "type": "string",
72
+ "minLength": 1,
73
+ "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."
74
+ },
75
+ "createdAt": {
76
+ "type": "string",
77
+ "format": "date-time",
78
+ "description": "When the community was created. Immutable, like `communityDid`."
79
+ },
67
80
  "name": {
68
81
  "type": "string",
69
82
  "minLength": 1
@@ -112,6 +125,42 @@ export const PAYLOAD_SCHEMA = {
112
125
  "degraded"
113
126
  ],
114
127
  "description": "Trust-registry reachability. Populated on reads; not settable."
128
+ },
129
+ "personhood": {
130
+ "$ref": "#/$defs/PersonhoodGovernance",
131
+ "description": "What this community's governance asserts about the personhood of its members."
132
+ }
133
+ }
134
+ },
135
+ "PersonhoodGovernance": {
136
+ "$anchor": "personhoodGovernance",
137
+ "title": "PersonhoodGovernance",
138
+ "type": "object",
139
+ "additionalProperties": false,
140
+ "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.",
141
+ "properties": {
142
+ "realHuman": {
143
+ "type": "boolean",
144
+ "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."
145
+ },
146
+ "singleMembership": {
147
+ "type": "boolean",
148
+ "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."
149
+ },
150
+ "acceptedIdvps": {
151
+ "type": "array",
152
+ "items": {
153
+ "type": "string",
154
+ "minLength": 1
155
+ },
156
+ "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."
157
+ },
158
+ "governanceFrameworkUrl": {
159
+ "type": [
160
+ "string",
161
+ "null"
162
+ ],
163
+ "description": "Where the governance framework these assertions refer to can be read."
115
164
  }
116
165
  }
117
166
  }
@@ -132,7 +181,8 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
132
181
  ],
133
182
  "properties": {
134
183
  "profile": {
135
- "$ref": "#/$defs/CommunityProfile"
184
+ "$ref": "#/$defs/CommunityProfileView",
185
+ "description": "The community's profile as read, including the immutable `communityDid` an update cannot set."
136
186
  },
137
187
  "ext": {
138
188
  "$ref": "#/$defs/Ext"
@@ -149,16 +199,28 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
149
199
  "pattern": "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$"
150
200
  }
151
201
  },
152
- "CommunityProfile": {
153
- "$anchor": "communityProfile",
154
- "title": "CommunityProfile",
202
+ "CommunityProfileView": {
203
+ "$anchor": "communityProfileView",
204
+ "title": "CommunityProfileView",
155
205
  "type": "object",
156
206
  "additionalProperties": false,
207
+ "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.",
157
208
  "required": [
209
+ "communityDid",
158
210
  "name",
159
211
  "language"
160
212
  ],
161
213
  "properties": {
214
+ "communityDid": {
215
+ "type": "string",
216
+ "minLength": 1,
217
+ "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."
218
+ },
219
+ "createdAt": {
220
+ "type": "string",
221
+ "format": "date-time",
222
+ "description": "When the community was created. Immutable, like `communityDid`."
223
+ },
162
224
  "name": {
163
225
  "type": "string",
164
226
  "minLength": 1
@@ -207,6 +269,42 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
207
269
  "degraded"
208
270
  ],
209
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."
210
308
  }
211
309
  }
212
310
  }
@@ -1 +1 @@
1
- {"version":3,"file":"payload.js","sourceRoot":"","sources":["../../../../../../src/vtc/community/profile/show/0.1/payload.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"payload.js","sourceRoot":"","sources":["../../../../../../src/vtc/community/profile/show/0.1/payload.ts"],"names":[],"mappings":"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"}
@@ -13,12 +13,34 @@ export interface VTCCommunityProfileUpdatePayload {
13
13
  * Set the community's declared relationship-identifier default. See `CommunityProfile.relationshipIdentifierDefault` in the `vtc/_shared/0.1/community` schema. Omit to leave it unchanged.
14
14
  */
15
15
  relationshipIdentifierDefault?: "attributed" | "pairwise";
16
+ personhood?: PersonhoodGovernance;
16
17
  /**
17
18
  * Opaque community-defined extension bag (maintainer-capped).
18
19
  */
19
20
  extensions?: {};
20
21
  ext?: Ext;
21
22
  }
23
+ /**
24
+ * 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.
25
+ */
26
+ export interface PersonhoodGovernance {
27
+ /**
28
+ * 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.
29
+ */
30
+ realHuman?: boolean;
31
+ /**
32
+ * 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.
33
+ */
34
+ singleMembership?: boolean;
35
+ /**
36
+ * 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.
37
+ */
38
+ acceptedIdvps?: string[];
39
+ /**
40
+ * Where the governance framework these assertions refer to can be read.
41
+ */
42
+ governanceFrameworkUrl?: string | null;
43
+ }
22
44
  /**
23
45
  * 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.
24
46
  */
@@ -26,14 +48,25 @@ export interface Ext {
26
48
  [k: string]: unknown | undefined;
27
49
  }
28
50
  export interface VTCCommunityProfileUpdateResponsePayload {
29
- profile: CommunityProfile;
51
+ profile: CommunityProfileView;
30
52
  /**
31
53
  * 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.
32
54
  */
33
55
  fieldsChanged?: string[];
34
56
  ext?: Ext;
35
57
  }
36
- export interface CommunityProfile {
58
+ /**
59
+ * The community's profile as read, including the immutable `communityDid` an update cannot set.
60
+ */
61
+ export interface CommunityProfileView {
62
+ /**
63
+ * 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.
64
+ */
65
+ communityDid: string;
66
+ /**
67
+ * When the community was created. Immutable, like `communityDid`.
68
+ */
69
+ createdAt?: string;
37
70
  name: string;
38
71
  description?: string;
39
72
  logoUrl?: string | null;
@@ -52,6 +85,28 @@ export interface CommunityProfile {
52
85
  * Trust-registry reachability. Populated on reads; not settable.
53
86
  */
54
87
  registryStatus?: "active" | "degraded";
88
+ personhood?: PersonhoodGovernance1;
89
+ }
90
+ /**
91
+ * What this community's governance asserts about the personhood of its members.
92
+ */
93
+ export interface PersonhoodGovernance1 {
94
+ /**
95
+ * 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.
96
+ */
97
+ realHuman?: boolean;
98
+ /**
99
+ * 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.
100
+ */
101
+ singleMembership?: boolean;
102
+ /**
103
+ * 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.
104
+ */
105
+ acceptedIdvps?: string[];
106
+ /**
107
+ * Where the governance framework these assertions refer to can be read.
108
+ */
109
+ governanceFrameworkUrl?: string | null;
55
110
  }
56
111
  /** Trust Task type URI. */
57
112
  export declare const TYPE_URI: "https://trusttasks.org/spec/vtc/community/profile/update/0.1";
@@ -102,6 +157,10 @@ export declare const PAYLOAD_SCHEMA: {
102
157
  readonly enum: readonly ["attributed", "pairwise"];
103
158
  readonly 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.";
104
159
  };
160
+ readonly personhood: {
161
+ readonly $ref: "#/$defs/PersonhoodGovernance";
162
+ readonly 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.";
163
+ };
105
164
  readonly extensions: {
106
165
  readonly type: "object";
107
166
  readonly description: "Opaque community-defined extension bag (maintainer-capped).";
@@ -119,7 +178,8 @@ export declare const PAYLOAD_SCHEMA: {
119
178
  readonly required: readonly ["profile"];
120
179
  readonly properties: {
121
180
  readonly profile: {
122
- readonly $ref: "#/$defs/CommunityProfile";
181
+ readonly $ref: "#/$defs/CommunityProfileView";
182
+ readonly description: "The community's profile as read, including the immutable `communityDid` an update cannot set.";
123
183
  };
124
184
  readonly fieldsChanged: {
125
185
  readonly type: "array";
@@ -143,13 +203,24 @@ export declare const PAYLOAD_SCHEMA: {
143
203
  readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
144
204
  };
145
205
  };
146
- readonly CommunityProfile: {
147
- readonly $anchor: "communityProfile";
148
- readonly title: "CommunityProfile";
206
+ readonly CommunityProfileView: {
207
+ readonly $anchor: "communityProfileView";
208
+ readonly title: "CommunityProfileView";
149
209
  readonly type: "object";
150
210
  readonly additionalProperties: false;
151
- readonly required: readonly ["name", "language"];
211
+ readonly 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.";
212
+ readonly required: readonly ["communityDid", "name", "language"];
152
213
  readonly properties: {
214
+ readonly communityDid: {
215
+ readonly type: "string";
216
+ readonly minLength: 1;
217
+ readonly 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.";
218
+ };
219
+ readonly createdAt: {
220
+ readonly type: "string";
221
+ readonly format: "date-time";
222
+ readonly description: "When the community was created. Immutable, like `communityDid`.";
223
+ };
153
224
  readonly name: {
154
225
  readonly type: "string";
155
226
  readonly minLength: 1;
@@ -184,6 +255,39 @@ export declare const PAYLOAD_SCHEMA: {
184
255
  readonly enum: readonly ["active", "degraded"];
185
256
  readonly description: "Trust-registry reachability. Populated on reads; not settable.";
186
257
  };
258
+ readonly personhood: {
259
+ readonly $ref: "#/$defs/PersonhoodGovernance";
260
+ readonly description: "What this community's governance asserts about the personhood of its members.";
261
+ };
262
+ };
263
+ };
264
+ readonly PersonhoodGovernance: {
265
+ readonly $anchor: "personhoodGovernance";
266
+ readonly title: "PersonhoodGovernance";
267
+ readonly type: "object";
268
+ readonly additionalProperties: false;
269
+ readonly 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
+ readonly properties: {
271
+ readonly realHuman: {
272
+ readonly type: "boolean";
273
+ readonly 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
+ readonly singleMembership: {
276
+ readonly type: "boolean";
277
+ readonly 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
+ readonly acceptedIdvps: {
280
+ readonly type: "array";
281
+ readonly items: {
282
+ readonly type: "string";
283
+ readonly minLength: 1;
284
+ };
285
+ readonly 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
+ readonly governanceFrameworkUrl: {
288
+ readonly type: readonly ["string", "null"];
289
+ readonly description: "Where the governance framework these assertions refer to can be read.";
290
+ };
187
291
  };
188
292
  };
189
293
  };
@@ -201,7 +305,8 @@ export declare const RESPONSE_PAYLOAD_SCHEMA: {
201
305
  readonly required: readonly ["profile"];
202
306
  readonly properties: {
203
307
  readonly profile: {
204
- readonly $ref: "#/$defs/CommunityProfile";
308
+ readonly $ref: "#/$defs/CommunityProfileView";
309
+ readonly description: "The community's profile as read, including the immutable `communityDid` an update cannot set.";
205
310
  };
206
311
  readonly fieldsChanged: {
207
312
  readonly type: "array";
@@ -225,13 +330,24 @@ export declare const RESPONSE_PAYLOAD_SCHEMA: {
225
330
  readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
226
331
  };
227
332
  };
228
- readonly CommunityProfile: {
229
- readonly $anchor: "communityProfile";
230
- readonly title: "CommunityProfile";
333
+ readonly CommunityProfileView: {
334
+ readonly $anchor: "communityProfileView";
335
+ readonly title: "CommunityProfileView";
231
336
  readonly type: "object";
232
337
  readonly additionalProperties: false;
233
- readonly required: readonly ["name", "language"];
338
+ readonly 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.";
339
+ readonly required: readonly ["communityDid", "name", "language"];
234
340
  readonly properties: {
341
+ readonly communityDid: {
342
+ readonly type: "string";
343
+ readonly minLength: 1;
344
+ readonly 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.";
345
+ };
346
+ readonly createdAt: {
347
+ readonly type: "string";
348
+ readonly format: "date-time";
349
+ readonly description: "When the community was created. Immutable, like `communityDid`.";
350
+ };
235
351
  readonly name: {
236
352
  readonly type: "string";
237
353
  readonly minLength: 1;
@@ -266,6 +382,39 @@ export declare const RESPONSE_PAYLOAD_SCHEMA: {
266
382
  readonly enum: readonly ["active", "degraded"];
267
383
  readonly description: "Trust-registry reachability. Populated on reads; not settable.";
268
384
  };
385
+ readonly personhood: {
386
+ readonly $ref: "#/$defs/PersonhoodGovernance";
387
+ readonly description: "What this community's governance asserts about the personhood of its members.";
388
+ };
389
+ };
390
+ };
391
+ readonly PersonhoodGovernance: {
392
+ readonly $anchor: "personhoodGovernance";
393
+ readonly title: "PersonhoodGovernance";
394
+ readonly type: "object";
395
+ readonly additionalProperties: false;
396
+ readonly 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.";
397
+ readonly properties: {
398
+ readonly realHuman: {
399
+ readonly type: "boolean";
400
+ readonly 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.";
401
+ };
402
+ readonly singleMembership: {
403
+ readonly type: "boolean";
404
+ readonly 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.";
405
+ };
406
+ readonly acceptedIdvps: {
407
+ readonly type: "array";
408
+ readonly items: {
409
+ readonly type: "string";
410
+ readonly minLength: 1;
411
+ };
412
+ readonly 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.";
413
+ };
414
+ readonly governanceFrameworkUrl: {
415
+ readonly type: readonly ["string", "null"];
416
+ readonly description: "Where the governance framework these assertions refer to can be read.";
417
+ };
269
418
  };
270
419
  };
271
420
  };
@@ -313,6 +462,10 @@ export declare const SPEC: {
313
462
  readonly enum: readonly ["attributed", "pairwise"];
314
463
  readonly 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.";
315
464
  };
465
+ readonly personhood: {
466
+ readonly $ref: "#/$defs/PersonhoodGovernance";
467
+ readonly 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.";
468
+ };
316
469
  readonly extensions: {
317
470
  readonly type: "object";
318
471
  readonly description: "Opaque community-defined extension bag (maintainer-capped).";
@@ -330,7 +483,8 @@ export declare const SPEC: {
330
483
  readonly required: readonly ["profile"];
331
484
  readonly properties: {
332
485
  readonly profile: {
333
- readonly $ref: "#/$defs/CommunityProfile";
486
+ readonly $ref: "#/$defs/CommunityProfileView";
487
+ readonly description: "The community's profile as read, including the immutable `communityDid` an update cannot set.";
334
488
  };
335
489
  readonly fieldsChanged: {
336
490
  readonly type: "array";
@@ -354,13 +508,24 @@ export declare const SPEC: {
354
508
  readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
355
509
  };
356
510
  };
357
- readonly CommunityProfile: {
358
- readonly $anchor: "communityProfile";
359
- readonly title: "CommunityProfile";
511
+ readonly CommunityProfileView: {
512
+ readonly $anchor: "communityProfileView";
513
+ readonly title: "CommunityProfileView";
360
514
  readonly type: "object";
361
515
  readonly additionalProperties: false;
362
- readonly required: readonly ["name", "language"];
516
+ readonly 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.";
517
+ readonly required: readonly ["communityDid", "name", "language"];
363
518
  readonly properties: {
519
+ readonly communityDid: {
520
+ readonly type: "string";
521
+ readonly minLength: 1;
522
+ readonly 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.";
523
+ };
524
+ readonly createdAt: {
525
+ readonly type: "string";
526
+ readonly format: "date-time";
527
+ readonly description: "When the community was created. Immutable, like `communityDid`.";
528
+ };
364
529
  readonly name: {
365
530
  readonly type: "string";
366
531
  readonly minLength: 1;
@@ -395,6 +560,39 @@ export declare const SPEC: {
395
560
  readonly enum: readonly ["active", "degraded"];
396
561
  readonly description: "Trust-registry reachability. Populated on reads; not settable.";
397
562
  };
563
+ readonly personhood: {
564
+ readonly $ref: "#/$defs/PersonhoodGovernance";
565
+ readonly description: "What this community's governance asserts about the personhood of its members.";
566
+ };
567
+ };
568
+ };
569
+ readonly PersonhoodGovernance: {
570
+ readonly $anchor: "personhoodGovernance";
571
+ readonly title: "PersonhoodGovernance";
572
+ readonly type: "object";
573
+ readonly additionalProperties: false;
574
+ readonly 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.";
575
+ readonly properties: {
576
+ readonly realHuman: {
577
+ readonly type: "boolean";
578
+ readonly 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.";
579
+ };
580
+ readonly singleMembership: {
581
+ readonly type: "boolean";
582
+ readonly 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.";
583
+ };
584
+ readonly acceptedIdvps: {
585
+ readonly type: "array";
586
+ readonly items: {
587
+ readonly type: "string";
588
+ readonly minLength: 1;
589
+ };
590
+ readonly 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.";
591
+ };
592
+ readonly governanceFrameworkUrl: {
593
+ readonly type: readonly ["string", "null"];
594
+ readonly description: "Where the governance framework these assertions refer to can be read.";
595
+ };
398
596
  };
399
597
  };
400
598
  };
@@ -422,7 +620,8 @@ export declare const RESPONSE_SPEC: {
422
620
  readonly required: readonly ["profile"];
423
621
  readonly properties: {
424
622
  readonly profile: {
425
- readonly $ref: "#/$defs/CommunityProfile";
623
+ readonly $ref: "#/$defs/CommunityProfileView";
624
+ readonly description: "The community's profile as read, including the immutable `communityDid` an update cannot set.";
426
625
  };
427
626
  readonly fieldsChanged: {
428
627
  readonly type: "array";
@@ -446,13 +645,24 @@ export declare const RESPONSE_SPEC: {
446
645
  readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
447
646
  };
448
647
  };
449
- readonly CommunityProfile: {
450
- readonly $anchor: "communityProfile";
451
- readonly title: "CommunityProfile";
648
+ readonly CommunityProfileView: {
649
+ readonly $anchor: "communityProfileView";
650
+ readonly title: "CommunityProfileView";
452
651
  readonly type: "object";
453
652
  readonly additionalProperties: false;
454
- readonly required: readonly ["name", "language"];
653
+ readonly 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.";
654
+ readonly required: readonly ["communityDid", "name", "language"];
455
655
  readonly properties: {
656
+ readonly communityDid: {
657
+ readonly type: "string";
658
+ readonly minLength: 1;
659
+ readonly 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.";
660
+ };
661
+ readonly createdAt: {
662
+ readonly type: "string";
663
+ readonly format: "date-time";
664
+ readonly description: "When the community was created. Immutable, like `communityDid`.";
665
+ };
456
666
  readonly name: {
457
667
  readonly type: "string";
458
668
  readonly minLength: 1;
@@ -487,6 +697,39 @@ export declare const RESPONSE_SPEC: {
487
697
  readonly enum: readonly ["active", "degraded"];
488
698
  readonly description: "Trust-registry reachability. Populated on reads; not settable.";
489
699
  };
700
+ readonly personhood: {
701
+ readonly $ref: "#/$defs/PersonhoodGovernance";
702
+ readonly description: "What this community's governance asserts about the personhood of its members.";
703
+ };
704
+ };
705
+ };
706
+ readonly PersonhoodGovernance: {
707
+ readonly $anchor: "personhoodGovernance";
708
+ readonly title: "PersonhoodGovernance";
709
+ readonly type: "object";
710
+ readonly additionalProperties: false;
711
+ readonly 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.";
712
+ readonly properties: {
713
+ readonly realHuman: {
714
+ readonly type: "boolean";
715
+ readonly 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.";
716
+ };
717
+ readonly singleMembership: {
718
+ readonly type: "boolean";
719
+ readonly 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.";
720
+ };
721
+ readonly acceptedIdvps: {
722
+ readonly type: "array";
723
+ readonly items: {
724
+ readonly type: "string";
725
+ readonly minLength: 1;
726
+ };
727
+ readonly 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.";
728
+ };
729
+ readonly governanceFrameworkUrl: {
730
+ readonly type: readonly ["string", "null"];
731
+ readonly description: "Where the governance framework these assertions refer to can be read.";
732
+ };
490
733
  };
491
734
  };
492
735
  };