@hypercerts-org/lexicon 0.10.0-beta.8 → 0.10.0

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 (147) hide show
  1. package/CHANGELOG.md +714 -0
  2. package/README.md +278 -9
  3. package/SCHEMAS.md +440 -143
  4. package/dist/exports.d.ts +837 -304
  5. package/dist/exports.d.ts.map +1 -1
  6. package/dist/generated/exports.d.ts +837 -304
  7. package/dist/generated/exports.d.ts.map +1 -1
  8. package/dist/generated/lexicons.d.ts +1631 -625
  9. package/dist/generated/lexicons.d.ts.map +1 -1
  10. package/dist/generated/types/app/certified/actor/organization.d.ts +32 -0
  11. package/dist/generated/types/app/certified/actor/organization.d.ts.map +1 -0
  12. package/dist/generated/types/app/certified/actor/profile.d.ts +30 -0
  13. package/dist/generated/types/app/certified/actor/profile.d.ts.map +1 -0
  14. package/dist/generated/types/app/certified/badge/award.d.ts +2 -0
  15. package/dist/generated/types/app/certified/badge/award.d.ts.map +1 -1
  16. package/dist/generated/types/app/certified/badge/response.d.ts +1 -1
  17. package/dist/generated/types/app/certified/badge/response.d.ts.map +1 -1
  18. package/dist/generated/types/app/certified/defs.d.ts +11 -1
  19. package/dist/generated/types/app/certified/defs.d.ts.map +1 -1
  20. package/dist/generated/types/app/certified/location.d.ts +13 -5
  21. package/dist/generated/types/app/certified/location.d.ts.map +1 -1
  22. package/dist/generated/types/org/hyperboards/board.d.ts +75 -0
  23. package/dist/generated/types/org/hyperboards/board.d.ts.map +1 -0
  24. package/dist/generated/types/org/hyperboards/displayProfile.d.ts +31 -0
  25. package/dist/generated/types/org/hyperboards/displayProfile.d.ts.map +1 -0
  26. package/dist/generated/types/org/hypercerts/claim/activity.d.ts +30 -11
  27. package/dist/generated/types/org/hypercerts/claim/activity.d.ts.map +1 -1
  28. package/dist/generated/types/org/hypercerts/claim/{contributionDetails.d.ts → contribution.d.ts} +6 -6
  29. package/dist/generated/types/org/hypercerts/claim/contribution.d.ts.map +1 -0
  30. package/dist/generated/types/org/hypercerts/claim/contributorInformation.d.ts +2 -2
  31. package/dist/generated/types/org/hypercerts/claim/contributorInformation.d.ts.map +1 -1
  32. package/dist/generated/types/org/hypercerts/claim/rights.d.ts +3 -3
  33. package/dist/generated/types/org/hypercerts/claim/rights.d.ts.map +1 -1
  34. package/dist/generated/types/org/hypercerts/{claim/collection.d.ts → collection.d.ts} +11 -10
  35. package/dist/generated/types/org/hypercerts/collection.d.ts.map +1 -0
  36. package/dist/generated/types/org/hypercerts/context/acknowledgement.d.ts +25 -0
  37. package/dist/generated/types/org/hypercerts/context/acknowledgement.d.ts.map +1 -0
  38. package/dist/generated/types/org/hypercerts/context/attachment.d.ts +35 -0
  39. package/dist/generated/types/org/hypercerts/context/attachment.d.ts.map +1 -0
  40. package/dist/{types/org/hypercerts/claim → generated/types/org/hypercerts/context}/evaluation.d.ts +15 -15
  41. package/dist/generated/types/org/hypercerts/context/evaluation.d.ts.map +1 -0
  42. package/dist/generated/types/org/hypercerts/context/measurement.d.ts +43 -0
  43. package/dist/generated/types/org/hypercerts/context/measurement.d.ts.map +1 -0
  44. package/dist/generated/types/org/hypercerts/defs.d.ts +8 -44
  45. package/dist/generated/types/org/hypercerts/defs.d.ts.map +1 -1
  46. package/dist/generated/types/org/hypercerts/funding/receipt.d.ts +1 -1
  47. package/dist/generated/types/org/hypercerts/funding/receipt.d.ts.map +1 -1
  48. package/dist/generated/types/org/hypercerts/workscope/cel.d.ts +20 -0
  49. package/dist/generated/types/org/hypercerts/workscope/cel.d.ts.map +1 -0
  50. package/dist/generated/types/org/hypercerts/workscope/tag.d.ts +36 -0
  51. package/dist/generated/types/org/hypercerts/workscope/tag.d.ts.map +1 -0
  52. package/dist/index.cjs +2570 -1235
  53. package/dist/index.cjs.map +1 -1
  54. package/dist/index.mjs +2512 -1201
  55. package/dist/index.mjs.map +1 -1
  56. package/dist/lexicons.cjs +932 -397
  57. package/dist/lexicons.cjs.map +1 -1
  58. package/dist/lexicons.d.ts +1631 -625
  59. package/dist/lexicons.d.ts.map +1 -1
  60. package/dist/lexicons.mjs +932 -397
  61. package/dist/lexicons.mjs.map +1 -1
  62. package/dist/types/app/certified/actor/organization.d.ts +32 -0
  63. package/dist/types/app/certified/actor/organization.d.ts.map +1 -0
  64. package/dist/types/app/certified/actor/profile.d.ts +30 -0
  65. package/dist/types/app/certified/actor/profile.d.ts.map +1 -0
  66. package/dist/types/app/certified/badge/award.d.ts +2 -0
  67. package/dist/types/app/certified/badge/award.d.ts.map +1 -1
  68. package/dist/types/app/certified/badge/response.d.ts +1 -1
  69. package/dist/types/app/certified/badge/response.d.ts.map +1 -1
  70. package/dist/types/app/certified/defs.d.ts +11 -1
  71. package/dist/types/app/certified/defs.d.ts.map +1 -1
  72. package/dist/types/app/certified/location.d.ts +13 -5
  73. package/dist/types/app/certified/location.d.ts.map +1 -1
  74. package/dist/types/org/hyperboards/board.d.ts +75 -0
  75. package/dist/types/org/hyperboards/board.d.ts.map +1 -0
  76. package/dist/types/org/hyperboards/displayProfile.d.ts +31 -0
  77. package/dist/types/org/hyperboards/displayProfile.d.ts.map +1 -0
  78. package/dist/types/org/hypercerts/claim/activity.d.ts +30 -11
  79. package/dist/types/org/hypercerts/claim/activity.d.ts.map +1 -1
  80. package/dist/types/org/hypercerts/claim/{contributionDetails.d.ts → contribution.d.ts} +6 -6
  81. package/dist/types/org/hypercerts/claim/contribution.d.ts.map +1 -0
  82. package/dist/types/org/hypercerts/claim/contributorInformation.d.ts +2 -2
  83. package/dist/types/org/hypercerts/claim/contributorInformation.d.ts.map +1 -1
  84. package/dist/types/org/hypercerts/claim/rights.d.ts +3 -3
  85. package/dist/types/org/hypercerts/claim/rights.d.ts.map +1 -1
  86. package/dist/types/org/hypercerts/{claim/collection.d.ts → collection.d.ts} +11 -10
  87. package/dist/types/org/hypercerts/collection.d.ts.map +1 -0
  88. package/dist/types/org/hypercerts/context/acknowledgement.d.ts +25 -0
  89. package/dist/types/org/hypercerts/context/acknowledgement.d.ts.map +1 -0
  90. package/dist/types/org/hypercerts/context/attachment.d.ts +35 -0
  91. package/dist/types/org/hypercerts/context/attachment.d.ts.map +1 -0
  92. package/dist/{generated/types/org/hypercerts/claim → types/org/hypercerts/context}/evaluation.d.ts +15 -15
  93. package/dist/types/org/hypercerts/context/evaluation.d.ts.map +1 -0
  94. package/dist/types/org/hypercerts/context/measurement.d.ts +43 -0
  95. package/dist/types/org/hypercerts/context/measurement.d.ts.map +1 -0
  96. package/dist/types/org/hypercerts/defs.d.ts +8 -44
  97. package/dist/types/org/hypercerts/defs.d.ts.map +1 -1
  98. package/dist/types/org/hypercerts/funding/receipt.d.ts +1 -1
  99. package/dist/types/org/hypercerts/funding/receipt.d.ts.map +1 -1
  100. package/dist/types/org/hypercerts/workscope/cel.d.ts +20 -0
  101. package/dist/types/org/hypercerts/workscope/cel.d.ts.map +1 -0
  102. package/dist/types/org/hypercerts/workscope/tag.d.ts +36 -0
  103. package/dist/types/org/hypercerts/workscope/tag.d.ts.map +1 -0
  104. package/lexicons/app/certified/actor/organization.json +70 -0
  105. package/lexicons/app/certified/actor/profile.json +61 -0
  106. package/lexicons/app/certified/badge/award.json +8 -1
  107. package/lexicons/app/certified/badge/definition.json +8 -3
  108. package/lexicons/app/certified/badge/response.json +3 -2
  109. package/lexicons/app/certified/defs.json +11 -3
  110. package/lexicons/app/certified/location.json +29 -6
  111. package/lexicons/org/hyperboards/board.json +152 -0
  112. package/lexicons/org/hyperboards/displayProfile.json +64 -0
  113. package/lexicons/org/hypercerts/claim/activity.json +57 -39
  114. package/lexicons/org/hypercerts/claim/{contributionDetails.json → contribution.json} +4 -4
  115. package/lexicons/org/hypercerts/claim/contributorInformation.json +3 -2
  116. package/lexicons/org/hypercerts/claim/rights.json +5 -3
  117. package/lexicons/org/hypercerts/{claim/collection.json → collection.json} +15 -7
  118. package/lexicons/org/hypercerts/context/acknowledgement.json +42 -0
  119. package/lexicons/org/hypercerts/context/attachment.json +77 -0
  120. package/lexicons/org/hypercerts/{claim → context}/evaluation.json +22 -22
  121. package/lexicons/org/hypercerts/context/measurement.json +107 -0
  122. package/lexicons/org/hypercerts/defs.json +14 -89
  123. package/lexicons/org/hypercerts/funding/receipt.json +12 -6
  124. package/lexicons/org/hypercerts/workscope/cel.json +39 -0
  125. package/lexicons/org/hypercerts/workscope/tag.json +87 -0
  126. package/package.json +2 -2
  127. package/dist/generated/types/org/hypercerts/claim/collection.d.ts.map +0 -1
  128. package/dist/generated/types/org/hypercerts/claim/contributionDetails.d.ts.map +0 -1
  129. package/dist/generated/types/org/hypercerts/claim/evaluation.d.ts.map +0 -1
  130. package/dist/generated/types/org/hypercerts/claim/evidence.d.ts +0 -29
  131. package/dist/generated/types/org/hypercerts/claim/evidence.d.ts.map +0 -1
  132. package/dist/generated/types/org/hypercerts/claim/measurement.d.ts +0 -30
  133. package/dist/generated/types/org/hypercerts/claim/measurement.d.ts.map +0 -1
  134. package/dist/generated/types/org/hypercerts/helper/workScopeTag.d.ts +0 -31
  135. package/dist/generated/types/org/hypercerts/helper/workScopeTag.d.ts.map +0 -1
  136. package/dist/types/org/hypercerts/claim/collection.d.ts.map +0 -1
  137. package/dist/types/org/hypercerts/claim/contributionDetails.d.ts.map +0 -1
  138. package/dist/types/org/hypercerts/claim/evaluation.d.ts.map +0 -1
  139. package/dist/types/org/hypercerts/claim/evidence.d.ts +0 -29
  140. package/dist/types/org/hypercerts/claim/evidence.d.ts.map +0 -1
  141. package/dist/types/org/hypercerts/claim/measurement.d.ts +0 -30
  142. package/dist/types/org/hypercerts/claim/measurement.d.ts.map +0 -1
  143. package/dist/types/org/hypercerts/helper/workScopeTag.d.ts +0 -31
  144. package/dist/types/org/hypercerts/helper/workScopeTag.d.ts.map +0 -1
  145. package/lexicons/org/hypercerts/claim/evidence.json +0 -57
  146. package/lexicons/org/hypercerts/claim/measurement.json +0 -70
  147. package/lexicons/org/hypercerts/helper/workScopeTag.json +0 -65
package/dist/lexicons.cjs CHANGED
@@ -30,6 +30,137 @@ function maybe$typed(v, id, hash) {
30
30
  * GENERATED CODE - DO NOT MODIFY
31
31
  */
32
32
  const schemaDict = {
33
+ AppCertifiedActorOrganization: {
34
+ lexicon: 1,
35
+ id: 'app.certified.actor.organization',
36
+ defs: {
37
+ main: {
38
+ type: 'record',
39
+ description: 'Extended metadata for an organization actor. Complements the base actor profile with organization-specific fields like legal structure and reference links.',
40
+ key: 'literal:self',
41
+ record: {
42
+ type: 'object',
43
+ required: ['createdAt'],
44
+ properties: {
45
+ organizationType: {
46
+ type: 'array',
47
+ description: "Legal or operational structures of the organization (e.g. 'nonprofit', 'ngo', 'government', 'social-enterprise', 'cooperative').",
48
+ items: {
49
+ type: 'string',
50
+ maxLength: 128,
51
+ maxGraphemes: 100,
52
+ },
53
+ maxLength: 10,
54
+ },
55
+ urls: {
56
+ type: 'array',
57
+ description: 'Additional reference URLs (social media profiles, contact pages, donation links, etc.) with a display label for each URL.',
58
+ items: {
59
+ type: 'ref',
60
+ ref: 'lex:app.certified.actor.organization#urlItem',
61
+ },
62
+ },
63
+ location: {
64
+ type: 'ref',
65
+ ref: 'lex:com.atproto.repo.strongRef',
66
+ description: 'A strong reference to the location where the organization is based. The record referenced must conform with the lexicon app.certified.location.',
67
+ },
68
+ foundedDate: {
69
+ type: 'string',
70
+ format: 'datetime',
71
+ description: "When the organization was established. Stored as datetime per ATProto conventions (no date-only format exists). Clients should use midnight UTC (e.g., '2005-01-01T00:00:00.000Z'); consumers should treat only the date portion as canonical.",
72
+ },
73
+ createdAt: {
74
+ type: 'string',
75
+ format: 'datetime',
76
+ description: 'Client-declared timestamp when this record was originally created.',
77
+ },
78
+ },
79
+ },
80
+ },
81
+ urlItem: {
82
+ type: 'object',
83
+ description: 'A labeled URL reference.',
84
+ required: ['url'],
85
+ properties: {
86
+ url: {
87
+ type: 'string',
88
+ format: 'uri',
89
+ description: 'The URL.',
90
+ maxLength: 10000,
91
+ maxGraphemes: 2048,
92
+ },
93
+ label: {
94
+ type: 'string',
95
+ description: "Optional human-readable label for this URL (e.g. 'Support page', 'Donation page').",
96
+ maxLength: 640,
97
+ maxGraphemes: 64,
98
+ },
99
+ },
100
+ },
101
+ },
102
+ },
103
+ AppCertifiedActorProfile: {
104
+ lexicon: 1,
105
+ id: 'app.certified.actor.profile',
106
+ defs: {
107
+ main: {
108
+ type: 'record',
109
+ description: 'A declaration of a Certified account profile.',
110
+ key: 'literal:self',
111
+ record: {
112
+ type: 'object',
113
+ required: ['createdAt'],
114
+ properties: {
115
+ displayName: {
116
+ type: 'string',
117
+ description: 'Display name for the account',
118
+ maxGraphemes: 64,
119
+ maxLength: 640,
120
+ },
121
+ description: {
122
+ type: 'string',
123
+ description: 'Free-form profile description text.',
124
+ maxGraphemes: 256,
125
+ maxLength: 2560,
126
+ },
127
+ pronouns: {
128
+ type: 'string',
129
+ description: 'Free-form pronouns text.',
130
+ maxGraphemes: 20,
131
+ maxLength: 200,
132
+ },
133
+ website: {
134
+ type: 'string',
135
+ format: 'uri',
136
+ description: 'Account website URL',
137
+ },
138
+ avatar: {
139
+ type: 'union',
140
+ refs: [
141
+ 'lex:org.hypercerts.defs#uri',
142
+ 'lex:org.hypercerts.defs#smallImage',
143
+ ],
144
+ description: "Small image to be displayed next to posts from account. AKA, 'profile picture'",
145
+ },
146
+ banner: {
147
+ type: 'union',
148
+ refs: [
149
+ 'lex:org.hypercerts.defs#uri',
150
+ 'lex:org.hypercerts.defs#largeImage',
151
+ ],
152
+ description: 'Larger horizontal image to display behind profile view.',
153
+ },
154
+ createdAt: {
155
+ type: 'string',
156
+ format: 'datetime',
157
+ description: 'Client-declared timestamp when this record was originally created',
158
+ },
159
+ },
160
+ },
161
+ },
162
+ },
163
+ },
33
164
  AppCertifiedBadgeAward: {
34
165
  lexicon: 1,
35
166
  id: 'app.certified.badge.award',
@@ -58,6 +189,13 @@ const schemaDict = {
58
189
  note: {
59
190
  type: 'string',
60
191
  description: 'Optional statement explaining the reason for this badge award.',
192
+ maxLength: 500,
193
+ },
194
+ url: {
195
+ type: 'string',
196
+ format: 'uri',
197
+ description: 'Optional URL the badge award links to.',
198
+ maxLength: 2048,
61
199
  },
62
200
  createdAt: {
63
201
  type: 'string',
@@ -84,10 +222,12 @@ const schemaDict = {
84
222
  badgeType: {
85
223
  type: 'string',
86
224
  description: 'Category of the badge (e.g. endorsement, participation, affiliation).',
225
+ maxLength: 100,
87
226
  },
88
227
  title: {
89
228
  type: 'string',
90
229
  description: 'Human-readable title of the badge.',
230
+ maxLength: 256,
91
231
  },
92
232
  icon: {
93
233
  type: 'blob',
@@ -103,10 +243,13 @@ const schemaDict = {
103
243
  description: {
104
244
  type: 'string',
105
245
  description: 'Optional short statement describing what the badge represents.',
246
+ maxLength: 5000,
247
+ maxGraphemes: 500,
106
248
  },
107
249
  allowedIssuers: {
108
250
  type: 'array',
109
251
  description: 'Optional allowlist of DIDs allowed to issue this badge. If omitted, anyone may issue it.',
252
+ maxLength: 100,
110
253
  items: {
111
254
  type: 'ref',
112
255
  ref: 'lex:app.certified.defs#did',
@@ -141,12 +284,13 @@ const schemaDict = {
141
284
  },
142
285
  response: {
143
286
  type: 'string',
144
- enum: ['accepted', 'rejected'],
287
+ knownValues: ['accepted', 'rejected'],
145
288
  description: 'The recipient’s response for the badge (accepted or rejected).',
146
289
  },
147
290
  weight: {
148
291
  type: 'string',
149
292
  description: 'Optional relative weight for accepted badges, assigned by the recipient.',
293
+ maxLength: 50,
150
294
  },
151
295
  createdAt: {
152
296
  type: 'string',
@@ -164,9 +308,17 @@ const schemaDict = {
164
308
  description: 'Common type definitions used across certified protocols.',
165
309
  defs: {
166
310
  did: {
167
- type: 'string',
168
- format: 'did',
311
+ type: 'object',
169
312
  description: 'A Decentralized Identifier (DID) string.',
313
+ required: ['did'],
314
+ properties: {
315
+ did: {
316
+ type: 'string',
317
+ format: 'did',
318
+ description: 'The DID string value.',
319
+ maxLength: 256,
320
+ },
321
+ },
170
322
  },
171
323
  },
172
324
  },
@@ -201,8 +353,17 @@ const schemaDict = {
201
353
  },
202
354
  locationType: {
203
355
  type: 'string',
204
- description: 'An identifier for the format of the location data (e.g., coordinate-decimal, geojson-point)',
205
- knownValues: ['coordinate-decimal', 'geojson-point'],
356
+ description: 'An identifier for the format of the location data (e.g., coordinate-decimal, geojson-point). See the Location Protocol spec for the full registry: https://spec.decentralizedgeo.org/specification/location-types/#location-type-registry',
357
+ knownValues: [
358
+ 'coordinate-decimal',
359
+ 'geojson-point',
360
+ 'geojson',
361
+ 'h3',
362
+ 'geohash',
363
+ 'wkt',
364
+ 'address',
365
+ 'scaledCoordinates',
366
+ ],
206
367
  maxLength: 20,
207
368
  },
208
369
  location: {
@@ -210,18 +371,19 @@ const schemaDict = {
210
371
  refs: [
211
372
  'lex:org.hypercerts.defs#uri',
212
373
  'lex:org.hypercerts.defs#smallBlob',
374
+ 'lex:app.certified.location#string',
213
375
  ],
214
- description: 'The location of where the work was performed as a URI or blob.',
376
+ description: 'The location of where the work was performed as a URI, blob, or inline string.',
215
377
  },
216
378
  name: {
217
379
  type: 'string',
218
- description: 'Optional name for this location',
380
+ description: "Human-readable name for this location (e.g. 'Golden Gate Park', 'San Francisco Bay Area')",
219
381
  maxLength: 1000,
220
382
  maxGraphemes: 100,
221
383
  },
222
384
  description: {
223
385
  type: 'string',
224
- description: 'Optional description for this location',
386
+ description: 'Additional context about this location, such as its significance to the work or specific boundaries',
225
387
  maxLength: 2000,
226
388
  maxGraphemes: 500,
227
389
  },
@@ -233,6 +395,19 @@ const schemaDict = {
233
395
  },
234
396
  },
235
397
  },
398
+ string: {
399
+ type: 'object',
400
+ required: ['string'],
401
+ description: 'A location represented as a string, e.g. coordinates or a small GeoJSON string.',
402
+ properties: {
403
+ string: {
404
+ type: 'string',
405
+ description: 'The location string value',
406
+ maxLength: 10000,
407
+ maxGraphemes: 1000,
408
+ },
409
+ },
410
+ },
236
411
  },
237
412
  },
238
413
  ComAtprotoRepoStrongRef: {
@@ -256,203 +431,319 @@ const schemaDict = {
256
431
  },
257
432
  },
258
433
  },
259
- OrgHypercertsClaimActivity: {
434
+ OrgHyperboardsBoard: {
260
435
  lexicon: 1,
261
- id: 'org.hypercerts.claim.activity',
436
+ id: 'org.hyperboards.board',
262
437
  defs: {
263
438
  main: {
264
439
  type: 'record',
265
- description: 'A hypercert record tracking impact work.',
266
- key: 'any',
440
+ description: "Configuration record for a hyperboard, wrapping an underlying activity or collection with visual presentation settings. Stored in the creator's PDS.",
441
+ key: 'tid',
267
442
  record: {
268
443
  type: 'object',
269
- required: ['title', 'shortDescription', 'createdAt'],
444
+ required: ['subject', 'createdAt'],
270
445
  properties: {
271
- title: {
272
- type: 'string',
273
- description: 'Title of the hypercert.',
274
- maxLength: 256,
275
- },
276
- shortDescription: {
277
- type: 'string',
278
- description: 'Short summary of this activity claim, suitable for previews and list views. Rich text annotations may be provided via `shortDescriptionFacets`.',
279
- maxLength: 3000,
280
- maxGraphemes: 300,
281
- },
282
- shortDescriptionFacets: {
283
- type: 'array',
284
- description: 'Rich text annotations for `shortDescription` (mentions, URLs, hashtags, etc).',
285
- items: {
286
- type: 'ref',
287
- ref: 'lex:app.bsky.richtext.facet',
288
- },
289
- },
290
- description: {
291
- type: 'string',
292
- description: 'Optional longer description of this activity claim, including context or interpretation. Rich text annotations may be provided via `descriptionFacets`.',
293
- maxLength: 30000,
294
- maxGraphemes: 3000,
295
- },
296
- descriptionFacets: {
297
- type: 'array',
298
- description: 'Rich text annotations for `description` (mentions, URLs, hashtags, etc).',
299
- items: {
300
- type: 'ref',
301
- ref: 'lex:app.bsky.richtext.facet',
302
- },
303
- },
304
- image: {
305
- type: 'union',
306
- refs: [
307
- 'lex:org.hypercerts.defs#uri',
308
- 'lex:org.hypercerts.defs#smallImage',
309
- ],
310
- description: 'The hypercert visual representation as a URI or image blob.',
311
- },
312
- workScope: {
313
- type: 'union',
314
- refs: [
315
- 'lex:org.hypercerts.defs#workScopeAll',
316
- 'lex:org.hypercerts.defs#workScopeAny',
317
- 'lex:org.hypercerts.defs#workScopeNot',
318
- 'lex:org.hypercerts.defs#workScopeAtom',
319
- ],
320
- description: 'Work scope logic expression using boolean operators (all/any/not) and atomic scope references.',
321
- },
322
- startDate: {
323
- type: 'string',
324
- format: 'datetime',
325
- description: 'When the work began',
326
- },
327
- endDate: {
328
- type: 'string',
329
- format: 'datetime',
330
- description: 'When the work ended',
331
- },
332
- contributors: {
333
- type: 'array',
334
- description: 'An array of contributor objects, each containing contributor information, weight, and contribution details.',
335
- items: {
336
- type: 'ref',
337
- ref: 'lex:org.hypercerts.claim.activity#contributor',
338
- },
339
- },
340
- rights: {
446
+ subject: {
341
447
  type: 'ref',
342
448
  ref: 'lex:com.atproto.repo.strongRef',
343
- description: 'A strong reference to the rights that this hypercert has. The record referenced must conform with the lexicon org.hypercerts.claim.rights.',
449
+ description: 'Reference to the org.hypercerts.claim.activity or org.hypercerts.claim.collection this board visualizes.',
344
450
  },
345
- locations: {
451
+ config: {
452
+ type: 'ref',
453
+ ref: 'lex:org.hyperboards.board#boardConfig',
454
+ description: 'Board-level visual configuration (background, colors, aspect ratio).',
455
+ },
456
+ contributorConfigs: {
346
457
  type: 'array',
347
- description: 'An array of strong references to the location where activity was performed. The record referenced must conform with the lexicon app.certified.location.',
458
+ description: 'Per-contributor configuration entries for this board.',
459
+ maxLength: 1000,
348
460
  items: {
349
461
  type: 'ref',
350
- ref: 'lex:com.atproto.repo.strongRef',
462
+ ref: 'lex:org.hyperboards.board#contributorConfig',
351
463
  },
352
464
  },
353
465
  createdAt: {
354
466
  type: 'string',
355
467
  format: 'datetime',
356
- description: 'Client-declared timestamp when this record was originally created',
468
+ description: 'Client-declared timestamp when this record was originally created.',
357
469
  },
358
470
  },
359
471
  },
360
472
  },
361
- contributor: {
473
+ boardConfig: {
362
474
  type: 'object',
363
- required: ['contributorIdentity'],
475
+ description: "Visual configuration for a hyperboard's background, colors, and layout.",
364
476
  properties: {
365
- contributorIdentity: {
477
+ backgroundType: {
478
+ type: 'string',
479
+ description: 'Type of background content.',
480
+ knownValues: ['image', 'iframe'],
481
+ maxLength: 10,
482
+ },
483
+ backgroundImage: {
366
484
  type: 'union',
367
485
  refs: [
368
- 'lex:org.hypercerts.claim.activity#contributorIdentity',
369
- 'lex:com.atproto.repo.strongRef',
486
+ 'lex:org.hypercerts.defs#uri',
487
+ 'lex:org.hypercerts.defs#smallImage',
370
488
  ],
371
- description: 'Contributor identity as a string (DID or identifier) via org.hypercerts.claim.activity#contributorIdentity, or a strong reference to a contributor information record.',
489
+ description: 'Background image as a URI or image blob.',
372
490
  },
373
- contributionWeight: {
491
+ backgroundIframeUrl: {
374
492
  type: 'string',
375
- description: 'The relative weight/importance of this contribution (stored as a string to avoid float precision issues). Must be a positive numeric value. Weights do not need to sum to a specific total; normalization can be performed by the consuming application as needed.',
493
+ format: 'uri',
494
+ description: 'URI of the background iframe.',
495
+ maxLength: 2048,
376
496
  },
377
- contributionDetails: {
497
+ backgroundGrayscale: {
498
+ type: 'boolean',
499
+ description: 'Whether the background is rendered in grayscale. Default: true.',
500
+ },
501
+ backgroundOpacity: {
502
+ type: 'integer',
503
+ description: 'Background opacity as a percentage (0–100).',
504
+ minimum: 0,
505
+ maximum: 100,
506
+ },
507
+ backgroundColor: {
508
+ type: 'string',
509
+ description: "Background color as a hex string (e.g. '#ffffff').",
510
+ maxLength: 20,
511
+ },
512
+ borderColor: {
513
+ type: 'string',
514
+ description: "Border color as a hex string (e.g. '#000000').",
515
+ maxLength: 20,
516
+ },
517
+ grayscaleImages: {
518
+ type: 'boolean',
519
+ description: 'Whether contributor images are rendered in grayscale. Default: false.',
520
+ },
521
+ imageShape: {
522
+ type: 'string',
523
+ description: 'Shape used to crop contributor images on this board.',
524
+ knownValues: ['circular', 'square'],
525
+ maxLength: 20,
526
+ },
527
+ aspectRatio: {
528
+ type: 'string',
529
+ description: 'Display aspect ratio of the board.',
530
+ knownValues: ['16:9', '4:3', '1:1'],
531
+ maxLength: 10,
532
+ },
533
+ },
534
+ },
535
+ contributorConfig: {
536
+ type: 'object',
537
+ description: 'Configuration for a specific contributor within a board. Values serve as fallbacks when the contributor has not defined them on their profile. It can also be used to override contributor settings on this board without changing their global profile.',
538
+ required: ['contributor'],
539
+ properties: {
540
+ contributor: {
378
541
  type: 'union',
379
542
  refs: [
380
- 'lex:org.hypercerts.claim.activity#contributorRole',
381
543
  'lex:com.atproto.repo.strongRef',
544
+ 'lex:org.hypercerts.claim.activity#contributorIdentity',
545
+ ],
546
+ description: 'Identifies the contributor being styled. A strong reference to an org.hypercerts.claim.contributorInformation record, or a contributorIdentity (DID or identifier string) for contributors without a dedicated record.',
547
+ },
548
+ override: {
549
+ type: 'boolean',
550
+ description: "When true, these values take precedence over the contributor's own profile and display settings. When false or omitted, they are only used as fallbacks if the contributor has not set their own settings.",
551
+ },
552
+ displayName: {
553
+ type: 'string',
554
+ description: 'Display name for this contributor on this board.',
555
+ maxLength: 640,
556
+ maxGraphemes: 64,
557
+ },
558
+ image: {
559
+ type: 'union',
560
+ refs: [
561
+ 'lex:org.hypercerts.defs#uri',
562
+ 'lex:org.hypercerts.defs#smallImage',
563
+ ],
564
+ description: 'Avatar or face image for this contributor on this board, as a URI or image blob.',
565
+ },
566
+ video: {
567
+ type: 'union',
568
+ refs: [
569
+ 'lex:org.hypercerts.defs#uri',
570
+ 'lex:org.hypercerts.defs#smallVideo',
571
+ ],
572
+ description: 'Video for this contributor, as a URI (embed/direct link) or uploaded video blob.',
573
+ },
574
+ hoverImage: {
575
+ type: 'union',
576
+ refs: [
577
+ 'lex:org.hypercerts.defs#uri',
578
+ 'lex:org.hypercerts.defs#smallImage',
382
579
  ],
383
- description: 'Contribution details as a string via org.hypercerts.claim.activity#contributorRole, or a strong reference to a contribution details record.',
580
+ description: 'Image overlay shown when hovering over this contributor, as a URI or image blob.',
581
+ },
582
+ hoverIframeUrl: {
583
+ type: 'string',
584
+ format: 'uri',
585
+ description: 'Iframe overlay shown when hovering over this contributor.',
586
+ maxLength: 2048,
587
+ },
588
+ url: {
589
+ type: 'string',
590
+ format: 'uri',
591
+ description: 'Click-through link URL for this contributor.',
592
+ maxLength: 2048,
384
593
  },
385
594
  },
386
595
  },
387
- contributorIdentity: {
388
- type: 'string',
389
- description: 'Contributor information as a string (DID or identifier).',
390
- },
391
- contributorRole: {
392
- type: 'string',
393
- description: 'Contribution details as a string.',
394
- maxLength: 10000,
395
- maxGraphemes: 1000,
396
- },
397
596
  },
398
597
  },
399
- OrgHypercertsClaimCollection: {
598
+ OrgHyperboardsDisplayProfile: {
400
599
  lexicon: 1,
401
- id: 'org.hypercerts.claim.collection',
600
+ id: 'org.hyperboards.displayProfile',
402
601
  defs: {
403
602
  main: {
404
603
  type: 'record',
405
- description: 'A collection/group of items (activities and/or other collections). Collections support recursive nesting. Use app.certified.location as a sidecar (same TID) for location metadata.',
406
- key: 'tid',
604
+ description: "User-declared visual presentation defaults for how a contributor appears on hyperboards. Stored in the contributor's own PDS and reusable across multiple boards.",
605
+ key: 'literal:self',
407
606
  record: {
408
607
  type: 'object',
409
- required: ['title', 'items', 'createdAt'],
608
+ required: ['createdAt'],
410
609
  properties: {
411
- type: {
412
- type: 'string',
413
- description: "The type of this collection. Possible fields can be 'favorites', 'project', or any other type of collection.",
414
- },
415
- title: {
610
+ displayName: {
416
611
  type: 'string',
417
- description: 'The title of this collection',
418
- maxLength: 800,
419
- maxGraphemes: 80,
612
+ description: 'Display name override for this user on hyperboards.',
613
+ maxLength: 640,
614
+ maxGraphemes: 64,
420
615
  },
421
- shortDescription: {
422
- type: 'string',
423
- maxLength: 3000,
616
+ image: {
617
+ type: 'union',
618
+ refs: [
619
+ 'lex:org.hypercerts.defs#uri',
620
+ 'lex:org.hypercerts.defs#smallImage',
621
+ ],
622
+ description: 'Avatar or face image override for this user on hyperboards, as a URI or image blob.',
623
+ },
624
+ video: {
625
+ type: 'union',
626
+ refs: [
627
+ 'lex:org.hypercerts.defs#uri',
628
+ 'lex:org.hypercerts.defs#smallVideo',
629
+ ],
630
+ description: 'Default video for this user across boards, as a URI (embed/direct link) or uploaded video blob.',
631
+ },
632
+ hoverImage: {
633
+ type: 'union',
634
+ refs: [
635
+ 'lex:org.hypercerts.defs#uri',
636
+ 'lex:org.hypercerts.defs#smallImage',
637
+ ],
638
+ description: 'Default hover image for this user across boards, as a URI or image blob.',
639
+ },
640
+ hoverIframeUrl: {
641
+ type: 'string',
642
+ format: 'uri',
643
+ description: 'Default hover iframe URL for this user across boards.',
644
+ maxLength: 2048,
645
+ },
646
+ url: {
647
+ type: 'string',
648
+ format: 'uri',
649
+ description: 'Default click-through link URL for this user across boards.',
650
+ maxLength: 2048,
651
+ },
652
+ createdAt: {
653
+ type: 'string',
654
+ format: 'datetime',
655
+ description: 'Client-declared timestamp when this record was originally created.',
656
+ },
657
+ },
658
+ },
659
+ },
660
+ },
661
+ },
662
+ OrgHypercertsClaimActivity: {
663
+ lexicon: 1,
664
+ id: 'org.hypercerts.claim.activity',
665
+ defs: {
666
+ main: {
667
+ type: 'record',
668
+ description: 'A hypercert record tracking impact work.',
669
+ key: 'any',
670
+ record: {
671
+ type: 'object',
672
+ required: ['title', 'shortDescription', 'createdAt'],
673
+ properties: {
674
+ title: {
675
+ type: 'string',
676
+ description: "Display title summarizing the impact work (e.g. 'Reforestation in Amazon Basin 2024')",
677
+ maxLength: 256,
678
+ },
679
+ shortDescription: {
680
+ type: 'string',
681
+ description: 'Short summary of this activity claim, suitable for previews and list views. Rich text annotations may be provided via `shortDescriptionFacets`.',
682
+ maxLength: 3000,
424
683
  maxGraphemes: 300,
425
- description: 'Short summary of this collection, suitable for previews and list views',
684
+ },
685
+ shortDescriptionFacets: {
686
+ type: 'array',
687
+ description: 'Rich text annotations for `shortDescription` (mentions, URLs, hashtags, etc).',
688
+ items: {
689
+ type: 'ref',
690
+ ref: 'lex:app.bsky.richtext.facet',
691
+ },
426
692
  },
427
693
  description: {
428
694
  type: 'ref',
429
695
  ref: 'lex:pub.leaflet.pages.linearDocument#main',
430
696
  description: 'Rich-text description, represented as a Leaflet linear document.',
431
697
  },
432
- avatar: {
698
+ image: {
433
699
  type: 'union',
434
700
  refs: [
435
701
  'lex:org.hypercerts.defs#uri',
436
702
  'lex:org.hypercerts.defs#smallImage',
437
703
  ],
438
- description: "The collection's avatar/profile image as a URI or image blob.",
704
+ description: 'The hypercert visual representation as a URI or image blob.',
439
705
  },
440
- banner: {
706
+ contributors: {
707
+ type: 'array',
708
+ description: 'An array of contributor objects, each containing contributor information, weight, and contribution details.',
709
+ maxLength: 1000,
710
+ items: {
711
+ type: 'ref',
712
+ ref: 'lex:org.hypercerts.claim.activity#contributor',
713
+ },
714
+ },
715
+ workScope: {
441
716
  type: 'union',
442
717
  refs: [
443
- 'lex:org.hypercerts.defs#uri',
444
- 'lex:org.hypercerts.defs#largeImage',
718
+ 'lex:org.hypercerts.workscope.cel',
719
+ 'lex:org.hypercerts.claim.activity#workScopeString',
445
720
  ],
446
- description: 'Larger horizontal image to display behind the collection view.',
721
+ description: 'Work scope definition. A CEL expression for structured, machine-evaluable scopes or a free-form string for simple and legacy scopes.',
447
722
  },
448
- items: {
723
+ startDate: {
724
+ type: 'string',
725
+ format: 'datetime',
726
+ description: 'When the work began',
727
+ },
728
+ endDate: {
729
+ type: 'string',
730
+ format: 'datetime',
731
+ description: 'When the work ended',
732
+ },
733
+ locations: {
449
734
  type: 'array',
450
- description: 'Array of items in this collection with optional weights.',
735
+ description: 'An array of strong references to the location where activity was performed. The record referenced must conform with the lexicon app.certified.location.',
736
+ maxLength: 1000,
451
737
  items: {
452
738
  type: 'ref',
453
- ref: 'lex:org.hypercerts.claim.collection#item',
739
+ ref: 'lex:com.atproto.repo.strongRef',
454
740
  },
455
741
  },
742
+ rights: {
743
+ type: 'ref',
744
+ ref: 'lex:com.atproto.repo.strongRef',
745
+ description: 'A strong reference to the rights that this hypercert has. The record referenced must conform with the lexicon org.hypercerts.claim.rights.',
746
+ },
456
747
  createdAt: {
457
748
  type: 'string',
458
749
  format: 'datetime',
@@ -461,26 +752,77 @@ const schemaDict = {
461
752
  },
462
753
  },
463
754
  },
464
- item: {
755
+ contributor: {
465
756
  type: 'object',
466
- required: ['itemIdentifier'],
757
+ required: ['contributorIdentity'],
467
758
  properties: {
468
- itemIdentifier: {
469
- type: 'ref',
470
- ref: 'lex:com.atproto.repo.strongRef',
471
- description: 'Strong reference to an item in this collection. Items can be activities (org.hypercerts.claim.activity) and/or other collections (org.hypercerts.claim.collection).',
759
+ contributorIdentity: {
760
+ type: 'union',
761
+ refs: [
762
+ 'lex:org.hypercerts.claim.activity#contributorIdentity',
763
+ 'lex:com.atproto.repo.strongRef',
764
+ ],
765
+ description: 'Inline contributor identity object with an identity string (DID or identifier) via org.hypercerts.claim.activity#contributorIdentity, or a strong reference to a contributor information record. The record referenced must conform with the lexicon org.hypercerts.claim.contributorInformation.',
472
766
  },
473
- itemWeight: {
767
+ contributionWeight: {
474
768
  type: 'string',
475
- description: 'Optional weight for this item (positive numeric value stored as string). Weights do not need to sum to a specific total; normalization can be performed by the consuming application as needed.',
769
+ description: 'The relative weight/importance of this contribution (stored as a string to avoid float precision issues). Must be a positive numeric value. Weights do not need to sum to a specific total; normalization can be performed by the consuming application as needed.',
770
+ maxLength: 100,
771
+ },
772
+ contributionDetails: {
773
+ type: 'union',
774
+ refs: [
775
+ 'lex:org.hypercerts.claim.activity#contributorRole',
776
+ 'lex:com.atproto.repo.strongRef',
777
+ ],
778
+ description: 'Inline contribution role object with a role string via org.hypercerts.claim.activity#contributorRole, or a strong reference to a contribution details record. The record referenced must conform with the lexicon org.hypercerts.claim.contribution.',
779
+ },
780
+ },
781
+ },
782
+ contributorIdentity: {
783
+ type: 'object',
784
+ description: 'Contributor information as a string (DID or identifier).',
785
+ required: ['identity'],
786
+ properties: {
787
+ identity: {
788
+ type: 'string',
789
+ description: 'The contributor identity string (DID or identifier).',
790
+ maxLength: 1000,
791
+ maxGraphemes: 100,
792
+ },
793
+ },
794
+ },
795
+ contributorRole: {
796
+ type: 'object',
797
+ description: 'Contribution details as a string.',
798
+ required: ['role'],
799
+ properties: {
800
+ role: {
801
+ type: 'string',
802
+ description: 'The contribution role or details.',
803
+ maxLength: 1000,
804
+ maxGraphemes: 100,
805
+ },
806
+ },
807
+ },
808
+ workScopeString: {
809
+ type: 'object',
810
+ description: 'A free-form string describing the work scope for simple or legacy scopes.',
811
+ required: ['scope'],
812
+ properties: {
813
+ scope: {
814
+ type: 'string',
815
+ description: 'The work scope description string.',
816
+ maxLength: 1000,
817
+ maxGraphemes: 100,
476
818
  },
477
819
  },
478
820
  },
479
821
  },
480
822
  },
481
- OrgHypercertsClaimContributionDetails: {
823
+ OrgHypercertsClaimContribution: {
482
824
  lexicon: 1,
483
- id: 'org.hypercerts.claim.contributionDetails',
825
+ id: 'org.hypercerts.claim.contribution',
484
826
  defs: {
485
827
  main: {
486
828
  type: 'record',
@@ -497,19 +839,19 @@ const schemaDict = {
497
839
  },
498
840
  contributionDescription: {
499
841
  type: 'string',
500
- description: 'What the contribution concretely was.',
842
+ description: 'Description of what the contribution concretely involved.',
501
843
  maxLength: 10000,
502
844
  maxGraphemes: 1000,
503
845
  },
504
846
  startDate: {
505
847
  type: 'string',
506
848
  format: 'datetime',
507
- description: 'When this contribution started. This should be a subset of the hypercert timeframe.',
849
+ description: "When this contribution started. Should fall within the parent hypercert's timeframe.",
508
850
  },
509
851
  endDate: {
510
852
  type: 'string',
511
853
  format: 'datetime',
512
- description: 'When this contribution finished. This should be a subset of the hypercert timeframe.',
854
+ description: "When this contribution finished. Should fall within the parent hypercert's timeframe.",
513
855
  },
514
856
  createdAt: {
515
857
  type: 'string',
@@ -535,11 +877,12 @@ const schemaDict = {
535
877
  properties: {
536
878
  identifier: {
537
879
  type: 'string',
538
- description: 'DID or a URI to a social profile of the contributor.',
880
+ description: 'DID (did:plc:...) or URI to a social profile of the contributor.',
881
+ maxLength: 2048,
539
882
  },
540
883
  displayName: {
541
884
  type: 'string',
542
- description: 'Display name of the contributor.',
885
+ description: 'Human-readable name for the contributor as it should appear in UI.',
543
886
  maxLength: 100,
544
887
  },
545
888
  image: {
@@ -560,29 +903,273 @@ const schemaDict = {
560
903
  },
561
904
  },
562
905
  },
563
- OrgHypercertsClaimEvaluation: {
906
+ OrgHypercertsClaimRights: {
564
907
  lexicon: 1,
565
- id: 'org.hypercerts.claim.evaluation',
908
+ id: 'org.hypercerts.claim.rights',
566
909
  defs: {
567
- score: {
910
+ main: {
911
+ type: 'record',
912
+ description: 'Describes the rights that a contributor and/or an owner has, such as whether the hypercert can be sold, transferred, and under what conditions.',
913
+ key: 'tid',
914
+ record: {
915
+ type: 'object',
916
+ required: [
917
+ 'rightsName',
918
+ 'rightsType',
919
+ 'rightsDescription',
920
+ 'createdAt',
921
+ ],
922
+ properties: {
923
+ rightsName: {
924
+ type: 'string',
925
+ description: "Human-readable name for these rights (e.g. 'All Rights Reserved', 'CC BY-SA 4.0')",
926
+ maxLength: 100,
927
+ },
928
+ rightsType: {
929
+ type: 'string',
930
+ description: "Short identifier code for this rights type (e.g. 'ARR', 'CC-BY-SA') to facilitate filtering and search",
931
+ maxLength: 10,
932
+ },
933
+ rightsDescription: {
934
+ type: 'string',
935
+ description: "Detailed explanation of the rights holders' permissions, restrictions, and conditions",
936
+ maxLength: 10000,
937
+ maxGraphemes: 1000,
938
+ },
939
+ attachment: {
940
+ type: 'union',
941
+ refs: [
942
+ 'lex:org.hypercerts.defs#uri',
943
+ 'lex:org.hypercerts.defs#smallBlob',
944
+ ],
945
+ description: 'An attachment to define the rights further, e.g. a legal document.',
946
+ },
947
+ createdAt: {
948
+ type: 'string',
949
+ format: 'datetime',
950
+ description: 'Client-declared timestamp when this record was originally created',
951
+ },
952
+ },
953
+ },
954
+ },
955
+ },
956
+ },
957
+ OrgHypercertsCollection: {
958
+ lexicon: 1,
959
+ id: 'org.hypercerts.collection',
960
+ defs: {
961
+ main: {
962
+ type: 'record',
963
+ description: 'A collection/group of items (activities and/or other collections). Collections support recursive nesting.',
964
+ key: 'tid',
965
+ record: {
966
+ type: 'object',
967
+ required: ['title', 'createdAt'],
968
+ properties: {
969
+ type: {
970
+ type: 'string',
971
+ description: "The type of this collection. Possible fields can be 'favorites', 'project', or any other type of collection.",
972
+ maxLength: 64,
973
+ },
974
+ title: {
975
+ type: 'string',
976
+ description: "Display name for this collection (e.g. 'Q1 2025 Impact Projects')",
977
+ maxLength: 800,
978
+ maxGraphemes: 80,
979
+ },
980
+ shortDescription: {
981
+ type: 'string',
982
+ maxLength: 3000,
983
+ maxGraphemes: 300,
984
+ description: 'Short summary of this collection, suitable for previews and list views',
985
+ },
986
+ description: {
987
+ type: 'ref',
988
+ ref: 'lex:pub.leaflet.pages.linearDocument#main',
989
+ description: 'Rich-text description, represented as a Leaflet linear document.',
990
+ },
991
+ avatar: {
992
+ type: 'union',
993
+ refs: [
994
+ 'lex:org.hypercerts.defs#uri',
995
+ 'lex:org.hypercerts.defs#smallImage',
996
+ ],
997
+ description: "The collection's avatar/profile image as a URI or image blob.",
998
+ },
999
+ banner: {
1000
+ type: 'union',
1001
+ refs: [
1002
+ 'lex:org.hypercerts.defs#uri',
1003
+ 'lex:org.hypercerts.defs#largeImage',
1004
+ ],
1005
+ description: 'Larger horizontal image to display behind the collection view.',
1006
+ },
1007
+ items: {
1008
+ type: 'array',
1009
+ description: 'Array of items in this collection with optional weights.',
1010
+ maxLength: 1000,
1011
+ items: {
1012
+ type: 'ref',
1013
+ ref: 'lex:org.hypercerts.collection#item',
1014
+ },
1015
+ },
1016
+ location: {
1017
+ type: 'ref',
1018
+ ref: 'lex:com.atproto.repo.strongRef',
1019
+ description: "A strong reference to the location where this collection's activities were performed. The record referenced must conform with the lexicon app.certified.location.",
1020
+ },
1021
+ createdAt: {
1022
+ type: 'string',
1023
+ format: 'datetime',
1024
+ description: 'Client-declared timestamp when this record was originally created',
1025
+ },
1026
+ },
1027
+ },
1028
+ },
1029
+ item: {
568
1030
  type: 'object',
569
- description: 'Overall score for an evaluation on a numeric scale.',
570
- required: ['min', 'max', 'value'],
1031
+ required: ['itemIdentifier'],
571
1032
  properties: {
572
- min: {
573
- type: 'integer',
574
- description: 'Minimum value of the scale, e.g. 0 or 1.',
1033
+ itemIdentifier: {
1034
+ type: 'ref',
1035
+ ref: 'lex:com.atproto.repo.strongRef',
1036
+ description: 'Strong reference to an item in this collection. Items can be activities (org.hypercerts.claim.activity) and/or other collections (org.hypercerts.collection).',
575
1037
  },
576
- max: {
577
- type: 'integer',
578
- description: 'Maximum value of the scale, e.g. 5 or 10.',
1038
+ itemWeight: {
1039
+ type: 'string',
1040
+ description: 'Optional weight for this item (positive numeric value stored as string). Weights do not need to sum to a specific total; normalization can be performed by the consuming application as needed.',
1041
+ maxLength: 100,
579
1042
  },
580
- value: {
581
- type: 'integer',
582
- description: 'Score within the inclusive range [min, max].',
1043
+ },
1044
+ },
1045
+ },
1046
+ },
1047
+ OrgHypercertsContextAcknowledgement: {
1048
+ lexicon: 1,
1049
+ id: 'org.hypercerts.context.acknowledgement',
1050
+ defs: {
1051
+ main: {
1052
+ type: 'record',
1053
+ description: "Acknowledges a record (subject) or its relationship in a context. Created in the acknowledging actor's repo to form a bidirectional link. Examples: a contributor acknowledging inclusion in an activity, an activity owner acknowledging inclusion in a collection, or a record owner acknowledging an evaluation.",
1054
+ key: 'tid',
1055
+ record: {
1056
+ type: 'object',
1057
+ required: ['subject', 'acknowledged', 'createdAt'],
1058
+ properties: {
1059
+ subject: {
1060
+ type: 'ref',
1061
+ ref: 'lex:com.atproto.repo.strongRef',
1062
+ description: 'The record being acknowledged (e.g. an activity, a contributor information record, an evaluation).',
1063
+ },
1064
+ context: {
1065
+ type: 'union',
1066
+ refs: [
1067
+ 'lex:org.hypercerts.defs#uri',
1068
+ 'lex:com.atproto.repo.strongRef',
1069
+ ],
1070
+ description: 'Context for the acknowledgement (e.g. the collection that includes an activity, or the activity that includes a contributor). A URI for a lightweight reference or a strong reference for content-hash verification.',
1071
+ },
1072
+ acknowledged: {
1073
+ type: 'boolean',
1074
+ description: 'Whether the relationship is acknowledged (true) or rejected (false).',
1075
+ },
1076
+ comment: {
1077
+ type: 'string',
1078
+ description: 'Optional plain-text comment providing additional context or reasoning.',
1079
+ maxLength: 10000,
1080
+ maxGraphemes: 1000,
1081
+ },
1082
+ createdAt: {
1083
+ type: 'string',
1084
+ format: 'datetime',
1085
+ description: 'Client-declared timestamp when this record was originally created.',
1086
+ },
1087
+ },
1088
+ },
1089
+ },
1090
+ },
1091
+ },
1092
+ OrgHypercertsContextAttachment: {
1093
+ lexicon: 1,
1094
+ id: 'org.hypercerts.context.attachment',
1095
+ defs: {
1096
+ main: {
1097
+ type: 'record',
1098
+ description: 'An attachment providing commentary, context, evidence, or documentary material related to a hypercert record (e.g. an activity, project, claim, or evaluation).',
1099
+ key: 'tid',
1100
+ record: {
1101
+ type: 'object',
1102
+ required: ['title', 'createdAt'],
1103
+ properties: {
1104
+ subjects: {
1105
+ type: 'array',
1106
+ description: 'References to the subject(s) the attachment is connected to—this may be an activity claim, outcome claim, measurement, evaluation, or even another attachment. This is optional as the attachment can exist before the claim is recorded.',
1107
+ items: {
1108
+ type: 'ref',
1109
+ ref: 'lex:com.atproto.repo.strongRef',
1110
+ },
1111
+ maxLength: 100,
1112
+ },
1113
+ contentType: {
1114
+ type: 'string',
1115
+ maxLength: 64,
1116
+ description: 'The type of attachment, e.g. report, audit, evidence, testimonial, methodology, etc.',
1117
+ },
1118
+ content: {
1119
+ type: 'array',
1120
+ description: 'The files, documents, or external references included in this attachment record.',
1121
+ items: {
1122
+ type: 'union',
1123
+ refs: [
1124
+ 'lex:org.hypercerts.defs#uri',
1125
+ 'lex:org.hypercerts.defs#smallBlob',
1126
+ ],
1127
+ },
1128
+ maxLength: 100,
1129
+ },
1130
+ title: {
1131
+ type: 'string',
1132
+ maxLength: 256,
1133
+ description: "Display title for this attachment (e.g. 'Impact Assessment Report', 'Audit Findings')",
1134
+ },
1135
+ shortDescription: {
1136
+ type: 'string',
1137
+ description: 'Short summary of this attachment, suitable for previews and list views. Rich text annotations may be provided via `shortDescriptionFacets`.',
1138
+ maxLength: 3000,
1139
+ maxGraphemes: 300,
1140
+ },
1141
+ shortDescriptionFacets: {
1142
+ type: 'array',
1143
+ description: 'Rich text annotations for `shortDescription` (mentions, URLs, hashtags, etc).',
1144
+ items: {
1145
+ type: 'ref',
1146
+ ref: 'lex:app.bsky.richtext.facet',
1147
+ },
1148
+ },
1149
+ description: {
1150
+ type: 'ref',
1151
+ ref: 'lex:pub.leaflet.pages.linearDocument#main',
1152
+ description: 'Rich-text description, represented as a Leaflet linear document.',
1153
+ },
1154
+ location: {
1155
+ type: 'ref',
1156
+ ref: 'lex:com.atproto.repo.strongRef',
1157
+ description: "A strong reference to the location where this attachment's subject matter occurred. The record referenced must conform with the lexicon app.certified.location.",
1158
+ },
1159
+ createdAt: {
1160
+ type: 'string',
1161
+ format: 'datetime',
1162
+ description: 'Client-declared timestamp when this record was originally created.',
1163
+ },
583
1164
  },
584
1165
  },
585
1166
  },
1167
+ },
1168
+ },
1169
+ OrgHypercertsContextEvaluation: {
1170
+ lexicon: 1,
1171
+ id: 'org.hypercerts.context.evaluation',
1172
+ defs: {
586
1173
  main: {
587
1174
  type: 'record',
588
1175
  description: 'An evaluation of a hypercert record (e.g. an activity and its impact).',
@@ -594,7 +1181,7 @@ const schemaDict = {
594
1181
  subject: {
595
1182
  type: 'ref',
596
1183
  ref: 'lex:com.atproto.repo.strongRef',
597
- description: 'A strong reference to what is being evaluated. (e.g activity, measurement, contribution, etc.)',
1184
+ description: 'A strong reference to what is being evaluated (e.g. activity, measurement, contribution, etc.)',
598
1185
  },
599
1186
  evaluators: {
600
1187
  type: 'array',
@@ -619,7 +1206,7 @@ const schemaDict = {
619
1206
  },
620
1207
  measurements: {
621
1208
  type: 'array',
622
- description: 'Optional references to the measurements that contributed to this evaluation. The record(s) referenced must conform with the lexicon org.hypercerts.claim.measurement',
1209
+ description: 'Optional references to the measurements that contributed to this evaluation. The record(s) referenced must conform with the lexicon org.hypercerts.context.measurement',
623
1210
  items: {
624
1211
  type: 'ref',
625
1212
  ref: 'lex:com.atproto.repo.strongRef',
@@ -634,7 +1221,7 @@ const schemaDict = {
634
1221
  },
635
1222
  score: {
636
1223
  type: 'ref',
637
- ref: 'lex:org.hypercerts.claim.evaluation#score',
1224
+ ref: 'lex:org.hypercerts.context.evaluation#score',
638
1225
  description: 'Optional overall score for this evaluation on a numeric scale.',
639
1226
  },
640
1227
  location: {
@@ -650,101 +1237,82 @@ const schemaDict = {
650
1237
  },
651
1238
  },
652
1239
  },
1240
+ score: {
1241
+ type: 'object',
1242
+ description: 'Overall score for an evaluation on a numeric scale.',
1243
+ required: ['min', 'max', 'value'],
1244
+ properties: {
1245
+ min: {
1246
+ type: 'integer',
1247
+ description: 'Minimum value of the scale, e.g. 0 or 1.',
1248
+ },
1249
+ max: {
1250
+ type: 'integer',
1251
+ description: 'Maximum value of the scale, e.g. 5 or 10.',
1252
+ },
1253
+ value: {
1254
+ type: 'integer',
1255
+ description: 'Score within the inclusive range [min, max].',
1256
+ },
1257
+ },
1258
+ },
653
1259
  },
654
1260
  },
655
- OrgHypercertsClaimEvidence: {
1261
+ OrgHypercertsContextMeasurement: {
656
1262
  lexicon: 1,
657
- id: 'org.hypercerts.claim.evidence',
1263
+ id: 'org.hypercerts.context.measurement',
658
1264
  defs: {
659
1265
  main: {
660
1266
  type: 'record',
661
- description: 'A piece of evidence related to a hypercert record (e.g. an activity, project, claim, or evaluation). Evidence may support, clarify, or challenge the referenced subject.',
1267
+ description: 'Measurement data related to one or more records (e.g. activities, projects, etc.).',
662
1268
  key: 'tid',
663
1269
  record: {
664
1270
  type: 'object',
665
- required: ['content', 'title', 'createdAt'],
1271
+ required: ['metric', 'unit', 'value', 'createdAt'],
666
1272
  properties: {
667
- subject: {
668
- type: 'ref',
669
- ref: 'lex:com.atproto.repo.strongRef',
670
- description: 'A strong reference to the record this evidence relates to (e.g. an activity, project, claim, or evaluation).',
671
- },
672
- content: {
673
- type: 'union',
674
- refs: [
675
- 'lex:org.hypercerts.defs#uri',
676
- 'lex:org.hypercerts.defs#smallBlob',
677
- ],
678
- description: 'A piece of evidence (URI or blob) related to the subject record; it may support, clarify, or challenge a hypercert claim.',
1273
+ subjects: {
1274
+ type: 'array',
1275
+ description: 'Strong references to the records this measurement refers to (e.g. activities, projects, or claims).',
1276
+ items: {
1277
+ type: 'ref',
1278
+ ref: 'lex:com.atproto.repo.strongRef',
1279
+ },
1280
+ maxLength: 100,
679
1281
  },
680
- title: {
1282
+ metric: {
681
1283
  type: 'string',
682
- maxLength: 256,
683
- description: 'Title to describe the nature of the evidence.',
1284
+ description: 'The metric being measured, e.g. forest area restored, number of users, etc.',
1285
+ maxLength: 500,
684
1286
  },
685
- shortDescription: {
1287
+ unit: {
686
1288
  type: 'string',
687
- maxLength: 3000,
688
- maxGraphemes: 300,
689
- description: 'Short description explaining what this evidence shows.',
1289
+ description: 'The unit of the measured value (e.g. kg CO₂e, hectares, %, index score).',
1290
+ maxLength: 50,
690
1291
  },
691
- description: {
1292
+ value: {
692
1293
  type: 'string',
693
- description: 'Longer description describing the evidence in more detail.',
694
- maxLength: 30000,
695
- maxGraphemes: 3000,
1294
+ description: "The measured value as a numeric string (e.g. '1234.56')",
1295
+ maxLength: 500,
696
1296
  },
697
- relationType: {
1297
+ startDate: {
698
1298
  type: 'string',
699
- description: 'How this evidence relates to the subject.',
700
- knownValues: ['supports', 'challenges', 'clarifies'],
1299
+ format: 'datetime',
1300
+ description: 'The start date and time when the measurement began.',
701
1301
  },
702
- createdAt: {
1302
+ endDate: {
703
1303
  type: 'string',
704
1304
  format: 'datetime',
705
- description: 'Client-declared timestamp when this record was originally created',
706
- },
707
- },
708
- },
709
- },
710
- },
711
- },
712
- OrgHypercertsClaimMeasurement: {
713
- lexicon: 1,
714
- id: 'org.hypercerts.claim.measurement',
715
- defs: {
716
- main: {
717
- type: 'record',
718
- description: 'Measurement data related to a hypercert record (e.g. an activity and its impact).',
719
- key: 'tid',
720
- record: {
721
- type: 'object',
722
- required: ['measurers', 'metric', 'value', 'createdAt'],
723
- properties: {
724
- subject: {
725
- type: 'ref',
726
- ref: 'lex:com.atproto.repo.strongRef',
727
- description: 'A strong reference to the record this measurement refers to (e.g. an activity, project, or claim).',
1305
+ description: 'The end date and time when the measurement ended. For one-time measurements, this should equal the start date.',
728
1306
  },
729
- measurers: {
1307
+ locations: {
730
1308
  type: 'array',
731
- description: 'DIDs of the entity (or entities) that measured this data',
1309
+ description: 'Optional geographic references related to where the measurement was taken. Each referenced record must conform with the app.certified.location lexicon.',
732
1310
  items: {
733
1311
  type: 'ref',
734
- ref: 'lex:app.certified.defs#did',
1312
+ ref: 'lex:com.atproto.repo.strongRef',
735
1313
  },
736
1314
  maxLength: 100,
737
1315
  },
738
- metric: {
739
- type: 'string',
740
- description: 'The metric being measured',
741
- maxLength: 500,
742
- },
743
- value: {
744
- type: 'string',
745
- description: 'The measured value',
746
- maxLength: 500,
747
- },
748
1316
  methodType: {
749
1317
  type: 'string',
750
1318
  description: 'Short identifier for the measurement methodology',
@@ -764,59 +1332,28 @@ const schemaDict = {
764
1332
  },
765
1333
  maxLength: 50,
766
1334
  },
767
- location: {
768
- type: 'ref',
769
- ref: 'lex:com.atproto.repo.strongRef',
770
- description: 'A strong reference to the location where the measurement was taken. The record referenced must conform with the lexicon app.certified.location',
771
- },
772
- createdAt: {
773
- type: 'string',
774
- format: 'datetime',
775
- description: 'Client-declared timestamp when this record was originally created',
776
- },
777
- },
778
- },
779
- },
780
- },
781
- },
782
- OrgHypercertsClaimRights: {
783
- lexicon: 1,
784
- id: 'org.hypercerts.claim.rights',
785
- defs: {
786
- main: {
787
- type: 'record',
788
- description: 'Describes the rights that a contributor and/or an owner has, such as whether the hypercert can be sold, transferred, and under what conditions.',
789
- key: 'tid',
790
- record: {
791
- type: 'object',
792
- required: [
793
- 'rightsName',
794
- 'rightsType',
795
- 'rightsDescription',
796
- 'createdAt',
797
- ],
798
- properties: {
799
- rightsName: {
800
- type: 'string',
801
- description: 'Full name of the rights',
1335
+ measurers: {
1336
+ type: 'array',
1337
+ description: 'DIDs of the entities that performed this measurement',
1338
+ items: {
1339
+ type: 'ref',
1340
+ ref: 'lex:app.certified.defs#did',
1341
+ },
802
1342
  maxLength: 100,
803
1343
  },
804
- rightsType: {
805
- type: 'string',
806
- description: 'Short rights identifier for easier search',
807
- maxLength: 10,
808
- },
809
- rightsDescription: {
1344
+ comment: {
810
1345
  type: 'string',
811
- description: 'Description of the rights of this hypercert',
1346
+ description: 'Short comment of this measurement, suitable for previews and list views. Rich text annotations may be provided via `commentFacets`.',
1347
+ maxLength: 3000,
1348
+ maxGraphemes: 300,
812
1349
  },
813
- attachment: {
814
- type: 'union',
815
- refs: [
816
- 'lex:org.hypercerts.defs#uri',
817
- 'lex:org.hypercerts.defs#smallBlob',
818
- ],
819
- description: 'An attachment to define the rights further, e.g. a legal document.',
1350
+ commentFacets: {
1351
+ type: 'array',
1352
+ description: 'Rich text annotations for `comment` (mentions, URLs, hashtags, etc).',
1353
+ items: {
1354
+ type: 'ref',
1355
+ ref: 'lex:app.bsky.richtext.facet',
1356
+ },
820
1357
  },
821
1358
  createdAt: {
822
1359
  type: 'string',
@@ -831,6 +1368,7 @@ const schemaDict = {
831
1368
  OrgHypercertsDefs: {
832
1369
  lexicon: 1,
833
1370
  id: 'org.hypercerts.defs',
1371
+ description: 'Common type definitions used across all Hypercerts protocols.',
834
1372
  defs: {
835
1373
  uri: {
836
1374
  type: 'object',
@@ -840,7 +1378,6 @@ const schemaDict = {
840
1378
  uri: {
841
1379
  type: 'string',
842
1380
  format: 'uri',
843
- maxGraphemes: 1024,
844
1381
  description: 'URI to external data',
845
1382
  },
846
1383
  },
@@ -884,6 +1421,19 @@ const schemaDict = {
884
1421
  },
885
1422
  },
886
1423
  },
1424
+ smallVideo: {
1425
+ type: 'object',
1426
+ required: ['video'],
1427
+ description: 'Object containing a small video',
1428
+ properties: {
1429
+ video: {
1430
+ type: 'blob',
1431
+ accept: ['video/mp4', 'video/webm'],
1432
+ maxSize: 20971520,
1433
+ description: 'Video (up to 20MB)',
1434
+ },
1435
+ },
1436
+ },
887
1437
  largeImage: {
888
1438
  type: 'object',
889
1439
  required: ['image'],
@@ -897,94 +1447,6 @@ const schemaDict = {
897
1447
  },
898
1448
  },
899
1449
  },
900
- workScopeAll: {
901
- type: 'object',
902
- required: ['op', 'args'],
903
- description: 'Logical AND operation: all arguments must be satisfied.',
904
- properties: {
905
- op: {
906
- type: 'string',
907
- const: 'all',
908
- description: "Operator type: 'all' (logical AND)",
909
- },
910
- args: {
911
- type: 'array',
912
- items: {
913
- type: 'union',
914
- refs: [
915
- 'lex:org.hypercerts.defs#workScopeAll',
916
- 'lex:org.hypercerts.defs#workScopeAny',
917
- 'lex:org.hypercerts.defs#workScopeNot',
918
- 'lex:org.hypercerts.defs#workScopeAtom',
919
- ],
920
- },
921
- minLength: 1,
922
- maxLength: 100,
923
- description: 'Array of work scope expressions that must all be satisfied',
924
- },
925
- },
926
- },
927
- workScopeAny: {
928
- type: 'object',
929
- required: ['op', 'args'],
930
- description: 'Logical OR operation: at least one argument must be satisfied.',
931
- properties: {
932
- op: {
933
- type: 'string',
934
- const: 'any',
935
- description: "Operator type: 'any' (logical OR)",
936
- },
937
- args: {
938
- type: 'array',
939
- items: {
940
- type: 'union',
941
- refs: [
942
- 'lex:org.hypercerts.defs#workScopeAll',
943
- 'lex:org.hypercerts.defs#workScopeAny',
944
- 'lex:org.hypercerts.defs#workScopeNot',
945
- 'lex:org.hypercerts.defs#workScopeAtom',
946
- ],
947
- },
948
- minLength: 1,
949
- maxLength: 100,
950
- description: 'Array of work scope expressions, at least one of which must be satisfied',
951
- },
952
- },
953
- },
954
- workScopeNot: {
955
- type: 'object',
956
- required: ['op', 'arg'],
957
- description: 'Logical NOT operation: the argument must not be satisfied.',
958
- properties: {
959
- op: {
960
- type: 'string',
961
- const: 'not',
962
- description: "Operator type: 'not' (logical NOT)",
963
- },
964
- arg: {
965
- type: 'union',
966
- refs: [
967
- 'lex:org.hypercerts.defs#workScopeAll',
968
- 'lex:org.hypercerts.defs#workScopeAny',
969
- 'lex:org.hypercerts.defs#workScopeNot',
970
- 'lex:org.hypercerts.defs#workScopeAtom',
971
- ],
972
- description: 'Work scope expression that must not be satisfied',
973
- },
974
- },
975
- },
976
- workScopeAtom: {
977
- type: 'object',
978
- required: ['atom'],
979
- description: 'Atomic scope reference: a strong reference to a scope record.',
980
- properties: {
981
- atom: {
982
- type: 'ref',
983
- ref: 'lex:com.atproto.repo.strongRef',
984
- description: 'Strong reference to an org.hypercerts.helper.workScopeTag record',
985
- },
986
- },
987
- },
988
1450
  },
989
1451
  },
990
1452
  OrgHypercertsFundingReceipt: {
@@ -1007,26 +1469,32 @@ const schemaDict = {
1007
1469
  to: {
1008
1470
  type: 'string',
1009
1471
  description: 'The recipient of the funds. Can be identified by DID or a clear-text name.',
1472
+ maxLength: 2048,
1010
1473
  },
1011
1474
  amount: {
1012
1475
  type: 'string',
1013
- description: 'Amount of funding received.',
1476
+ description: "Amount of funding received as a numeric string (e.g. '1000.50').",
1477
+ maxLength: 50,
1014
1478
  },
1015
1479
  currency: {
1016
1480
  type: 'string',
1017
1481
  description: 'Currency of the payment (e.g. EUR, USD, ETH).',
1482
+ maxLength: 10,
1018
1483
  },
1019
1484
  paymentRail: {
1020
1485
  type: 'string',
1021
1486
  description: 'How the funds were transferred (e.g. bank_transfer, credit_card, onchain, cash, check, payment_processor).',
1487
+ maxLength: 50,
1022
1488
  },
1023
1489
  paymentNetwork: {
1024
1490
  type: 'string',
1025
1491
  description: 'Optional network within the payment rail (e.g. arbitrum, ethereum, sepa, visa, paypal).',
1492
+ maxLength: 50,
1026
1493
  },
1027
1494
  transactionId: {
1028
1495
  type: 'string',
1029
1496
  description: 'Identifier of the underlying payment transaction (e.g. bank reference, onchain transaction hash, or processor-specific ID). Use paymentNetwork to specify the network where applicable.',
1497
+ maxLength: 256,
1030
1498
  },
1031
1499
  for: {
1032
1500
  type: 'string',
@@ -1053,36 +1521,71 @@ const schemaDict = {
1053
1521
  },
1054
1522
  },
1055
1523
  },
1056
- OrgHypercertsHelperWorkScopeTag: {
1524
+ OrgHypercertsWorkscopeCel: {
1525
+ lexicon: 1,
1526
+ id: 'org.hypercerts.workscope.cel',
1527
+ defs: {
1528
+ main: {
1529
+ type: 'object',
1530
+ description: "A structured, machine-evaluable work scope definition using CEL (Common Expression Language). Tags referenced in the expression correspond to org.hypercerts.workscope.tag keys. See https://github.com/google/cel-spec. Note: this is intentionally type 'object' (not 'record') so it can be directly embedded inline in union types (e.g., activity.workScope) without requiring a separate collection or strongRef indirection.",
1531
+ required: ['expression', 'usedTags', 'version', 'createdAt'],
1532
+ properties: {
1533
+ expression: {
1534
+ type: 'string',
1535
+ maxLength: 10000,
1536
+ maxGraphemes: 5000,
1537
+ description: "A CEL expression encoding the work scope conditions. Example: scope.hasAll(['mangrove_restoration', 'environmental_education']) && location.country == 'KE'",
1538
+ },
1539
+ usedTags: {
1540
+ type: 'array',
1541
+ items: {
1542
+ type: 'ref',
1543
+ ref: 'lex:com.atproto.repo.strongRef',
1544
+ },
1545
+ maxLength: 100,
1546
+ description: 'Strong references to org.hypercerts.workscope.tag records used in the expression. Enables fast indexing by AT-URI and provides referential integrity to the underlying tag records.',
1547
+ },
1548
+ version: {
1549
+ type: 'string',
1550
+ maxLength: 16,
1551
+ knownValues: ['v1'],
1552
+ description: 'CEL context schema version.',
1553
+ },
1554
+ createdAt: {
1555
+ type: 'string',
1556
+ format: 'datetime',
1557
+ description: 'Client-declared timestamp when this expression was originally created.',
1558
+ },
1559
+ },
1560
+ },
1561
+ },
1562
+ },
1563
+ OrgHypercertsWorkscopeTag: {
1057
1564
  lexicon: 1,
1058
- id: 'org.hypercerts.helper.workScopeTag',
1565
+ id: 'org.hypercerts.workscope.tag',
1059
1566
  defs: {
1060
1567
  main: {
1061
1568
  type: 'record',
1062
- description: 'A reusable scope atom for work scope logic expressions. Scopes can represent topics, languages, domains, deliverables, methods, regions, tags, or other categorical labels.',
1569
+ description: 'A reusable scope atom for work scope logic expressions. Scopes can represent topics, languages, domains, deliverables, methods, regions, tags, or other categorical labels. Tags are composed into structured expressions via CEL (Common Expression Language) on activity records.',
1063
1570
  key: 'tid',
1064
1571
  record: {
1065
1572
  type: 'object',
1066
- required: ['createdAt', 'key', 'label'],
1573
+ required: ['key', 'name', 'createdAt'],
1067
1574
  properties: {
1068
- createdAt: {
1069
- type: 'string',
1070
- format: 'datetime',
1071
- description: 'Client-declared timestamp when this record was originally created',
1072
- },
1073
1575
  key: {
1074
1576
  type: 'string',
1075
- description: "Lowercase, hyphenated machine-readable key for this scope (e.g., 'ipfs', 'go-lang', 'filecoin').",
1577
+ description: "Lowercase, underscore-separated machine-readable key for this scope (e.g., 'mangrove_restoration', 'biodiversity_monitoring'). Used as the canonical identifier in CEL expressions.",
1076
1578
  maxLength: 120,
1077
1579
  },
1078
- label: {
1580
+ name: {
1079
1581
  type: 'string',
1080
- description: 'Human-readable label for this scope.',
1582
+ description: 'Human-readable name for this scope.',
1081
1583
  maxLength: 200,
1082
1584
  },
1083
- kind: {
1585
+ category: {
1084
1586
  type: 'string',
1085
- description: 'Category type of this scope. Recommended values: topic, language, domain, method, tag.',
1587
+ description: 'Category type of this scope.',
1588
+ knownValues: ['topic', 'language', 'domain', 'method'],
1086
1589
  maxLength: 50,
1087
1590
  },
1088
1591
  description: {
@@ -1094,7 +1597,18 @@ const schemaDict = {
1094
1597
  parent: {
1095
1598
  type: 'ref',
1096
1599
  ref: 'lex:com.atproto.repo.strongRef',
1097
- description: 'Optional strong reference to a parent scope record for taxonomy/hierarchy support.',
1600
+ description: 'Optional strong reference to a parent work scope tag record for taxonomy/hierarchy support. The record referenced must conform with the lexicon org.hypercerts.workscope.tag.',
1601
+ },
1602
+ status: {
1603
+ type: 'string',
1604
+ description: 'Lifecycle status of this tag. Communities propose tags, curators accept them, deprecated tags point to replacements via supersededBy.',
1605
+ knownValues: ['proposed', 'accepted', 'deprecated'],
1606
+ maxLength: 20,
1607
+ },
1608
+ supersededBy: {
1609
+ type: 'ref',
1610
+ ref: 'lex:com.atproto.repo.strongRef',
1611
+ description: "When status is 'deprecated', points to the replacement work scope tag record. The record referenced must conform with the lexicon org.hypercerts.workscope.tag.",
1098
1612
  },
1099
1613
  aliases: {
1100
1614
  type: 'array',
@@ -1103,15 +1617,30 @@ const schemaDict = {
1103
1617
  maxLength: 200,
1104
1618
  },
1105
1619
  maxLength: 50,
1106
- description: 'Optional array of alternative names or identifiers for this scope.',
1620
+ description: 'Alternative human-readable names for this scope (e.g., translations, abbreviations, or common synonyms). Unlike sameAs, these are plain-text labels, not links to external ontologies.',
1621
+ },
1622
+ sameAs: {
1623
+ type: 'array',
1624
+ items: {
1625
+ type: 'string',
1626
+ format: 'uri',
1627
+ maxLength: 2048,
1628
+ },
1629
+ maxLength: 20,
1630
+ description: 'URIs to semantically equivalent concepts in external ontologies or taxonomies (e.g., Wikidata QIDs, ENVO terms, SDG targets). Used for interoperability, not as documentation.',
1107
1631
  },
1108
- externalReference: {
1632
+ referenceDocument: {
1109
1633
  type: 'union',
1110
1634
  refs: [
1111
1635
  'lex:org.hypercerts.defs#uri',
1112
1636
  'lex:org.hypercerts.defs#smallBlob',
1113
1637
  ],
1114
- description: 'Optional external reference for this scope as a URI or blob.',
1638
+ description: 'Link to a governance or reference document where this work scope tag is defined and further explained.',
1639
+ },
1640
+ createdAt: {
1641
+ type: 'string',
1642
+ format: 'datetime',
1643
+ description: 'Client-declared timestamp when this record was originally created.',
1115
1644
  },
1116
1645
  },
1117
1646
  },
@@ -1130,23 +1659,29 @@ function validate(v, id, hash, requiredType) {
1130
1659
  };
1131
1660
  }
1132
1661
  const ids = {
1662
+ AppCertifiedActorOrganization: 'app.certified.actor.organization',
1663
+ AppCertifiedActorProfile: 'app.certified.actor.profile',
1133
1664
  AppCertifiedBadgeAward: 'app.certified.badge.award',
1134
1665
  AppCertifiedBadgeDefinition: 'app.certified.badge.definition',
1135
1666
  AppCertifiedBadgeResponse: 'app.certified.badge.response',
1136
1667
  AppCertifiedDefs: 'app.certified.defs',
1137
1668
  AppCertifiedLocation: 'app.certified.location',
1138
1669
  ComAtprotoRepoStrongRef: 'com.atproto.repo.strongRef',
1670
+ OrgHyperboardsBoard: 'org.hyperboards.board',
1671
+ OrgHyperboardsDisplayProfile: 'org.hyperboards.displayProfile',
1139
1672
  OrgHypercertsClaimActivity: 'org.hypercerts.claim.activity',
1140
- OrgHypercertsClaimCollection: 'org.hypercerts.claim.collection',
1141
- OrgHypercertsClaimContributionDetails: 'org.hypercerts.claim.contributionDetails',
1673
+ OrgHypercertsClaimContribution: 'org.hypercerts.claim.contribution',
1142
1674
  OrgHypercertsClaimContributorInformation: 'org.hypercerts.claim.contributorInformation',
1143
- OrgHypercertsClaimEvaluation: 'org.hypercerts.claim.evaluation',
1144
- OrgHypercertsClaimEvidence: 'org.hypercerts.claim.evidence',
1145
- OrgHypercertsClaimMeasurement: 'org.hypercerts.claim.measurement',
1146
1675
  OrgHypercertsClaimRights: 'org.hypercerts.claim.rights',
1676
+ OrgHypercertsCollection: 'org.hypercerts.collection',
1677
+ OrgHypercertsContextAcknowledgement: 'org.hypercerts.context.acknowledgement',
1678
+ OrgHypercertsContextAttachment: 'org.hypercerts.context.attachment',
1679
+ OrgHypercertsContextEvaluation: 'org.hypercerts.context.evaluation',
1680
+ OrgHypercertsContextMeasurement: 'org.hypercerts.context.measurement',
1147
1681
  OrgHypercertsDefs: 'org.hypercerts.defs',
1148
1682
  OrgHypercertsFundingReceipt: 'org.hypercerts.funding.receipt',
1149
- OrgHypercertsHelperWorkScopeTag: 'org.hypercerts.helper.workScopeTag',
1683
+ OrgHypercertsWorkscopeCel: 'org.hypercerts.workscope.cel',
1684
+ OrgHypercertsWorkscopeTag: 'org.hypercerts.workscope.tag',
1150
1685
  };
1151
1686
 
1152
1687
  exports.ids = ids;