@hypercerts-org/lexicon 0.10.0-beta.15 → 0.10.0-beta.16

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 (141) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +50 -12
  3. package/SCHEMAS.md +293 -169
  4. package/dist/exports.d.ts +566 -179
  5. package/dist/exports.d.ts.map +1 -1
  6. package/dist/generated/exports.d.ts +566 -179
  7. package/dist/generated/exports.d.ts.map +1 -1
  8. package/dist/generated/lexicons.d.ts +1199 -465
  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 +4 -1
  13. package/dist/generated/types/app/certified/actor/profile.d.ts.map +1 -1
  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/location.d.ts +2 -2
  19. package/dist/generated/types/app/certified/location.d.ts.map +1 -1
  20. package/dist/generated/types/org/hyperboards/board.d.ts +75 -0
  21. package/dist/generated/types/org/hyperboards/board.d.ts.map +1 -0
  22. package/dist/generated/types/org/hyperboards/displayProfile.d.ts +31 -0
  23. package/dist/generated/types/org/hyperboards/displayProfile.d.ts.map +1 -0
  24. package/dist/generated/types/org/hypercerts/claim/activity.d.ts +8 -9
  25. package/dist/generated/types/org/hypercerts/claim/activity.d.ts.map +1 -1
  26. package/dist/generated/types/org/hypercerts/claim/{contributionDetails.d.ts → contribution.d.ts} +6 -6
  27. package/dist/generated/types/org/hypercerts/claim/contribution.d.ts.map +1 -0
  28. package/dist/generated/types/org/hypercerts/claim/contributorInformation.d.ts +2 -2
  29. package/dist/generated/types/org/hypercerts/claim/contributorInformation.d.ts.map +1 -1
  30. package/dist/generated/types/org/hypercerts/claim/rights.d.ts +3 -3
  31. package/dist/generated/types/org/hypercerts/claim/rights.d.ts.map +1 -1
  32. package/dist/generated/types/org/hypercerts/{claim/collection.d.ts → collection.d.ts} +10 -10
  33. package/dist/generated/types/org/hypercerts/collection.d.ts.map +1 -0
  34. package/dist/generated/types/org/hypercerts/context/acknowledgement.d.ts +25 -0
  35. package/dist/generated/types/org/hypercerts/context/acknowledgement.d.ts.map +1 -0
  36. package/dist/generated/types/org/hypercerts/{claim → context}/attachment.d.ts +6 -8
  37. package/dist/generated/types/org/hypercerts/context/attachment.d.ts.map +1 -0
  38. package/dist/generated/types/org/hypercerts/{claim → context}/evaluation.d.ts +15 -15
  39. package/dist/generated/types/org/hypercerts/context/evaluation.d.ts.map +1 -0
  40. package/dist/{types/org/hypercerts/claim → generated/types/org/hypercerts/context}/measurement.d.ts +7 -6
  41. package/dist/generated/types/org/hypercerts/context/measurement.d.ts.map +1 -0
  42. package/dist/generated/types/org/hypercerts/defs.d.ts +8 -0
  43. package/dist/generated/types/org/hypercerts/defs.d.ts.map +1 -1
  44. package/dist/generated/types/org/hypercerts/funding/receipt.d.ts +1 -1
  45. package/dist/generated/types/org/hypercerts/funding/receipt.d.ts.map +1 -1
  46. package/dist/generated/types/org/hypercerts/workscope/cel.d.ts +20 -0
  47. package/dist/generated/types/org/hypercerts/workscope/cel.d.ts.map +1 -0
  48. package/dist/generated/types/org/hypercerts/workscope/tag.d.ts +36 -0
  49. package/dist/generated/types/org/hypercerts/workscope/tag.d.ts.map +1 -0
  50. package/dist/index.cjs +1822 -830
  51. package/dist/index.cjs.map +1 -1
  52. package/dist/index.mjs +1774 -798
  53. package/dist/index.mjs.map +1 -1
  54. package/dist/lexicons.cjs +651 -253
  55. package/dist/lexicons.cjs.map +1 -1
  56. package/dist/lexicons.d.ts +1199 -465
  57. package/dist/lexicons.d.ts.map +1 -1
  58. package/dist/lexicons.mjs +651 -253
  59. package/dist/lexicons.mjs.map +1 -1
  60. package/dist/types/app/certified/actor/organization.d.ts +32 -0
  61. package/dist/types/app/certified/actor/organization.d.ts.map +1 -0
  62. package/dist/types/app/certified/actor/profile.d.ts +4 -1
  63. package/dist/types/app/certified/actor/profile.d.ts.map +1 -1
  64. package/dist/types/app/certified/badge/award.d.ts +2 -0
  65. package/dist/types/app/certified/badge/award.d.ts.map +1 -1
  66. package/dist/types/app/certified/badge/response.d.ts +1 -1
  67. package/dist/types/app/certified/badge/response.d.ts.map +1 -1
  68. package/dist/types/app/certified/location.d.ts +2 -2
  69. package/dist/types/app/certified/location.d.ts.map +1 -1
  70. package/dist/types/org/hyperboards/board.d.ts +75 -0
  71. package/dist/types/org/hyperboards/board.d.ts.map +1 -0
  72. package/dist/types/org/hyperboards/displayProfile.d.ts +31 -0
  73. package/dist/types/org/hyperboards/displayProfile.d.ts.map +1 -0
  74. package/dist/types/org/hypercerts/claim/activity.d.ts +8 -9
  75. package/dist/types/org/hypercerts/claim/activity.d.ts.map +1 -1
  76. package/dist/types/org/hypercerts/claim/{contributionDetails.d.ts → contribution.d.ts} +6 -6
  77. package/dist/types/org/hypercerts/claim/contribution.d.ts.map +1 -0
  78. package/dist/types/org/hypercerts/claim/contributorInformation.d.ts +2 -2
  79. package/dist/types/org/hypercerts/claim/contributorInformation.d.ts.map +1 -1
  80. package/dist/types/org/hypercerts/claim/rights.d.ts +3 -3
  81. package/dist/types/org/hypercerts/claim/rights.d.ts.map +1 -1
  82. package/dist/types/org/hypercerts/{claim/collection.d.ts → collection.d.ts} +10 -10
  83. package/dist/types/org/hypercerts/collection.d.ts.map +1 -0
  84. package/dist/types/org/hypercerts/context/acknowledgement.d.ts +25 -0
  85. package/dist/types/org/hypercerts/context/acknowledgement.d.ts.map +1 -0
  86. package/dist/types/org/hypercerts/{claim → context}/attachment.d.ts +6 -8
  87. package/dist/types/org/hypercerts/context/attachment.d.ts.map +1 -0
  88. package/dist/types/org/hypercerts/{claim → context}/evaluation.d.ts +15 -15
  89. package/dist/types/org/hypercerts/context/evaluation.d.ts.map +1 -0
  90. package/dist/{generated/types/org/hypercerts/claim → types/org/hypercerts/context}/measurement.d.ts +7 -6
  91. package/dist/types/org/hypercerts/context/measurement.d.ts.map +1 -0
  92. package/dist/types/org/hypercerts/defs.d.ts +8 -0
  93. package/dist/types/org/hypercerts/defs.d.ts.map +1 -1
  94. package/dist/types/org/hypercerts/funding/receipt.d.ts +1 -1
  95. package/dist/types/org/hypercerts/funding/receipt.d.ts.map +1 -1
  96. package/dist/types/org/hypercerts/workscope/cel.d.ts +20 -0
  97. package/dist/types/org/hypercerts/workscope/cel.d.ts.map +1 -0
  98. package/dist/types/org/hypercerts/workscope/tag.d.ts +36 -0
  99. package/dist/types/org/hypercerts/workscope/tag.d.ts.map +1 -0
  100. package/lexicons/app/certified/actor/organization.json +70 -0
  101. package/lexicons/app/certified/actor/profile.json +13 -3
  102. package/lexicons/app/certified/badge/award.json +8 -1
  103. package/lexicons/app/certified/badge/definition.json +8 -3
  104. package/lexicons/app/certified/badge/response.json +3 -2
  105. package/lexicons/app/certified/location.json +2 -2
  106. package/lexicons/org/hyperboards/board.json +152 -0
  107. package/lexicons/org/hyperboards/displayProfile.json +64 -0
  108. package/lexicons/org/hypercerts/claim/activity.json +23 -29
  109. package/lexicons/org/hypercerts/claim/{contributionDetails.json → contribution.json} +4 -4
  110. package/lexicons/org/hypercerts/claim/contributorInformation.json +3 -2
  111. package/lexicons/org/hypercerts/claim/rights.json +5 -3
  112. package/lexicons/org/hypercerts/{claim/collection.json → collection.json} +9 -6
  113. package/lexicons/org/hypercerts/context/acknowledgement.json +42 -0
  114. package/lexicons/org/hypercerts/{claim → context}/attachment.json +6 -15
  115. package/lexicons/org/hypercerts/{claim → context}/evaluation.json +22 -22
  116. package/lexicons/org/hypercerts/{claim → context}/measurement.json +13 -9
  117. package/lexicons/org/hypercerts/defs.json +14 -1
  118. package/lexicons/org/hypercerts/funding/receipt.json +12 -6
  119. package/lexicons/org/hypercerts/workscope/cel.json +39 -0
  120. package/lexicons/org/hypercerts/workscope/tag.json +87 -0
  121. package/package.json +1 -1
  122. package/dist/generated/types/org/hypercerts/acknowledgement.d.ts +0 -21
  123. package/dist/generated/types/org/hypercerts/acknowledgement.d.ts.map +0 -1
  124. package/dist/generated/types/org/hypercerts/claim/attachment.d.ts.map +0 -1
  125. package/dist/generated/types/org/hypercerts/claim/collection.d.ts.map +0 -1
  126. package/dist/generated/types/org/hypercerts/claim/contributionDetails.d.ts.map +0 -1
  127. package/dist/generated/types/org/hypercerts/claim/evaluation.d.ts.map +0 -1
  128. package/dist/generated/types/org/hypercerts/claim/measurement.d.ts.map +0 -1
  129. package/dist/generated/types/org/hypercerts/helper/workScopeTag.d.ts +0 -31
  130. package/dist/generated/types/org/hypercerts/helper/workScopeTag.d.ts.map +0 -1
  131. package/dist/types/org/hypercerts/acknowledgement.d.ts +0 -21
  132. package/dist/types/org/hypercerts/acknowledgement.d.ts.map +0 -1
  133. package/dist/types/org/hypercerts/claim/attachment.d.ts.map +0 -1
  134. package/dist/types/org/hypercerts/claim/collection.d.ts.map +0 -1
  135. package/dist/types/org/hypercerts/claim/contributionDetails.d.ts.map +0 -1
  136. package/dist/types/org/hypercerts/claim/evaluation.d.ts.map +0 -1
  137. package/dist/types/org/hypercerts/claim/measurement.d.ts.map +0 -1
  138. package/dist/types/org/hypercerts/helper/workScopeTag.d.ts +0 -31
  139. package/dist/types/org/hypercerts/helper/workScopeTag.d.ts.map +0 -1
  140. package/lexicons/org/hypercerts/acknowledgement.json +0 -41
  141. package/lexicons/org/hypercerts/helper/workScopeTag.json +0 -65
package/dist/lexicons.mjs CHANGED
@@ -28,19 +28,91 @@ 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
+ },
31
101
  AppCertifiedActorProfile: {
32
102
  lexicon: 1,
33
103
  id: 'app.certified.actor.profile',
34
104
  defs: {
35
105
  main: {
36
106
  type: 'record',
37
- description: 'A declaration of a Hypercert account profile.',
107
+ description: 'A declaration of a Certified account profile.',
38
108
  key: 'literal:self',
39
109
  record: {
40
110
  type: 'object',
111
+ required: ['createdAt'],
41
112
  properties: {
42
113
  displayName: {
43
114
  type: 'string',
115
+ description: 'Display name for the account',
44
116
  maxGraphemes: 64,
45
117
  maxLength: 640,
46
118
  },
@@ -59,6 +131,7 @@ const schemaDict = {
59
131
  website: {
60
132
  type: 'string',
61
133
  format: 'uri',
134
+ description: 'Account website URL',
62
135
  },
63
136
  avatar: {
64
137
  type: 'union',
@@ -79,6 +152,7 @@ const schemaDict = {
79
152
  createdAt: {
80
153
  type: 'string',
81
154
  format: 'datetime',
155
+ description: 'Client-declared timestamp when this record was originally created',
82
156
  },
83
157
  },
84
158
  },
@@ -113,6 +187,13 @@ const schemaDict = {
113
187
  note: {
114
188
  type: 'string',
115
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,
116
197
  },
117
198
  createdAt: {
118
199
  type: 'string',
@@ -139,10 +220,12 @@ const schemaDict = {
139
220
  badgeType: {
140
221
  type: 'string',
141
222
  description: 'Category of the badge (e.g. endorsement, participation, affiliation).',
223
+ maxLength: 100,
142
224
  },
143
225
  title: {
144
226
  type: 'string',
145
227
  description: 'Human-readable title of the badge.',
228
+ maxLength: 256,
146
229
  },
147
230
  icon: {
148
231
  type: 'blob',
@@ -158,10 +241,13 @@ const schemaDict = {
158
241
  description: {
159
242
  type: 'string',
160
243
  description: 'Optional short statement describing what the badge represents.',
244
+ maxLength: 5000,
245
+ maxGraphemes: 500,
161
246
  },
162
247
  allowedIssuers: {
163
248
  type: 'array',
164
249
  description: 'Optional allowlist of DIDs allowed to issue this badge. If omitted, anyone may issue it.',
250
+ maxLength: 100,
165
251
  items: {
166
252
  type: 'ref',
167
253
  ref: 'lex:app.certified.defs#did',
@@ -196,12 +282,13 @@ const schemaDict = {
196
282
  },
197
283
  response: {
198
284
  type: 'string',
199
- enum: ['accepted', 'rejected'],
285
+ knownValues: ['accepted', 'rejected'],
200
286
  description: 'The recipient’s response for the badge (accepted or rejected).',
201
287
  },
202
288
  weight: {
203
289
  type: 'string',
204
290
  description: 'Optional relative weight for accepted badges, assigned by the recipient.',
291
+ maxLength: 50,
205
292
  },
206
293
  createdAt: {
207
294
  type: 'string',
@@ -288,13 +375,13 @@ const schemaDict = {
288
375
  },
289
376
  name: {
290
377
  type: 'string',
291
- description: 'Optional name for this location',
378
+ description: "Human-readable name for this location (e.g. 'Golden Gate Park', 'San Francisco Bay Area')",
292
379
  maxLength: 1000,
293
380
  maxGraphemes: 100,
294
381
  },
295
382
  description: {
296
383
  type: 'string',
297
- description: 'Optional description for this location',
384
+ description: 'Additional context about this location, such as its significance to the work or specific boundaries',
298
385
  maxLength: 2000,
299
386
  maxGraphemes: 500,
300
387
  },
@@ -342,36 +429,223 @@ const schemaDict = {
342
429
  },
343
430
  },
344
431
  },
345
- OrgHypercertsAcknowledgement: {
432
+ OrgHyperboardsBoard: {
346
433
  lexicon: 1,
347
- id: 'org.hypercerts.acknowledgement',
434
+ id: 'org.hyperboards.board',
348
435
  defs: {
349
436
  main: {
350
437
  type: 'record',
351
- description: "Acknowledges the inclusion of one record (subject) within another (context). Typically created in the subject owner's repo to form a bidirectional link. For example, a contributor acknowledging inclusion in an activity, or an activity owner acknowledging inclusion in a collection.",
438
+ description: "Configuration record for a hyperboard, wrapping an underlying activity or collection with visual presentation settings. Stored in the creator's PDS.",
352
439
  key: 'tid',
353
440
  record: {
354
441
  type: 'object',
355
- required: ['subject', 'context', 'acknowledged', 'createdAt'],
442
+ required: ['subject', 'createdAt'],
356
443
  properties: {
357
444
  subject: {
358
445
  type: 'ref',
359
446
  ref: 'lex:com.atproto.repo.strongRef',
360
- description: 'The record whose inclusion is being acknowledged (e.g. an activity, a contributor information record).',
447
+ description: 'Reference to the org.hypercerts.claim.activity or org.hypercerts.claim.collection this board visualizes.',
361
448
  },
362
- context: {
449
+ config: {
363
450
  type: 'ref',
364
- ref: 'lex:com.atproto.repo.strongRef',
365
- description: 'The record that includes the subject (e.g. a collection/project that includes an activity, or an activity that includes a contributor).',
451
+ ref: 'lex:org.hyperboards.board#boardConfig',
452
+ description: 'Board-level visual configuration (background, colors, aspect ratio).',
366
453
  },
367
- acknowledged: {
368
- type: 'boolean',
369
- description: 'Whether inclusion is acknowledged (true) or rejected (false).',
454
+ contributorConfigs: {
455
+ type: 'array',
456
+ description: 'Per-contributor configuration entries for this board.',
457
+ maxLength: 1000,
458
+ items: {
459
+ type: 'ref',
460
+ ref: 'lex:org.hyperboards.board#contributorConfig',
461
+ },
370
462
  },
371
- comment: {
463
+ createdAt: {
372
464
  type: 'string',
373
- description: 'Optional comment providing additional context or reasoning.',
374
- maxLength: 1000,
465
+ format: 'datetime',
466
+ description: 'Client-declared timestamp when this record was originally created.',
467
+ },
468
+ },
469
+ },
470
+ },
471
+ boardConfig: {
472
+ type: 'object',
473
+ description: "Visual configuration for a hyperboard's background, colors, and layout.",
474
+ properties: {
475
+ backgroundType: {
476
+ type: 'string',
477
+ description: 'Type of background content.',
478
+ knownValues: ['image', 'iframe'],
479
+ maxLength: 10,
480
+ },
481
+ backgroundImage: {
482
+ type: 'union',
483
+ refs: [
484
+ 'lex:org.hypercerts.defs#uri',
485
+ 'lex:org.hypercerts.defs#smallImage',
486
+ ],
487
+ description: 'Background image as a URI or image blob.',
488
+ },
489
+ backgroundIframeUrl: {
490
+ type: 'string',
491
+ format: 'uri',
492
+ description: 'URI of the background iframe.',
493
+ maxLength: 2048,
494
+ },
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: {
539
+ type: 'union',
540
+ refs: [
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',
577
+ ],
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,
591
+ },
592
+ },
593
+ },
594
+ },
595
+ },
596
+ OrgHyperboardsDisplayProfile: {
597
+ lexicon: 1,
598
+ id: 'org.hyperboards.displayProfile',
599
+ defs: {
600
+ main: {
601
+ type: 'record',
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',
604
+ record: {
605
+ type: 'object',
606
+ required: ['createdAt'],
607
+ properties: {
608
+ displayName: {
609
+ type: 'string',
610
+ description: 'Display name override for this user on hyperboards.',
611
+ maxLength: 640,
612
+ maxGraphemes: 64,
613
+ },
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,
375
649
  },
376
650
  createdAt: {
377
651
  type: 'string',
@@ -397,7 +671,7 @@ const schemaDict = {
397
671
  properties: {
398
672
  title: {
399
673
  type: 'string',
400
- description: 'Title of the hypercert.',
674
+ description: "Display title summarizing the impact work (e.g. 'Reforestation in Amazon Basin 2024')",
401
675
  maxLength: 256,
402
676
  },
403
677
  shortDescription: {
@@ -415,18 +689,9 @@ const schemaDict = {
415
689
  },
416
690
  },
417
691
  description: {
418
- type: 'string',
419
- description: 'Optional longer description of this activity claim, including context or interpretation. Rich text annotations may be provided via `descriptionFacets`.',
420
- maxLength: 30000,
421
- maxGraphemes: 3000,
422
- },
423
- descriptionFacets: {
424
- type: 'array',
425
- description: 'Rich text annotations for `description` (mentions, URLs, hashtags, etc).',
426
- items: {
427
- type: 'ref',
428
- ref: 'lex:app.bsky.richtext.facet',
429
- },
692
+ type: 'ref',
693
+ ref: 'lex:pub.leaflet.pages.linearDocument#main',
694
+ description: 'Rich-text description, represented as a Leaflet linear document.',
430
695
  },
431
696
  image: {
432
697
  type: 'union',
@@ -436,13 +701,22 @@ const schemaDict = {
436
701
  ],
437
702
  description: 'The hypercert visual representation as a URI or image blob.',
438
703
  },
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
+ },
439
713
  workScope: {
440
714
  type: 'union',
441
715
  refs: [
442
- 'lex:com.atproto.repo.strongRef',
716
+ 'lex:org.hypercerts.workscope.cel',
443
717
  'lex:org.hypercerts.claim.activity#workScopeString',
444
718
  ],
445
- description: 'Work scope definition. Either a strongRef to a work-scope logic record (structured, nested logic), or a free-form string for simple or legacy scopes. The work scope record should conform to the org.hypercerts.helper.workScopeTag lexicon.',
719
+ description: 'Work scope definition. A CEL expression for structured, machine-evaluable scopes or a free-form string for simple and legacy scopes.',
446
720
  },
447
721
  startDate: {
448
722
  type: 'string',
@@ -454,12 +728,13 @@ const schemaDict = {
454
728
  format: 'datetime',
455
729
  description: 'When the work ended',
456
730
  },
457
- contributors: {
731
+ locations: {
458
732
  type: 'array',
459
- description: 'An array of contributor objects, each containing contributor information, weight, and contribution details.',
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,
460
735
  items: {
461
736
  type: 'ref',
462
- ref: 'lex:org.hypercerts.claim.activity#contributor',
737
+ ref: 'lex:com.atproto.repo.strongRef',
463
738
  },
464
739
  },
465
740
  rights: {
@@ -467,14 +742,6 @@ const schemaDict = {
467
742
  ref: 'lex:com.atproto.repo.strongRef',
468
743
  description: 'A strong reference to the rights that this hypercert has. The record referenced must conform with the lexicon org.hypercerts.claim.rights.',
469
744
  },
470
- locations: {
471
- type: 'array',
472
- description: 'An array of strong references to the location where activity was performed. The record referenced must conform with the lexicon app.certified.location.',
473
- items: {
474
- type: 'ref',
475
- ref: 'lex:com.atproto.repo.strongRef',
476
- },
477
- },
478
745
  createdAt: {
479
746
  type: 'string',
480
747
  format: 'datetime',
@@ -493,11 +760,12 @@ const schemaDict = {
493
760
  'lex:org.hypercerts.claim.activity#contributorIdentity',
494
761
  'lex:com.atproto.repo.strongRef',
495
762
  ],
496
- description: 'Contributor identity as a string (DID or identifier) via org.hypercerts.claim.activity#contributorIdentity, or a strong reference to a contributor information record.',
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.',
497
764
  },
498
765
  contributionWeight: {
499
766
  type: 'string',
500
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,
501
769
  },
502
770
  contributionDetails: {
503
771
  type: 'union',
@@ -505,7 +773,7 @@ const schemaDict = {
505
773
  'lex:org.hypercerts.claim.activity#contributorRole',
506
774
  'lex:com.atproto.repo.strongRef',
507
775
  ],
508
- description: 'Contribution details as a string via org.hypercerts.claim.activity#contributorRole, or a strong reference to a contribution details record.',
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.',
509
777
  },
510
778
  },
511
779
  },
@@ -550,81 +818,78 @@ const schemaDict = {
550
818
  },
551
819
  },
552
820
  },
553
- OrgHypercertsClaimAttachment: {
821
+ OrgHypercertsClaimContribution: {
554
822
  lexicon: 1,
555
- id: 'org.hypercerts.claim.attachment',
823
+ id: 'org.hypercerts.claim.contribution',
556
824
  defs: {
557
825
  main: {
558
826
  type: 'record',
559
- description: 'An attachment providing commentary, context, evidence, or documentary material related to a hypercert record (e.g. an activity, project, claim, or evaluation).',
827
+ description: 'Details about a specific contribution including role, description, and timeframe.',
560
828
  key: 'tid',
561
829
  record: {
562
830
  type: 'object',
563
- required: ['title', 'content', 'createdAt'],
831
+ required: ['createdAt'],
564
832
  properties: {
565
- subjects: {
566
- type: 'array',
567
- 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.',
568
- items: {
569
- type: 'ref',
570
- ref: 'lex:com.atproto.repo.strongRef',
571
- },
833
+ role: {
834
+ type: 'string',
835
+ description: 'Role or title of the contributor.',
572
836
  maxLength: 100,
573
837
  },
574
- contentType: {
838
+ contributionDescription: {
575
839
  type: 'string',
576
- maxLength: 64,
577
- description: 'The type of attachment, e.g. report, audit, evidence, testimonial, methodology, etc.',
840
+ description: 'Description of what the contribution concretely involved.',
841
+ maxLength: 10000,
842
+ maxGraphemes: 1000,
578
843
  },
579
- content: {
580
- type: 'array',
581
- description: 'The files, documents, or external references included in this attachment record.',
582
- items: {
583
- type: 'union',
584
- refs: [
585
- 'lex:org.hypercerts.defs#uri',
586
- 'lex:org.hypercerts.defs#smallBlob',
587
- ],
588
- },
589
- maxLength: 100,
844
+ startDate: {
845
+ type: 'string',
846
+ format: 'datetime',
847
+ description: "When this contribution started. Should fall within the parent hypercert's timeframe.",
590
848
  },
591
- title: {
849
+ endDate: {
592
850
  type: 'string',
593
- maxLength: 256,
594
- description: 'Title of this attachment.',
851
+ format: 'datetime',
852
+ description: "When this contribution finished. Should fall within the parent hypercert's timeframe.",
595
853
  },
596
- shortDescription: {
854
+ createdAt: {
597
855
  type: 'string',
598
- description: 'Short summary of this attachment, suitable for previews and list views. Rich text annotations may be provided via `shortDescriptionFacets`.',
599
- maxLength: 3000,
600
- maxGraphemes: 300,
856
+ format: 'datetime',
857
+ description: 'Client-declared timestamp when this record was originally created.',
601
858
  },
602
- shortDescriptionFacets: {
603
- type: 'array',
604
- description: 'Rich text annotations for `shortDescription` (mentions, URLs, hashtags, etc).',
605
- items: {
606
- type: 'ref',
607
- ref: 'lex:app.bsky.richtext.facet',
608
- },
609
- },
610
- description: {
859
+ },
860
+ },
861
+ },
862
+ },
863
+ },
864
+ OrgHypercertsClaimContributorInformation: {
865
+ lexicon: 1,
866
+ id: 'org.hypercerts.claim.contributorInformation',
867
+ defs: {
868
+ main: {
869
+ type: 'record',
870
+ description: 'Contributor information including identifier, display name, and image.',
871
+ key: 'tid',
872
+ record: {
873
+ type: 'object',
874
+ required: ['createdAt'],
875
+ properties: {
876
+ identifier: {
611
877
  type: 'string',
612
- description: 'Optional longer description of this attachment, including context or interpretation. Rich text annotations may be provided via `descriptionFacets`.',
613
- maxLength: 30000,
614
- maxGraphemes: 3000,
878
+ description: 'DID (did:plc:...) or URI to a social profile of the contributor.',
879
+ maxLength: 2048,
615
880
  },
616
- descriptionFacets: {
617
- type: 'array',
618
- description: 'Rich text annotations for `description` (mentions, URLs, hashtags, etc).',
619
- items: {
620
- type: 'ref',
621
- ref: 'lex:app.bsky.richtext.facet',
622
- },
881
+ displayName: {
882
+ type: 'string',
883
+ description: 'Human-readable name for the contributor as it should appear in UI.',
884
+ maxLength: 100,
623
885
  },
624
- location: {
625
- type: 'ref',
626
- ref: 'lex:com.atproto.repo.strongRef',
627
- 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.",
886
+ image: {
887
+ type: 'union',
888
+ refs: [
889
+ 'lex:org.hypercerts.defs#uri',
890
+ 'lex:org.hypercerts.defs#smallImage',
891
+ ],
892
+ description: 'The contributor visual representation as a URI or image blob.',
628
893
  },
629
894
  createdAt: {
630
895
  type: 'string',
@@ -636,9 +901,60 @@ const schemaDict = {
636
901
  },
637
902
  },
638
903
  },
639
- OrgHypercertsClaimCollection: {
904
+ OrgHypercertsClaimRights: {
905
+ lexicon: 1,
906
+ id: 'org.hypercerts.claim.rights',
907
+ defs: {
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: {
640
956
  lexicon: 1,
641
- id: 'org.hypercerts.claim.collection',
957
+ id: 'org.hypercerts.collection',
642
958
  defs: {
643
959
  main: {
644
960
  type: 'record',
@@ -646,15 +962,16 @@ const schemaDict = {
646
962
  key: 'tid',
647
963
  record: {
648
964
  type: 'object',
649
- required: ['title', 'items', 'createdAt'],
965
+ required: ['title', 'createdAt'],
650
966
  properties: {
651
967
  type: {
652
968
  type: 'string',
653
969
  description: "The type of this collection. Possible fields can be 'favorites', 'project', or any other type of collection.",
970
+ maxLength: 64,
654
971
  },
655
972
  title: {
656
973
  type: 'string',
657
- description: 'The title of this collection',
974
+ description: "Display name for this collection (e.g. 'Q1 2025 Impact Projects')",
658
975
  maxLength: 800,
659
976
  maxGraphemes: 80,
660
977
  },
@@ -688,9 +1005,10 @@ const schemaDict = {
688
1005
  items: {
689
1006
  type: 'array',
690
1007
  description: 'Array of items in this collection with optional weights.',
1008
+ maxLength: 1000,
691
1009
  items: {
692
1010
  type: 'ref',
693
- ref: 'lex:org.hypercerts.claim.collection#item',
1011
+ ref: 'lex:org.hypercerts.collection#item',
694
1012
  },
695
1013
  },
696
1014
  location: {
@@ -713,48 +1031,51 @@ const schemaDict = {
713
1031
  itemIdentifier: {
714
1032
  type: 'ref',
715
1033
  ref: 'lex:com.atproto.repo.strongRef',
716
- 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).',
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).',
717
1035
  },
718
1036
  itemWeight: {
719
1037
  type: 'string',
720
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,
721
1040
  },
722
1041
  },
723
1042
  },
724
1043
  },
725
1044
  },
726
- OrgHypercertsClaimContributionDetails: {
1045
+ OrgHypercertsContextAcknowledgement: {
727
1046
  lexicon: 1,
728
- id: 'org.hypercerts.claim.contributionDetails',
1047
+ id: 'org.hypercerts.context.acknowledgement',
729
1048
  defs: {
730
1049
  main: {
731
1050
  type: 'record',
732
- description: 'Details about a specific contribution including role, description, and timeframe.',
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.",
733
1052
  key: 'tid',
734
1053
  record: {
735
1054
  type: 'object',
736
- required: ['createdAt'],
1055
+ required: ['subject', 'acknowledged', 'createdAt'],
737
1056
  properties: {
738
- role: {
739
- type: 'string',
740
- description: 'Role or title of the contributor.',
741
- maxLength: 100,
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).',
742
1061
  },
743
- contributionDescription: {
744
- type: 'string',
745
- description: 'What the contribution concretely was.',
746
- maxLength: 10000,
747
- maxGraphemes: 1000,
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.',
748
1069
  },
749
- startDate: {
750
- type: 'string',
751
- format: 'datetime',
752
- description: 'When this contribution started. This should be a subset of the hypercert timeframe.',
1070
+ acknowledged: {
1071
+ type: 'boolean',
1072
+ description: 'Whether the relationship is acknowledged (true) or rejected (false).',
753
1073
  },
754
- endDate: {
1074
+ comment: {
755
1075
  type: 'string',
756
- format: 'datetime',
757
- description: 'When this contribution finished. This should be a subset of the hypercert timeframe.',
1076
+ description: 'Optional plain-text comment providing additional context or reasoning.',
1077
+ maxLength: 10000,
1078
+ maxGraphemes: 1000,
758
1079
  },
759
1080
  createdAt: {
760
1081
  type: 'string',
@@ -766,34 +1087,72 @@ const schemaDict = {
766
1087
  },
767
1088
  },
768
1089
  },
769
- OrgHypercertsClaimContributorInformation: {
1090
+ OrgHypercertsContextAttachment: {
770
1091
  lexicon: 1,
771
- id: 'org.hypercerts.claim.contributorInformation',
1092
+ id: 'org.hypercerts.context.attachment',
772
1093
  defs: {
773
1094
  main: {
774
1095
  type: 'record',
775
- description: 'Contributor information including identifier, display name, and image.',
1096
+ description: 'An attachment providing commentary, context, evidence, or documentary material related to a hypercert record (e.g. an activity, project, claim, or evaluation).',
776
1097
  key: 'tid',
777
1098
  record: {
778
1099
  type: 'object',
779
- required: ['createdAt'],
1100
+ required: ['title', 'createdAt'],
780
1101
  properties: {
781
- identifier: {
782
- type: 'string',
783
- description: 'DID or a URI to a social profile of the contributor.',
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,
784
1110
  },
785
- displayName: {
1111
+ contentType: {
786
1112
  type: 'string',
787
- description: 'Display name of the contributor.',
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
+ },
788
1126
  maxLength: 100,
789
1127
  },
790
- image: {
791
- type: 'union',
792
- refs: [
793
- 'lex:org.hypercerts.defs#uri',
794
- 'lex:org.hypercerts.defs#smallImage',
795
- ],
796
- description: 'The contributor visual representation as a URI or image blob.',
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.",
797
1156
  },
798
1157
  createdAt: {
799
1158
  type: 'string',
@@ -805,29 +1164,10 @@ const schemaDict = {
805
1164
  },
806
1165
  },
807
1166
  },
808
- OrgHypercertsClaimEvaluation: {
1167
+ OrgHypercertsContextEvaluation: {
809
1168
  lexicon: 1,
810
- id: 'org.hypercerts.claim.evaluation',
1169
+ id: 'org.hypercerts.context.evaluation',
811
1170
  defs: {
812
- score: {
813
- type: 'object',
814
- description: 'Overall score for an evaluation on a numeric scale.',
815
- required: ['min', 'max', 'value'],
816
- properties: {
817
- min: {
818
- type: 'integer',
819
- description: 'Minimum value of the scale, e.g. 0 or 1.',
820
- },
821
- max: {
822
- type: 'integer',
823
- description: 'Maximum value of the scale, e.g. 5 or 10.',
824
- },
825
- value: {
826
- type: 'integer',
827
- description: 'Score within the inclusive range [min, max].',
828
- },
829
- },
830
- },
831
1171
  main: {
832
1172
  type: 'record',
833
1173
  description: 'An evaluation of a hypercert record (e.g. an activity and its impact).',
@@ -839,7 +1179,7 @@ const schemaDict = {
839
1179
  subject: {
840
1180
  type: 'ref',
841
1181
  ref: 'lex:com.atproto.repo.strongRef',
842
- 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.)',
843
1183
  },
844
1184
  evaluators: {
845
1185
  type: 'array',
@@ -864,7 +1204,7 @@ const schemaDict = {
864
1204
  },
865
1205
  measurements: {
866
1206
  type: 'array',
867
- 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',
868
1208
  items: {
869
1209
  type: 'ref',
870
1210
  ref: 'lex:com.atproto.repo.strongRef',
@@ -879,7 +1219,7 @@ const schemaDict = {
879
1219
  },
880
1220
  score: {
881
1221
  type: 'ref',
882
- ref: 'lex:org.hypercerts.claim.evaluation#score',
1222
+ ref: 'lex:org.hypercerts.context.evaluation#score',
883
1223
  description: 'Optional overall score for this evaluation on a numeric scale.',
884
1224
  },
885
1225
  location: {
@@ -895,24 +1235,47 @@ const schemaDict = {
895
1235
  },
896
1236
  },
897
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
+ },
898
1257
  },
899
1258
  },
900
- OrgHypercertsClaimMeasurement: {
1259
+ OrgHypercertsContextMeasurement: {
901
1260
  lexicon: 1,
902
- id: 'org.hypercerts.claim.measurement',
1261
+ id: 'org.hypercerts.context.measurement',
903
1262
  defs: {
904
1263
  main: {
905
1264
  type: 'record',
906
- description: 'Measurement data related to a hypercert record (e.g. an activity and its impact).',
1265
+ description: 'Measurement data related to one or more records (e.g. activities, projects, etc.).',
907
1266
  key: 'tid',
908
1267
  record: {
909
1268
  type: 'object',
910
1269
  required: ['metric', 'unit', 'value', 'createdAt'],
911
1270
  properties: {
912
- subject: {
913
- type: 'ref',
914
- ref: 'lex:com.atproto.repo.strongRef',
915
- description: 'A strong reference to the record this measurement refers to (e.g. an activity, project, or 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,
916
1279
  },
917
1280
  metric: {
918
1281
  type: 'string',
@@ -926,7 +1289,7 @@ const schemaDict = {
926
1289
  },
927
1290
  value: {
928
1291
  type: 'string',
929
- description: 'The measured numeric value.',
1292
+ description: "The measured value as a numeric string (e.g. '1234.56')",
930
1293
  maxLength: 500,
931
1294
  },
932
1295
  startDate: {
@@ -937,7 +1300,7 @@ const schemaDict = {
937
1300
  endDate: {
938
1301
  type: 'string',
939
1302
  format: 'datetime',
940
- description: 'The end date and time when the measurement ended. If it was a one time measurement, the endDate should be equal to the startDate.',
1303
+ description: 'The end date and time when the measurement ended. For one-time measurements, this should equal the start date.',
941
1304
  },
942
1305
  locations: {
943
1306
  type: 'array',
@@ -969,7 +1332,7 @@ const schemaDict = {
969
1332
  },
970
1333
  measurers: {
971
1334
  type: 'array',
972
- description: 'DIDs of the entity (or entities) that measured this data',
1335
+ description: 'DIDs of the entities that performed this measurement',
973
1336
  items: {
974
1337
  type: 'ref',
975
1338
  ref: 'lex:app.certified.defs#did',
@@ -1000,58 +1363,10 @@ const schemaDict = {
1000
1363
  },
1001
1364
  },
1002
1365
  },
1003
- OrgHypercertsClaimRights: {
1004
- lexicon: 1,
1005
- id: 'org.hypercerts.claim.rights',
1006
- defs: {
1007
- main: {
1008
- type: 'record',
1009
- 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.',
1010
- key: 'tid',
1011
- record: {
1012
- type: 'object',
1013
- required: [
1014
- 'rightsName',
1015
- 'rightsType',
1016
- 'rightsDescription',
1017
- 'createdAt',
1018
- ],
1019
- properties: {
1020
- rightsName: {
1021
- type: 'string',
1022
- description: 'Full name of the rights',
1023
- maxLength: 100,
1024
- },
1025
- rightsType: {
1026
- type: 'string',
1027
- description: 'Short rights identifier for easier search',
1028
- maxLength: 10,
1029
- },
1030
- rightsDescription: {
1031
- type: 'string',
1032
- description: 'Description of the rights of this hypercert',
1033
- },
1034
- attachment: {
1035
- type: 'union',
1036
- refs: [
1037
- 'lex:org.hypercerts.defs#uri',
1038
- 'lex:org.hypercerts.defs#smallBlob',
1039
- ],
1040
- description: 'An attachment to define the rights further, e.g. a legal document.',
1041
- },
1042
- createdAt: {
1043
- type: 'string',
1044
- format: 'datetime',
1045
- description: 'Client-declared timestamp when this record was originally created',
1046
- },
1047
- },
1048
- },
1049
- },
1050
- },
1051
- },
1052
1366
  OrgHypercertsDefs: {
1053
1367
  lexicon: 1,
1054
1368
  id: 'org.hypercerts.defs',
1369
+ description: 'Common type definitions used across all Hypercerts protocols.',
1055
1370
  defs: {
1056
1371
  uri: {
1057
1372
  type: 'object',
@@ -1061,7 +1376,6 @@ const schemaDict = {
1061
1376
  uri: {
1062
1377
  type: 'string',
1063
1378
  format: 'uri',
1064
- maxGraphemes: 1024,
1065
1379
  description: 'URI to external data',
1066
1380
  },
1067
1381
  },
@@ -1105,6 +1419,19 @@ const schemaDict = {
1105
1419
  },
1106
1420
  },
1107
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
+ },
1108
1435
  largeImage: {
1109
1436
  type: 'object',
1110
1437
  required: ['image'],
@@ -1140,26 +1467,32 @@ const schemaDict = {
1140
1467
  to: {
1141
1468
  type: 'string',
1142
1469
  description: 'The recipient of the funds. Can be identified by DID or a clear-text name.',
1470
+ maxLength: 2048,
1143
1471
  },
1144
1472
  amount: {
1145
1473
  type: 'string',
1146
- description: 'Amount of funding received.',
1474
+ description: "Amount of funding received as a numeric string (e.g. '1000.50').",
1475
+ maxLength: 50,
1147
1476
  },
1148
1477
  currency: {
1149
1478
  type: 'string',
1150
1479
  description: 'Currency of the payment (e.g. EUR, USD, ETH).',
1480
+ maxLength: 10,
1151
1481
  },
1152
1482
  paymentRail: {
1153
1483
  type: 'string',
1154
1484
  description: 'How the funds were transferred (e.g. bank_transfer, credit_card, onchain, cash, check, payment_processor).',
1485
+ maxLength: 50,
1155
1486
  },
1156
1487
  paymentNetwork: {
1157
1488
  type: 'string',
1158
1489
  description: 'Optional network within the payment rail (e.g. arbitrum, ethereum, sepa, visa, paypal).',
1490
+ maxLength: 50,
1159
1491
  },
1160
1492
  transactionId: {
1161
1493
  type: 'string',
1162
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,
1163
1496
  },
1164
1497
  for: {
1165
1498
  type: 'string',
@@ -1186,36 +1519,71 @@ const schemaDict = {
1186
1519
  },
1187
1520
  },
1188
1521
  },
1189
- OrgHypercertsHelperWorkScopeTag: {
1522
+ OrgHypercertsWorkscopeCel: {
1190
1523
  lexicon: 1,
1191
- id: 'org.hypercerts.helper.workScopeTag',
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: {
1562
+ lexicon: 1,
1563
+ id: 'org.hypercerts.workscope.tag',
1192
1564
  defs: {
1193
1565
  main: {
1194
1566
  type: 'record',
1195
- 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.',
1196
1568
  key: 'tid',
1197
1569
  record: {
1198
1570
  type: 'object',
1199
- required: ['createdAt', 'key', 'label'],
1571
+ required: ['key', 'name', 'createdAt'],
1200
1572
  properties: {
1201
- createdAt: {
1202
- type: 'string',
1203
- format: 'datetime',
1204
- description: 'Client-declared timestamp when this record was originally created',
1205
- },
1206
1573
  key: {
1207
1574
  type: 'string',
1208
- 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.",
1209
1576
  maxLength: 120,
1210
1577
  },
1211
- label: {
1578
+ name: {
1212
1579
  type: 'string',
1213
- description: 'Human-readable label for this scope.',
1580
+ description: 'Human-readable name for this scope.',
1214
1581
  maxLength: 200,
1215
1582
  },
1216
- kind: {
1583
+ category: {
1217
1584
  type: 'string',
1218
- 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'],
1219
1587
  maxLength: 50,
1220
1588
  },
1221
1589
  description: {
@@ -1227,7 +1595,18 @@ const schemaDict = {
1227
1595
  parent: {
1228
1596
  type: 'ref',
1229
1597
  ref: 'lex:com.atproto.repo.strongRef',
1230
- 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.",
1231
1610
  },
1232
1611
  aliases: {
1233
1612
  type: 'array',
@@ -1236,15 +1615,30 @@ const schemaDict = {
1236
1615
  maxLength: 200,
1237
1616
  },
1238
1617
  maxLength: 50,
1239
- 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.',
1240
1629
  },
1241
- externalReference: {
1630
+ referenceDocument: {
1242
1631
  type: 'union',
1243
1632
  refs: [
1244
1633
  'lex:org.hypercerts.defs#uri',
1245
1634
  'lex:org.hypercerts.defs#smallBlob',
1246
1635
  ],
1247
- 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.',
1248
1642
  },
1249
1643
  },
1250
1644
  },
@@ -1263,6 +1657,7 @@ function validate(v, id, hash, requiredType) {
1263
1657
  };
1264
1658
  }
1265
1659
  const ids = {
1660
+ AppCertifiedActorOrganization: 'app.certified.actor.organization',
1266
1661
  AppCertifiedActorProfile: 'app.certified.actor.profile',
1267
1662
  AppCertifiedBadgeAward: 'app.certified.badge.award',
1268
1663
  AppCertifiedBadgeDefinition: 'app.certified.badge.definition',
@@ -1270,18 +1665,21 @@ const ids = {
1270
1665
  AppCertifiedDefs: 'app.certified.defs',
1271
1666
  AppCertifiedLocation: 'app.certified.location',
1272
1667
  ComAtprotoRepoStrongRef: 'com.atproto.repo.strongRef',
1273
- OrgHypercertsAcknowledgement: 'org.hypercerts.acknowledgement',
1668
+ OrgHyperboardsBoard: 'org.hyperboards.board',
1669
+ OrgHyperboardsDisplayProfile: 'org.hyperboards.displayProfile',
1274
1670
  OrgHypercertsClaimActivity: 'org.hypercerts.claim.activity',
1275
- OrgHypercertsClaimAttachment: 'org.hypercerts.claim.attachment',
1276
- OrgHypercertsClaimCollection: 'org.hypercerts.claim.collection',
1277
- OrgHypercertsClaimContributionDetails: 'org.hypercerts.claim.contributionDetails',
1671
+ OrgHypercertsClaimContribution: 'org.hypercerts.claim.contribution',
1278
1672
  OrgHypercertsClaimContributorInformation: 'org.hypercerts.claim.contributorInformation',
1279
- OrgHypercertsClaimEvaluation: 'org.hypercerts.claim.evaluation',
1280
- OrgHypercertsClaimMeasurement: 'org.hypercerts.claim.measurement',
1281
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',
1282
1679
  OrgHypercertsDefs: 'org.hypercerts.defs',
1283
1680
  OrgHypercertsFundingReceipt: 'org.hypercerts.funding.receipt',
1284
- OrgHypercertsHelperWorkScopeTag: 'org.hypercerts.helper.workScopeTag',
1681
+ OrgHypercertsWorkscopeCel: 'org.hypercerts.workscope.cel',
1682
+ OrgHypercertsWorkscopeTag: 'org.hypercerts.workscope.tag',
1285
1683
  };
1286
1684
 
1287
1685
  export { ids, lexicons, schemaDict, schemas, validate };