@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/CHANGELOG.md CHANGED
@@ -1,5 +1,719 @@
1
1
  # @hypercerts-org/lexicon
2
2
 
3
+ ## 0.10.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#76](https://github.com/hypercerts-org/hypercerts-lexicon/pull/76) [`3044e22`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/3044e22c1345b3cd5764e3c6c3714b21e6911663) Thanks [@s-adamantine](https://github.com/s-adamantine)! - Add org.hypercerts.acknowledgement lexicon for bidirectional inclusion links between records across PDS repos
8
+
9
+ - [#141](https://github.com/hypercerts-org/hypercerts-lexicon/pull/141) [`06fb6b5`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/06fb6b54542fe6311d55cb26a1c468c1374b0ab1) Thanks [@holkexyz](https://github.com/holkexyz)! - Add CEL expression support for structured work scopes (`org.hypercerts.workscope.cel`, `org.hypercerts.workscope.tag`)
10
+
11
+ - [#106](https://github.com/hypercerts-org/hypercerts-lexicon/pull/106) [`b03a1f7`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/b03a1f7925b56a5d614bb3a40f7fe5e6321f3d34) Thanks [@copilot-swe-agent](https://github.com/apps/copilot-swe-agent)! - Add avatar and banner fields to collection lexicon for visual representation
12
+
13
+ - [#113](https://github.com/hypercerts-org/hypercerts-lexicon/pull/113) [`c3f9ca2`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/c3f9ca2f5cb2c5da4d0f4272a74d06f6798e058b) Thanks [@holkexyz](https://github.com/holkexyz)! - Refactor collection items structure to support optional weights and remove activityWeight from activity schema
14
+
15
+ **Breaking Changes:**
16
+ - **Activity lexicon (`org.hypercerts.claim.activity`):**
17
+ - Removed `org.hypercerts.claim.activity#activityWeight` def
18
+ - Activity records no longer include activity weight information
19
+ - **Collection lexicon (`org.hypercerts.claim.collection`):**
20
+ - Changed `org.hypercerts.claim.collection#items` from array of strongRefs to array of item objects
21
+ - Added `org.hypercerts.claim.collection#item` def with:
22
+ - `itemIdentifier` (required): strongRef to an item (activity or collection)
23
+ - `itemWeight` (optional): positive numeric value stored as string
24
+ - Supports recursive collection nesting (items can reference activities or other collections)
25
+
26
+ **Migration:**
27
+
28
+ **Collection items:** Convert from array of strongRefs to array of item objects:
29
+
30
+ ```json
31
+ // Before
32
+ "items": [strongRef1, strongRef2]
33
+
34
+ // After
35
+ "items": [
36
+ { "itemIdentifier": strongRef1, "itemWeight": "1.5" },
37
+ { "itemIdentifier": strongRef2 }
38
+ ]
39
+ ```
40
+
41
+ **Activity weights:** Migrate existing `org.hypercerts.claim.activity#activityWeight` data to collection `org.hypercerts.claim.collection#item.itemWeight`:
42
+
43
+ ```json
44
+ // Old (removed from activity)
45
+ { "activity": { "uri": "...", "cid": "..." }, "weight": "1.5" }
46
+
47
+ // New (in collection items)
48
+ { "itemIdentifier": { "uri": "...", "cid": "..." }, "itemWeight": "1.5" }
49
+ ```
50
+
51
+ Update collections that reference activities to include weights in `org.hypercerts.claim.collection#item.itemWeight`. Weights can be dropped if not needed.
52
+
53
+ - [#149](https://github.com/hypercerts-org/hypercerts-lexicon/pull/149) [`9f124eb`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/9f124eb404e30a30ac90a6c4be934ece84556c08) Thanks [@daviddao](https://github.com/daviddao)! - Add `org.hyperboards.board` and `org.hyperboards.displayProfile` lexicons for hyperboard visual presentation records.
54
+
55
+ - [#123](https://github.com/hypercerts-org/hypercerts-lexicon/pull/123) [`c623d32`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/c623d327e0e6c1a4f5ca92135ece284cfe166421) Thanks [@aspiers](https://github.com/aspiers)! - Add `location` property to collections. Collections can now reference a location record directly via strongRef. This replaces the sidecar pattern which was impractical since location records cannot be reused across multiple collections.
56
+
57
+ - [#140](https://github.com/hypercerts-org/hypercerts-lexicon/pull/140) [`20eb414`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/20eb414bd75cb100bebe16cfb41286377c18d5e7) Thanks [@holkexyz](https://github.com/holkexyz)! - Add app.certified.actor.organization sidecar record for organization actor profiles with fields for organization type, labeled URLs, location (strongRef), and founded date
58
+
59
+ - [#133](https://github.com/hypercerts-org/hypercerts-lexicon/pull/133) [`6752cad`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/6752cad3c9e58b9a8e1a3ca17f2ea7a4a68dba81) Thanks [@Kzoeps](https://github.com/Kzoeps)! - Add profile lexicon for Hypercert account profiles with support for display name, description, pronouns, website, avatar, banner.
60
+
61
+ - [#78](https://github.com/hypercerts-org/hypercerts-lexicon/pull/78) [`c55d8a7`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/c55d8a77ff2949136bab0c6680b7e458712404f1) Thanks [@bitbeckers](https://github.com/bitbeckers)! - Remove org.hypercerts.claim.project lexicon and replace with org.hypercerts.claim.collection.project sidecar. Projects are now represented as collections with an optional project sidecar (same TID) that provides rich-text descriptions, avatars, and cover photos. Avatar and coverPhoto fields moved from base collection to project sidecar. Collections without the project sidecar are simple groupings; collections with it are "projects" with rich documentation.
62
+
63
+ - [#91](https://github.com/hypercerts-org/hypercerts-lexicon/pull/91) [`0c6da09`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/0c6da093c8a38a3ee516a85b6bffee0850535b14) Thanks [@holkexyz](https://github.com/holkexyz)! - Add rich text facet support to activity claim descriptions
64
+
65
+ Add `shortDescriptionFacets` and `descriptionFacets` fields to the activity lexicon to support rich text annotations (mentions, URLs, hashtags, etc.) in activity claim descriptions.
66
+
67
+ - [#144](https://github.com/hypercerts-org/hypercerts-lexicon/pull/144) [`fb90134`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/fb90134e5df32e955e5f9fba748f4ca46d00e90e) Thanks [@holkexyz](https://github.com/holkexyz)! - Make items optional in collection schema to allow creating empty collections
68
+
69
+ - [#151](https://github.com/hypercerts-org/hypercerts-lexicon/pull/151) [`4d5f42f`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/4d5f42fa4f9ae2c74a6703f3af50e9acfd09ae95) Thanks [@holkexyz](https://github.com/holkexyz)! - Add optional `url` field to `app.certified.badge.award` for linking to an external page associated with the badge
70
+
71
+ - [#122](https://github.com/hypercerts-org/hypercerts-lexicon/pull/122) [`3e3da41`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/3e3da41df8016d4d7f63477000a01756704d0820) Thanks [@aspiers](https://github.com/aspiers)! - Drop HELPER\_ prefix from workScopeTag constants. `HELPER_WORK_SCOPE_TAG_NSID`, `HELPER_WORK_SCOPE_TAG_LEXICON_JSON`, and `HELPER_WORK_SCOPE_TAG_LEXICON_DOC` are now `WORK_SCOPE_TAG_NSID`, `WORK_SCOPE_TAG_LEXICON_JSON`, and `WORK_SCOPE_TAG_LEXICON_DOC`.
72
+
73
+ - [#136](https://github.com/hypercerts-org/hypercerts-lexicon/pull/136) [`062fbde`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/062fbde905dbd939f75c366760be1c02bb8a0412) Thanks [@copilot-swe-agent](https://github.com/apps/copilot-swe-agent)! - Expand locationType knownValues to include geojson, h3, geohash, wkt, address, and scaledCoordinates from the [Location Protocol spec](https://spec.decentralizedgeo.org/specification/location-types/#location-type-registry)
74
+
75
+ - [#131](https://github.com/hypercerts-org/hypercerts-lexicon/pull/131) [`7f42fad`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/7f42fad517e191dad6db22fc67ec8346ec167f5c) Thanks [@aspiers](https://github.com/aspiers)! - Add inline string format to app.certified.location schema with documentation and examples
76
+
77
+ - [#121](https://github.com/hypercerts-org/hypercerts-lexicon/pull/121) [`5c33b79`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/5c33b796f78eca2a207116d246a715cd5712f392) Thanks [@aspiers](https://github.com/aspiers)! - Fix camelCase export names to use underscores. Generated constants like `CONTRIBUTIONDETAILS_LEXICON_*` are now `CONTRIBUTION_DETAILS_LEXICON_*` for consistency.
78
+
79
+ Affected exports:
80
+ - `CONTRIBUTION_DETAILS_NSID`, `CONTRIBUTION_DETAILS_LEXICON_JSON`, `CONTRIBUTION_DETAILS_LEXICON_DOC` (was `CONTRIBUTIONDETAILS_*`)
81
+ - `CONTRIBUTOR_INFORMATION_NSID`, `CONTRIBUTOR_INFORMATION_LEXICON_JSON`, `CONTRIBUTOR_INFORMATION_LEXICON_DOC` (was `CONTRIBUTORINFORMATION_*`)
82
+ - `STRONG_REF_NSID`, `STRONG_REF_LEXICON_JSON`, `STRONG_REF_LEXICON_DOC` (was `STRONGREF_*`)
83
+ - `HELPER_WORK_SCOPE_TAG_NSID`, `HELPER_WORK_SCOPE_TAG_LEXICON_JSON`, `HELPER_WORK_SCOPE_TAG_LEXICON_DOC` (was `HELPER_WORKSCOPETAG_*`)
84
+
85
+ - [#132](https://github.com/hypercerts-org/hypercerts-lexicon/pull/132) [`da481e0`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/da481e09f5bd1a8e62e388f2c6001896d76b1fbf) Thanks [@aspiers](https://github.com/aspiers)! - Convert app.certified.defs#did to object type
86
+
87
+ The did definition in app.certified.defs has been converted from a primitive
88
+ string type to an object type to comply with the ATProto specification
89
+ requirement that all union variants must be object or record types.
90
+
91
+ This change was necessary because app.certified.badge.award uses this
92
+ definition in a union for the subject property.
93
+
94
+ Breaking changes:
95
+ - `app.certified.defs#did`: Now an object with `did` string property (maxLength 256)
96
+ - Code using this type must now access the `.did` property instead of using the value directly
97
+
98
+ - [#132](https://github.com/hypercerts-org/hypercerts-lexicon/pull/132) [`e134b26`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/e134b26c43a70c0a9ae04cc12b8a3bd05990c470) Thanks [@aspiers](https://github.com/aspiers)! - Convert union string definitions to object types in activity lexicon
99
+
100
+ The contributorIdentity, contributorRole, and workScopeString definitions
101
+ in org.hypercerts.claim.activity have been converted from primitive string
102
+ types to object types to comply with the ATProto specification requirement
103
+ that all union variants must be object or record types.
104
+
105
+ Additionally, maximum length constraints have been reduced to more reasonable
106
+ values:
107
+ - `contributorIdentity.identity`: maxLength 1000, maxGraphemes 100 (previously no limits)
108
+ - `contributorRole.role`: maxLength 1000, maxGraphemes 100 (previously maxLength 10000, maxGraphemes 1000)
109
+ - `workScopeString.scope`: maxLength 1000, maxGraphemes 100 (previously maxLength 10000, maxGraphemes 1000)
110
+
111
+ Breaking changes:
112
+ - `contributorIdentity`: Now an object with `identity` string property
113
+ - `contributorRole`: Now an object with `role` string property
114
+ - `workScopeString`: Now an object with `scope` string property
115
+ - Reduced maximum lengths may affect existing records with longer values
116
+
117
+ This requires updating code that uses these union types to access the nested
118
+ property instead of using the value directly.
119
+
120
+ - [#152](https://github.com/hypercerts-org/hypercerts-lexicon/pull/152) [`2afb6ed`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/2afb6edb89ffd186f2e0cf015bcc3557e13a7a6d) Thanks [@holkexyz](https://github.com/holkexyz)! - Use Leaflet linear documents for rich-text descriptions in activity and attachment lexicons, and make attachment content optional.
121
+
122
+ - [#161](https://github.com/hypercerts-org/hypercerts-lexicon/pull/161) [`96bdb6c`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/96bdb6c9c7107680da301a92a8120ee60e676f15) Thanks [@aspiers](https://github.com/aspiers)! - Improved exports structure with semantic collection mappings for extra syntactic sugar.
123
+
124
+ **Breaking Changes:**
125
+ - Renamed `ids` export to `HYPERCERTS_NSIDS_BY_TYPE` (maps type namespaces to NSIDs)
126
+
127
+ **New Features:**
128
+ - Added `HYPERCERTS_NSIDS` object with semantic keys (e.g., `ACTIVITY`, `RIGHTS`, `CONTRIBUTION`)
129
+ - Added `HYPERCERTS_LEXICON_JSON` object with semantic keys mapping to raw JSON lexicons
130
+ - Added `HYPERCERTS_LEXICON_DOC` object with semantic keys mapping to typed lexicon documents
131
+ - All three new objects share the same key structure for consistency
132
+
133
+ **Migration Guide:**
134
+
135
+ If you were using the `ids` export (rare):
136
+
137
+ ```typescript
138
+ // Before
139
+ import { ids } from "@hypercerts-org/lexicon";
140
+ const nsid = ids.OrgHypercertsClaimActivity;
141
+
142
+ // After
143
+ import { HYPERCERTS_NSIDS_BY_TYPE } from "@hypercerts-org/lexicon";
144
+ const nsid = HYPERCERTS_NSIDS_BY_TYPE.OrgHypercertsClaimActivity;
145
+ ```
146
+
147
+ Most users should use individual NSID constants (unchanged):
148
+
149
+ ```typescript
150
+ import { ACTIVITY_NSID, RIGHTS_NSID } from "@hypercerts-org/lexicon";
151
+ ```
152
+
153
+ Or the new semantic mapping:
154
+
155
+ ```typescript
156
+ import { HYPERCERTS_NSIDS } from "@hypercerts-org/lexicon";
157
+ const nsid = HYPERCERTS_NSIDS.ACTIVITY; // Same as ACTIVITY_NSID
158
+ ```
159
+
160
+ - [#161](https://github.com/hypercerts-org/hypercerts-lexicon/pull/161) [`6a62c04`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/6a62c04e98950756a196110490cabd72f936a976) Thanks [@aspiers](https://github.com/aspiers)! - This release represents the migration of the lexicon package from the SDK monorepo (`hypercerts-sdk/packages/lexicon`) to a dedicated standalone repository (`hypercerts-lexicon`). This separation allows for independent versioning and development of the lexicon definitions.
161
+
162
+ Major architectural and feature updates compared to the SDK lexicon package include but are not limited to the following:
163
+
164
+ **New Lexicons:**
165
+ - Activity model: `org.hypercerts.claim.activity` - activity-based hypercert records (replaces single claim model)
166
+ - Project records: `org.hypercerts.claim.project` - projects that group multiple activities
167
+ - Shared definitions: `org.hypercerts.defs` - common types (uri, smallBlob, largeBlob, smallImage, largeImage)
168
+ - Badge system: `app.certified.badge.definition`, `app.certified.badge.award`, `app.certified.badge.response` for badge-based endorsements
169
+ - Funding receipts: `org.hypercerts.funding.receipt` - payment and funding tracking
170
+
171
+ **Architectural Changes:**
172
+ - **Claim model**: Replaced single `org.hypercerts.claim` record with activity-based `org.hypercerts.claim.activity` model
173
+ - **Collection model**: Collections now reference activities (via `activityWeight`) instead of claims (via `claimItem`)
174
+ - **Work scope**: Activity model uses structured `workScope` object with label-based conditions (`withinAllOf`, `withinAnyOf`, `withinNoneOf`)
175
+ - **Time fields**: Activity uses `startDate`/`endDate` instead of `workTimeFrameFrom`/`workTimeFrameTo`
176
+ - **Image references**: Activity model references `org.hypercerts.defs#smallImage` instead of `app.certified.defs#uri`/`smallBlob`
177
+
178
+ **Definition Updates:**
179
+ - `app.certified.defs` now includes `did` type definition
180
+ - Added `org.hypercerts.defs` with image and blob type definitions
181
+ - Activity model references project via AT-URI instead of strongRef
182
+
183
+ **Removed/Replaced:**
184
+ - `org.hypercerts.claim` (replaced by `org.hypercerts.claim.activity`)
185
+ - Top-level `org.hypercerts.collection` (replaced by `org.hypercerts.claim.collection` using activities)
186
+
187
+ - [#153](https://github.com/hypercerts-org/hypercerts-lexicon/pull/153) [`57dc44c`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/57dc44c163a6d62e4256e3de41ccf14617eb07e8) Thanks [@holkexyz](https://github.com/holkexyz)! - Improve acknowledgement schema: move to org.hypercerts.context.acknowledgement, generalize descriptions, make context optional, add maxGraphemes to comment.
188
+
189
+ - [#158](https://github.com/hypercerts-org/hypercerts-lexicon/pull/158) [`7743aa6`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/7743aa6014faa35714d3e146cfa45b0e67501992) Thanks [@holkexyz](https://github.com/holkexyz)! - Move collection lexicon from `org.hypercerts.claim.collection` to `org.hypercerts.collection` to reflect that collections can contain more than just claims.
190
+
191
+ - [#154](https://github.com/hypercerts-org/hypercerts-lexicon/pull/154) [`4c52b2c`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/4c52b2c9b2d449cbeb74eea9efa0a9eb2a0a39b7) Thanks [@holkexyz](https://github.com/holkexyz)! - Move evaluation and attachment lexicons to org.hypercerts.context namespace.
192
+
193
+ - [#135](https://github.com/hypercerts-org/hypercerts-lexicon/pull/135) [`806cfbc`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/806cfbca7cbcd3674a5f8e97a6b6dd87ba806c08) Thanks [@Kzoeps](https://github.com/Kzoeps)! - Move profile lexicon from app.certified.profile to app.certified.actor.profile namespace, requiring migration of existing profile records
194
+
195
+ - [#97](https://github.com/hypercerts-org/hypercerts-lexicon/pull/97) [`ceddab9`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/ceddab9e829d8ade3868eac4d10dd906e12a153c) Thanks [@aspiers](https://github.com/aspiers)! - Move schema documentation tables from README.md to auto-generated SCHEMAS.md to reduce git merge conflicts. The SCHEMAS.md file is now auto-generated from lexicon definitions and included in the distributed package.
196
+
197
+ - [#102](https://github.com/hypercerts-org/hypercerts-lexicon/pull/102) [`68011ae`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/68011ae1f58dcc35408e2400c02dfa16559e18d6) Thanks [@holkexyz](https://github.com/holkexyz)! - Refactor contributions structure in activity lexicon
198
+
199
+ **Breaking Changes:**
200
+ - **Activity lexicon (`org.hypercerts.claim.activity`):**
201
+ - Renamed `contributions` field to `contributors`
202
+ - Replaced `contributions` array (array of strongRefs) with new `contributors` array containing contributor objects
203
+ - Each contributor object (`org.hypercerts.claim.activity#contributor`) has three fields:
204
+ - `contributorIdentity` (required): string (DID/identifier) or strongRef to a contributor information record
205
+ - `contributionWeight` (optional): positive numeric value stored as string
206
+ - `contributionDetails` (optional): string or strongRef to a contribution details record
207
+ - Added internal defs:
208
+ - `#contributor`: object type for contributor entries
209
+ - `#contributorIdentity`: string type for DID/identifier values
210
+ - `#contributorRole`: string type for contribution details (maxLength 10000, maxGraphemes 1000)
211
+
212
+ **Migration:**
213
+
214
+ Convert from array of strongRefs to array of contributor objects:
215
+
216
+ ```json
217
+ // Before
218
+ "contributions": [strongRef1, strongRef2]
219
+
220
+ // After
221
+ "contributors": [
222
+ {
223
+ "contributorIdentity": "did:example:123",
224
+ "contributionWeight": "1.5",
225
+ "contributionDetails": "Lead developer"
226
+ },
227
+ {
228
+ "contributorIdentity": strongRefToContributorInfo,
229
+ "contributionDetails": strongRefToContributionDetails
230
+ }
231
+ ]
232
+ ```
233
+
234
+ - [#120](https://github.com/hypercerts-org/hypercerts-lexicon/pull/120) [`b2f7b68`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/b2f7b683ac17f07a891a59ee8289d26717197ba3) Thanks [@holkexyz](https://github.com/holkexyz)! - Refactor measurement lexicon schema: convert subject to subjects array, add unit field, date ranges, and locations array
235
+
236
+ **Breaking Changes:**
237
+ - **Measurement lexicon (`org.hypercerts.context.measurement`):**
238
+ - Changed `subject` (single strongRef) to `subjects` (array of strongRefs, maxLength: 100)
239
+ - Changed required fields: removed `measurers` from required, added `unit` as required
240
+ - Added `unit` field (required, string, maxLength: 50): The unit of the measured value (e.g. kg CO₂e, hectares, %, index score)
241
+ - Added `startDate` field (optional, datetime): The start date and time when the measurement began
242
+ - Added `endDate` field (optional, datetime): The end date and time when the measurement ended
243
+ - Changed `location` (single strongRef) to `locations` (array of strongRefs, maxLength: 100)
244
+ - Moved `measurers` from required to optional field
245
+ - Added `comment` field (optional, string): Short comment suitable for previews and list views
246
+ - Added `commentFacets` field (optional, array): Rich text annotations for `comment` (mentions, URLs, hashtags, etc.)
247
+ - Updated field descriptions for `metric` and `value` with more detailed examples
248
+
249
+ - [#67](https://github.com/hypercerts-org/hypercerts-lexicon/pull/67) [`b51dd76`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/b51dd7652b73c5ae6bba103f07eca9f5195809f0) Thanks [@bitbeckers](https://github.com/bitbeckers)! - Remove bidirectional project-activity link. Activities no longer include a `project` field reference. Projects continue to reference activities via the `activities` array, making the relationship unidirectional (project → activities only).
250
+
251
+ - [#98](https://github.com/hypercerts-org/hypercerts-lexicon/pull/98) [`43b0431`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/43b04316d8cb11066d61d79e70f262f0d2426cde) Thanks [@aspiers](https://github.com/aspiers)! - Remove org.hypercerts.claim.collection.project lexicon
252
+
253
+ - [#155](https://github.com/hypercerts-org/hypercerts-lexicon/pull/155) [`a59e541`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/a59e5418e242a2f6b2868cc46f5481d75a7bf0ca) Thanks [@holkexyz](https://github.com/holkexyz)! - Rename contributionDetails to contribution (org.hypercerts.claim.contribution).
254
+
255
+ - [#118](https://github.com/hypercerts-org/hypercerts-lexicon/pull/118) [`8427780`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/8427780888759ee749a683528f49e6b0da2b97c2) Thanks [@holkexyz](https://github.com/holkexyz)! - Rename evidence lexicon to attachment and refactor schema structure
256
+
257
+ **Breaking Changes:**
258
+ - **Lexicon ID change:**
259
+ - `org.hypercerts.claim.evidence` → `org.hypercerts.claim.attachment`
260
+ - All existing evidence records must be migrated to use the new lexicon ID
261
+ - **Schema structure changes (`org.hypercerts.claim.attachment`):**
262
+ - Changed `subject` (single strongRef) to `subjects` (array of strongRefs, maxLength: 100)
263
+ - Changed `content` from single union (uri/blob) to array of unions (maxLength: 100)
264
+ - Added `contentType` field (string, maxLength: 64) to specify attachment type
265
+ - Removed `relationType` field (previously used to indicate supports/challenges/clarifies)
266
+ - Removed `contributors` field
267
+ - Removed `locations` field
268
+ - Added rich text support: `shortDescriptionFacets` and `descriptionFacets` (arrays of `app.bsky.richtext.facet`)
269
+ - Updated required fields: `["title", "content", "createdAt"]` (content is now required)
270
+ - **Common definitions (`org.hypercerts.defs`):**
271
+ - Added `weightedContributor` def for contributor references with optional weights
272
+ - Added `contributorIdentity` def for string-based contributor identification
273
+
274
+ **Migration:**
275
+
276
+ **Lexicon ID:** Update all references from `org.hypercerts.claim.evidence` to `org.hypercerts.claim.attachment`.
277
+
278
+ **Schema migration:**
279
+
280
+ ```json
281
+ // Before (org.hypercerts.claim.evidence)
282
+ {
283
+ "$type": "org.hypercerts.claim.evidence",
284
+ "subject": { "uri": "...", "cid": "..." },
285
+ "content": { "uri": "https://..." },
286
+ "title": "Evidence Title",
287
+ "relationType": "supports",
288
+ "createdAt": "..."
289
+ }
290
+
291
+ // After (org.hypercerts.claim.attachment)
292
+ {
293
+ "$type": "org.hypercerts.claim.attachment",
294
+ "subjects": [{ "uri": "...", "cid": "..." }],
295
+ "content": [{ "uri": "https://..." }],
296
+ "contentType": "evidence",
297
+ "title": "Evidence Title",
298
+ "createdAt": "..."
299
+ }
300
+ ```
301
+
302
+ **Field mapping:**
303
+ - `subject` → `subjects` (wrap in array)
304
+ - `content` (single) → `content` (array, wrap existing value)
305
+ - `relationType` → remove (no direct replacement)
306
+ - `contributors` → remove (no direct replacement)
307
+ - `locations` → remove (no direct replacement)
308
+
309
+ - [#156](https://github.com/hypercerts-org/hypercerts-lexicon/pull/156) [`86f252d`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/86f252da1f755bac6e323142a2ed11a8c6e37cba) Thanks [@holkexyz](https://github.com/holkexyz)! - Require createdAt in app.certified.actor.profile schema
310
+
311
+ - [#161](https://github.com/hypercerts-org/hypercerts-lexicon/pull/161) [`ec91289`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/ec912892497198741254a861fd9104fa7c6dc827) Thanks [@aspiers](https://github.com/aspiers)! - chore: switch to build via rollup
312
+
313
+ Major build system improvements:
314
+ - **Build System**: Migrated from direct TypeScript to Rollup-based builds
315
+ - Generates proper ESM (`dist/index.mjs`) and CommonJS (`dist/index.cjs`) bundles
316
+ - Generates TypeScript declarations (`dist/index.d.ts`)
317
+ - Includes source maps for debugging
318
+ - Adds `/lexicons` export for lighter bundle (validation only)
319
+ - **Code Generation**:
320
+ - Auto-generates `generated/exports.ts` with clean, organized exports
321
+ - Creates type shims for external lexicons (@atcute/leaflet)
322
+ - All generated code now in `generated/` directory (gitignored)
323
+ - **Package Exports**:
324
+ - Main export: `@hypercerts-org/lexicon` (full package with types)
325
+ - Lexicons export: `@hypercerts-org/lexicon/lexicons` (schemas only, smaller bundle)
326
+ - Proper dual package support (ESM + CommonJS)
327
+ - **Code Quality**:
328
+ - Added ESLint configuration
329
+ - Added TypeScript type-checking to CI
330
+ - Improved build validation workflow
331
+ - **Dependencies**:
332
+ - Added `@atcute/leaflet` for external lexicon references
333
+ - Added `multiformats` as runtime dependency
334
+ - Moved `@atproto/lex-cli` to devDependencies (build-time only)
335
+
336
+ **Migration**: No breaking changes for existing users. Package structure is improved
337
+ but import paths remain compatible.
338
+
339
+ - [#125](https://github.com/hypercerts-org/hypercerts-lexicon/pull/125) [`771d142`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/771d14269ced86ea686cb6dac3414a7a283c482a) Thanks [@s-adamantine](https://github.com/s-adamantine)! - Simplify workScope to union of strongRef and string
340
+
341
+ **Breaking Changes:**
342
+ - The `workScope` field in `org.hypercerts.claim.activity` is now a union of:
343
+ - `com.atproto.repo.strongRef`: A reference to a work-scope logic record for structured, nested work scope definitions
344
+ - `org.hypercerts.claim.activity#workScopeString`: A free-form string for simple or legacy scopes
345
+ - **Removed** from `org.hypercerts.defs`:
346
+ - `workScopeAll` (logical AND operator)
347
+ - `workScopeAny` (logical OR operator)
348
+ - `workScopeNot` (logical NOT operator)
349
+ - `workScopeAtom` (atomic scope reference)
350
+
351
+ This simplification allows work scope complexity to be managed via referenced records while still supporting simple string-based scopes for straightforward use cases.
352
+
353
+ - [#47](https://github.com/hypercerts-org/hypercerts-lexicon/pull/47) [`6a66e4b`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/6a66e4b78ef676cc66b35773f2f9828ea697d332) Thanks [@satyam-mishra-pce](https://github.com/satyam-mishra-pce)! - Add support for multiple locations in an activity claim.
354
+
355
+ - [#103](https://github.com/hypercerts-org/hypercerts-lexicon/pull/103) [`b5d79da`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/b5d79da303ff7726c7a84b7568b18ee055ac0e81) Thanks [@s-adamantine](https://github.com/s-adamantine)! - Align all lexicons with the ATProto Lexicon Style Guide: change badge response `enum` to `knownValues`, add `maxLength`/`maxGraphemes` to unconstrained string and array fields, fix style checker to skip format-typed fields.
356
+
357
+ - [#75](https://github.com/hypercerts-org/hypercerts-lexicon/pull/75) [`95e2ba1`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/95e2ba174ea348746ce64507bf94b73c3d3d3954) Thanks [@s-adamantine](https://github.com/s-adamantine)! - Unify project and collection schemas into a single
358
+ `org.hypercerts.claim.collection` lexicon with `type` discriminator
359
+ field to allow collections to be designated as projects. Custom
360
+ strings are also allowed in `type`.
361
+
362
+ Also make `shortDescription` field optional in
363
+ `org.hypercerts.claim.collection` to match
364
+ `org.hypercerts.claim.project`.
365
+
366
+ This unification removes `org.hypercerts.claim.project`, so existing
367
+ projects should be migrated to collections with `type` set to
368
+ `project`.
369
+
370
+ - [#80](https://github.com/hypercerts-org/hypercerts-lexicon/pull/80) [`e8d5a7c`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/e8d5a7cd080e4f8d4e6b96ce5762678deaeb2902) Thanks [@s-adamantine](https://github.com/s-adamantine)! - Updated `org.hypercerts.claim.collection` lexicon:
371
+ - Added optional `type` field to specify collection type (e.g., 'favorites', 'project')
372
+ - Renamed fields for consistency:
373
+ - `collectionTitle` → `title`
374
+ - `shortCollectionDescription` → `shortDescription`
375
+ - `collectionDescription` → `description`
376
+ - Changed `description` from string to Leaflet linear document reference (`pub.leaflet.pages.linearDocument#main`) to support rich-text descriptions
377
+
378
+ **Breaking changes**:
379
+ - Field names have been renamed (e.g., `collectionTitle` → `title`)
380
+ - The `description` field now expects a reference object instead of a plain string
381
+
382
+ - [#92](https://github.com/hypercerts-org/hypercerts-lexicon/pull/92) [`bec8e63`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/bec8e63195fb73734b68f3d5201864b9bede0904) Thanks [@s-adamantine](https://github.com/s-adamantine)! - Update `org.hypercerts.claim.contributor` lexicon to support individual contributor profiles and roles.
383
+
384
+ Breaking Changes:
385
+ - Removed `contributors` array.
386
+ - Added `identifier`, `displayName`, and `image` fields for individual profiles.
387
+ - Renamed `description` to `contributionDescription`.
388
+ - Updated `required` fields to only include `createdAt`.
389
+
390
+ Also corrected incorrect references to `org.hypercerts.claim.contribution` across the codebase to use the correct ID `org.hypercerts.claim.contributor`.
391
+
392
+ ### Patch Changes
393
+
394
+ - [#118](https://github.com/hypercerts-org/hypercerts-lexicon/pull/118) [`8427780`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/8427780888759ee749a683528f49e6b0da2b97c2) Thanks [@holkexyz](https://github.com/holkexyz)! - Add location property to attachment schema
395
+
396
+ **New Feature:**
397
+ - **`location` field** (`org.hypercerts.claim.attachment`):
398
+ - Added optional `location` property as a strong reference (`com.atproto.repo.strongRef`)
399
+ - Allows attachments to associate location metadata directly without using the sidecar pattern
400
+ - The referenced record must conform to the `app.certified.location` lexicon
401
+
402
+ **Usage:**
403
+
404
+ ```json
405
+ {
406
+ "$type": "org.hypercerts.claim.attachment",
407
+ "subjects": [
408
+ {
409
+ "uri": "at://did:plc:.../org.hypercerts.claim.activity/...",
410
+ "cid": "..."
411
+ }
412
+ ],
413
+ "content": [{ "uri": "https://..." }],
414
+ "title": "Field Report",
415
+ "location": {
416
+ "uri": "at://did:plc:.../app.certified.location/abc123",
417
+ "cid": "..."
418
+ },
419
+ "createdAt": "..."
420
+ }
421
+ ```
422
+
423
+ This change aligns with the location property addition to collections (PR #123), providing a consistent pattern for associating location metadata across record types.
424
+
425
+ - [#161](https://github.com/hypercerts-org/hypercerts-lexicon/pull/161) [`5a490bf`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/5a490bf4404f6690fe832f82023ea05663050977) Thanks [@aspiers](https://github.com/aspiers)! - Add basic test suite using vitest 4.
426
+
427
+ - [#77](https://github.com/hypercerts-org/hypercerts-lexicon/pull/77) [`0d61ff7`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/0d61ff7e030a25682cd71877ae603b8782b09c3b) Thanks [@bitbeckers](https://github.com/bitbeckers)! - Document ATProto sidecar pattern for collections using app.certified.location. Collections can now have location metadata by creating a location record with the same TID, allowing location updates without changing the collection CID. Updated README with usage example and ERD with sidecar relationship.
428
+
429
+ - [#161](https://github.com/hypercerts-org/hypercerts-lexicon/pull/161) [`ece7629`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/ece7629956d6efbfed757d66609fe4ccc1c81d5a) Thanks [@aspiers](https://github.com/aspiers)! - Include CHANGELOG.md in package distribution for better user documentation.
430
+
431
+ - [#74](https://github.com/hypercerts-org/hypercerts-lexicon/pull/74) [`f845f92`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/f845f924907f62c8b96afa6a18ac203c4bd4cad5) Thanks [@aspiers](https://github.com/aspiers)! - Make startDate and endDate optional in activity lexicon
432
+
433
+ - [#161](https://github.com/hypercerts-org/hypercerts-lexicon/pull/161) [`913eb06`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/913eb06bcec519552f45f5d9797579ce99be1635) Thanks [@aspiers](https://github.com/aspiers)! - Switch from bundled to individual type declaration files
434
+
435
+ **Changes:**
436
+ - Removed `rollup-plugin-dts` dependency
437
+ - Switched to native TypeScript declaration generation
438
+ - Type declarations now mirror source structure in `dist/types/`
439
+ - Individual type files are small (1-3KB each) and lazy-loaded by TypeScript
440
+ - Improves IDE performance by avoiding single 39MB bundled declaration file
441
+
442
+ **Technical Details:**
443
+
444
+ The package now generates individual `.d.ts` files alongside the bundled JavaScript
445
+ output. This provides better IDE performance as TypeScript can lazy-load type files
446
+ on demand rather than parsing a massive bundled declaration file upfront.
447
+
448
+ ## 0.10.0-beta.16
449
+
450
+ ### Minor Changes
451
+
452
+ - [#141](https://github.com/hypercerts-org/hypercerts-lexicon/pull/141) [`06fb6b5`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/06fb6b54542fe6311d55cb26a1c468c1374b0ab1) Thanks [@holkexyz](https://github.com/holkexyz)! - Add CEL expression support for structured work scopes (`org.hypercerts.workscope.cel`, `org.hypercerts.workscope.tag`)
453
+
454
+ - [#149](https://github.com/hypercerts-org/hypercerts-lexicon/pull/149) [`9f124eb`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/9f124eb404e30a30ac90a6c4be934ece84556c08) Thanks [@daviddao](https://github.com/daviddao)! - Add `org.hyperboards.board` and `org.hyperboards.displayProfile` lexicons for hyperboard visual presentation records.
455
+
456
+ - [#140](https://github.com/hypercerts-org/hypercerts-lexicon/pull/140) [`20eb414`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/20eb414bd75cb100bebe16cfb41286377c18d5e7) Thanks [@holkexyz](https://github.com/holkexyz)! - Add app.certified.actor.organization sidecar record for organization actor profiles with fields for organization type, labeled URLs, location (strongRef), and founded date
457
+
458
+ - [#144](https://github.com/hypercerts-org/hypercerts-lexicon/pull/144) [`fb90134`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/fb90134e5df32e955e5f9fba748f4ca46d00e90e) Thanks [@holkexyz](https://github.com/holkexyz)! - Make items optional in collection schema to allow creating empty collections
459
+
460
+ - [#151](https://github.com/hypercerts-org/hypercerts-lexicon/pull/151) [`4d5f42f`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/4d5f42fa4f9ae2c74a6703f3af50e9acfd09ae95) Thanks [@holkexyz](https://github.com/holkexyz)! - Add optional `url` field to `app.certified.badge.award` for linking to an external page associated with the badge
461
+
462
+ - [#152](https://github.com/hypercerts-org/hypercerts-lexicon/pull/152) [`2afb6ed`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/2afb6edb89ffd186f2e0cf015bcc3557e13a7a6d) Thanks [@holkexyz](https://github.com/holkexyz)! - Use Leaflet linear documents for rich-text descriptions in activity and attachment lexicons, and make attachment content optional.
463
+
464
+ - [#153](https://github.com/hypercerts-org/hypercerts-lexicon/pull/153) [`57dc44c`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/57dc44c163a6d62e4256e3de41ccf14617eb07e8) Thanks [@holkexyz](https://github.com/holkexyz)! - Improve acknowledgement schema: move to org.hypercerts.context.acknowledgement, generalize descriptions, make context optional, add maxGraphemes to comment.
465
+
466
+ - [#158](https://github.com/hypercerts-org/hypercerts-lexicon/pull/158) [`7743aa6`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/7743aa6014faa35714d3e146cfa45b0e67501992) Thanks [@holkexyz](https://github.com/holkexyz)! - Move collection lexicon from `org.hypercerts.claim.collection` to `org.hypercerts.collection` to reflect that collections can contain more than just claims.
467
+
468
+ - [#154](https://github.com/hypercerts-org/hypercerts-lexicon/pull/154) [`4c52b2c`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/4c52b2c9b2d449cbeb74eea9efa0a9eb2a0a39b7) Thanks [@holkexyz](https://github.com/holkexyz)! - Move evaluation and attachment lexicons to org.hypercerts.context namespace.
469
+
470
+ - [#155](https://github.com/hypercerts-org/hypercerts-lexicon/pull/155) [`a59e541`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/a59e5418e242a2f6b2868cc46f5481d75a7bf0ca) Thanks [@holkexyz](https://github.com/holkexyz)! - Rename contributionDetails to contribution (org.hypercerts.claim.contribution).
471
+
472
+ - [#156](https://github.com/hypercerts-org/hypercerts-lexicon/pull/156) [`86f252d`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/86f252da1f755bac6e323142a2ed11a8c6e37cba) Thanks [@holkexyz](https://github.com/holkexyz)! - Require createdAt in app.certified.actor.profile schema
473
+
474
+ - [#103](https://github.com/hypercerts-org/hypercerts-lexicon/pull/103) [`b5d79da`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/b5d79da303ff7726c7a84b7568b18ee055ac0e81) Thanks [@s-adamantine](https://github.com/s-adamantine)! - Align all lexicons with the ATProto Lexicon Style Guide: change badge response `enum` to `knownValues`, add `maxLength`/`maxGraphemes` to unconstrained string and array fields, fix style checker to skip format-typed fields.
475
+
476
+ ## 0.10.0-beta.15
477
+
478
+ ### Minor Changes
479
+
480
+ - [#76](https://github.com/hypercerts-org/hypercerts-lexicon/pull/76) [`3044e22`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/3044e22c1345b3cd5764e3c6c3714b21e6911663) Thanks [@s-adamantine](https://github.com/s-adamantine)! - Add org.hypercerts.acknowledgement lexicon for bidirectional inclusion links between records across PDS repos
481
+
482
+ - [#136](https://github.com/hypercerts-org/hypercerts-lexicon/pull/136) [`062fbde`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/062fbde905dbd939f75c366760be1c02bb8a0412) Thanks [@copilot-swe-agent](https://github.com/apps/copilot-swe-agent)! - Expand locationType knownValues to include geojson, h3, geohash, wkt, address, and scaledCoordinates from the [Location Protocol spec](https://spec.decentralizedgeo.org/specification/location-types/#location-type-registry)
483
+
484
+ ## 0.10.0-beta.14
485
+
486
+ ### Minor Changes
487
+
488
+ - [#133](https://github.com/hypercerts-org/hypercerts-lexicon/pull/133) [`6752cad`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/6752cad3c9e58b9a8e1a3ca17f2ea7a4a68dba81) Thanks [@Kzoeps](https://github.com/Kzoeps)! - Add profile lexicon for Hypercert account profiles with support for display name, description, pronouns, website, avatar, banner.
489
+
490
+ - [#132](https://github.com/hypercerts-org/hypercerts-lexicon/pull/132) [`da481e0`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/da481e09f5bd1a8e62e388f2c6001896d76b1fbf) Thanks [@aspiers](https://github.com/aspiers)! - Convert app.certified.defs#did to object type
491
+
492
+ The did definition in app.certified.defs has been converted from a primitive
493
+ string type to an object type to comply with the ATProto specification
494
+ requirement that all union variants must be object or record types.
495
+
496
+ This change was necessary because app.certified.badge.award uses this
497
+ definition in a union for the subject property.
498
+
499
+ Breaking changes:
500
+ - `app.certified.defs#did`: Now an object with `did` string property (maxLength 256)
501
+ - Code using this type must now access the `.did` property instead of using the value directly
502
+
503
+ - [#132](https://github.com/hypercerts-org/hypercerts-lexicon/pull/132) [`e134b26`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/e134b26c43a70c0a9ae04cc12b8a3bd05990c470) Thanks [@aspiers](https://github.com/aspiers)! - Convert union string definitions to object types in activity lexicon
504
+
505
+ The contributorIdentity, contributorRole, and workScopeString definitions
506
+ in org.hypercerts.claim.activity have been converted from primitive string
507
+ types to object types to comply with the ATProto specification requirement
508
+ that all union variants must be object or record types.
509
+
510
+ Additionally, maximum length constraints have been reduced to more reasonable
511
+ values:
512
+ - `contributorIdentity.identity`: maxLength 1000, maxGraphemes 100 (previously no limits)
513
+ - `contributorRole.role`: maxLength 1000, maxGraphemes 100 (previously maxLength 10000, maxGraphemes 1000)
514
+ - `workScopeString.scope`: maxLength 1000, maxGraphemes 100 (previously maxLength 10000, maxGraphemes 1000)
515
+
516
+ Breaking changes:
517
+ - `contributorIdentity`: Now an object with `identity` string property
518
+ - `contributorRole`: Now an object with `role` string property
519
+ - `workScopeString`: Now an object with `scope` string property
520
+ - Reduced maximum lengths may affect existing records with longer values
521
+
522
+ This requires updating code that uses these union types to access the nested
523
+ property instead of using the value directly.
524
+
525
+ - [#135](https://github.com/hypercerts-org/hypercerts-lexicon/pull/135) [`806cfbc`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/806cfbca7cbcd3674a5f8e97a6b6dd87ba806c08) Thanks [@Kzoeps](https://github.com/Kzoeps)! - Move profile lexicon from app.certified.profile to app.certified.actor.profile namespace, requiring migration of existing profile records
526
+
527
+ ## 0.10.0-beta.13
528
+
529
+ ### Minor Changes
530
+
531
+ - [#131](https://github.com/hypercerts-org/hypercerts-lexicon/pull/131) [`7f42fad`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/7f42fad517e191dad6db22fc67ec8346ec167f5c) Thanks [@aspiers](https://github.com/aspiers)! - Add inline string format to app.certified.location schema with documentation and examples
532
+
533
+ - [#118](https://github.com/hypercerts-org/hypercerts-lexicon/pull/118) [`8427780`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/8427780888759ee749a683528f49e6b0da2b97c2) Thanks [@holkexyz](https://github.com/holkexyz)! - Rename evidence lexicon to attachment and refactor schema structure
534
+
535
+ **Breaking Changes:**
536
+ - **Lexicon ID change:**
537
+ - `org.hypercerts.claim.evidence` → `org.hypercerts.claim.attachment`
538
+ - All existing evidence records must be migrated to use the new lexicon ID
539
+ - **Schema structure changes (`org.hypercerts.claim.attachment`):**
540
+ - Changed `subject` (single strongRef) to `subjects` (array of strongRefs, maxLength: 100)
541
+ - Changed `content` from single union (uri/blob) to array of unions (maxLength: 100)
542
+ - Added `contentType` field (string, maxLength: 64) to specify attachment type
543
+ - Removed `relationType` field (previously used to indicate supports/challenges/clarifies)
544
+ - Removed `contributors` field
545
+ - Removed `locations` field
546
+ - Added rich text support: `shortDescriptionFacets` and `descriptionFacets` (arrays of `app.bsky.richtext.facet`)
547
+ - Updated required fields: `["title", "content", "createdAt"]` (content is now required)
548
+ - **Common definitions (`org.hypercerts.defs`):**
549
+ - Added `weightedContributor` def for contributor references with optional weights
550
+ - Added `contributorIdentity` def for string-based contributor identification
551
+
552
+ **Migration:**
553
+
554
+ **Lexicon ID:** Update all references from `org.hypercerts.claim.evidence` to `org.hypercerts.claim.attachment`.
555
+
556
+ **Schema migration:**
557
+
558
+ ```json
559
+ // Before (org.hypercerts.claim.evidence)
560
+ {
561
+ "$type": "org.hypercerts.claim.evidence",
562
+ "subject": { "uri": "...", "cid": "..." },
563
+ "content": { "uri": "https://..." },
564
+ "title": "Evidence Title",
565
+ "relationType": "supports",
566
+ "createdAt": "..."
567
+ }
568
+
569
+ // After (org.hypercerts.claim.attachment)
570
+ {
571
+ "$type": "org.hypercerts.claim.attachment",
572
+ "subjects": [{ "uri": "...", "cid": "..." }],
573
+ "content": [{ "uri": "https://..." }],
574
+ "contentType": "evidence",
575
+ "title": "Evidence Title",
576
+ "createdAt": "..."
577
+ }
578
+ ```
579
+
580
+ **Field mapping:**
581
+ - `subject` → `subjects` (wrap in array)
582
+ - `content` (single) → `content` (array, wrap existing value)
583
+ - `relationType` → remove (no direct replacement)
584
+ - `contributors` → remove (no direct replacement)
585
+ - `locations` → remove (no direct replacement)
586
+
587
+ ### Patch Changes
588
+
589
+ - [#118](https://github.com/hypercerts-org/hypercerts-lexicon/pull/118) [`8427780`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/8427780888759ee749a683528f49e6b0da2b97c2) Thanks [@holkexyz](https://github.com/holkexyz)! - Add location property to attachment schema
590
+
591
+ **New Feature:**
592
+ - **`location` field** (`org.hypercerts.claim.attachment`):
593
+ - Added optional `location` property as a strong reference (`com.atproto.repo.strongRef`)
594
+ - Allows attachments to associate location metadata directly without using the sidecar pattern
595
+ - The referenced record must conform to the `app.certified.location` lexicon
596
+
597
+ **Usage:**
598
+
599
+ ```json
600
+ {
601
+ "$type": "org.hypercerts.claim.attachment",
602
+ "subjects": [
603
+ {
604
+ "uri": "at://did:plc:.../org.hypercerts.claim.activity/...",
605
+ "cid": "..."
606
+ }
607
+ ],
608
+ "content": [{ "uri": "https://..." }],
609
+ "title": "Field Report",
610
+ "location": {
611
+ "uri": "at://did:plc:.../app.certified.location/abc123",
612
+ "cid": "..."
613
+ },
614
+ "createdAt": "..."
615
+ }
616
+ ```
617
+
618
+ This change aligns with the location property addition to collections (PR #123), providing a consistent pattern for associating location metadata across record types.
619
+
620
+ ## 0.10.0-beta.12
621
+
622
+ ### Minor Changes
623
+
624
+ - [#120](https://github.com/hypercerts-org/hypercerts-lexicon/pull/120) [`b2f7b68`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/b2f7b683ac17f07a891a59ee8289d26717197ba3) Thanks [@holkexyz](https://github.com/holkexyz)! - Refactor measurement lexicon schema: add unit field, date ranges, and locations array
625
+
626
+ **Breaking Changes:**
627
+ - **Measurement lexicon (`org.hypercerts.claim.measurement`):**
628
+ - Changed required fields: removed `measurers` from required, added `unit` as required
629
+ - Added `unit` field (required, string, maxLength: 50): The unit of the measured value (e.g. kg CO₂e, hectares, %, index score)
630
+ - Added `startDate` field (optional, datetime): The start date and time when the measurement began
631
+ - Added `endDate` field (optional, datetime): The end date and time when the measurement ended
632
+ - Changed `location` (single strongRef) to `locations` (array of strongRefs, maxLength: 100)
633
+ - Moved `measurers` from required to optional field
634
+ - Added `comment` field (optional, string): Short comment suitable for previews and list views
635
+ - Added `commentFacets` field (optional, array): Rich text annotations for `comment` (mentions, URLs, hashtags, etc.)
636
+ - Updated field descriptions for `metric` and `value` with more detailed examples
637
+
638
+ **Migration:**
639
+
640
+ **Required fields:** Update measurement records to include the new required `unit` field:
641
+
642
+ ```json
643
+ // Before
644
+ {
645
+ "$type": "org.hypercerts.claim.measurement",
646
+ "measurers": [...],
647
+ "metric": "CO₂ sequestered",
648
+ "value": "1000",
649
+ "createdAt": "..."
650
+ }
651
+
652
+ // After
653
+ {
654
+ "$type": "org.hypercerts.claim.measurement",
655
+ "metric": "CO₂ sequestered",
656
+ "unit": "kg CO₂e",
657
+ "value": "1000",
658
+ "measurers": [...], // Now optional
659
+ "createdAt": "..."
660
+ }
661
+ ```
662
+
663
+ **Location field:** Convert from single location to locations array:
664
+
665
+ ```json
666
+ // Before
667
+ {
668
+ "location": { "uri": "...", "cid": "..." }
669
+ }
670
+
671
+ // After
672
+ {
673
+ "locations": [{ "uri": "...", "cid": "..." }]
674
+ }
675
+ ```
676
+
677
+ **Date ranges:** Optionally add `startDate` and `endDate` to specify when measurements were taken.
678
+
679
+ - [#125](https://github.com/hypercerts-org/hypercerts-lexicon/pull/125) [`771d142`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/771d14269ced86ea686cb6dac3414a7a283c482a) Thanks [@s-adamantine](https://github.com/s-adamantine)! - Simplify workScope to union of strongRef and string
680
+
681
+ **Breaking Changes:**
682
+ - The `workScope` field in `org.hypercerts.claim.activity` is now a union of:
683
+ - `com.atproto.repo.strongRef`: A reference to a work-scope logic record for structured, nested work scope definitions
684
+ - `org.hypercerts.claim.activity#workScopeString`: A free-form string for simple or legacy scopes
685
+ - **Removed** from `org.hypercerts.defs`:
686
+ - `workScopeAll` (logical AND operator)
687
+ - `workScopeAny` (logical OR operator)
688
+ - `workScopeNot` (logical NOT operator)
689
+ - `workScopeAtom` (atomic scope reference)
690
+
691
+ This simplification allows work scope complexity to be managed via referenced records while still supporting simple string-based scopes for straightforward use cases.
692
+
693
+ ## 0.10.0-beta.11
694
+
695
+ ### Minor Changes
696
+
697
+ - [#123](https://github.com/hypercerts-org/hypercerts-lexicon/pull/123) [`c623d32`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/c623d327e0e6c1a4f5ca92135ece284cfe166421) Thanks [@aspiers](https://github.com/aspiers)! - Add `location` property to collections. Collections can now reference a location record directly via strongRef. This replaces the sidecar pattern which was impractical since location records cannot be reused across multiple collections.
698
+
699
+ ## 0.10.0-beta.10
700
+
701
+ ### Minor Changes
702
+
703
+ - [#122](https://github.com/hypercerts-org/hypercerts-lexicon/pull/122) [`3e3da41`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/3e3da41df8016d4d7f63477000a01756704d0820) Thanks [@aspiers](https://github.com/aspiers)! - Drop HELPER\_ prefix from workScopeTag constants. `HELPER_WORK_SCOPE_TAG_NSID`, `HELPER_WORK_SCOPE_TAG_LEXICON_JSON`, and `HELPER_WORK_SCOPE_TAG_LEXICON_DOC` are now `WORK_SCOPE_TAG_NSID`, `WORK_SCOPE_TAG_LEXICON_JSON`, and `WORK_SCOPE_TAG_LEXICON_DOC`.
704
+
705
+ ## 0.10.0-beta.9
706
+
707
+ ### Minor Changes
708
+
709
+ - [#121](https://github.com/hypercerts-org/hypercerts-lexicon/pull/121) [`5c33b79`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/5c33b796f78eca2a207116d246a715cd5712f392) Thanks [@aspiers](https://github.com/aspiers)! - Fix camelCase export names to use underscores. Generated constants like `CONTRIBUTIONDETAILS_LEXICON_*` are now `CONTRIBUTION_DETAILS_LEXICON_*` for consistency.
710
+
711
+ Affected exports:
712
+ - `CONTRIBUTION_DETAILS_NSID`, `CONTRIBUTION_DETAILS_LEXICON_JSON`, `CONTRIBUTION_DETAILS_LEXICON_DOC` (was `CONTRIBUTIONDETAILS_*`)
713
+ - `CONTRIBUTOR_INFORMATION_NSID`, `CONTRIBUTOR_INFORMATION_LEXICON_JSON`, `CONTRIBUTOR_INFORMATION_LEXICON_DOC` (was `CONTRIBUTORINFORMATION_*`)
714
+ - `STRONG_REF_NSID`, `STRONG_REF_LEXICON_JSON`, `STRONG_REF_LEXICON_DOC` (was `STRONGREF_*`)
715
+ - `HELPER_WORK_SCOPE_TAG_NSID`, `HELPER_WORK_SCOPE_TAG_LEXICON_JSON`, `HELPER_WORK_SCOPE_TAG_LEXICON_DOC` (was `HELPER_WORKSCOPETAG_*`)
716
+
3
717
  ## 0.10.0-beta.8
4
718
 
5
719
  ### Minor Changes