@hypercerts-org/lexicon 0.10.0 → 0.11.1
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 +218 -0
- package/README.md +392 -393
- package/SCHEMAS.md +539 -81
- package/dist/exports.d.ts +900 -10
- package/dist/exports.d.ts.map +1 -1
- package/dist/generated/exports.d.ts +900 -10
- package/dist/generated/exports.d.ts.map +1 -1
- package/dist/generated/lexicons.d.ts +2684 -1094
- 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/badge/award.d.ts +2 -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 +2 -2
- package/dist/generated/types/app/certified/badge/response.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/org/hypercerts/claim/activity.d.ts +6 -3
- package/dist/generated/types/org/hypercerts/claim/activity.d.ts.map +1 -1
- package/dist/generated/types/org/hypercerts/collection.d.ts +11 -5
- package/dist/generated/types/org/hypercerts/collection.d.ts.map +1 -1
- package/dist/generated/types/org/hypercerts/context/attachment.d.ts +5 -3
- package/dist/generated/types/org/hypercerts/context/attachment.d.ts.map +1 -1
- package/dist/generated/types/org/hypercerts/context/evaluation.d.ts +6 -6
- package/dist/generated/types/org/hypercerts/context/evaluation.d.ts.map +1 -1
- package/dist/generated/types/org/hypercerts/defs.d.ts +11 -0
- package/dist/generated/types/org/hypercerts/defs.d.ts.map +1 -1
- package/dist/generated/types/org/hypercerts/funding/receipt.d.ts +17 -5
- package/dist/generated/types/org/hypercerts/funding/receipt.d.ts.map +1 -1
- 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 +4487 -1808
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +4408 -1805
- package/dist/index.mjs.map +1 -1
- package/dist/lexicons.cjs +928 -36
- package/dist/lexicons.cjs.map +1 -1
- package/dist/lexicons.d.ts +2684 -1094
- package/dist/lexicons.d.ts.map +1 -1
- package/dist/lexicons.mjs +928 -36
- package/dist/lexicons.mjs.map +1 -1
- 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/badge/award.d.ts +2 -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 +2 -2
- package/dist/types/app/certified/badge/response.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/org/hypercerts/claim/activity.d.ts +6 -3
- package/dist/types/org/hypercerts/claim/activity.d.ts.map +1 -1
- package/dist/types/org/hypercerts/collection.d.ts +11 -5
- package/dist/types/org/hypercerts/collection.d.ts.map +1 -1
- package/dist/types/org/hypercerts/context/attachment.d.ts +5 -3
- package/dist/types/org/hypercerts/context/attachment.d.ts.map +1 -1
- package/dist/types/org/hypercerts/context/evaluation.d.ts +6 -6
- package/dist/types/org/hypercerts/context/evaluation.d.ts.map +1 -1
- package/dist/types/org/hypercerts/defs.d.ts +11 -0
- package/dist/types/org/hypercerts/defs.d.ts.map +1 -1
- package/dist/types/org/hypercerts/funding/receipt.d.ts +17 -5
- package/dist/types/org/hypercerts/funding/receipt.d.ts.map +1 -1
- 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/badge/award.json +2 -2
- package/lexicons/app/certified/badge/definition.json +10 -2
- package/lexicons/app/certified/badge/response.json +2 -2
- package/lexicons/app/certified/link/evm.json +88 -0
- package/lexicons/org/hyperboards/board.json +1 -1
- package/lexicons/org/hypercerts/claim/activity.json +8 -4
- package/lexicons/org/hypercerts/collection.json +19 -5
- package/lexicons/org/hypercerts/context/attachment.json +16 -5
- package/lexicons/org/hypercerts/context/evaluation.json +9 -6
- package/lexicons/org/hypercerts/defs.json +21 -0
- package/lexicons/org/hypercerts/funding/receipt.json +30 -10
- 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 +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,223 @@
|
|
|
1
1
|
# @hypercerts-org/lexicon
|
|
2
2
|
|
|
3
|
+
## 0.11.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#196](https://github.com/hypercerts-org/hypercerts-lexicon/pull/196) [`e66a459`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/e66a4595e5df6640d082072284c96282acaa3faf) Thanks [@aspiers](https://github.com/aspiers)! - Fix incorrect NSID reference in `org.hyperboards.board` subject field description (`org.hypercerts.claim.collection` → `org.hypercerts.collection`).
|
|
8
|
+
|
|
9
|
+
Documentation fixes in `README.md` and `SCHEMAS.md`:
|
|
10
|
+
- Correct `validate()` call signature examples (parameter order and result shape)
|
|
11
|
+
- Fix relationship diagram arrow directions and missing entries (`link/evm`, `CERTIFIED` section)
|
|
12
|
+
- Fix contributor field name (`avatar` → `image`)
|
|
13
|
+
- Fix context target descriptions (generalized to `any record` since subjects use generic `strongRef`)
|
|
14
|
+
- Add missing `$type` discriminators to union member examples
|
|
15
|
+
|
|
16
|
+
## 0.11.0
|
|
17
|
+
|
|
18
|
+
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.
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm install @hypercerts-org/lexicon@0.11.0
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
### New lexicons
|
|
27
|
+
|
|
28
|
+
#### EVM identity linking
|
|
29
|
+
|
|
30
|
+
`app.certified.link.evm`
|
|
31
|
+
|
|
32
|
+
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.
|
|
33
|
+
|
|
34
|
+
The `proof` field is an open union, so future signature methods (ERC-1271, ERC-6492) can be added without breaking existing records.
|
|
35
|
+
|
|
36
|
+
```jsonc
|
|
37
|
+
{
|
|
38
|
+
"address": "0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B",
|
|
39
|
+
"proof": {
|
|
40
|
+
"$type": "app.certified.link.evm#eip712Proof",
|
|
41
|
+
"signature": "0x...",
|
|
42
|
+
"message": {
|
|
43
|
+
"did": "did:plc:abc123",
|
|
44
|
+
"evmAddress": "0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B",
|
|
45
|
+
"chainId": "1",
|
|
46
|
+
"timestamp": "1711929600",
|
|
47
|
+
"nonce": "0",
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
"createdAt": "2026-04-03T00:00:00.000Z",
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
#### Vendored Leaflet and richtext lexicons
|
|
55
|
+
|
|
56
|
+
`pub.leaflet.*` · `pub.leaflet.richtext.facet`
|
|
57
|
+
|
|
58
|
+
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.
|
|
59
|
+
|
|
60
|
+
This is a **packaging change**, not a schema change. No record structures are affected.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
### Breaking changes
|
|
65
|
+
|
|
66
|
+
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.
|
|
67
|
+
|
|
68
|
+
#### Evaluation scores are now strings
|
|
69
|
+
|
|
70
|
+
`org.hypercerts.context.evaluation`
|
|
71
|
+
|
|
72
|
+
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.
|
|
73
|
+
|
|
74
|
+
```diff
|
|
75
|
+
// Before
|
|
76
|
+
- { "min": 0, "max": 10, "value": 7 }
|
|
77
|
+
+ // After
|
|
78
|
+
+ { "min": "0", "max": "10", "value": "7.5" }
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**Who needs to update:**
|
|
82
|
+
|
|
83
|
+
| Consumer | Action |
|
|
84
|
+
| -------- | ---------------------------------------------------------------------------------------------------------------------- |
|
|
85
|
+
| Indexers | Change column type from `INTEGER` to `TEXT`. Backfill existing records. Update any numeric sorting or filtering logic. |
|
|
86
|
+
| AppViews | Parse scores as strings. Use `parseFloat()` for numeric display where appropriate. |
|
|
87
|
+
| Frontend | Handle both numeric strings (`"3.7"`) and potentially non-numeric strings (`"A+"`) in display components. |
|
|
88
|
+
|
|
89
|
+
#### Badge references are now strong refs
|
|
90
|
+
|
|
91
|
+
`app.certified.badge.award` · `app.certified.badge.response`
|
|
92
|
+
|
|
93
|
+
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.
|
|
94
|
+
|
|
95
|
+
```diff
|
|
96
|
+
// Before
|
|
97
|
+
- "badge": "at://did:plc:abc/app.certified.badge.definition/123"
|
|
98
|
+
|
|
99
|
+
// After
|
|
100
|
+
+ "badge": {
|
|
101
|
+
+ "uri": "at://did:plc:abc/app.certified.badge.definition/123",
|
|
102
|
+
+ "cid": "bafyrei..."
|
|
103
|
+
+ }
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
**Who needs to update:**
|
|
107
|
+
|
|
108
|
+
| Consumer | Action |
|
|
109
|
+
| ------------- | ----------------------------------------------------------------------------------------------------------------- |
|
|
110
|
+
| Indexers | Update parsing to expect `{ uri, cid }` objects instead of plain URI strings for `badge` and `badgeAward` fields. |
|
|
111
|
+
| AppViews | Update resolution logic. Dereference using both `uri` and `cid` for content verification. |
|
|
112
|
+
| SDK consumers | Regenerate types. Any code constructing badge awards or responses must supply the full strong ref. |
|
|
113
|
+
|
|
114
|
+
#### Funding receipt fields normalized
|
|
115
|
+
|
|
116
|
+
`org.hypercerts.funding.receipt`
|
|
117
|
+
|
|
118
|
+
The `from`, `to`, and `for` fields have been reworked for consistency and stronger type safety.
|
|
119
|
+
|
|
120
|
+
| Field | Before (v0.10.0) | After |
|
|
121
|
+
| ------ | ----------------- | ------------------------------------------------------------------------------------------ |
|
|
122
|
+
| `from` | Required, DID ref | **Optional**, union of `#text` \| `app.certified.defs#did` \| `com.atproto.repo.strongRef` |
|
|
123
|
+
| `to` | Plain string | Union of `#text` \| `app.certified.defs#did` \| `com.atproto.repo.strongRef` |
|
|
124
|
+
| `for` | AT-URI string | `com.atproto.repo.strongRef` (pins to a specific record version) |
|
|
125
|
+
|
|
126
|
+
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.
|
|
127
|
+
|
|
128
|
+
```diff
|
|
129
|
+
// Before
|
|
130
|
+
- "from": { "$type": "app.certified.defs#did", "did": "did:plc:sender" },
|
|
131
|
+
- "to": "did:plc:recipient",
|
|
132
|
+
- "for": "at://did:plc:abc/org.hypercerts.claim.activity/123"
|
|
133
|
+
|
|
134
|
+
// After — with a DID
|
|
135
|
+
+ "from": { "$type": "app.certified.defs#did", "did": "did:plc:sender" },
|
|
136
|
+
+ "to": { "$type": "app.certified.defs#did", "did": "did:plc:recipient" },
|
|
137
|
+
|
|
138
|
+
// After — with a free-text identifier
|
|
139
|
+
+ "to": { "$type": "org.hypercerts.funding.receipt#text", "value": "0xAb58...eC9B" },
|
|
140
|
+
|
|
141
|
+
// After — for field
|
|
142
|
+
+ "for": {
|
|
143
|
+
+ "uri": "at://did:plc:abc/org.hypercerts.claim.activity/123",
|
|
144
|
+
+ "cid": "bafyrei..."
|
|
145
|
+
+ }
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
**Who needs to update:**
|
|
149
|
+
|
|
150
|
+
| Consumer | Action |
|
|
151
|
+
| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
152
|
+
| Indexers | Update parsing for `from`, `to` (now unions with `$type` discriminator — handle all three variants), and `for` (now `{ uri, cid }`). Allow `NULL` for `from`. |
|
|
153
|
+
| AppViews | Update resolution logic for all three fields. `for` requires dereferencing via both URI and CID. Handle `#text` variants for display. |
|
|
154
|
+
| SDK consumers | Regenerate types. Code constructing receipts must supply union-typed `to` and strong ref `for`. |
|
|
155
|
+
| Frontend | Update forms to construct proper union objects for sender/recipient. Handle `#text` for non-ATProto participants. Handle missing `from` for anonymous display. |
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
### Schema changes
|
|
160
|
+
|
|
161
|
+
> **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.
|
|
162
|
+
|
|
163
|
+
#### Known values
|
|
164
|
+
|
|
165
|
+
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.
|
|
166
|
+
|
|
167
|
+
| Lexicon | Field | Known values |
|
|
168
|
+
| ----------------------------------- | ------------- | -------------------------------------------------------------------------------------------------- |
|
|
169
|
+
| `org.hypercerts.collection` | `type` | `favorites` · `project` · `portfolio` · `program` |
|
|
170
|
+
| `org.hypercerts.context.attachment` | `contentType` | `report` · `audit` · `evidence` · `testimonial` · `methodology` |
|
|
171
|
+
| `app.certified.badge.definition` | `badgeType` | `endorsement` · `verification` · `participation` · `certification` · `affiliation` · `recognition` |
|
|
172
|
+
|
|
173
|
+
**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.
|
|
174
|
+
|
|
175
|
+
#### Badge icon is now optional
|
|
176
|
+
|
|
177
|
+
`app.certified.badge.definition`
|
|
178
|
+
|
|
179
|
+
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.
|
|
180
|
+
|
|
181
|
+
**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.
|
|
182
|
+
|
|
183
|
+
#### Contributors array is uncapped
|
|
184
|
+
|
|
185
|
+
`org.hypercerts.claim.activity`
|
|
186
|
+
|
|
187
|
+
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.
|
|
188
|
+
|
|
189
|
+
**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.
|
|
190
|
+
|
|
191
|
+
#### Rich text on collection short descriptions
|
|
192
|
+
|
|
193
|
+
`org.hypercerts.collection`
|
|
194
|
+
|
|
195
|
+
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.
|
|
196
|
+
|
|
197
|
+
**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.
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
### Documentation improvements
|
|
202
|
+
|
|
203
|
+
- **Contributor and item defs** now have descriptions, improving TypeScript IntelliSense and AI code generation.
|
|
204
|
+
- **`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.
|
|
205
|
+
- **Stale references** in board and measurement lexicon descriptions have been corrected.
|
|
206
|
+
- **README** rewritten with an ASCII namespace map and structured reference tables.
|
|
207
|
+
- **AI agent skill** added for downstream developers. Install via `npx skills add hypercerts-org/hypercerts-lexicon`.
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
### Upgrading
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
npm install @hypercerts-org/lexicon@0.11.0
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
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.
|
|
218
|
+
|
|
219
|
+
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.
|
|
220
|
+
|
|
3
221
|
## 0.10.0
|
|
4
222
|
|
|
5
223
|
### Minor Changes
|