@openvtc/trust-tasks 0.22.1 → 0.22.3

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 (58) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/_shared/components.d.ts +3 -3
  3. package/dist/index.d.ts +1 -0
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +1 -0
  6. package/dist/index.js.map +1 -1
  7. package/dist/vetting/_shared/0.1/identity-vetting.d.ts +1 -1
  8. package/dist/vtc/_shared/0.1/endorsement.d.ts +1 -1
  9. package/dist/vtc/community/profile/show/0.1/payload.d.ts +4 -4
  10. package/dist/vtc/community/profile/show/0.1/payload.js +2 -2
  11. package/dist/vtc/community/profile/show/0.1/payload.js.map +1 -1
  12. package/dist/vtc/community/profile/update/0.1/payload.d.ts +4 -4
  13. package/dist/vtc/community/profile/update/0.1/payload.js +2 -2
  14. package/dist/vtc/community/profile/update/0.1/payload.js.map +1 -1
  15. package/dist/vtc/config/export/0.1/payload.d.ts +4 -4
  16. package/dist/vtc/config/export/0.1/payload.js +2 -2
  17. package/dist/vtc/config/export/0.1/payload.js.map +1 -1
  18. package/dist/vtc/config/import/0.1/payload.d.ts +4 -4
  19. package/dist/vtc/config/import/0.1/payload.js +2 -2
  20. package/dist/vtc/config/import/0.1/payload.js.map +1 -1
  21. package/dist/vtc/endorsement-types/list/0.1/payload.d.ts +4 -4
  22. package/dist/vtc/endorsement-types/list/0.1/payload.js +2 -2
  23. package/dist/vtc/endorsement-types/list/0.1/payload.js.map +1 -1
  24. package/dist/vtc/endorsement-types/register/0.1/payload.d.ts +7 -7
  25. package/dist/vtc/endorsement-types/register/0.1/payload.js +3 -3
  26. package/dist/vtc/endorsement-types/register/0.1/payload.js.map +1 -1
  27. package/dist/vtc/endorsements/issue/0.1/payload.d.ts +15 -15
  28. package/dist/vtc/endorsements/issue/0.1/payload.js +6 -6
  29. package/dist/vtc/endorsements/issue/0.1/payload.js.map +1 -1
  30. package/dist/vtc/endorsements/list/0.1/payload.d.ts +7 -7
  31. package/dist/vtc/endorsements/list/0.1/payload.js +3 -3
  32. package/dist/vtc/endorsements/list/0.1/payload.js.map +1 -1
  33. package/dist/vtc/endorsements/revoke/0.1/payload.d.ts +5 -5
  34. package/dist/vtc/endorsements/revoke/0.1/payload.js +2 -2
  35. package/dist/vtc/endorsements/revoke/0.1/payload.js.map +1 -1
  36. package/dist/vtc/endorsements/show/0.1/payload.d.ts +4 -4
  37. package/dist/vtc/endorsements/show/0.1/payload.js +2 -2
  38. package/dist/vtc/endorsements/show/0.1/payload.js.map +1 -1
  39. package/dist/vtc/members/step-up-passkey-notice/0.1/payload.d.ts +176 -0
  40. package/dist/vtc/members/step-up-passkey-notice/0.1/payload.d.ts.map +1 -0
  41. package/dist/vtc/members/step-up-passkey-notice/0.1/payload.js +95 -0
  42. package/dist/vtc/members/step-up-passkey-notice/0.1/payload.js.map +1 -0
  43. package/package.json +1 -1
  44. package/src/_shared/components.ts +3 -3
  45. package/src/index.ts +1 -0
  46. package/src/vetting/_shared/0.1/identity-vetting.ts +1 -1
  47. package/src/vtc/_shared/0.1/endorsement.ts +1 -1
  48. package/src/vtc/community/profile/show/0.1/payload.ts +2 -2
  49. package/src/vtc/community/profile/update/0.1/payload.ts +2 -2
  50. package/src/vtc/config/export/0.1/payload.ts +2 -2
  51. package/src/vtc/config/import/0.1/payload.ts +2 -2
  52. package/src/vtc/endorsement-types/list/0.1/payload.ts +2 -2
  53. package/src/vtc/endorsement-types/register/0.1/payload.ts +4 -4
  54. package/src/vtc/endorsements/issue/0.1/payload.ts +9 -9
  55. package/src/vtc/endorsements/list/0.1/payload.ts +4 -4
  56. package/src/vtc/endorsements/revoke/0.1/payload.ts +3 -3
  57. package/src/vtc/endorsements/show/0.1/payload.ts +2 -2
  58. package/src/vtc/members/step-up-passkey-notice/0.1/payload.ts +137 -0
@@ -0,0 +1,176 @@
1
+ /**
2
+ * Generated by scripts/build-ts-bindings.mjs — DO NOT EDIT BY HAND.
3
+ * Source: specs/vtc/members/step-up-passkey-notice/0.1/payload.schema.json
4
+ */
5
+ import type { Ext } from "../../../../_shared/components.js";
6
+ /**
7
+ * The VTC tells a member that a step-up passkey was enrolled for them or revoked from them, naming who acted and when. Unsolicited: the member did not ask, and may be offline.
8
+ */
9
+ export interface VTCMembersStepUpPasskeyNoticePayload {
10
+ /**
11
+ * `enrolled` — a step-up passkey (auth/passkey/enroll/invite or auth/passkey/enroll/finish, purpose stepUp) is now bound to the member. `revoked` — one was unbound (auth/passkey/revoke/finish).
12
+ */
13
+ event: "enrolled" | "revoked";
14
+ /**
15
+ * The member's own DID — the notice's recipient. Carried in the payload as well as the envelope so that a forwarded notice, detached from its transport, still names its subject.
16
+ */
17
+ did: string;
18
+ /**
19
+ * Durable identifier of the step-up credential, as auth/passkey/revoke/start and auth/passkey/admin-list carry it: opaque, non-secret metadata, never key material. Lets the member recognise or distinguish a credential without disclosing anything that would help an attacker.
20
+ */
21
+ credentialId: string;
22
+ /**
23
+ * Who acted: the member themselves (equal to `did`) when they enrolled or revoked it on their own session, or an administrator's DID when they invited the enrollment or revoked for the member. A `by` other than `did` is the signal this task exists to carry — act on someone else's behalf is exactly the account-takeover shape a silent change would hide.
24
+ */
25
+ by: string;
26
+ /**
27
+ * When the event took effect at the VTC — not when the notice was sent, which differs whenever the member was offline.
28
+ */
29
+ at: string;
30
+ /**
31
+ * The acting administrator's stated reason, verbatim, when one was given. Absent rather than empty when none was: a community that chose not to explain is itself information. Never populated for a member acting on their own credential — they already know why.
32
+ */
33
+ reason?: string;
34
+ ext?: Ext;
35
+ }
36
+ /** Shared definitions this specification references, re-exported under the names it used to declare them with. */
37
+ export type { Ext };
38
+ /** Trust Task type URI. */
39
+ export declare const TYPE_URI: "https://trusttasks.org/spec/vtc/members/step-up-passkey-notice/0.1";
40
+ /** Stable alias for this specification's request payload shape. */
41
+ export type Payload = VTCMembersStepUpPasskeyNoticePayload;
42
+ /**
43
+ * This specification's payload schema, as a value.
44
+ *
45
+ * SPEC.md §7.2 item 2 is performed against this. It is shipped as data
46
+ * rather than only as a `.json` file because TypeScript types are erased
47
+ * at runtime: without a schema a consumer has nothing to validate, and
48
+ * every REQUIRED payload member is optional in practice. Cross-file
49
+ * `$ref`s are already inlined, so it needs no resolver.
50
+ */
51
+ export declare const PAYLOAD_SCHEMA: {
52
+ readonly $schema: "https://json-schema.org/draft/2020-12/schema";
53
+ readonly $id: "https://trusttasks.org/spec/vtc/members/step-up-passkey-notice/0.1";
54
+ readonly title: "VTC Members — Step-up Passkey Notice — payload";
55
+ readonly description: "The VTC tells a member that a step-up passkey was enrolled for them or revoked from them, naming who acted and when. Unsolicited: the member did not ask, and may be offline.";
56
+ readonly type: "object";
57
+ readonly additionalProperties: false;
58
+ readonly required: readonly ["event", "did", "credentialId", "by", "at"];
59
+ readonly properties: {
60
+ readonly event: {
61
+ readonly type: "string";
62
+ readonly enum: readonly ["enrolled", "revoked"];
63
+ readonly description: "`enrolled` — a step-up passkey (auth/passkey/enroll/invite or auth/passkey/enroll/finish, purpose stepUp) is now bound to the member. `revoked` — one was unbound (auth/passkey/revoke/finish).";
64
+ };
65
+ readonly did: {
66
+ readonly type: "string";
67
+ readonly minLength: 1;
68
+ readonly description: "The member's own DID — the notice's recipient. Carried in the payload as well as the envelope so that a forwarded notice, detached from its transport, still names its subject.";
69
+ };
70
+ readonly credentialId: {
71
+ readonly type: "string";
72
+ readonly minLength: 1;
73
+ readonly description: "Durable identifier of the step-up credential, as auth/passkey/revoke/start and auth/passkey/admin-list carry it: opaque, non-secret metadata, never key material. Lets the member recognise or distinguish a credential without disclosing anything that would help an attacker.";
74
+ };
75
+ readonly by: {
76
+ readonly type: "string";
77
+ readonly minLength: 1;
78
+ readonly description: "Who acted: the member themselves (equal to `did`) when they enrolled or revoked it on their own session, or an administrator's DID when they invited the enrollment or revoked for the member. A `by` other than `did` is the signal this task exists to carry — act on someone else's behalf is exactly the account-takeover shape a silent change would hide.";
79
+ };
80
+ readonly at: {
81
+ readonly type: "string";
82
+ readonly format: "date-time";
83
+ readonly description: "When the event took effect at the VTC — not when the notice was sent, which differs whenever the member was offline.";
84
+ };
85
+ readonly reason: {
86
+ readonly type: "string";
87
+ readonly maxLength: 1024;
88
+ readonly description: "The acting administrator's stated reason, verbatim, when one was given. Absent rather than empty when none was: a community that chose not to explain is itself information. Never populated for a member acting on their own credential — they already know why.";
89
+ };
90
+ readonly ext: {
91
+ readonly $ref: "#/$defs/Ext";
92
+ };
93
+ };
94
+ readonly $defs: {
95
+ readonly Ext: {
96
+ readonly title: "Ext";
97
+ readonly description: "Vendor-namespaced extension object per SPEC.md §4.5.1. Each immediate key MUST be a reverse-DNS namespace; structure under each namespace is opaque to the framework.";
98
+ readonly type: "object";
99
+ readonly minProperties: 1;
100
+ readonly additionalProperties: true;
101
+ readonly propertyNames: {
102
+ readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
103
+ };
104
+ };
105
+ };
106
+ };
107
+ /**
108
+ * SPEC.md §7.2 policy for the request variant, from this specification's
109
+ * front matter. Pass to `consumeInbound` — items 5b, 7 and 8 are
110
+ * per-specification and cannot be derived from the document alone, and
111
+ * item 2 needs the schema this carries.
112
+ */
113
+ export declare const SPEC: {
114
+ readonly typeUri: "https://trusttasks.org/spec/vtc/members/step-up-passkey-notice/0.1";
115
+ readonly isBearer: false;
116
+ readonly isProofRequired: true;
117
+ readonly isRecipientRequired: true;
118
+ readonly isIssuedAtRequired: true;
119
+ readonly payloadSchema: {
120
+ readonly $schema: "https://json-schema.org/draft/2020-12/schema";
121
+ readonly $id: "https://trusttasks.org/spec/vtc/members/step-up-passkey-notice/0.1";
122
+ readonly title: "VTC Members — Step-up Passkey Notice — payload";
123
+ readonly description: "The VTC tells a member that a step-up passkey was enrolled for them or revoked from them, naming who acted and when. Unsolicited: the member did not ask, and may be offline.";
124
+ readonly type: "object";
125
+ readonly additionalProperties: false;
126
+ readonly required: readonly ["event", "did", "credentialId", "by", "at"];
127
+ readonly properties: {
128
+ readonly event: {
129
+ readonly type: "string";
130
+ readonly enum: readonly ["enrolled", "revoked"];
131
+ readonly description: "`enrolled` — a step-up passkey (auth/passkey/enroll/invite or auth/passkey/enroll/finish, purpose stepUp) is now bound to the member. `revoked` — one was unbound (auth/passkey/revoke/finish).";
132
+ };
133
+ readonly did: {
134
+ readonly type: "string";
135
+ readonly minLength: 1;
136
+ readonly description: "The member's own DID — the notice's recipient. Carried in the payload as well as the envelope so that a forwarded notice, detached from its transport, still names its subject.";
137
+ };
138
+ readonly credentialId: {
139
+ readonly type: "string";
140
+ readonly minLength: 1;
141
+ readonly description: "Durable identifier of the step-up credential, as auth/passkey/revoke/start and auth/passkey/admin-list carry it: opaque, non-secret metadata, never key material. Lets the member recognise or distinguish a credential without disclosing anything that would help an attacker.";
142
+ };
143
+ readonly by: {
144
+ readonly type: "string";
145
+ readonly minLength: 1;
146
+ readonly description: "Who acted: the member themselves (equal to `did`) when they enrolled or revoked it on their own session, or an administrator's DID when they invited the enrollment or revoked for the member. A `by` other than `did` is the signal this task exists to carry — act on someone else's behalf is exactly the account-takeover shape a silent change would hide.";
147
+ };
148
+ readonly at: {
149
+ readonly type: "string";
150
+ readonly format: "date-time";
151
+ readonly description: "When the event took effect at the VTC — not when the notice was sent, which differs whenever the member was offline.";
152
+ };
153
+ readonly reason: {
154
+ readonly type: "string";
155
+ readonly maxLength: 1024;
156
+ readonly description: "The acting administrator's stated reason, verbatim, when one was given. Absent rather than empty when none was: a community that chose not to explain is itself information. Never populated for a member acting on their own credential — they already know why.";
157
+ };
158
+ readonly ext: {
159
+ readonly $ref: "#/$defs/Ext";
160
+ };
161
+ };
162
+ readonly $defs: {
163
+ readonly Ext: {
164
+ readonly title: "Ext";
165
+ readonly description: "Vendor-namespaced extension object per SPEC.md §4.5.1. Each immediate key MUST be a reverse-DNS namespace; structure under each namespace is opaque to the framework.";
166
+ readonly type: "object";
167
+ readonly minProperties: 1;
168
+ readonly additionalProperties: true;
169
+ readonly propertyNames: {
170
+ readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
171
+ };
172
+ };
173
+ };
174
+ };
175
+ };
176
+ //# sourceMappingURL=payload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../../../../src/vtc/members/step-up-passkey-notice/0.1/payload.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAG7D;;GAEG;AACH,MAAM,WAAW,oCAAoC;IACnD;;OAEG;IACH,KAAK,EAAE,UAAU,GAAG,SAAS,CAAC;IAC9B;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,GAAG,CAAC;CACX;AAED,kHAAkH;AAClH,YAAY,EAAE,GAAG,EAAE,CAAC;AAEpB,2BAA2B;AAC3B,eAAO,MAAM,QAAQ,EAAG,oEAA6E,CAAC;AAEtG,mEAAmE;AACnE,MAAM,MAAM,OAAO,GAAG,oCAAoC,CAAC;AAE3D;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgEjB,CAAC;AAEX;;;;;GAKG;AACH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOP,CAAC"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Generated by scripts/build-ts-bindings.mjs — DO NOT EDIT BY HAND.
3
+ * Source: specs/vtc/members/step-up-passkey-notice/0.1/payload.schema.json
4
+ */
5
+ /** Trust Task type URI. */
6
+ export const TYPE_URI = "https://trusttasks.org/spec/vtc/members/step-up-passkey-notice/0.1";
7
+ /**
8
+ * This specification's payload schema, as a value.
9
+ *
10
+ * SPEC.md §7.2 item 2 is performed against this. It is shipped as data
11
+ * rather than only as a `.json` file because TypeScript types are erased
12
+ * at runtime: without a schema a consumer has nothing to validate, and
13
+ * every REQUIRED payload member is optional in practice. Cross-file
14
+ * `$ref`s are already inlined, so it needs no resolver.
15
+ */
16
+ export const PAYLOAD_SCHEMA = {
17
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
18
+ "$id": "https://trusttasks.org/spec/vtc/members/step-up-passkey-notice/0.1",
19
+ "title": "VTC Members — Step-up Passkey Notice — payload",
20
+ "description": "The VTC tells a member that a step-up passkey was enrolled for them or revoked from them, naming who acted and when. Unsolicited: the member did not ask, and may be offline.",
21
+ "type": "object",
22
+ "additionalProperties": false,
23
+ "required": [
24
+ "event",
25
+ "did",
26
+ "credentialId",
27
+ "by",
28
+ "at"
29
+ ],
30
+ "properties": {
31
+ "event": {
32
+ "type": "string",
33
+ "enum": [
34
+ "enrolled",
35
+ "revoked"
36
+ ],
37
+ "description": "`enrolled` — a step-up passkey (auth/passkey/enroll/invite or auth/passkey/enroll/finish, purpose stepUp) is now bound to the member. `revoked` — one was unbound (auth/passkey/revoke/finish)."
38
+ },
39
+ "did": {
40
+ "type": "string",
41
+ "minLength": 1,
42
+ "description": "The member's own DID — the notice's recipient. Carried in the payload as well as the envelope so that a forwarded notice, detached from its transport, still names its subject."
43
+ },
44
+ "credentialId": {
45
+ "type": "string",
46
+ "minLength": 1,
47
+ "description": "Durable identifier of the step-up credential, as auth/passkey/revoke/start and auth/passkey/admin-list carry it: opaque, non-secret metadata, never key material. Lets the member recognise or distinguish a credential without disclosing anything that would help an attacker."
48
+ },
49
+ "by": {
50
+ "type": "string",
51
+ "minLength": 1,
52
+ "description": "Who acted: the member themselves (equal to `did`) when they enrolled or revoked it on their own session, or an administrator's DID when they invited the enrollment or revoked for the member. A `by` other than `did` is the signal this task exists to carry — act on someone else's behalf is exactly the account-takeover shape a silent change would hide."
53
+ },
54
+ "at": {
55
+ "type": "string",
56
+ "format": "date-time",
57
+ "description": "When the event took effect at the VTC — not when the notice was sent, which differs whenever the member was offline."
58
+ },
59
+ "reason": {
60
+ "type": "string",
61
+ "maxLength": 1024,
62
+ "description": "The acting administrator's stated reason, verbatim, when one was given. Absent rather than empty when none was: a community that chose not to explain is itself information. Never populated for a member acting on their own credential — they already know why."
63
+ },
64
+ "ext": {
65
+ "$ref": "#/$defs/Ext"
66
+ }
67
+ },
68
+ "$defs": {
69
+ "Ext": {
70
+ "title": "Ext",
71
+ "description": "Vendor-namespaced extension object per SPEC.md §4.5.1. Each immediate key MUST be a reverse-DNS namespace; structure under each namespace is opaque to the framework.",
72
+ "type": "object",
73
+ "minProperties": 1,
74
+ "additionalProperties": true,
75
+ "propertyNames": {
76
+ "pattern": "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$"
77
+ }
78
+ }
79
+ }
80
+ };
81
+ /**
82
+ * SPEC.md §7.2 policy for the request variant, from this specification's
83
+ * front matter. Pass to `consumeInbound` — items 5b, 7 and 8 are
84
+ * per-specification and cannot be derived from the document alone, and
85
+ * item 2 needs the schema this carries.
86
+ */
87
+ export const SPEC = {
88
+ typeUri: TYPE_URI,
89
+ isBearer: false,
90
+ isProofRequired: true,
91
+ isRecipientRequired: true,
92
+ isIssuedAtRequired: true,
93
+ payloadSchema: PAYLOAD_SCHEMA,
94
+ };
95
+ //# sourceMappingURL=payload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload.js","sourceRoot":"","sources":["../../../../../src/vtc/members/step-up-passkey-notice/0.1/payload.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAuCH,2BAA2B;AAC3B,MAAM,CAAC,MAAM,QAAQ,GAAG,oEAA6E,CAAC;AAKtG;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,SAAS,EAAE,8CAA8C;IACzD,KAAK,EAAE,oEAAoE;IAC3E,OAAO,EAAE,gDAAgD;IACzD,aAAa,EAAE,+KAA+K;IAC9L,MAAM,EAAE,QAAQ;IAChB,sBAAsB,EAAE,KAAK;IAC7B,UAAU,EAAE;QACV,OAAO;QACP,KAAK;QACL,cAAc;QACd,IAAI;QACJ,IAAI;KACL;IACD,YAAY,EAAE;QACZ,OAAO,EAAE;YACP,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE;gBACN,UAAU;gBACV,SAAS;aACV;YACD,aAAa,EAAE,iMAAiM;SACjN;QACD,KAAK,EAAE;YACL,MAAM,EAAE,QAAQ;YAChB,WAAW,EAAE,CAAC;YACd,aAAa,EAAE,iLAAiL;SACjM;QACD,cAAc,EAAE;YACd,MAAM,EAAE,QAAQ;YAChB,WAAW,EAAE,CAAC;YACd,aAAa,EAAE,kRAAkR;SAClS;QACD,IAAI,EAAE;YACJ,MAAM,EAAE,QAAQ;YAChB,WAAW,EAAE,CAAC;YACd,aAAa,EAAE,iWAAiW;SACjX;QACD,IAAI,EAAE;YACJ,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,WAAW;YACrB,aAAa,EAAE,sHAAsH;SACtI;QACD,QAAQ,EAAE;YACR,MAAM,EAAE,QAAQ;YAChB,WAAW,EAAE,IAAI;YACjB,aAAa,EAAE,mQAAmQ;SACnR;QACD,KAAK,EAAE;YACL,MAAM,EAAE,aAAa;SACtB;KACF;IACD,OAAO,EAAE;QACP,KAAK,EAAE;YACL,OAAO,EAAE,KAAK;YACd,aAAa,EAAE,uKAAuK;YACtL,MAAM,EAAE,QAAQ;YAChB,eAAe,EAAE,CAAC;YAClB,sBAAsB,EAAE,IAAI;YAC5B,eAAe,EAAE;gBACf,SAAS,EAAE,mCAAmC;aAC/C;SACF;KACF;CACO,CAAC;AAEX;;;;;GAKG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,OAAO,EAAE,QAAQ;IACjB,QAAQ,EAAE,KAAK;IACf,eAAe,EAAE,IAAI;IACrB,mBAAmB,EAAE,IAAI;IACzB,kBAAkB,EAAE,IAAI;IACxB,aAAa,EAAE,cAAc;CACrB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openvtc/trust-tasks",
3
- "version": "0.22.1",
3
+ "version": "0.22.3",
4
4
  "description": "Generated TypeScript bindings for the Trust Tasks framework registry.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -2834,7 +2834,7 @@ export interface Endorsement {
2834
2834
  */
2835
2835
  endorsementId: string;
2836
2836
  /**
2837
- * What the row records. A registered predicate IRI: a statement (StatementCredential) whose `credentialSubject.predicate` it is — see vtc/endorsement-types/*. `role:vetter`: a vetter role credential (Verifiable Authority Credential) issued by vtc/vetting/vetters/grant. `IdentityVerificationCredential`: the community's identity-verification credential, a plain W3C VC (not a DTGCredential). The two reserved values are not IRIs, so they never collide with a registered predicate.
2837
+ * What the row records. A registered predicate IRI: a statement (StatementCredential) whose `credentialSubject.predicate` it is — see vtc/endorsement-types/*. `role:vetter`: a vetter role credential (Verifiable Authority Credential) issued by vtc/vetting/vetters/grant. The reserved value is not an IRI, so it never collides with a registered predicate. A community's own identity check is a statement like any other, under `https://registry.trustoverip.org/dtg/vsc/vetted/1`.
2838
2838
  */
2839
2839
  typeUri: string;
2840
2840
  /**
@@ -2860,7 +2860,7 @@ export interface Endorsement {
2860
2860
  }
2861
2861
  export interface EndorsementType {
2862
2862
  /**
2863
- * The predicate IRI the community accepts, compared as an exact string. Always an absolute IRI: a DTG VSC predicate registry IRI (e.g. `https://registry.trustoverip.org/dtg/vsc/vetted/1`) or a community-namespace IRI defined in the registry's predicate definition format. The four core predicates — endorses/1, witnessed/1, vetted/1 and presented/1 under `https://registry.trustoverip.org/dtg/vsc/` — are seeded when the community starts. The reserved values `IdentityVerificationCredential` and `role:vetter`, which name the other kinds of record vtc/endorsements/* keeps, are never registered.
2863
+ * The predicate IRI the community accepts, compared as an exact string. Always an absolute IRI: a DTG VSC predicate registry IRI (e.g. `https://registry.trustoverip.org/dtg/vsc/vetted/1`) or a community-namespace IRI defined in the registry's predicate definition format. The four core predicates — endorses/1, witnessed/1, vetted/1 and presented/1 under `https://registry.trustoverip.org/dtg/vsc/` — are seeded when the community starts. The reserved value `role:vetter`, which names the vetter-role record vtc/endorsements/* keeps beside statements, is never registered.
2864
2864
  */
2865
2865
  typeUri: string;
2866
2866
  description?: string;
@@ -3834,7 +3834,7 @@ export interface PersonhoodGovernance {
3834
3834
  */
3835
3835
  singleMembership?: boolean;
3836
3836
  /**
3837
- * 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 — and issues the evidence as an `IdentityVerificationCredential` (a plain W3C VC, not a DTGCredential) through vtc/endorsements/issue. An empty list means no list has been published, not that everything is accepted.
3837
+ * DIDs of the identity-verification providers whose credentials this community accepts as personhood evidence: any W3C VC from a listed provider that meets the community's identity-proofing requirements. A community that checks its members' identity in person does not act as a provider to do so: it records each check as a `vetted/1` statement (`https://registry.trustoverip.org/dtg/vsc/vetted/1`) issued under its own DID through vtc/endorsements/issue, which its personhood policy may accept beside these credentials. Either is evidence only — personhood is the community's decision, recorded on the member's VMC. An empty list means no list has been published, not that everything is accepted.
3838
3838
  */
3839
3839
  acceptedIdvps?: string[];
3840
3840
  /**
package/src/index.ts CHANGED
@@ -670,6 +670,7 @@ export * as VtcMembersSelfRemoveReceipt_v0_1 from "./vtc/members/self-remove-rec
670
670
  export * as VtcMembersSelfRemove_v0_1 from "./vtc/members/self-remove/0.1/payload.js";
671
671
  export * as VtcMembersShow_v0_1 from "./vtc/members/show/0.1/payload.js";
672
672
  export * as VtcMembersSolicitVmc_v0_1 from "./vtc/members/solicit-vmc/0.1/payload.js";
673
+ export * as VtcMembersStepUpPasskeyNotice_v0_1 from "./vtc/members/step-up-passkey-notice/0.1/payload.js";
673
674
  export * as VtcMembersUpdate_v0_1 from "./vtc/members/update/0.1/payload.js";
674
675
  export * as VtcMembersVmc_v0_1 from "./vtc/members/vmc/0.1/payload.js";
675
676
  export * as VtcPoliciesTest_v0_1 from "./vtc/policies/test/0.1/payload.js";
@@ -4,7 +4,7 @@
4
4
  */
5
5
 
6
6
  /**
7
- * The `credentialSubject.object.value` of a Vetting Statement: a DTG Verifiable Statement Credential (`StatementCredential`) under the predicate `https://registry.trustoverip.org/dtg/vsc/vetted/1`, issued by a vetter's member DID about an applicant's DID, attesting that the vetter checked the applicant's claimed identity in a vetting session. The member set, the required set and the enumerated values are exactly those of the predicate's object schema in the DTG VSC predicate registry (`https://registry.trustoverip.org/dtg/vsc/vetted/1/vetting.schema.json`); where this definition is narrower — claim and document types use the vetting vocabularies — every value it accepts is also valid under the registry schema. There is no `type` member: the statement's `predicate` carries its meaning. A community names that predicate in its manifest as `vetting.statementType`. The credential envelope — `issuer`, `issuerScope`, validity, `taskContext`, `taskDigestMultibase`, proof — belongs to DTG credentials; only the object value is defined here. It records what the vetter did and relied on, never what they saw: no document number, no image, no claimed name. Not itself a Trust Task specification (the `_shared` folder is skipped by the registry build and the codegen).
7
+ * The `credentialSubject.object.value` of a Vetting Statement: a DTG Verifiable Statement Credential (`StatementCredential`) under the predicate `https://registry.trustoverip.org/dtg/vsc/vetted/1`, issued by a vetter's member DID about an applicant's DID, attesting that the vetter checked the applicant's claimed identity in a vetting session. The member set and the enumerated values are exactly those of the predicate's object schema in the DTG VSC predicate registry (`https://registry.trustoverip.org/dtg/vsc/vetted/1/vetting.schema.json`); where this definition is narrower — it requires the three vetter-only members `identityCommitment`, `cardDigestMultibase` and `declaredRelationship`, which a vetter's statement always carries and the registry makes all-or-nothing because a statement the community issues for itself carries none of them, and claim and document types use the vetting vocabularies — every value it accepts is also valid under the registry schema. There is no `type` member: the statement's `predicate` carries its meaning. A community names that predicate in its manifest as `vetting.statementType`. The credential envelope — `issuer`, `issuerScope`, validity, `taskContext`, `taskDigestMultibase`, proof — belongs to DTG credentials; only the object value is defined here. It records what the vetter did and relied on, never what they saw: no document number, no image, no claimed name. Not itself a Trust Task specification (the `_shared` folder is skipped by the registry build and the codegen).
8
8
  */
9
9
  export interface IdentityVettingStatementValueSharedDefinition {
10
10
  [k: string]: unknown | undefined;
@@ -4,7 +4,7 @@
4
4
  */
5
5
 
6
6
  /**
7
- * Shared type for the vtc/endorsements/* family: one community-issued, community-revocable credential row. Usually a statement — `typeUri` says which kind of row it is. The statement credential is a DTG Verifiable Statement Credential (`type` [VerifiableCredential, DTGCredential, StatementCredential], `issuerScope` public) — a Verifiable Endorsement Credential (VEC) when its predicate is `https://registry.trustoverip.org/dtg/vsc/endorses/1`. Embeds the registry-wide credentials/_shared CredentialReference and adds the VTC-specific parts — the registered predicate and the shared status-list slot that makes the statement third-party revocation-checkable. The family and member names (`endorsementId`, `typeUri`, `claim`) are kept from when these were `EndorsementCredential`s.
7
+ * Shared type for the vtc/endorsements/* family: one community-issued, community-revocable credential row: a statement, or a vetter role grant — `typeUri` says which. The statement credential is a DTG Verifiable Statement Credential (`type` [VerifiableCredential, DTGCredential, StatementCredential], `issuerScope` public) — a Verifiable Endorsement Credential (VEC) when its predicate is `https://registry.trustoverip.org/dtg/vsc/endorses/1`. Embeds the registry-wide credentials/_shared CredentialReference and adds the VTC-specific parts — the registered predicate and the shared status-list slot that makes the statement third-party revocation-checkable. The family and member names (`endorsementId`, `typeUri`, `claim`) are kept from when these were `EndorsementCredential`s.
8
8
  */
9
9
  export interface VTCSharedEndorsementDefinitions {
10
10
  [k: string]: unknown | undefined;
@@ -181,7 +181,7 @@ export const PAYLOAD_SCHEMA = {
181
181
  "type": "string",
182
182
  "minLength": 1
183
183
  },
184
- "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 — and issues the evidence as an `IdentityVerificationCredential` (a plain W3C VC, not a DTGCredential) through vtc/endorsements/issue. An empty list means no list has been published, not that everything is accepted."
184
+ "description": "DIDs of the identity-verification providers whose credentials this community accepts as personhood evidence: any W3C VC from a listed provider that meets the community's identity-proofing requirements. A community that checks its members' identity in person does not act as a provider to do so: it records each check as a `vetted/1` statement (`https://registry.trustoverip.org/dtg/vsc/vetted/1`) issued under its own DID through vtc/endorsements/issue, which its personhood policy may accept beside these credentials. Either is evidence only — personhood is the community's decision, recorded on the member's VMC. An empty list means no list has been published, not that everything is accepted."
185
185
  },
186
186
  "governanceFrameworkUrl": {
187
187
  "type": [
@@ -328,7 +328,7 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
328
328
  "type": "string",
329
329
  "minLength": 1
330
330
  },
331
- "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 — and issues the evidence as an `IdentityVerificationCredential` (a plain W3C VC, not a DTGCredential) through vtc/endorsements/issue. An empty list means no list has been published, not that everything is accepted."
331
+ "description": "DIDs of the identity-verification providers whose credentials this community accepts as personhood evidence: any W3C VC from a listed provider that meets the community's identity-proofing requirements. A community that checks its members' identity in person does not act as a provider to do so: it records each check as a `vetted/1` statement (`https://registry.trustoverip.org/dtg/vsc/vetted/1`) issued under its own DID through vtc/endorsements/issue, which its personhood policy may accept beside these credentials. Either is evidence only — personhood is the community's decision, recorded on the member's VMC. An empty list means no list has been published, not that everything is accepted."
332
332
  },
333
333
  "governanceFrameworkUrl": {
334
334
  "type": [
@@ -257,7 +257,7 @@ export const PAYLOAD_SCHEMA = {
257
257
  "type": "string",
258
258
  "minLength": 1
259
259
  },
260
- "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 — and issues the evidence as an `IdentityVerificationCredential` (a plain W3C VC, not a DTGCredential) through vtc/endorsements/issue. An empty list means no list has been published, not that everything is accepted."
260
+ "description": "DIDs of the identity-verification providers whose credentials this community accepts as personhood evidence: any W3C VC from a listed provider that meets the community's identity-proofing requirements. A community that checks its members' identity in person does not act as a provider to do so: it records each check as a `vetted/1` statement (`https://registry.trustoverip.org/dtg/vsc/vetted/1`) issued under its own DID through vtc/endorsements/issue, which its personhood policy may accept beside these credentials. Either is evidence only — personhood is the community's decision, recorded on the member's VMC. An empty list means no list has been published, not that everything is accepted."
261
261
  },
262
262
  "governanceFrameworkUrl": {
263
263
  "type": [
@@ -411,7 +411,7 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
411
411
  "type": "string",
412
412
  "minLength": 1
413
413
  },
414
- "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 — and issues the evidence as an `IdentityVerificationCredential` (a plain W3C VC, not a DTGCredential) through vtc/endorsements/issue. An empty list means no list has been published, not that everything is accepted."
414
+ "description": "DIDs of the identity-verification providers whose credentials this community accepts as personhood evidence: any W3C VC from a listed provider that meets the community's identity-proofing requirements. A community that checks its members' identity in person does not act as a provider to do so: it records each check as a `vetted/1` statement (`https://registry.trustoverip.org/dtg/vsc/vetted/1`) issued under its own DID through vtc/endorsements/issue, which its personhood policy may accept beside these credentials. Either is evidence only — personhood is the community's decision, recorded on the member's VMC. An empty list means no list has been published, not that everything is accepted."
415
415
  },
416
416
  "governanceFrameworkUrl": {
417
417
  "type": [
@@ -214,7 +214,7 @@ export const PAYLOAD_SCHEMA = {
214
214
  "type": "string",
215
215
  "minLength": 1
216
216
  },
217
- "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 — and issues the evidence as an `IdentityVerificationCredential` (a plain W3C VC, not a DTGCredential) through vtc/endorsements/issue. An empty list means no list has been published, not that everything is accepted."
217
+ "description": "DIDs of the identity-verification providers whose credentials this community accepts as personhood evidence: any W3C VC from a listed provider that meets the community's identity-proofing requirements. A community that checks its members' identity in person does not act as a provider to do so: it records each check as a `vetted/1` statement (`https://registry.trustoverip.org/dtg/vsc/vetted/1`) issued under its own DID through vtc/endorsements/issue, which its personhood policy may accept beside these credentials. Either is evidence only — personhood is the community's decision, recorded on the member's VMC. An empty list means no list has been published, not that everything is accepted."
218
218
  },
219
219
  "governanceFrameworkUrl": {
220
220
  "type": [
@@ -390,7 +390,7 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
390
390
  "type": "string",
391
391
  "minLength": 1
392
392
  },
393
- "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 — and issues the evidence as an `IdentityVerificationCredential` (a plain W3C VC, not a DTGCredential) through vtc/endorsements/issue. An empty list means no list has been published, not that everything is accepted."
393
+ "description": "DIDs of the identity-verification providers whose credentials this community accepts as personhood evidence: any W3C VC from a listed provider that meets the community's identity-proofing requirements. A community that checks its members' identity in person does not act as a provider to do so: it records each check as a `vetted/1` statement (`https://registry.trustoverip.org/dtg/vsc/vetted/1`) issued under its own DID through vtc/endorsements/issue, which its personhood policy may accept beside these credentials. Either is evidence only — personhood is the community's decision, recorded on the member's VMC. An empty list means no list has been published, not that everything is accepted."
394
394
  },
395
395
  "governanceFrameworkUrl": {
396
396
  "type": [
@@ -333,7 +333,7 @@ export const PAYLOAD_SCHEMA = {
333
333
  "type": "string",
334
334
  "minLength": 1
335
335
  },
336
- "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 — and issues the evidence as an `IdentityVerificationCredential` (a plain W3C VC, not a DTGCredential) through vtc/endorsements/issue. An empty list means no list has been published, not that everything is accepted."
336
+ "description": "DIDs of the identity-verification providers whose credentials this community accepts as personhood evidence: any W3C VC from a listed provider that meets the community's identity-proofing requirements. A community that checks its members' identity in person does not act as a provider to do so: it records each check as a `vetted/1` statement (`https://registry.trustoverip.org/dtg/vsc/vetted/1`) issued under its own DID through vtc/endorsements/issue, which its personhood policy may accept beside these credentials. Either is evidence only — personhood is the community's decision, recorded on the member's VMC. An empty list means no list has been published, not that everything is accepted."
337
337
  },
338
338
  "governanceFrameworkUrl": {
339
339
  "type": [
@@ -592,7 +592,7 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
592
592
  "type": "string",
593
593
  "minLength": 1
594
594
  },
595
- "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 — and issues the evidence as an `IdentityVerificationCredential` (a plain W3C VC, not a DTGCredential) through vtc/endorsements/issue. An empty list means no list has been published, not that everything is accepted."
595
+ "description": "DIDs of the identity-verification providers whose credentials this community accepts as personhood evidence: any W3C VC from a listed provider that meets the community's identity-proofing requirements. A community that checks its members' identity in person does not act as a provider to do so: it records each check as a `vetted/1` statement (`https://registry.trustoverip.org/dtg/vsc/vetted/1`) issued under its own DID through vtc/endorsements/issue, which its personhood policy may accept beside these credentials. Either is evidence only — personhood is the community's decision, recorded on the member's VMC. An empty list means no list has been published, not that everything is accepted."
596
596
  },
597
597
  "governanceFrameworkUrl": {
598
598
  "type": [
@@ -110,7 +110,7 @@ export const PAYLOAD_SCHEMA = {
110
110
  "type": "string",
111
111
  "minLength": 1,
112
112
  "maxLength": 512,
113
- "description": "The predicate IRI the community accepts, compared as an exact string. Always an absolute IRI: a DTG VSC predicate registry IRI (e.g. `https://registry.trustoverip.org/dtg/vsc/vetted/1`) or a community-namespace IRI defined in the registry's predicate definition format. The four core predicates — endorses/1, witnessed/1, vetted/1 and presented/1 under `https://registry.trustoverip.org/dtg/vsc/` — are seeded when the community starts. The reserved values `IdentityVerificationCredential` and `role:vetter`, which name the other kinds of record vtc/endorsements/* keeps, are never registered."
113
+ "description": "The predicate IRI the community accepts, compared as an exact string. Always an absolute IRI: a DTG VSC predicate registry IRI (e.g. `https://registry.trustoverip.org/dtg/vsc/vetted/1`) or a community-namespace IRI defined in the registry's predicate definition format. The four core predicates — endorses/1, witnessed/1, vetted/1 and presented/1 under `https://registry.trustoverip.org/dtg/vsc/` — are seeded when the community starts. The reserved value `role:vetter`, which names the vetter-role record vtc/endorsements/* keeps beside statements, is never registered."
114
114
  },
115
115
  "description": {
116
116
  "type": "string",
@@ -187,7 +187,7 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
187
187
  "type": "string",
188
188
  "minLength": 1,
189
189
  "maxLength": 512,
190
- "description": "The predicate IRI the community accepts, compared as an exact string. Always an absolute IRI: a DTG VSC predicate registry IRI (e.g. `https://registry.trustoverip.org/dtg/vsc/vetted/1`) or a community-namespace IRI defined in the registry's predicate definition format. The four core predicates — endorses/1, witnessed/1, vetted/1 and presented/1 under `https://registry.trustoverip.org/dtg/vsc/` — are seeded when the community starts. The reserved values `IdentityVerificationCredential` and `role:vetter`, which name the other kinds of record vtc/endorsements/* keeps, are never registered."
190
+ "description": "The predicate IRI the community accepts, compared as an exact string. Always an absolute IRI: a DTG VSC predicate registry IRI (e.g. `https://registry.trustoverip.org/dtg/vsc/vetted/1`) or a community-namespace IRI defined in the registry's predicate definition format. The four core predicates — endorses/1, witnessed/1, vetted/1 and presented/1 under `https://registry.trustoverip.org/dtg/vsc/` — are seeded when the community starts. The reserved value `role:vetter`, which names the vetter-role record vtc/endorsements/* keeps beside statements, is never registered."
191
191
  },
192
192
  "description": {
193
193
  "type": "string",
@@ -8,7 +8,7 @@ import type { EndorsementType, Ext } from "../../../../_shared/components.js";
8
8
 
9
9
  export interface VTCEndorsementTypesRegisterPayload {
10
10
  /**
11
- * The predicate IRI to accept, an absolute IRI: a DTG VSC predicate registry IRI or a community-namespace IRI. The reserved values `IdentityVerificationCredential` and `role:vetter` are refused with `reserved`, and a value that is not an absolute IRI with `invalidUri`.
11
+ * The predicate IRI to accept, an absolute IRI: a DTG VSC predicate registry IRI or a community-namespace IRI. The reserved value `role:vetter` is refused with `reserved`, and a value that is not an absolute IRI with `invalidUri`.
12
12
  */
13
13
  typeUri: string;
14
14
  description?: string;
@@ -61,7 +61,7 @@ export const PAYLOAD_SCHEMA = {
61
61
  "type": "string",
62
62
  "minLength": 1,
63
63
  "maxLength": 512,
64
- "description": "The predicate IRI to accept, an absolute IRI: a DTG VSC predicate registry IRI or a community-namespace IRI. The reserved values `IdentityVerificationCredential` and `role:vetter` are refused with `reserved`, and a value that is not an absolute IRI with `invalidUri`."
64
+ "description": "The predicate IRI to accept, an absolute IRI: a DTG VSC predicate registry IRI or a community-namespace IRI. The reserved value `role:vetter` is refused with `reserved`, and a value that is not an absolute IRI with `invalidUri`."
65
65
  },
66
66
  "description": {
67
67
  "type": "string",
@@ -116,7 +116,7 @@ export const PAYLOAD_SCHEMA = {
116
116
  "type": "string",
117
117
  "minLength": 1,
118
118
  "maxLength": 512,
119
- "description": "The predicate IRI the community accepts, compared as an exact string. Always an absolute IRI: a DTG VSC predicate registry IRI (e.g. `https://registry.trustoverip.org/dtg/vsc/vetted/1`) or a community-namespace IRI defined in the registry's predicate definition format. The four core predicates — endorses/1, witnessed/1, vetted/1 and presented/1 under `https://registry.trustoverip.org/dtg/vsc/` — are seeded when the community starts. The reserved values `IdentityVerificationCredential` and `role:vetter`, which name the other kinds of record vtc/endorsements/* keeps, are never registered."
119
+ "description": "The predicate IRI the community accepts, compared as an exact string. Always an absolute IRI: a DTG VSC predicate registry IRI (e.g. `https://registry.trustoverip.org/dtg/vsc/vetted/1`) or a community-namespace IRI defined in the registry's predicate definition format. The four core predicates — endorses/1, witnessed/1, vetted/1 and presented/1 under `https://registry.trustoverip.org/dtg/vsc/` — are seeded when the community starts. The reserved value `role:vetter`, which names the vetter-role record vtc/endorsements/* keeps beside statements, is never registered."
120
120
  },
121
121
  "description": {
122
122
  "type": "string",
@@ -184,7 +184,7 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
184
184
  "type": "string",
185
185
  "minLength": 1,
186
186
  "maxLength": 512,
187
- "description": "The predicate IRI the community accepts, compared as an exact string. Always an absolute IRI: a DTG VSC predicate registry IRI (e.g. `https://registry.trustoverip.org/dtg/vsc/vetted/1`) or a community-namespace IRI defined in the registry's predicate definition format. The four core predicates — endorses/1, witnessed/1, vetted/1 and presented/1 under `https://registry.trustoverip.org/dtg/vsc/` — are seeded when the community starts. The reserved values `IdentityVerificationCredential` and `role:vetter`, which name the other kinds of record vtc/endorsements/* keeps, are never registered."
187
+ "description": "The predicate IRI the community accepts, compared as an exact string. Always an absolute IRI: a DTG VSC predicate registry IRI (e.g. `https://registry.trustoverip.org/dtg/vsc/vetted/1`) or a community-namespace IRI defined in the registry's predicate definition format. The four core predicates — endorses/1, witnessed/1, vetted/1 and presented/1 under `https://registry.trustoverip.org/dtg/vsc/` — are seeded when the community starts. The reserved value `role:vetter`, which names the vetter-role record vtc/endorsements/* keeps beside statements, is never registered."
188
188
  },
189
189
  "description": {
190
190
  "type": "string",