@hypercerts-org/lexicon 0.10.0-beta.9 → 0.11.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.
- package/CHANGELOG.md +907 -0
- package/README.md +420 -168
- package/SCHEMAS.md +897 -142
- package/dist/exports.d.ts +1876 -453
- package/dist/exports.d.ts.map +1 -1
- package/dist/generated/exports.d.ts +1876 -453
- package/dist/generated/exports.d.ts.map +1 -1
- package/dist/generated/lexicons.d.ts +3709 -1113
- package/dist/generated/lexicons.d.ts.map +1 -1
- package/dist/generated/types/app/bsky/richtext/facet.d.ts +44 -7
- package/dist/generated/types/app/bsky/richtext/facet.d.ts.map +1 -1
- package/dist/generated/types/app/certified/actor/organization.d.ts +32 -0
- package/dist/generated/types/app/certified/actor/organization.d.ts.map +1 -0
- package/dist/generated/types/app/certified/actor/profile.d.ts +30 -0
- package/dist/generated/types/app/certified/actor/profile.d.ts.map +1 -0
- package/dist/generated/types/app/certified/badge/award.d.ts +4 -3
- package/dist/generated/types/app/certified/badge/award.d.ts.map +1 -1
- package/dist/generated/types/app/certified/badge/definition.d.ts +3 -3
- package/dist/generated/types/app/certified/badge/definition.d.ts.map +1 -1
- package/dist/generated/types/app/certified/badge/response.d.ts +3 -3
- package/dist/generated/types/app/certified/badge/response.d.ts.map +1 -1
- package/dist/generated/types/app/certified/defs.d.ts +11 -1
- package/dist/generated/types/app/certified/defs.d.ts.map +1 -1
- package/dist/generated/types/app/certified/link/evm.d.ts +45 -0
- package/dist/generated/types/app/certified/link/evm.d.ts.map +1 -0
- package/dist/generated/types/app/certified/location.d.ts +13 -5
- package/dist/generated/types/app/certified/location.d.ts.map +1 -1
- package/dist/generated/types/org/hyperboards/board.d.ts +75 -0
- package/dist/generated/types/org/hyperboards/board.d.ts.map +1 -0
- package/dist/generated/types/org/hyperboards/displayProfile.d.ts +31 -0
- package/dist/generated/types/org/hyperboards/displayProfile.d.ts.map +1 -0
- package/dist/generated/types/org/hypercerts/claim/activity.d.ts +33 -11
- package/dist/generated/types/org/hypercerts/claim/activity.d.ts.map +1 -1
- package/dist/generated/types/org/hypercerts/claim/{contributionDetails.d.ts → contribution.d.ts} +6 -6
- package/dist/generated/types/org/hypercerts/claim/contribution.d.ts.map +1 -0
- package/dist/generated/types/org/hypercerts/claim/contributorInformation.d.ts +2 -2
- package/dist/generated/types/org/hypercerts/claim/contributorInformation.d.ts.map +1 -1
- package/dist/generated/types/org/hypercerts/claim/rights.d.ts +3 -3
- package/dist/generated/types/org/hypercerts/claim/rights.d.ts.map +1 -1
- package/dist/generated/types/org/hypercerts/collection.d.ts +48 -0
- package/dist/generated/types/org/hypercerts/collection.d.ts.map +1 -0
- package/dist/generated/types/org/hypercerts/context/acknowledgement.d.ts +25 -0
- package/dist/generated/types/org/hypercerts/context/acknowledgement.d.ts.map +1 -0
- package/dist/generated/types/org/hypercerts/context/attachment.d.ts +37 -0
- package/dist/generated/types/org/hypercerts/context/attachment.d.ts.map +1 -0
- package/dist/{types/org/hypercerts/claim → generated/types/org/hypercerts/context}/evaluation.d.ts +15 -15
- package/dist/generated/types/org/hypercerts/context/evaluation.d.ts.map +1 -0
- package/dist/generated/types/org/hypercerts/context/measurement.d.ts +43 -0
- package/dist/generated/types/org/hypercerts/context/measurement.d.ts.map +1 -0
- package/dist/generated/types/org/hypercerts/defs.d.ts +19 -44
- package/dist/generated/types/org/hypercerts/defs.d.ts.map +1 -1
- package/dist/generated/types/org/hypercerts/funding/receipt.d.ts +18 -6
- package/dist/generated/types/org/hypercerts/funding/receipt.d.ts.map +1 -1
- package/dist/generated/types/org/hypercerts/workscope/cel.d.ts +20 -0
- package/dist/generated/types/org/hypercerts/workscope/cel.d.ts.map +1 -0
- package/dist/generated/types/org/hypercerts/workscope/tag.d.ts +36 -0
- package/dist/generated/types/org/hypercerts/workscope/tag.d.ts.map +1 -0
- package/dist/generated/types/pub/leaflet/blocks/blockquote.d.ts +13 -0
- package/dist/generated/types/pub/leaflet/blocks/blockquote.d.ts.map +1 -0
- package/dist/generated/types/pub/leaflet/blocks/bskyPost.d.ts +13 -0
- package/dist/generated/types/pub/leaflet/blocks/bskyPost.d.ts.map +1 -0
- package/dist/generated/types/pub/leaflet/blocks/button.d.ts +12 -0
- package/dist/generated/types/pub/leaflet/blocks/button.d.ts.map +1 -0
- package/dist/generated/types/pub/leaflet/blocks/code.d.ts +13 -0
- package/dist/generated/types/pub/leaflet/blocks/code.d.ts.map +1 -0
- package/dist/generated/types/pub/leaflet/blocks/header.d.ts +14 -0
- package/dist/generated/types/pub/leaflet/blocks/header.d.ts.map +1 -0
- package/dist/generated/types/pub/leaflet/blocks/horizontalRule.d.ts +10 -0
- package/dist/generated/types/pub/leaflet/blocks/horizontalRule.d.ts.map +1 -0
- package/dist/generated/types/pub/leaflet/blocks/iframe.d.ts +12 -0
- package/dist/generated/types/pub/leaflet/blocks/iframe.d.ts.map +1 -0
- package/dist/generated/types/pub/leaflet/blocks/image.d.ts +21 -0
- package/dist/generated/types/pub/leaflet/blocks/image.d.ts.map +1 -0
- package/dist/generated/types/pub/leaflet/blocks/math.d.ts +11 -0
- package/dist/generated/types/pub/leaflet/blocks/math.d.ts.map +1 -0
- package/dist/generated/types/pub/leaflet/blocks/orderedList.d.ts +31 -0
- package/dist/generated/types/pub/leaflet/blocks/orderedList.d.ts.map +1 -0
- package/dist/generated/types/pub/leaflet/blocks/page.d.ts +11 -0
- package/dist/generated/types/pub/leaflet/blocks/page.d.ts.map +1 -0
- package/dist/generated/types/pub/leaflet/blocks/poll.d.ts +12 -0
- package/dist/generated/types/pub/leaflet/blocks/poll.d.ts.map +1 -0
- package/dist/generated/types/pub/leaflet/blocks/text.d.ts +14 -0
- package/dist/generated/types/pub/leaflet/blocks/text.d.ts.map +1 -0
- package/dist/generated/types/pub/leaflet/blocks/unorderedList.d.ts +29 -0
- package/dist/generated/types/pub/leaflet/blocks/unorderedList.d.ts.map +1 -0
- package/dist/generated/types/pub/leaflet/blocks/website.d.ts +14 -0
- package/dist/generated/types/pub/leaflet/blocks/website.d.ts.map +1 -0
- package/dist/generated/types/pub/leaflet/pages/linearDocument.d.ts +54 -1
- package/dist/generated/types/pub/leaflet/pages/linearDocument.d.ts.map +1 -1
- package/dist/generated/types/pub/leaflet/richtext/facet.d.ts +97 -0
- package/dist/generated/types/pub/leaflet/richtext/facet.d.ts.map +1 -0
- package/dist/index.cjs +5682 -1668
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +5554 -1640
- package/dist/index.mjs.map +1 -1
- package/dist/lexicons.cjs +1846 -419
- package/dist/lexicons.cjs.map +1 -1
- package/dist/lexicons.d.ts +3709 -1113
- package/dist/lexicons.d.ts.map +1 -1
- package/dist/lexicons.mjs +1846 -419
- package/dist/lexicons.mjs.map +1 -1
- package/dist/tests/validate-external-lexicons.test.d.ts +2 -0
- package/dist/tests/validate-external-lexicons.test.d.ts.map +1 -0
- package/dist/tests/validate-funding-receipt.test.d.ts +2 -0
- package/dist/tests/validate-funding-receipt.test.d.ts.map +1 -0
- package/dist/tests/validate-link-evm.test.d.ts +2 -0
- package/dist/tests/validate-link-evm.test.d.ts.map +1 -0
- package/dist/tests/validate-rights.test.d.ts +2 -0
- package/dist/tests/validate-rights.test.d.ts.map +1 -0
- package/dist/types/app/bsky/richtext/facet.d.ts +44 -7
- package/dist/types/app/bsky/richtext/facet.d.ts.map +1 -1
- package/dist/types/app/certified/actor/organization.d.ts +32 -0
- package/dist/types/app/certified/actor/organization.d.ts.map +1 -0
- package/dist/types/app/certified/actor/profile.d.ts +30 -0
- package/dist/types/app/certified/actor/profile.d.ts.map +1 -0
- package/dist/types/app/certified/badge/award.d.ts +4 -3
- package/dist/types/app/certified/badge/award.d.ts.map +1 -1
- package/dist/types/app/certified/badge/definition.d.ts +3 -3
- package/dist/types/app/certified/badge/definition.d.ts.map +1 -1
- package/dist/types/app/certified/badge/response.d.ts +3 -3
- package/dist/types/app/certified/badge/response.d.ts.map +1 -1
- package/dist/types/app/certified/defs.d.ts +11 -1
- package/dist/types/app/certified/defs.d.ts.map +1 -1
- package/dist/types/app/certified/link/evm.d.ts +45 -0
- package/dist/types/app/certified/link/evm.d.ts.map +1 -0
- package/dist/types/app/certified/location.d.ts +13 -5
- package/dist/types/app/certified/location.d.ts.map +1 -1
- package/dist/types/org/hyperboards/board.d.ts +75 -0
- package/dist/types/org/hyperboards/board.d.ts.map +1 -0
- package/dist/types/org/hyperboards/displayProfile.d.ts +31 -0
- package/dist/types/org/hyperboards/displayProfile.d.ts.map +1 -0
- package/dist/types/org/hypercerts/claim/activity.d.ts +33 -11
- package/dist/types/org/hypercerts/claim/activity.d.ts.map +1 -1
- package/dist/types/org/hypercerts/claim/{contributionDetails.d.ts → contribution.d.ts} +6 -6
- package/dist/types/org/hypercerts/claim/contribution.d.ts.map +1 -0
- package/dist/types/org/hypercerts/claim/contributorInformation.d.ts +2 -2
- package/dist/types/org/hypercerts/claim/contributorInformation.d.ts.map +1 -1
- package/dist/types/org/hypercerts/claim/rights.d.ts +3 -3
- package/dist/types/org/hypercerts/claim/rights.d.ts.map +1 -1
- package/dist/types/org/hypercerts/collection.d.ts +48 -0
- package/dist/types/org/hypercerts/collection.d.ts.map +1 -0
- package/dist/types/org/hypercerts/context/acknowledgement.d.ts +25 -0
- package/dist/types/org/hypercerts/context/acknowledgement.d.ts.map +1 -0
- package/dist/types/org/hypercerts/context/attachment.d.ts +37 -0
- package/dist/types/org/hypercerts/context/attachment.d.ts.map +1 -0
- package/dist/{generated/types/org/hypercerts/claim → types/org/hypercerts/context}/evaluation.d.ts +15 -15
- package/dist/types/org/hypercerts/context/evaluation.d.ts.map +1 -0
- package/dist/types/org/hypercerts/context/measurement.d.ts +43 -0
- package/dist/types/org/hypercerts/context/measurement.d.ts.map +1 -0
- package/dist/types/org/hypercerts/defs.d.ts +19 -44
- package/dist/types/org/hypercerts/defs.d.ts.map +1 -1
- package/dist/types/org/hypercerts/funding/receipt.d.ts +18 -6
- package/dist/types/org/hypercerts/funding/receipt.d.ts.map +1 -1
- package/dist/types/org/hypercerts/workscope/cel.d.ts +20 -0
- package/dist/types/org/hypercerts/workscope/cel.d.ts.map +1 -0
- package/dist/types/org/hypercerts/workscope/tag.d.ts +36 -0
- package/dist/types/org/hypercerts/workscope/tag.d.ts.map +1 -0
- package/dist/types/pub/leaflet/blocks/blockquote.d.ts +13 -0
- package/dist/types/pub/leaflet/blocks/blockquote.d.ts.map +1 -0
- package/dist/types/pub/leaflet/blocks/bskyPost.d.ts +13 -0
- package/dist/types/pub/leaflet/blocks/bskyPost.d.ts.map +1 -0
- package/dist/types/pub/leaflet/blocks/button.d.ts +12 -0
- package/dist/types/pub/leaflet/blocks/button.d.ts.map +1 -0
- package/dist/types/pub/leaflet/blocks/code.d.ts +13 -0
- package/dist/types/pub/leaflet/blocks/code.d.ts.map +1 -0
- package/dist/types/pub/leaflet/blocks/header.d.ts +14 -0
- package/dist/types/pub/leaflet/blocks/header.d.ts.map +1 -0
- package/dist/types/pub/leaflet/blocks/horizontalRule.d.ts +10 -0
- package/dist/types/pub/leaflet/blocks/horizontalRule.d.ts.map +1 -0
- package/dist/types/pub/leaflet/blocks/iframe.d.ts +12 -0
- package/dist/types/pub/leaflet/blocks/iframe.d.ts.map +1 -0
- package/dist/types/pub/leaflet/blocks/image.d.ts +21 -0
- package/dist/types/pub/leaflet/blocks/image.d.ts.map +1 -0
- package/dist/types/pub/leaflet/blocks/math.d.ts +11 -0
- package/dist/types/pub/leaflet/blocks/math.d.ts.map +1 -0
- package/dist/types/pub/leaflet/blocks/orderedList.d.ts +31 -0
- package/dist/types/pub/leaflet/blocks/orderedList.d.ts.map +1 -0
- package/dist/types/pub/leaflet/blocks/page.d.ts +11 -0
- package/dist/types/pub/leaflet/blocks/page.d.ts.map +1 -0
- package/dist/types/pub/leaflet/blocks/poll.d.ts +12 -0
- package/dist/types/pub/leaflet/blocks/poll.d.ts.map +1 -0
- package/dist/types/pub/leaflet/blocks/text.d.ts +14 -0
- package/dist/types/pub/leaflet/blocks/text.d.ts.map +1 -0
- package/dist/types/pub/leaflet/blocks/unorderedList.d.ts +29 -0
- package/dist/types/pub/leaflet/blocks/unorderedList.d.ts.map +1 -0
- package/dist/types/pub/leaflet/blocks/website.d.ts +14 -0
- package/dist/types/pub/leaflet/blocks/website.d.ts.map +1 -0
- package/dist/types/pub/leaflet/pages/linearDocument.d.ts +54 -1
- package/dist/types/pub/leaflet/pages/linearDocument.d.ts.map +1 -1
- package/dist/types/pub/leaflet/richtext/facet.d.ts +97 -0
- package/dist/types/pub/leaflet/richtext/facet.d.ts.map +1 -0
- package/lexicons/app/bsky/richtext/facet.json +51 -0
- package/lexicons/app/certified/actor/organization.json +70 -0
- package/lexicons/app/certified/actor/profile.json +61 -0
- package/lexicons/app/certified/badge/award.json +10 -3
- package/lexicons/app/certified/badge/definition.json +17 -4
- package/lexicons/app/certified/badge/response.json +5 -4
- package/lexicons/app/certified/defs.json +11 -3
- package/lexicons/app/certified/link/evm.json +88 -0
- package/lexicons/app/certified/location.json +29 -6
- package/lexicons/org/hyperboards/board.json +152 -0
- package/lexicons/org/hyperboards/displayProfile.json +64 -0
- package/lexicons/org/hypercerts/claim/activity.json +61 -39
- package/lexicons/org/hypercerts/claim/{contributionDetails.json → contribution.json} +4 -4
- package/lexicons/org/hypercerts/claim/contributorInformation.json +3 -2
- package/lexicons/org/hypercerts/claim/rights.json +5 -3
- package/lexicons/org/hypercerts/{claim/collection.json → collection.json} +33 -11
- package/lexicons/org/hypercerts/context/acknowledgement.json +42 -0
- package/lexicons/org/hypercerts/context/attachment.json +88 -0
- package/lexicons/org/hypercerts/{claim → context}/evaluation.json +25 -22
- package/lexicons/org/hypercerts/context/measurement.json +107 -0
- package/lexicons/org/hypercerts/defs.json +35 -89
- package/lexicons/org/hypercerts/funding/receipt.json +40 -14
- package/lexicons/org/hypercerts/workscope/cel.json +39 -0
- package/lexicons/org/hypercerts/workscope/tag.json +87 -0
- package/lexicons/pub/leaflet/blocks/blockquote.json +22 -0
- package/lexicons/pub/leaflet/blocks/bskyPost.json +19 -0
- package/lexicons/pub/leaflet/blocks/button.json +19 -0
- package/lexicons/pub/leaflet/blocks/code.json +21 -0
- package/lexicons/pub/leaflet/blocks/header.json +27 -0
- package/lexicons/pub/leaflet/blocks/horizontalRule.json +11 -0
- package/lexicons/pub/leaflet/blocks/iframe.json +21 -0
- package/lexicons/pub/leaflet/blocks/image.json +37 -0
- package/lexicons/pub/leaflet/blocks/math.json +15 -0
- package/lexicons/pub/leaflet/blocks/orderedList.json +54 -0
- package/lexicons/pub/leaflet/blocks/page.json +15 -0
- package/lexicons/pub/leaflet/blocks/poll.json +16 -0
- package/lexicons/pub/leaflet/blocks/text.json +26 -0
- package/lexicons/pub/leaflet/blocks/unorderedList.json +50 -0
- package/lexicons/pub/leaflet/blocks/website.json +27 -0
- package/lexicons/pub/leaflet/pages/linearDocument.json +98 -0
- package/lexicons/pub/leaflet/richtext/facet.json +149 -0
- package/package.json +4 -5
- package/dist/generated/types/org/hypercerts/claim/collection.d.ts +0 -41
- package/dist/generated/types/org/hypercerts/claim/collection.d.ts.map +0 -1
- package/dist/generated/types/org/hypercerts/claim/contributionDetails.d.ts.map +0 -1
- package/dist/generated/types/org/hypercerts/claim/evaluation.d.ts.map +0 -1
- package/dist/generated/types/org/hypercerts/claim/evidence.d.ts +0 -29
- package/dist/generated/types/org/hypercerts/claim/evidence.d.ts.map +0 -1
- package/dist/generated/types/org/hypercerts/claim/measurement.d.ts +0 -30
- package/dist/generated/types/org/hypercerts/claim/measurement.d.ts.map +0 -1
- package/dist/generated/types/org/hypercerts/helper/workScopeTag.d.ts +0 -31
- package/dist/generated/types/org/hypercerts/helper/workScopeTag.d.ts.map +0 -1
- package/dist/types/org/hypercerts/claim/collection.d.ts +0 -41
- package/dist/types/org/hypercerts/claim/collection.d.ts.map +0 -1
- package/dist/types/org/hypercerts/claim/contributionDetails.d.ts.map +0 -1
- package/dist/types/org/hypercerts/claim/evaluation.d.ts.map +0 -1
- package/dist/types/org/hypercerts/claim/evidence.d.ts +0 -29
- package/dist/types/org/hypercerts/claim/evidence.d.ts.map +0 -1
- package/dist/types/org/hypercerts/claim/measurement.d.ts +0 -30
- package/dist/types/org/hypercerts/claim/measurement.d.ts.map +0 -1
- package/dist/types/org/hypercerts/helper/workScopeTag.d.ts +0 -31
- package/dist/types/org/hypercerts/helper/workScopeTag.d.ts.map +0 -1
- package/lexicons/org/hypercerts/claim/evidence.json +0 -57
- package/lexicons/org/hypercerts/claim/measurement.json +0 -70
- package/lexicons/org/hypercerts/helper/workScopeTag.json +0 -65
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,912 @@
|
|
|
1
1
|
# @hypercerts-org/lexicon
|
|
2
2
|
|
|
3
|
+
## 0.11.0
|
|
4
|
+
|
|
5
|
+
The v0.11.0 release introduces EVM identity linking, stronger type safety across badge and funding schemas, vendored Leaflet lexicons for runtime validation, and a set of schema refinements based on real-world usage from the first month of v0.10.0 adoption. All changes listed below are merged to `main` and will ship together as a single coordinated release.
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @hypercerts-org/lexicon@0.11.0
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
### New lexicons
|
|
14
|
+
|
|
15
|
+
#### EVM identity linking
|
|
16
|
+
|
|
17
|
+
`app.certified.link.evm`
|
|
18
|
+
|
|
19
|
+
A new record type for creating verifiable links between ATProto identities and EVM wallet addresses. Each record contains a cryptographic proof — currently EIP-712 typed data signatures for EOA wallets — that binds a DID to an Ethereum address onchain.
|
|
20
|
+
|
|
21
|
+
The `proof` field is an open union, so future signature methods (ERC-1271, ERC-6492) can be added without breaking existing records.
|
|
22
|
+
|
|
23
|
+
```jsonc
|
|
24
|
+
{
|
|
25
|
+
"address": "0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B",
|
|
26
|
+
"proof": {
|
|
27
|
+
"$type": "app.certified.link.evm#eip712Proof",
|
|
28
|
+
"signature": "0x...",
|
|
29
|
+
"message": {
|
|
30
|
+
"did": "did:plc:abc123",
|
|
31
|
+
"evmAddress": "0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B",
|
|
32
|
+
"chainId": "1",
|
|
33
|
+
"timestamp": "1711929600",
|
|
34
|
+
"nonce": "0",
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
"createdAt": "2026-04-03T00:00:00.000Z",
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
#### Vendored Leaflet and richtext lexicons
|
|
42
|
+
|
|
43
|
+
`pub.leaflet.*` · `pub.leaflet.richtext.facet`
|
|
44
|
+
|
|
45
|
+
The package now ships the full set of Leaflet block and richtext facet lexicon JSON files (17 files). Previously, these external schemas were shimmed at the TypeScript type level via `@atcute` packages, which caused `LexiconDefNotFoundError` at runtime when validating records with `description` or facet fields. Vendoring them fixes runtime validation and removes the `@atcute/leaflet` and `@atcute/bluesky` dependencies.
|
|
46
|
+
|
|
47
|
+
This is a **packaging change**, not a schema change. No record structures are affected.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
### Breaking changes
|
|
52
|
+
|
|
53
|
+
This release includes three breaking schema changes. All were identified early enough in adoption that the team decided the long-term gains outweigh the migration cost.
|
|
54
|
+
|
|
55
|
+
#### Evaluation scores are now strings
|
|
56
|
+
|
|
57
|
+
`org.hypercerts.context.evaluation`
|
|
58
|
+
|
|
59
|
+
The `min`, `max`, and `value` fields on evaluation scores changed from `integer` to `string`. ATProto has no native decimal type, and integer-only scores made use cases like "3.7 out of 5" impossible.
|
|
60
|
+
|
|
61
|
+
```diff
|
|
62
|
+
// Before
|
|
63
|
+
- { "min": 0, "max": 10, "value": 7 }
|
|
64
|
+
+ // After
|
|
65
|
+
+ { "min": "0", "max": "10", "value": "7.5" }
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**Who needs to update:**
|
|
69
|
+
|
|
70
|
+
| Consumer | Action |
|
|
71
|
+
| -------- | ---------------------------------------------------------------------------------------------------------------------- |
|
|
72
|
+
| Indexers | Change column type from `INTEGER` to `TEXT`. Backfill existing records. Update any numeric sorting or filtering logic. |
|
|
73
|
+
| AppViews | Parse scores as strings. Use `parseFloat()` for numeric display where appropriate. |
|
|
74
|
+
| Frontend | Handle both numeric strings (`"3.7"`) and potentially non-numeric strings (`"A+"`) in display components. |
|
|
75
|
+
|
|
76
|
+
#### Badge references are now strong refs
|
|
77
|
+
|
|
78
|
+
`app.certified.badge.award` · `app.certified.badge.response`
|
|
79
|
+
|
|
80
|
+
Badge awards and responses now reference their parent records via `com.atproto.repo.strongRef` instead of plain lexicon refs. Strong references include both a URI and a content hash (CID), pinning the reference to a specific version of the badge definition. This prevents the meaning of an award from drifting if the underlying badge definition is later modified.
|
|
81
|
+
|
|
82
|
+
```diff
|
|
83
|
+
// Before
|
|
84
|
+
- "badge": "at://did:plc:abc/app.certified.badge.definition/123"
|
|
85
|
+
|
|
86
|
+
// After
|
|
87
|
+
+ "badge": {
|
|
88
|
+
+ "uri": "at://did:plc:abc/app.certified.badge.definition/123",
|
|
89
|
+
+ "cid": "bafyrei..."
|
|
90
|
+
+ }
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
**Who needs to update:**
|
|
94
|
+
|
|
95
|
+
| Consumer | Action |
|
|
96
|
+
| ------------- | ----------------------------------------------------------------------------------------------------------------- |
|
|
97
|
+
| Indexers | Update parsing to expect `{ uri, cid }` objects instead of plain URI strings for `badge` and `badgeAward` fields. |
|
|
98
|
+
| AppViews | Update resolution logic. Dereference using both `uri` and `cid` for content verification. |
|
|
99
|
+
| SDK consumers | Regenerate types. Any code constructing badge awards or responses must supply the full strong ref. |
|
|
100
|
+
|
|
101
|
+
#### Funding receipt fields normalized
|
|
102
|
+
|
|
103
|
+
`org.hypercerts.funding.receipt`
|
|
104
|
+
|
|
105
|
+
The `from`, `to`, and `for` fields have been reworked for consistency and stronger type safety.
|
|
106
|
+
|
|
107
|
+
| Field | Before (v0.10.0) | After |
|
|
108
|
+
| ------ | ----------------- | ------------------------------------------------------------------------------------------ |
|
|
109
|
+
| `from` | Required, DID ref | **Optional**, union of `#text` \| `app.certified.defs#did` \| `com.atproto.repo.strongRef` |
|
|
110
|
+
| `to` | Plain string | Union of `#text` \| `app.certified.defs#did` \| `com.atproto.repo.strongRef` |
|
|
111
|
+
| `for` | AT-URI string | `com.atproto.repo.strongRef` (pins to a specific record version) |
|
|
112
|
+
|
|
113
|
+
The `from` and `to` fields were asymmetric — `from` required an AT Protocol identity while `to` accepted any string. Now both are three-way unions that accept a free-text string (`#text` — for display names, wallet addresses, or other identifiers), a DID, or a strong reference. This treats senders and recipients uniformly while preserving the ability to reference non-ATProto participants. `from` is also optional, properly supporting anonymous funding. `for` is now a strong ref, ensuring the receipt always points to the exact version of the activity it funded.
|
|
114
|
+
|
|
115
|
+
```diff
|
|
116
|
+
// Before
|
|
117
|
+
- "from": { "$type": "app.certified.defs#did", "did": "did:plc:sender" },
|
|
118
|
+
- "to": "did:plc:recipient",
|
|
119
|
+
- "for": "at://did:plc:abc/org.hypercerts.claim.activity/123"
|
|
120
|
+
|
|
121
|
+
// After — with a DID
|
|
122
|
+
+ "from": { "$type": "app.certified.defs#did", "did": "did:plc:sender" },
|
|
123
|
+
+ "to": { "$type": "app.certified.defs#did", "did": "did:plc:recipient" },
|
|
124
|
+
|
|
125
|
+
// After — with a free-text identifier
|
|
126
|
+
+ "to": { "$type": "org.hypercerts.funding.receipt#text", "value": "0xAb58...eC9B" },
|
|
127
|
+
|
|
128
|
+
// After — for field
|
|
129
|
+
+ "for": {
|
|
130
|
+
+ "uri": "at://did:plc:abc/org.hypercerts.claim.activity/123",
|
|
131
|
+
+ "cid": "bafyrei..."
|
|
132
|
+
+ }
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
**Who needs to update:**
|
|
136
|
+
|
|
137
|
+
| Consumer | Action |
|
|
138
|
+
| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
139
|
+
| Indexers | Update parsing for `from`, `to` (now unions with `$type` discriminator — handle all three variants), and `for` (now `{ uri, cid }`). Allow `NULL` for `from`. |
|
|
140
|
+
| AppViews | Update resolution logic for all three fields. `for` requires dereferencing via both URI and CID. Handle `#text` variants for display. |
|
|
141
|
+
| SDK consumers | Regenerate types. Code constructing receipts must supply union-typed `to` and strong ref `for`. |
|
|
142
|
+
| Frontend | Update forms to construct proper union objects for sender/recipient. Handle `#text` for non-ATProto participants. Handle missing `from` for anonymous display. |
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
### Schema changes
|
|
147
|
+
|
|
148
|
+
> **A note on "optional" fields:** Even new optional fields require attention from indexers and AppViews. If an indexer doesn't store a new field, that data is silently lost for every downstream consumer. The changes below are non-breaking in the strict sense — existing records remain valid — but ignoring them means incomplete data.
|
|
149
|
+
|
|
150
|
+
#### Known values
|
|
151
|
+
|
|
152
|
+
Several free-text string fields now declare `knownValues` — a set of canonical values that establish interoperability conventions across the ecosystem. Custom values are still permitted. Think of these as Schelling points, not constraints.
|
|
153
|
+
|
|
154
|
+
| Lexicon | Field | Known values |
|
|
155
|
+
| ----------------------------------- | ------------- | -------------------------------------------------------------------------------------------------- |
|
|
156
|
+
| `org.hypercerts.collection` | `type` | `favorites` · `project` · `portfolio` · `program` |
|
|
157
|
+
| `org.hypercerts.context.attachment` | `contentType` | `report` · `audit` · `evidence` · `testimonial` · `methodology` |
|
|
158
|
+
| `app.certified.badge.definition` | `badgeType` | `endorsement` · `verification` · `participation` · `certification` · `affiliation` · `recognition` |
|
|
159
|
+
|
|
160
|
+
**Action:** Indexers should index these values for filtering and categorization. AppViews and frontends can use them for dropdowns, search facets, and display grouping. No schema migration required — the underlying field type is still a string.
|
|
161
|
+
|
|
162
|
+
#### Badge icon is now optional
|
|
163
|
+
|
|
164
|
+
`app.certified.badge.definition`
|
|
165
|
+
|
|
166
|
+
The `icon` field moved from `required` to optional. Not all badges have a visual representation — endorsements, participation records, and text-based certifications can now omit the icon entirely.
|
|
167
|
+
|
|
168
|
+
**Action:** Indexers should allow `NULL` in the icon column. Frontend developers must add a fallback or placeholder when rendering badges without an icon — apps that assume `icon` is always present will crash or render broken UI.
|
|
169
|
+
|
|
170
|
+
#### Contributors array is uncapped
|
|
171
|
+
|
|
172
|
+
`org.hypercerts.claim.activity`
|
|
173
|
+
|
|
174
|
+
Removed the `maxLength: 1000` constraint on the `contributors` array. ATProto records have a natural 1 MB size limit (~2,000–4,000 contributors), making the artificial cap unnecessary.
|
|
175
|
+
|
|
176
|
+
**Action:** Indexers and AppViews with hardcoded length limits matching the old max should remove them. Frontends should implement pagination or lazy loading for large contributor lists to avoid performance issues.
|
|
177
|
+
|
|
178
|
+
#### Rich text on collection short descriptions
|
|
179
|
+
|
|
180
|
+
`org.hypercerts.collection`
|
|
181
|
+
|
|
182
|
+
Added `shortDescriptionFacets` — an optional array of rich text facets (mentions, URLs, hashtags) that annotate the `shortDescription` field. This brings collections in line with activity claims, which already supported facets.
|
|
183
|
+
|
|
184
|
+
**Action:** Indexers must store the new field when present — without it, rich text annotations (links, mentions) are permanently lost. AppViews should include facets in API responses. Frontends can render rich text using the standard ATProto facet model.
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
### Documentation improvements
|
|
189
|
+
|
|
190
|
+
- **Contributor and item defs** now have descriptions, improving TypeScript IntelliSense and AI code generation.
|
|
191
|
+
- **`occurredAt` vs `createdAt`** semantics clarified on funding receipts. `occurredAt` is when the funding happened in the real world; `createdAt` is when the record was written to the PDS.
|
|
192
|
+
- **Stale references** in board and measurement lexicon descriptions have been corrected.
|
|
193
|
+
- **README** rewritten with an ASCII namespace map and structured reference tables.
|
|
194
|
+
- **AI agent skill** added for downstream developers. Install via `npx skills add hypercerts-org/hypercerts-lexicon`.
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
### Upgrading
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
npm install @hypercerts-org/lexicon@0.11.0
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
The source of truth for lexicon definitions is the [NPM package](https://www.npmjs.com/package/@hypercerts-org/lexicon) and the published ATProto repository. The `main` branch on GitHub is a development branch — do not build production applications against it.
|
|
205
|
+
|
|
206
|
+
After upgrading, regenerate your TypeScript types and run your validation suite against the updated schemas. The package includes all lexicon JSON files and pre-built type definitions.
|
|
207
|
+
|
|
208
|
+
## 0.10.0
|
|
209
|
+
|
|
210
|
+
### Minor Changes
|
|
211
|
+
|
|
212
|
+
- [#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
|
|
213
|
+
|
|
214
|
+
- [#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`)
|
|
215
|
+
|
|
216
|
+
- [#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
|
|
217
|
+
|
|
218
|
+
- [#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
|
|
219
|
+
|
|
220
|
+
**Breaking Changes:**
|
|
221
|
+
- **Activity lexicon (`org.hypercerts.claim.activity`):**
|
|
222
|
+
- Removed `org.hypercerts.claim.activity#activityWeight` def
|
|
223
|
+
- Activity records no longer include activity weight information
|
|
224
|
+
- **Collection lexicon (`org.hypercerts.claim.collection`):**
|
|
225
|
+
- Changed `org.hypercerts.claim.collection#items` from array of strongRefs to array of item objects
|
|
226
|
+
- Added `org.hypercerts.claim.collection#item` def with:
|
|
227
|
+
- `itemIdentifier` (required): strongRef to an item (activity or collection)
|
|
228
|
+
- `itemWeight` (optional): positive numeric value stored as string
|
|
229
|
+
- Supports recursive collection nesting (items can reference activities or other collections)
|
|
230
|
+
|
|
231
|
+
**Migration:**
|
|
232
|
+
|
|
233
|
+
**Collection items:** Convert from array of strongRefs to array of item objects:
|
|
234
|
+
|
|
235
|
+
```json
|
|
236
|
+
// Before
|
|
237
|
+
"items": [strongRef1, strongRef2]
|
|
238
|
+
|
|
239
|
+
// After
|
|
240
|
+
"items": [
|
|
241
|
+
{ "itemIdentifier": strongRef1, "itemWeight": "1.5" },
|
|
242
|
+
{ "itemIdentifier": strongRef2 }
|
|
243
|
+
]
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
**Activity weights:** Migrate existing `org.hypercerts.claim.activity#activityWeight` data to collection `org.hypercerts.claim.collection#item.itemWeight`:
|
|
247
|
+
|
|
248
|
+
```json
|
|
249
|
+
// Old (removed from activity)
|
|
250
|
+
{ "activity": { "uri": "...", "cid": "..." }, "weight": "1.5" }
|
|
251
|
+
|
|
252
|
+
// New (in collection items)
|
|
253
|
+
{ "itemIdentifier": { "uri": "...", "cid": "..." }, "itemWeight": "1.5" }
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
Update collections that reference activities to include weights in `org.hypercerts.claim.collection#item.itemWeight`. Weights can be dropped if not needed.
|
|
257
|
+
|
|
258
|
+
- [#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.
|
|
259
|
+
|
|
260
|
+
- [#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.
|
|
261
|
+
|
|
262
|
+
- [#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
|
|
263
|
+
|
|
264
|
+
- [#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.
|
|
265
|
+
|
|
266
|
+
- [#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.
|
|
267
|
+
|
|
268
|
+
- [#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
|
|
269
|
+
|
|
270
|
+
Add `shortDescriptionFacets` and `descriptionFacets` fields to the activity lexicon to support rich text annotations (mentions, URLs, hashtags, etc.) in activity claim descriptions.
|
|
271
|
+
|
|
272
|
+
- [#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
|
|
273
|
+
|
|
274
|
+
- [#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
|
|
275
|
+
|
|
276
|
+
- [#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`.
|
|
277
|
+
|
|
278
|
+
- [#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)
|
|
279
|
+
|
|
280
|
+
- [#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
|
|
281
|
+
|
|
282
|
+
- [#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.
|
|
283
|
+
|
|
284
|
+
Affected exports:
|
|
285
|
+
- `CONTRIBUTION_DETAILS_NSID`, `CONTRIBUTION_DETAILS_LEXICON_JSON`, `CONTRIBUTION_DETAILS_LEXICON_DOC` (was `CONTRIBUTIONDETAILS_*`)
|
|
286
|
+
- `CONTRIBUTOR_INFORMATION_NSID`, `CONTRIBUTOR_INFORMATION_LEXICON_JSON`, `CONTRIBUTOR_INFORMATION_LEXICON_DOC` (was `CONTRIBUTORINFORMATION_*`)
|
|
287
|
+
- `STRONG_REF_NSID`, `STRONG_REF_LEXICON_JSON`, `STRONG_REF_LEXICON_DOC` (was `STRONGREF_*`)
|
|
288
|
+
- `HELPER_WORK_SCOPE_TAG_NSID`, `HELPER_WORK_SCOPE_TAG_LEXICON_JSON`, `HELPER_WORK_SCOPE_TAG_LEXICON_DOC` (was `HELPER_WORKSCOPETAG_*`)
|
|
289
|
+
|
|
290
|
+
- [#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
|
|
291
|
+
|
|
292
|
+
The did definition in app.certified.defs has been converted from a primitive
|
|
293
|
+
string type to an object type to comply with the ATProto specification
|
|
294
|
+
requirement that all union variants must be object or record types.
|
|
295
|
+
|
|
296
|
+
This change was necessary because app.certified.badge.award uses this
|
|
297
|
+
definition in a union for the subject property.
|
|
298
|
+
|
|
299
|
+
Breaking changes:
|
|
300
|
+
- `app.certified.defs#did`: Now an object with `did` string property (maxLength 256)
|
|
301
|
+
- Code using this type must now access the `.did` property instead of using the value directly
|
|
302
|
+
|
|
303
|
+
- [#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
|
|
304
|
+
|
|
305
|
+
The contributorIdentity, contributorRole, and workScopeString definitions
|
|
306
|
+
in org.hypercerts.claim.activity have been converted from primitive string
|
|
307
|
+
types to object types to comply with the ATProto specification requirement
|
|
308
|
+
that all union variants must be object or record types.
|
|
309
|
+
|
|
310
|
+
Additionally, maximum length constraints have been reduced to more reasonable
|
|
311
|
+
values:
|
|
312
|
+
- `contributorIdentity.identity`: maxLength 1000, maxGraphemes 100 (previously no limits)
|
|
313
|
+
- `contributorRole.role`: maxLength 1000, maxGraphemes 100 (previously maxLength 10000, maxGraphemes 1000)
|
|
314
|
+
- `workScopeString.scope`: maxLength 1000, maxGraphemes 100 (previously maxLength 10000, maxGraphemes 1000)
|
|
315
|
+
|
|
316
|
+
Breaking changes:
|
|
317
|
+
- `contributorIdentity`: Now an object with `identity` string property
|
|
318
|
+
- `contributorRole`: Now an object with `role` string property
|
|
319
|
+
- `workScopeString`: Now an object with `scope` string property
|
|
320
|
+
- Reduced maximum lengths may affect existing records with longer values
|
|
321
|
+
|
|
322
|
+
This requires updating code that uses these union types to access the nested
|
|
323
|
+
property instead of using the value directly.
|
|
324
|
+
|
|
325
|
+
- [#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.
|
|
326
|
+
|
|
327
|
+
- [#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.
|
|
328
|
+
|
|
329
|
+
**Breaking Changes:**
|
|
330
|
+
- Renamed `ids` export to `HYPERCERTS_NSIDS_BY_TYPE` (maps type namespaces to NSIDs)
|
|
331
|
+
|
|
332
|
+
**New Features:**
|
|
333
|
+
- Added `HYPERCERTS_NSIDS` object with semantic keys (e.g., `ACTIVITY`, `RIGHTS`, `CONTRIBUTION`)
|
|
334
|
+
- Added `HYPERCERTS_LEXICON_JSON` object with semantic keys mapping to raw JSON lexicons
|
|
335
|
+
- Added `HYPERCERTS_LEXICON_DOC` object with semantic keys mapping to typed lexicon documents
|
|
336
|
+
- All three new objects share the same key structure for consistency
|
|
337
|
+
|
|
338
|
+
**Migration Guide:**
|
|
339
|
+
|
|
340
|
+
If you were using the `ids` export (rare):
|
|
341
|
+
|
|
342
|
+
```typescript
|
|
343
|
+
// Before
|
|
344
|
+
import { ids } from "@hypercerts-org/lexicon";
|
|
345
|
+
const nsid = ids.OrgHypercertsClaimActivity;
|
|
346
|
+
|
|
347
|
+
// After
|
|
348
|
+
import { HYPERCERTS_NSIDS_BY_TYPE } from "@hypercerts-org/lexicon";
|
|
349
|
+
const nsid = HYPERCERTS_NSIDS_BY_TYPE.OrgHypercertsClaimActivity;
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
Most users should use individual NSID constants (unchanged):
|
|
353
|
+
|
|
354
|
+
```typescript
|
|
355
|
+
import { ACTIVITY_NSID, RIGHTS_NSID } from "@hypercerts-org/lexicon";
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
Or the new semantic mapping:
|
|
359
|
+
|
|
360
|
+
```typescript
|
|
361
|
+
import { HYPERCERTS_NSIDS } from "@hypercerts-org/lexicon";
|
|
362
|
+
const nsid = HYPERCERTS_NSIDS.ACTIVITY; // Same as ACTIVITY_NSID
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
- [#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.
|
|
366
|
+
|
|
367
|
+
Major architectural and feature updates compared to the SDK lexicon package include but are not limited to the following:
|
|
368
|
+
|
|
369
|
+
**New Lexicons:**
|
|
370
|
+
- Activity model: `org.hypercerts.claim.activity` - activity-based hypercert records (replaces single claim model)
|
|
371
|
+
- Project records: `org.hypercerts.claim.project` - projects that group multiple activities
|
|
372
|
+
- Shared definitions: `org.hypercerts.defs` - common types (uri, smallBlob, largeBlob, smallImage, largeImage)
|
|
373
|
+
- Badge system: `app.certified.badge.definition`, `app.certified.badge.award`, `app.certified.badge.response` for badge-based endorsements
|
|
374
|
+
- Funding receipts: `org.hypercerts.funding.receipt` - payment and funding tracking
|
|
375
|
+
|
|
376
|
+
**Architectural Changes:**
|
|
377
|
+
- **Claim model**: Replaced single `org.hypercerts.claim` record with activity-based `org.hypercerts.claim.activity` model
|
|
378
|
+
- **Collection model**: Collections now reference activities (via `activityWeight`) instead of claims (via `claimItem`)
|
|
379
|
+
- **Work scope**: Activity model uses structured `workScope` object with label-based conditions (`withinAllOf`, `withinAnyOf`, `withinNoneOf`)
|
|
380
|
+
- **Time fields**: Activity uses `startDate`/`endDate` instead of `workTimeFrameFrom`/`workTimeFrameTo`
|
|
381
|
+
- **Image references**: Activity model references `org.hypercerts.defs#smallImage` instead of `app.certified.defs#uri`/`smallBlob`
|
|
382
|
+
|
|
383
|
+
**Definition Updates:**
|
|
384
|
+
- `app.certified.defs` now includes `did` type definition
|
|
385
|
+
- Added `org.hypercerts.defs` with image and blob type definitions
|
|
386
|
+
- Activity model references project via AT-URI instead of strongRef
|
|
387
|
+
|
|
388
|
+
**Removed/Replaced:**
|
|
389
|
+
- `org.hypercerts.claim` (replaced by `org.hypercerts.claim.activity`)
|
|
390
|
+
- Top-level `org.hypercerts.collection` (replaced by `org.hypercerts.claim.collection` using activities)
|
|
391
|
+
|
|
392
|
+
- [#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.
|
|
393
|
+
|
|
394
|
+
- [#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.
|
|
395
|
+
|
|
396
|
+
- [#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.
|
|
397
|
+
|
|
398
|
+
- [#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
|
|
399
|
+
|
|
400
|
+
- [#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.
|
|
401
|
+
|
|
402
|
+
- [#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
|
|
403
|
+
|
|
404
|
+
**Breaking Changes:**
|
|
405
|
+
- **Activity lexicon (`org.hypercerts.claim.activity`):**
|
|
406
|
+
- Renamed `contributions` field to `contributors`
|
|
407
|
+
- Replaced `contributions` array (array of strongRefs) with new `contributors` array containing contributor objects
|
|
408
|
+
- Each contributor object (`org.hypercerts.claim.activity#contributor`) has three fields:
|
|
409
|
+
- `contributorIdentity` (required): string (DID/identifier) or strongRef to a contributor information record
|
|
410
|
+
- `contributionWeight` (optional): positive numeric value stored as string
|
|
411
|
+
- `contributionDetails` (optional): string or strongRef to a contribution details record
|
|
412
|
+
- Added internal defs:
|
|
413
|
+
- `#contributor`: object type for contributor entries
|
|
414
|
+
- `#contributorIdentity`: string type for DID/identifier values
|
|
415
|
+
- `#contributorRole`: string type for contribution details (maxLength 10000, maxGraphemes 1000)
|
|
416
|
+
|
|
417
|
+
**Migration:**
|
|
418
|
+
|
|
419
|
+
Convert from array of strongRefs to array of contributor objects:
|
|
420
|
+
|
|
421
|
+
```json
|
|
422
|
+
// Before
|
|
423
|
+
"contributions": [strongRef1, strongRef2]
|
|
424
|
+
|
|
425
|
+
// After
|
|
426
|
+
"contributors": [
|
|
427
|
+
{
|
|
428
|
+
"contributorIdentity": "did:example:123",
|
|
429
|
+
"contributionWeight": "1.5",
|
|
430
|
+
"contributionDetails": "Lead developer"
|
|
431
|
+
},
|
|
432
|
+
{
|
|
433
|
+
"contributorIdentity": strongRefToContributorInfo,
|
|
434
|
+
"contributionDetails": strongRefToContributionDetails
|
|
435
|
+
}
|
|
436
|
+
]
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
- [#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
|
|
440
|
+
|
|
441
|
+
**Breaking Changes:**
|
|
442
|
+
- **Measurement lexicon (`org.hypercerts.context.measurement`):**
|
|
443
|
+
- Changed `subject` (single strongRef) to `subjects` (array of strongRefs, maxLength: 100)
|
|
444
|
+
- Changed required fields: removed `measurers` from required, added `unit` as required
|
|
445
|
+
- Added `unit` field (required, string, maxLength: 50): The unit of the measured value (e.g. kg CO₂e, hectares, %, index score)
|
|
446
|
+
- Added `startDate` field (optional, datetime): The start date and time when the measurement began
|
|
447
|
+
- Added `endDate` field (optional, datetime): The end date and time when the measurement ended
|
|
448
|
+
- Changed `location` (single strongRef) to `locations` (array of strongRefs, maxLength: 100)
|
|
449
|
+
- Moved `measurers` from required to optional field
|
|
450
|
+
- Added `comment` field (optional, string): Short comment suitable for previews and list views
|
|
451
|
+
- Added `commentFacets` field (optional, array): Rich text annotations for `comment` (mentions, URLs, hashtags, etc.)
|
|
452
|
+
- Updated field descriptions for `metric` and `value` with more detailed examples
|
|
453
|
+
|
|
454
|
+
- [#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).
|
|
455
|
+
|
|
456
|
+
- [#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
|
|
457
|
+
|
|
458
|
+
- [#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).
|
|
459
|
+
|
|
460
|
+
- [#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
|
|
461
|
+
|
|
462
|
+
**Breaking Changes:**
|
|
463
|
+
- **Lexicon ID change:**
|
|
464
|
+
- `org.hypercerts.claim.evidence` → `org.hypercerts.claim.attachment`
|
|
465
|
+
- All existing evidence records must be migrated to use the new lexicon ID
|
|
466
|
+
- **Schema structure changes (`org.hypercerts.claim.attachment`):**
|
|
467
|
+
- Changed `subject` (single strongRef) to `subjects` (array of strongRefs, maxLength: 100)
|
|
468
|
+
- Changed `content` from single union (uri/blob) to array of unions (maxLength: 100)
|
|
469
|
+
- Added `contentType` field (string, maxLength: 64) to specify attachment type
|
|
470
|
+
- Removed `relationType` field (previously used to indicate supports/challenges/clarifies)
|
|
471
|
+
- Removed `contributors` field
|
|
472
|
+
- Removed `locations` field
|
|
473
|
+
- Added rich text support: `shortDescriptionFacets` and `descriptionFacets` (arrays of `app.bsky.richtext.facet`)
|
|
474
|
+
- Updated required fields: `["title", "content", "createdAt"]` (content is now required)
|
|
475
|
+
- **Common definitions (`org.hypercerts.defs`):**
|
|
476
|
+
- Added `weightedContributor` def for contributor references with optional weights
|
|
477
|
+
- Added `contributorIdentity` def for string-based contributor identification
|
|
478
|
+
|
|
479
|
+
**Migration:**
|
|
480
|
+
|
|
481
|
+
**Lexicon ID:** Update all references from `org.hypercerts.claim.evidence` to `org.hypercerts.claim.attachment`.
|
|
482
|
+
|
|
483
|
+
**Schema migration:**
|
|
484
|
+
|
|
485
|
+
```json
|
|
486
|
+
// Before (org.hypercerts.claim.evidence)
|
|
487
|
+
{
|
|
488
|
+
"$type": "org.hypercerts.claim.evidence",
|
|
489
|
+
"subject": { "uri": "...", "cid": "..." },
|
|
490
|
+
"content": { "uri": "https://..." },
|
|
491
|
+
"title": "Evidence Title",
|
|
492
|
+
"relationType": "supports",
|
|
493
|
+
"createdAt": "..."
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
// After (org.hypercerts.claim.attachment)
|
|
497
|
+
{
|
|
498
|
+
"$type": "org.hypercerts.claim.attachment",
|
|
499
|
+
"subjects": [{ "uri": "...", "cid": "..." }],
|
|
500
|
+
"content": [{ "uri": "https://..." }],
|
|
501
|
+
"contentType": "evidence",
|
|
502
|
+
"title": "Evidence Title",
|
|
503
|
+
"createdAt": "..."
|
|
504
|
+
}
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
**Field mapping:**
|
|
508
|
+
- `subject` → `subjects` (wrap in array)
|
|
509
|
+
- `content` (single) → `content` (array, wrap existing value)
|
|
510
|
+
- `relationType` → remove (no direct replacement)
|
|
511
|
+
- `contributors` → remove (no direct replacement)
|
|
512
|
+
- `locations` → remove (no direct replacement)
|
|
513
|
+
|
|
514
|
+
- [#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
|
|
515
|
+
|
|
516
|
+
- [#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
|
|
517
|
+
|
|
518
|
+
Major build system improvements:
|
|
519
|
+
- **Build System**: Migrated from direct TypeScript to Rollup-based builds
|
|
520
|
+
- Generates proper ESM (`dist/index.mjs`) and CommonJS (`dist/index.cjs`) bundles
|
|
521
|
+
- Generates TypeScript declarations (`dist/index.d.ts`)
|
|
522
|
+
- Includes source maps for debugging
|
|
523
|
+
- Adds `/lexicons` export for lighter bundle (validation only)
|
|
524
|
+
- **Code Generation**:
|
|
525
|
+
- Auto-generates `generated/exports.ts` with clean, organized exports
|
|
526
|
+
- Creates type shims for external lexicons (@atcute/leaflet)
|
|
527
|
+
- All generated code now in `generated/` directory (gitignored)
|
|
528
|
+
- **Package Exports**:
|
|
529
|
+
- Main export: `@hypercerts-org/lexicon` (full package with types)
|
|
530
|
+
- Lexicons export: `@hypercerts-org/lexicon/lexicons` (schemas only, smaller bundle)
|
|
531
|
+
- Proper dual package support (ESM + CommonJS)
|
|
532
|
+
- **Code Quality**:
|
|
533
|
+
- Added ESLint configuration
|
|
534
|
+
- Added TypeScript type-checking to CI
|
|
535
|
+
- Improved build validation workflow
|
|
536
|
+
- **Dependencies**:
|
|
537
|
+
- Added `@atcute/leaflet` for external lexicon references
|
|
538
|
+
- Added `multiformats` as runtime dependency
|
|
539
|
+
- Moved `@atproto/lex-cli` to devDependencies (build-time only)
|
|
540
|
+
|
|
541
|
+
**Migration**: No breaking changes for existing users. Package structure is improved
|
|
542
|
+
but import paths remain compatible.
|
|
543
|
+
|
|
544
|
+
- [#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
|
|
545
|
+
|
|
546
|
+
**Breaking Changes:**
|
|
547
|
+
- The `workScope` field in `org.hypercerts.claim.activity` is now a union of:
|
|
548
|
+
- `com.atproto.repo.strongRef`: A reference to a work-scope logic record for structured, nested work scope definitions
|
|
549
|
+
- `org.hypercerts.claim.activity#workScopeString`: A free-form string for simple or legacy scopes
|
|
550
|
+
- **Removed** from `org.hypercerts.defs`:
|
|
551
|
+
- `workScopeAll` (logical AND operator)
|
|
552
|
+
- `workScopeAny` (logical OR operator)
|
|
553
|
+
- `workScopeNot` (logical NOT operator)
|
|
554
|
+
- `workScopeAtom` (atomic scope reference)
|
|
555
|
+
|
|
556
|
+
This simplification allows work scope complexity to be managed via referenced records while still supporting simple string-based scopes for straightforward use cases.
|
|
557
|
+
|
|
558
|
+
- [#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.
|
|
559
|
+
|
|
560
|
+
- [#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.
|
|
561
|
+
|
|
562
|
+
- [#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
|
|
563
|
+
`org.hypercerts.claim.collection` lexicon with `type` discriminator
|
|
564
|
+
field to allow collections to be designated as projects. Custom
|
|
565
|
+
strings are also allowed in `type`.
|
|
566
|
+
|
|
567
|
+
Also make `shortDescription` field optional in
|
|
568
|
+
`org.hypercerts.claim.collection` to match
|
|
569
|
+
`org.hypercerts.claim.project`.
|
|
570
|
+
|
|
571
|
+
This unification removes `org.hypercerts.claim.project`, so existing
|
|
572
|
+
projects should be migrated to collections with `type` set to
|
|
573
|
+
`project`.
|
|
574
|
+
|
|
575
|
+
- [#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:
|
|
576
|
+
- Added optional `type` field to specify collection type (e.g., 'favorites', 'project')
|
|
577
|
+
- Renamed fields for consistency:
|
|
578
|
+
- `collectionTitle` → `title`
|
|
579
|
+
- `shortCollectionDescription` → `shortDescription`
|
|
580
|
+
- `collectionDescription` → `description`
|
|
581
|
+
- Changed `description` from string to Leaflet linear document reference (`pub.leaflet.pages.linearDocument#main`) to support rich-text descriptions
|
|
582
|
+
|
|
583
|
+
**Breaking changes**:
|
|
584
|
+
- Field names have been renamed (e.g., `collectionTitle` → `title`)
|
|
585
|
+
- The `description` field now expects a reference object instead of a plain string
|
|
586
|
+
|
|
587
|
+
- [#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.
|
|
588
|
+
|
|
589
|
+
Breaking Changes:
|
|
590
|
+
- Removed `contributors` array.
|
|
591
|
+
- Added `identifier`, `displayName`, and `image` fields for individual profiles.
|
|
592
|
+
- Renamed `description` to `contributionDescription`.
|
|
593
|
+
- Updated `required` fields to only include `createdAt`.
|
|
594
|
+
|
|
595
|
+
Also corrected incorrect references to `org.hypercerts.claim.contribution` across the codebase to use the correct ID `org.hypercerts.claim.contributor`.
|
|
596
|
+
|
|
597
|
+
### Patch Changes
|
|
598
|
+
|
|
599
|
+
- [#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
|
|
600
|
+
|
|
601
|
+
**New Feature:**
|
|
602
|
+
- **`location` field** (`org.hypercerts.claim.attachment`):
|
|
603
|
+
- Added optional `location` property as a strong reference (`com.atproto.repo.strongRef`)
|
|
604
|
+
- Allows attachments to associate location metadata directly without using the sidecar pattern
|
|
605
|
+
- The referenced record must conform to the `app.certified.location` lexicon
|
|
606
|
+
|
|
607
|
+
**Usage:**
|
|
608
|
+
|
|
609
|
+
```json
|
|
610
|
+
{
|
|
611
|
+
"$type": "org.hypercerts.claim.attachment",
|
|
612
|
+
"subjects": [
|
|
613
|
+
{
|
|
614
|
+
"uri": "at://did:plc:.../org.hypercerts.claim.activity/...",
|
|
615
|
+
"cid": "..."
|
|
616
|
+
}
|
|
617
|
+
],
|
|
618
|
+
"content": [{ "uri": "https://..." }],
|
|
619
|
+
"title": "Field Report",
|
|
620
|
+
"location": {
|
|
621
|
+
"uri": "at://did:plc:.../app.certified.location/abc123",
|
|
622
|
+
"cid": "..."
|
|
623
|
+
},
|
|
624
|
+
"createdAt": "..."
|
|
625
|
+
}
|
|
626
|
+
```
|
|
627
|
+
|
|
628
|
+
This change aligns with the location property addition to collections (PR #123), providing a consistent pattern for associating location metadata across record types.
|
|
629
|
+
|
|
630
|
+
- [#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.
|
|
631
|
+
|
|
632
|
+
- [#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.
|
|
633
|
+
|
|
634
|
+
- [#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.
|
|
635
|
+
|
|
636
|
+
- [#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
|
|
637
|
+
|
|
638
|
+
- [#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
|
|
639
|
+
|
|
640
|
+
**Changes:**
|
|
641
|
+
- Removed `rollup-plugin-dts` dependency
|
|
642
|
+
- Switched to native TypeScript declaration generation
|
|
643
|
+
- Type declarations now mirror source structure in `dist/types/`
|
|
644
|
+
- Individual type files are small (1-3KB each) and lazy-loaded by TypeScript
|
|
645
|
+
- Improves IDE performance by avoiding single 39MB bundled declaration file
|
|
646
|
+
|
|
647
|
+
**Technical Details:**
|
|
648
|
+
|
|
649
|
+
The package now generates individual `.d.ts` files alongside the bundled JavaScript
|
|
650
|
+
output. This provides better IDE performance as TypeScript can lazy-load type files
|
|
651
|
+
on demand rather than parsing a massive bundled declaration file upfront.
|
|
652
|
+
|
|
653
|
+
## 0.10.0-beta.16
|
|
654
|
+
|
|
655
|
+
### Minor Changes
|
|
656
|
+
|
|
657
|
+
- [#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`)
|
|
658
|
+
|
|
659
|
+
- [#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.
|
|
660
|
+
|
|
661
|
+
- [#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
|
|
662
|
+
|
|
663
|
+
- [#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
|
|
664
|
+
|
|
665
|
+
- [#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
|
|
666
|
+
|
|
667
|
+
- [#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.
|
|
668
|
+
|
|
669
|
+
- [#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.
|
|
670
|
+
|
|
671
|
+
- [#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.
|
|
672
|
+
|
|
673
|
+
- [#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.
|
|
674
|
+
|
|
675
|
+
- [#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).
|
|
676
|
+
|
|
677
|
+
- [#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
|
|
678
|
+
|
|
679
|
+
- [#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.
|
|
680
|
+
|
|
681
|
+
## 0.10.0-beta.15
|
|
682
|
+
|
|
683
|
+
### Minor Changes
|
|
684
|
+
|
|
685
|
+
- [#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
|
|
686
|
+
|
|
687
|
+
- [#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)
|
|
688
|
+
|
|
689
|
+
## 0.10.0-beta.14
|
|
690
|
+
|
|
691
|
+
### Minor Changes
|
|
692
|
+
|
|
693
|
+
- [#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.
|
|
694
|
+
|
|
695
|
+
- [#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
|
|
696
|
+
|
|
697
|
+
The did definition in app.certified.defs has been converted from a primitive
|
|
698
|
+
string type to an object type to comply with the ATProto specification
|
|
699
|
+
requirement that all union variants must be object or record types.
|
|
700
|
+
|
|
701
|
+
This change was necessary because app.certified.badge.award uses this
|
|
702
|
+
definition in a union for the subject property.
|
|
703
|
+
|
|
704
|
+
Breaking changes:
|
|
705
|
+
- `app.certified.defs#did`: Now an object with `did` string property (maxLength 256)
|
|
706
|
+
- Code using this type must now access the `.did` property instead of using the value directly
|
|
707
|
+
|
|
708
|
+
- [#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
|
|
709
|
+
|
|
710
|
+
The contributorIdentity, contributorRole, and workScopeString definitions
|
|
711
|
+
in org.hypercerts.claim.activity have been converted from primitive string
|
|
712
|
+
types to object types to comply with the ATProto specification requirement
|
|
713
|
+
that all union variants must be object or record types.
|
|
714
|
+
|
|
715
|
+
Additionally, maximum length constraints have been reduced to more reasonable
|
|
716
|
+
values:
|
|
717
|
+
- `contributorIdentity.identity`: maxLength 1000, maxGraphemes 100 (previously no limits)
|
|
718
|
+
- `contributorRole.role`: maxLength 1000, maxGraphemes 100 (previously maxLength 10000, maxGraphemes 1000)
|
|
719
|
+
- `workScopeString.scope`: maxLength 1000, maxGraphemes 100 (previously maxLength 10000, maxGraphemes 1000)
|
|
720
|
+
|
|
721
|
+
Breaking changes:
|
|
722
|
+
- `contributorIdentity`: Now an object with `identity` string property
|
|
723
|
+
- `contributorRole`: Now an object with `role` string property
|
|
724
|
+
- `workScopeString`: Now an object with `scope` string property
|
|
725
|
+
- Reduced maximum lengths may affect existing records with longer values
|
|
726
|
+
|
|
727
|
+
This requires updating code that uses these union types to access the nested
|
|
728
|
+
property instead of using the value directly.
|
|
729
|
+
|
|
730
|
+
- [#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
|
|
731
|
+
|
|
732
|
+
## 0.10.0-beta.13
|
|
733
|
+
|
|
734
|
+
### Minor Changes
|
|
735
|
+
|
|
736
|
+
- [#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
|
|
737
|
+
|
|
738
|
+
- [#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
|
|
739
|
+
|
|
740
|
+
**Breaking Changes:**
|
|
741
|
+
- **Lexicon ID change:**
|
|
742
|
+
- `org.hypercerts.claim.evidence` → `org.hypercerts.claim.attachment`
|
|
743
|
+
- All existing evidence records must be migrated to use the new lexicon ID
|
|
744
|
+
- **Schema structure changes (`org.hypercerts.claim.attachment`):**
|
|
745
|
+
- Changed `subject` (single strongRef) to `subjects` (array of strongRefs, maxLength: 100)
|
|
746
|
+
- Changed `content` from single union (uri/blob) to array of unions (maxLength: 100)
|
|
747
|
+
- Added `contentType` field (string, maxLength: 64) to specify attachment type
|
|
748
|
+
- Removed `relationType` field (previously used to indicate supports/challenges/clarifies)
|
|
749
|
+
- Removed `contributors` field
|
|
750
|
+
- Removed `locations` field
|
|
751
|
+
- Added rich text support: `shortDescriptionFacets` and `descriptionFacets` (arrays of `app.bsky.richtext.facet`)
|
|
752
|
+
- Updated required fields: `["title", "content", "createdAt"]` (content is now required)
|
|
753
|
+
- **Common definitions (`org.hypercerts.defs`):**
|
|
754
|
+
- Added `weightedContributor` def for contributor references with optional weights
|
|
755
|
+
- Added `contributorIdentity` def for string-based contributor identification
|
|
756
|
+
|
|
757
|
+
**Migration:**
|
|
758
|
+
|
|
759
|
+
**Lexicon ID:** Update all references from `org.hypercerts.claim.evidence` to `org.hypercerts.claim.attachment`.
|
|
760
|
+
|
|
761
|
+
**Schema migration:**
|
|
762
|
+
|
|
763
|
+
```json
|
|
764
|
+
// Before (org.hypercerts.claim.evidence)
|
|
765
|
+
{
|
|
766
|
+
"$type": "org.hypercerts.claim.evidence",
|
|
767
|
+
"subject": { "uri": "...", "cid": "..." },
|
|
768
|
+
"content": { "uri": "https://..." },
|
|
769
|
+
"title": "Evidence Title",
|
|
770
|
+
"relationType": "supports",
|
|
771
|
+
"createdAt": "..."
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
// After (org.hypercerts.claim.attachment)
|
|
775
|
+
{
|
|
776
|
+
"$type": "org.hypercerts.claim.attachment",
|
|
777
|
+
"subjects": [{ "uri": "...", "cid": "..." }],
|
|
778
|
+
"content": [{ "uri": "https://..." }],
|
|
779
|
+
"contentType": "evidence",
|
|
780
|
+
"title": "Evidence Title",
|
|
781
|
+
"createdAt": "..."
|
|
782
|
+
}
|
|
783
|
+
```
|
|
784
|
+
|
|
785
|
+
**Field mapping:**
|
|
786
|
+
- `subject` → `subjects` (wrap in array)
|
|
787
|
+
- `content` (single) → `content` (array, wrap existing value)
|
|
788
|
+
- `relationType` → remove (no direct replacement)
|
|
789
|
+
- `contributors` → remove (no direct replacement)
|
|
790
|
+
- `locations` → remove (no direct replacement)
|
|
791
|
+
|
|
792
|
+
### Patch Changes
|
|
793
|
+
|
|
794
|
+
- [#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
|
|
795
|
+
|
|
796
|
+
**New Feature:**
|
|
797
|
+
- **`location` field** (`org.hypercerts.claim.attachment`):
|
|
798
|
+
- Added optional `location` property as a strong reference (`com.atproto.repo.strongRef`)
|
|
799
|
+
- Allows attachments to associate location metadata directly without using the sidecar pattern
|
|
800
|
+
- The referenced record must conform to the `app.certified.location` lexicon
|
|
801
|
+
|
|
802
|
+
**Usage:**
|
|
803
|
+
|
|
804
|
+
```json
|
|
805
|
+
{
|
|
806
|
+
"$type": "org.hypercerts.claim.attachment",
|
|
807
|
+
"subjects": [
|
|
808
|
+
{
|
|
809
|
+
"uri": "at://did:plc:.../org.hypercerts.claim.activity/...",
|
|
810
|
+
"cid": "..."
|
|
811
|
+
}
|
|
812
|
+
],
|
|
813
|
+
"content": [{ "uri": "https://..." }],
|
|
814
|
+
"title": "Field Report",
|
|
815
|
+
"location": {
|
|
816
|
+
"uri": "at://did:plc:.../app.certified.location/abc123",
|
|
817
|
+
"cid": "..."
|
|
818
|
+
},
|
|
819
|
+
"createdAt": "..."
|
|
820
|
+
}
|
|
821
|
+
```
|
|
822
|
+
|
|
823
|
+
This change aligns with the location property addition to collections (PR #123), providing a consistent pattern for associating location metadata across record types.
|
|
824
|
+
|
|
825
|
+
## 0.10.0-beta.12
|
|
826
|
+
|
|
827
|
+
### Minor Changes
|
|
828
|
+
|
|
829
|
+
- [#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
|
|
830
|
+
|
|
831
|
+
**Breaking Changes:**
|
|
832
|
+
- **Measurement lexicon (`org.hypercerts.claim.measurement`):**
|
|
833
|
+
- Changed required fields: removed `measurers` from required, added `unit` as required
|
|
834
|
+
- Added `unit` field (required, string, maxLength: 50): The unit of the measured value (e.g. kg CO₂e, hectares, %, index score)
|
|
835
|
+
- Added `startDate` field (optional, datetime): The start date and time when the measurement began
|
|
836
|
+
- Added `endDate` field (optional, datetime): The end date and time when the measurement ended
|
|
837
|
+
- Changed `location` (single strongRef) to `locations` (array of strongRefs, maxLength: 100)
|
|
838
|
+
- Moved `measurers` from required to optional field
|
|
839
|
+
- Added `comment` field (optional, string): Short comment suitable for previews and list views
|
|
840
|
+
- Added `commentFacets` field (optional, array): Rich text annotations for `comment` (mentions, URLs, hashtags, etc.)
|
|
841
|
+
- Updated field descriptions for `metric` and `value` with more detailed examples
|
|
842
|
+
|
|
843
|
+
**Migration:**
|
|
844
|
+
|
|
845
|
+
**Required fields:** Update measurement records to include the new required `unit` field:
|
|
846
|
+
|
|
847
|
+
```json
|
|
848
|
+
// Before
|
|
849
|
+
{
|
|
850
|
+
"$type": "org.hypercerts.claim.measurement",
|
|
851
|
+
"measurers": [...],
|
|
852
|
+
"metric": "CO₂ sequestered",
|
|
853
|
+
"value": "1000",
|
|
854
|
+
"createdAt": "..."
|
|
855
|
+
}
|
|
856
|
+
|
|
857
|
+
// After
|
|
858
|
+
{
|
|
859
|
+
"$type": "org.hypercerts.claim.measurement",
|
|
860
|
+
"metric": "CO₂ sequestered",
|
|
861
|
+
"unit": "kg CO₂e",
|
|
862
|
+
"value": "1000",
|
|
863
|
+
"measurers": [...], // Now optional
|
|
864
|
+
"createdAt": "..."
|
|
865
|
+
}
|
|
866
|
+
```
|
|
867
|
+
|
|
868
|
+
**Location field:** Convert from single location to locations array:
|
|
869
|
+
|
|
870
|
+
```json
|
|
871
|
+
// Before
|
|
872
|
+
{
|
|
873
|
+
"location": { "uri": "...", "cid": "..." }
|
|
874
|
+
}
|
|
875
|
+
|
|
876
|
+
// After
|
|
877
|
+
{
|
|
878
|
+
"locations": [{ "uri": "...", "cid": "..." }]
|
|
879
|
+
}
|
|
880
|
+
```
|
|
881
|
+
|
|
882
|
+
**Date ranges:** Optionally add `startDate` and `endDate` to specify when measurements were taken.
|
|
883
|
+
|
|
884
|
+
- [#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
|
|
885
|
+
|
|
886
|
+
**Breaking Changes:**
|
|
887
|
+
- The `workScope` field in `org.hypercerts.claim.activity` is now a union of:
|
|
888
|
+
- `com.atproto.repo.strongRef`: A reference to a work-scope logic record for structured, nested work scope definitions
|
|
889
|
+
- `org.hypercerts.claim.activity#workScopeString`: A free-form string for simple or legacy scopes
|
|
890
|
+
- **Removed** from `org.hypercerts.defs`:
|
|
891
|
+
- `workScopeAll` (logical AND operator)
|
|
892
|
+
- `workScopeAny` (logical OR operator)
|
|
893
|
+
- `workScopeNot` (logical NOT operator)
|
|
894
|
+
- `workScopeAtom` (atomic scope reference)
|
|
895
|
+
|
|
896
|
+
This simplification allows work scope complexity to be managed via referenced records while still supporting simple string-based scopes for straightforward use cases.
|
|
897
|
+
|
|
898
|
+
## 0.10.0-beta.11
|
|
899
|
+
|
|
900
|
+
### Minor Changes
|
|
901
|
+
|
|
902
|
+
- [#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.
|
|
903
|
+
|
|
904
|
+
## 0.10.0-beta.10
|
|
905
|
+
|
|
906
|
+
### Minor Changes
|
|
907
|
+
|
|
908
|
+
- [#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`.
|
|
909
|
+
|
|
3
910
|
## 0.10.0-beta.9
|
|
4
911
|
|
|
5
912
|
### Minor Changes
|