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