@hypercerts-org/lexicon 0.10.0-beta.12 → 0.10.0-beta.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/CHANGELOG.md +136 -0
  2. package/README.md +142 -0
  3. package/SCHEMAS.md +220 -67
  4. package/dist/exports.d.ts +195 -66
  5. package/dist/exports.d.ts.map +1 -1
  6. package/dist/generated/exports.d.ts +195 -66
  7. package/dist/generated/exports.d.ts.map +1 -1
  8. package/dist/generated/lexicons.d.ts +378 -130
  9. package/dist/generated/lexicons.d.ts.map +1 -1
  10. package/dist/generated/types/app/certified/actor/profile.d.ts +27 -0
  11. package/dist/generated/types/app/certified/actor/profile.d.ts.map +1 -0
  12. package/dist/generated/types/app/certified/defs.d.ts +11 -1
  13. package/dist/generated/types/app/certified/defs.d.ts.map +1 -1
  14. package/dist/generated/types/app/certified/location.d.ts +9 -1
  15. package/dist/generated/types/app/certified/location.d.ts.map +1 -1
  16. package/dist/generated/types/org/hypercerts/claim/activity.d.ts +21 -3
  17. package/dist/generated/types/org/hypercerts/claim/activity.d.ts.map +1 -1
  18. package/dist/generated/types/org/hypercerts/claim/attachment.d.ts +37 -0
  19. package/dist/generated/types/org/hypercerts/claim/attachment.d.ts.map +1 -0
  20. package/dist/index.cjs +618 -270
  21. package/dist/index.cjs.map +1 -1
  22. package/dist/index.mjs +606 -262
  23. package/dist/index.mjs.map +1 -1
  24. package/dist/lexicons.cjs +200 -68
  25. package/dist/lexicons.cjs.map +1 -1
  26. package/dist/lexicons.d.ts +378 -130
  27. package/dist/lexicons.d.ts.map +1 -1
  28. package/dist/lexicons.mjs +200 -68
  29. package/dist/lexicons.mjs.map +1 -1
  30. package/dist/types/app/certified/actor/profile.d.ts +27 -0
  31. package/dist/types/app/certified/actor/profile.d.ts.map +1 -0
  32. package/dist/types/app/certified/defs.d.ts +11 -1
  33. package/dist/types/app/certified/defs.d.ts.map +1 -1
  34. package/dist/types/app/certified/location.d.ts +9 -1
  35. package/dist/types/app/certified/location.d.ts.map +1 -1
  36. package/dist/types/org/hypercerts/claim/activity.d.ts +21 -3
  37. package/dist/types/org/hypercerts/claim/activity.d.ts.map +1 -1
  38. package/dist/types/org/hypercerts/claim/attachment.d.ts +37 -0
  39. package/dist/types/org/hypercerts/claim/attachment.d.ts.map +1 -0
  40. package/lexicons/app/certified/actor/profile.json +51 -0
  41. package/lexicons/app/certified/defs.json +11 -3
  42. package/lexicons/app/certified/location.json +16 -2
  43. package/lexicons/org/hypercerts/claim/activity.json +31 -8
  44. package/lexicons/org/hypercerts/claim/attachment.json +86 -0
  45. package/package.json +1 -1
  46. package/dist/generated/types/org/hypercerts/claim/evidence.d.ts +0 -29
  47. package/dist/generated/types/org/hypercerts/claim/evidence.d.ts.map +0 -1
  48. package/dist/types/org/hypercerts/claim/evidence.d.ts +0 -29
  49. package/dist/types/org/hypercerts/claim/evidence.d.ts.map +0 -1
  50. package/lexicons/org/hypercerts/claim/evidence.json +0 -57
package/CHANGELOG.md CHANGED
@@ -1,5 +1,141 @@
1
1
  # @hypercerts-org/lexicon
2
2
 
3
+ ## 0.10.0-beta.14
4
+
5
+ ### Minor Changes
6
+
7
+ - [#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.
8
+
9
+ - [#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
10
+
11
+ The did definition in app.certified.defs has been converted from a primitive
12
+ string type to an object type to comply with the ATProto specification
13
+ requirement that all union variants must be object or record types.
14
+
15
+ This change was necessary because app.certified.badge.award uses this
16
+ definition in a union for the subject property.
17
+
18
+ Breaking changes:
19
+ - `app.certified.defs#did`: Now an object with `did` string property (maxLength 256)
20
+ - Code using this type must now access the `.did` property instead of using the value directly
21
+
22
+ - [#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
23
+
24
+ The contributorIdentity, contributorRole, and workScopeString definitions
25
+ in org.hypercerts.claim.activity have been converted from primitive string
26
+ types to object types to comply with the ATProto specification requirement
27
+ that all union variants must be object or record types.
28
+
29
+ Additionally, maximum length constraints have been reduced to more reasonable
30
+ values:
31
+ - `contributorIdentity.identity`: maxLength 1000, maxGraphemes 100 (previously no limits)
32
+ - `contributorRole.role`: maxLength 1000, maxGraphemes 100 (previously maxLength 10000, maxGraphemes 1000)
33
+ - `workScopeString.scope`: maxLength 1000, maxGraphemes 100 (previously maxLength 10000, maxGraphemes 1000)
34
+
35
+ Breaking changes:
36
+ - `contributorIdentity`: Now an object with `identity` string property
37
+ - `contributorRole`: Now an object with `role` string property
38
+ - `workScopeString`: Now an object with `scope` string property
39
+ - Reduced maximum lengths may affect existing records with longer values
40
+
41
+ This requires updating code that uses these union types to access the nested
42
+ property instead of using the value directly.
43
+
44
+ - [#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
45
+
46
+ ## 0.10.0-beta.13
47
+
48
+ ### Minor Changes
49
+
50
+ - [#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
51
+
52
+ - [#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
53
+
54
+ **Breaking Changes:**
55
+ - **Lexicon ID change:**
56
+ - `org.hypercerts.claim.evidence` → `org.hypercerts.claim.attachment`
57
+ - All existing evidence records must be migrated to use the new lexicon ID
58
+ - **Schema structure changes (`org.hypercerts.claim.attachment`):**
59
+ - Changed `subject` (single strongRef) to `subjects` (array of strongRefs, maxLength: 100)
60
+ - Changed `content` from single union (uri/blob) to array of unions (maxLength: 100)
61
+ - Added `contentType` field (string, maxLength: 64) to specify attachment type
62
+ - Removed `relationType` field (previously used to indicate supports/challenges/clarifies)
63
+ - Removed `contributors` field
64
+ - Removed `locations` field
65
+ - Added rich text support: `shortDescriptionFacets` and `descriptionFacets` (arrays of `app.bsky.richtext.facet`)
66
+ - Updated required fields: `["title", "content", "createdAt"]` (content is now required)
67
+ - **Common definitions (`org.hypercerts.defs`):**
68
+ - Added `weightedContributor` def for contributor references with optional weights
69
+ - Added `contributorIdentity` def for string-based contributor identification
70
+
71
+ **Migration:**
72
+
73
+ **Lexicon ID:** Update all references from `org.hypercerts.claim.evidence` to `org.hypercerts.claim.attachment`.
74
+
75
+ **Schema migration:**
76
+
77
+ ```json
78
+ // Before (org.hypercerts.claim.evidence)
79
+ {
80
+ "$type": "org.hypercerts.claim.evidence",
81
+ "subject": { "uri": "...", "cid": "..." },
82
+ "content": { "uri": "https://..." },
83
+ "title": "Evidence Title",
84
+ "relationType": "supports",
85
+ "createdAt": "..."
86
+ }
87
+
88
+ // After (org.hypercerts.claim.attachment)
89
+ {
90
+ "$type": "org.hypercerts.claim.attachment",
91
+ "subjects": [{ "uri": "...", "cid": "..." }],
92
+ "content": [{ "uri": "https://..." }],
93
+ "contentType": "evidence",
94
+ "title": "Evidence Title",
95
+ "createdAt": "..."
96
+ }
97
+ ```
98
+
99
+ **Field mapping:**
100
+ - `subject` → `subjects` (wrap in array)
101
+ - `content` (single) → `content` (array, wrap existing value)
102
+ - `relationType` → remove (no direct replacement)
103
+ - `contributors` → remove (no direct replacement)
104
+ - `locations` → remove (no direct replacement)
105
+
106
+ ### Patch Changes
107
+
108
+ - [#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
109
+
110
+ **New Feature:**
111
+ - **`location` field** (`org.hypercerts.claim.attachment`):
112
+ - Added optional `location` property as a strong reference (`com.atproto.repo.strongRef`)
113
+ - Allows attachments to associate location metadata directly without using the sidecar pattern
114
+ - The referenced record must conform to the `app.certified.location` lexicon
115
+
116
+ **Usage:**
117
+
118
+ ```json
119
+ {
120
+ "$type": "org.hypercerts.claim.attachment",
121
+ "subjects": [
122
+ {
123
+ "uri": "at://did:plc:.../org.hypercerts.claim.activity/...",
124
+ "cid": "..."
125
+ }
126
+ ],
127
+ "content": [{ "uri": "https://..." }],
128
+ "title": "Field Report",
129
+ "location": {
130
+ "uri": "at://did:plc:.../app.certified.location/abc123",
131
+ "cid": "..."
132
+ },
133
+ "createdAt": "..."
134
+ }
135
+ ```
136
+
137
+ This change aligns with the location property addition to collections (PR #123), providing a consistent pattern for associating location metadata across record types.
138
+
3
139
  ## 0.10.0-beta.12
4
140
 
5
141
  ### Minor Changes
package/README.md CHANGED
@@ -89,6 +89,95 @@ await agent.api.com.atproto.repo.createRecord({
89
89
  });
90
90
  ```
91
91
 
92
+ ### Creating Location Records
93
+
94
+ Location records (`app.certified.location`) specify where work was performed
95
+ using geographic coordinates or other location formats. They can be referenced
96
+ by activities, collections, attachments, measurements, and evaluations.
97
+
98
+ ```typescript
99
+ import { LOCATION_NSID } from "@hypercerts-org/lexicon";
100
+
101
+ const locationRecord = {
102
+ $type: LOCATION_NSID,
103
+ lpVersion: "1.0", // Location Protocol version
104
+ srs: "http://www.opengis.net/def/crs/OGC/1.3/CRS84", // Spatial Reference System
105
+ locationType: "coordinate-decimal", // or "geojson-point"
106
+ location: {
107
+ uri: "https://example.com/location-data.geojson",
108
+ },
109
+ // Optional fields
110
+ name: "Project Site A",
111
+ description: "Primary research facility in the Amazon rainforest",
112
+ createdAt: new Date().toISOString(),
113
+ };
114
+ ```
115
+
116
+ - `lpVersion` (required): Version of the Location Protocol specification
117
+ - `srs` (required): Spatial Reference System URI defining the coordinate system
118
+ - `locationType` (required): Format identifier (e.g., "coordinate-decimal", "geojson-point")
119
+ - `location` (required): Location data as URI, blob, or string
120
+ - `name` (optional): Human-readable name for the location
121
+ - `description` (optional): Additional context about the location
122
+ - `createdAt` (required): Timestamp when the record was created
123
+
124
+ **Location data formats:**
125
+
126
+ The `location` field accepts three formats:
127
+
128
+ 1. **URI reference**: `{ uri: "https://..." }` - Link to external location data
129
+ 2. **Small blob**: Embedded location data (up to 10MB)
130
+ 3. **Location string**: Inline string wrapped in an object, containing coordinates or GeoJSON
131
+
132
+ ```typescript
133
+ // Example with embedded blob
134
+ const locationWithBlob = {
135
+ $type: LOCATION_NSID,
136
+ lpVersion: "1.0",
137
+ srs: "http://www.opengis.net/def/crs/OGC/1.3/CRS84",
138
+ locationType: "geojson-point",
139
+ location: {
140
+ blob: {
141
+ $type: "blob",
142
+ ref: {
143
+ $link: "bafyrei...", // CID of the uploaded blob
144
+ },
145
+ mimeType: "application/geo+json",
146
+ size: 123,
147
+ },
148
+ },
149
+ name: "Amazon Research Station",
150
+ createdAt: new Date().toISOString(),
151
+ };
152
+
153
+ // Example with inline string (coordinates)
154
+ const locationWithCoordinates = {
155
+ $type: LOCATION_NSID,
156
+ lpVersion: "1.0",
157
+ srs: "http://www.opengis.net/def/crs/OGC/1.3/CRS84",
158
+ locationType: "coordinate-decimal",
159
+ location: {
160
+ string: "-3.4653, -62.2159", // lat, lon
161
+ },
162
+ name: "Amazon Research Site",
163
+ description: "Field station coordinates",
164
+ createdAt: new Date().toISOString(),
165
+ };
166
+
167
+ // Example with inline GeoJSON string
168
+ const locationWithGeoJSON = {
169
+ $type: LOCATION_NSID,
170
+ lpVersion: "1.0",
171
+ srs: "http://www.opengis.net/def/crs/OGC/1.3/CRS84",
172
+ locationType: "geojson-point",
173
+ location: {
174
+ string: '{"type":"Point","coordinates":[-62.2159,-3.4653]}',
175
+ },
176
+ name: "Research Station Alpha",
177
+ createdAt: new Date().toISOString(),
178
+ };
179
+ ```
180
+
92
181
  ### Accessing NSIDs (Lexicon IDs)
93
182
 
94
183
  **Recommended**: Use individual NSID constants for cleaner, more readable code:
@@ -322,3 +411,56 @@ const collectionRecord = {
322
411
  ```
323
412
 
324
413
  The `location` field is a strong reference to an `app.certified.location` record containing the same `uri` and `cid` fields as described above for activities.
414
+
415
+ ### Creating Attachments
416
+
417
+ Attachments provide commentary, context, evidence, or documentary material
418
+ related to hypercert records. They can be linked to activities, evaluations,
419
+ measurements, or even other attachments:
420
+
421
+ ```typescript
422
+ import { ATTACHMENT_NSID } from "@hypercerts-org/lexicon";
423
+
424
+ const attachmentRecord = {
425
+ $type: ATTACHMENT_NSID,
426
+ title: "Field Survey Report",
427
+ subjects: [
428
+ {
429
+ uri: "at://did:plc:alice/org.hypercerts.claim.activity/abc123",
430
+ cid: "...",
431
+ },
432
+ ],
433
+ contentType: "report",
434
+ content: [
435
+ { uri: "https://example.com/reports/survey-2024.pdf" },
436
+ { uri: "ipfs://Qm..." },
437
+ ],
438
+ shortDescription: "Quarterly field survey documenting project progress",
439
+ createdAt: new Date().toISOString(),
440
+ };
441
+ ```
442
+
443
+ **Key fields:**
444
+
445
+ - `title` (required): String title for the attachment
446
+ - `shortDescription`/`description`: Support rich text via facet annotations
447
+ - `subjects` (optional): Array of strong references to records this attachment relates to
448
+ - `contentType` (optional): Type descriptor (e.g., "report", "audit", "evidence", "testimonial")
449
+ - `content` (required): Array of URIs or blobs containing the attachment files
450
+ - `location` (optional): Strong reference to an `app.certified.location` record
451
+ - `createdAt` (required): Timestamp when the attachment was created
452
+
453
+ **Adding Location to Attachments:**
454
+
455
+ ```typescript
456
+ const attachmentWithLocation = {
457
+ $type: ATTACHMENT_NSID,
458
+ title: "Site Inspection Photos",
459
+ content: [{ uri: "https://..." }],
460
+ location: {
461
+ uri: "at://did:plc:alice/app.certified.location/loc123",
462
+ cid: "...",
463
+ },
464
+ createdAt: new Date().toISOString(),
465
+ };
466
+ ```
package/SCHEMAS.md CHANGED
@@ -33,7 +33,7 @@ Hypercerts-specific lexicons for tracking impact work and claims.
33
33
 
34
34
  #### Defs
35
35
 
36
- ##### contributor
36
+ ##### `org.hypercerts.claim.activity#contributor`
37
37
 
38
38
  | Property | Type | Required | Description |
39
39
  | --------------------- | -------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
@@ -41,6 +41,113 @@ Hypercerts-specific lexicons for tracking impact work and claims.
41
41
  | `contributionWeight` | `string` | ❌ | The relative weight/importance of this contribution (stored as a string to avoid float precision issues). Must be a positive numeric value. Weights do not need to sum to a specific total; normalization can be performed by the consuming application as needed. |
42
42
  | `contributionDetails` | `union` | ❌ | Contribution details as a string via org.hypercerts.claim.activity#contributorRole, or a strong reference to a contribution details record. |
43
43
 
44
+ ##### `org.hypercerts.claim.activity#contributorIdentity`
45
+
46
+ | Property | Type | Required | Description |
47
+ | ---------- | -------- | -------- | ---------------------------------------------------- |
48
+ | `identity` | `string` | ✅ | The contributor identity string (DID or identifier). |
49
+
50
+ ##### `org.hypercerts.claim.activity#contributorRole`
51
+
52
+ | Property | Type | Required | Description |
53
+ | -------- | -------- | -------- | --------------------------------- |
54
+ | `role` | `string` | ✅ | The contribution role or details. |
55
+
56
+ ##### `org.hypercerts.claim.activity#workScopeString`
57
+
58
+ | Property | Type | Required | Description |
59
+ | -------- | -------- | -------- | ---------------------------------- |
60
+ | `scope` | `string` | ✅ | The work scope description string. |
61
+
62
+ ---
63
+
64
+ ### `org.hypercerts.claim.attachment`
65
+
66
+ **Description:** An attachment providing commentary, context, evidence, or documentary material related to a hypercert record (e.g. an activity, project, claim, or evaluation).
67
+
68
+ **Key:** `tid`
69
+
70
+ #### Properties
71
+
72
+ | Property | Type | Required | Description | Comments |
73
+ | ------------------------ | -------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ |
74
+ | `subjects` | `ref` | ❌ | References to the subject(s) the attachment is connected to—this may be an activity claim, outcome claim, measurement, evaluation, or even another attachment. This is optional as the attachment can exist before the claim is recorded. | maxLength: 100 |
75
+ | `contentType` | `string` | ❌ | The type of attachment, e.g. report, audit, evidence, testimonial, methodology, etc. | maxLength: 64 |
76
+ | `content` | `union` | ✅ | The files, documents, or external references included in this attachment record. | maxLength: 100 |
77
+ | `title` | `string` | ✅ | Title of this attachment. | maxLength: 256 |
78
+ | `shortDescription` | `string` | ❌ | Short summary of this attachment, suitable for previews and list views. Rich text annotations may be provided via `shortDescriptionFacets`. | maxLength: 3000, maxGraphemes: 300 |
79
+ | `shortDescriptionFacets` | `ref` | ❌ | Rich text annotations for `shortDescription` (mentions, URLs, hashtags, etc). | |
80
+ | `description` | `string` | ❌ | Optional longer description of this attachment, including context or interpretation. Rich text annotations may be provided via `descriptionFacets`. | maxLength: 30000, maxGraphemes: 3000 |
81
+ | `descriptionFacets` | `ref` | ❌ | Rich text annotations for `description` (mentions, URLs, hashtags, etc). | |
82
+ | `location` | `ref` | ❌ | A strong reference to the location where this attachment's subject matter occurred. The record referenced must conform with the lexicon app.certified.location. | |
83
+ | `createdAt` | `string` | ✅ | Client-declared timestamp when this record was originally created. | |
84
+
85
+ ---
86
+
87
+ ### `org.hypercerts.claim.collection`
88
+
89
+ **Description:** A collection/group of items (activities and/or other collections). Collections support recursive nesting.
90
+
91
+ **Key:** `tid`
92
+
93
+ #### Properties
94
+
95
+ | Property | Type | Required | Description | Comments |
96
+ | ------------------ | -------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------- |
97
+ | `type` | `string` | ❌ | The type of this collection. Possible fields can be 'favorites', 'project', or any other type of collection. | |
98
+ | `title` | `string` | ✅ | The title of this collection | maxLength: 800, maxGraphemes: 80 |
99
+ | `shortDescription` | `string` | ❌ | Short summary of this collection, suitable for previews and list views | maxLength: 3000, maxGraphemes: 300 |
100
+ | `description` | `ref` | ❌ | Rich-text description, represented as a Leaflet linear document. | |
101
+ | `avatar` | `union` | ❌ | The collection's avatar/profile image as a URI or image blob. | |
102
+ | `banner` | `union` | ❌ | Larger horizontal image to display behind the collection view. | |
103
+ | `items` | `ref` | ✅ | Array of items in this collection with optional weights. | |
104
+ | `location` | `ref` | ❌ | A strong reference to the location where this collection's activities were performed. The record referenced must conform with the lexicon app.certified.location. | |
105
+ | `createdAt` | `string` | ✅ | Client-declared timestamp when this record was originally created | |
106
+
107
+ #### Defs
108
+
109
+ ##### `org.hypercerts.claim.collection#item`
110
+
111
+ | Property | Type | Required | Description |
112
+ | ---------------- | -------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
113
+ | `itemIdentifier` | `ref` | ✅ | Strong reference to an item in this collection. Items can be activities (org.hypercerts.claim.activity) and/or other collections (org.hypercerts.claim.collection). |
114
+ | `itemWeight` | `string` | ❌ | Optional weight for this item (positive numeric value stored as string). Weights do not need to sum to a specific total; normalization can be performed by the consuming application as needed. |
115
+
116
+ ---
117
+
118
+ ### `org.hypercerts.claim.contributionDetails`
119
+
120
+ **Description:** Details about a specific contribution including role, description, and timeframe.
121
+
122
+ **Key:** `tid`
123
+
124
+ #### Properties
125
+
126
+ | Property | Type | Required | Description | Comments |
127
+ | ------------------------- | -------- | -------- | ------------------------------------------------------------------------------------ | ------------------------------------ |
128
+ | `role` | `string` | ❌ | Role or title of the contributor. | maxLength: 100 |
129
+ | `contributionDescription` | `string` | ❌ | What the contribution concretely was. | maxLength: 10000, maxGraphemes: 1000 |
130
+ | `startDate` | `string` | ❌ | When this contribution started. This should be a subset of the hypercert timeframe. | |
131
+ | `endDate` | `string` | ❌ | When this contribution finished. This should be a subset of the hypercert timeframe. | |
132
+ | `createdAt` | `string` | ✅ | Client-declared timestamp when this record was originally created. | |
133
+
134
+ ---
135
+
136
+ ### `org.hypercerts.claim.contributorInformation`
137
+
138
+ **Description:** Contributor information including identifier, display name, and image.
139
+
140
+ **Key:** `tid`
141
+
142
+ #### Properties
143
+
144
+ | Property | Type | Required | Description | Comments |
145
+ | ------------- | -------- | -------- | ------------------------------------------------------------------ | -------------- |
146
+ | `identifier` | `string` | ❌ | DID or a URI to a social profile of the contributor. | |
147
+ | `displayName` | `string` | ❌ | Display name of the contributor. | maxLength: 100 |
148
+ | `image` | `union` | ❌ | The contributor visual representation as a URI or image blob. | |
149
+ | `createdAt` | `string` | ✅ | Client-declared timestamp when this record was originally created. | |
150
+
44
151
  ---
45
152
 
46
153
  ### `org.hypercerts.claim.evaluation`
@@ -64,7 +171,7 @@ Hypercerts-specific lexicons for tracking impact work and claims.
64
171
 
65
172
  #### Defs
66
173
 
67
- ##### score
174
+ ##### `org.hypercerts.claim.evaluation#score`
68
175
 
69
176
  | Property | Type | Required | Description |
70
177
  | -------- | --------- | -------- | -------------------------------------------- |
@@ -74,26 +181,6 @@ Hypercerts-specific lexicons for tracking impact work and claims.
74
181
 
75
182
  ---
76
183
 
77
- ### `org.hypercerts.claim.evidence`
78
-
79
- **Description:** A piece of evidence related to a hypercert record (e.g. an activity, project, claim, or evaluation). Evidence may support, clarify, or challenge the referenced subject.
80
-
81
- **Key:** `tid`
82
-
83
- #### Properties
84
-
85
- | Property | Type | Required | Description | Comments |
86
- | ------------------ | -------- | -------- | ------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------- |
87
- | `subject` | `ref` | ❌ | A strong reference to the record this evidence relates to (e.g. an activity, project, claim, or evaluation). | |
88
- | `content` | `union` | ✅ | A piece of evidence (URI or blob) related to the subject record; it may support, clarify, or challenge a hypercert claim. | |
89
- | `title` | `string` | ✅ | Title to describe the nature of the evidence. | maxLength: 256 |
90
- | `shortDescription` | `string` | ❌ | Short description explaining what this evidence shows. | maxLength: 3000, maxGraphemes: 300 |
91
- | `description` | `string` | ❌ | Longer description describing the evidence in more detail. | maxLength: 30000, maxGraphemes: 3000 |
92
- | `relationType` | `string` | ❌ | How this evidence relates to the subject. | Known values: `supports`, `challenges`, `clarifies` |
93
- | `createdAt` | `string` | ✅ | Client-declared timestamp when this record was originally created | |
94
-
95
- ---
96
-
97
184
  ### `org.hypercerts.claim.measurement`
98
185
 
99
186
  **Description:** Measurement data related to a hypercert record (e.g. an activity and its impact).
@@ -121,37 +208,6 @@ Hypercerts-specific lexicons for tracking impact work and claims.
121
208
 
122
209
  ---
123
210
 
124
- ### `org.hypercerts.claim.collection`
125
-
126
- **Description:** A collection/group of items (activities and/or other collections). Collections support recursive nesting.
127
-
128
- **Key:** `tid`
129
-
130
- #### Properties
131
-
132
- | Property | Type | Required | Description | Comments |
133
- | ------------------ | -------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------- |
134
- | `type` | `string` | ❌ | The type of this collection. Possible fields can be 'favorites', 'project', or any other type of collection. | |
135
- | `title` | `string` | ✅ | The title of this collection | maxLength: 800, maxGraphemes: 80 |
136
- | `shortDescription` | `string` | ❌ | Short summary of this collection, suitable for previews and list views | maxLength: 3000, maxGraphemes: 300 |
137
- | `description` | `ref` | ❌ | Rich-text description, represented as a Leaflet linear document. | |
138
- | `avatar` | `union` | ❌ | The collection's avatar/profile image as a URI or image blob. | |
139
- | `banner` | `union` | ❌ | Larger horizontal image to display behind the collection view. | |
140
- | `items` | `ref` | ✅ | Array of items in this collection with optional weights. | |
141
- | `location` | `ref` | ❌ | A strong reference to the location where this collection's activities were performed. The record referenced must conform with the lexicon app.certified.location. | |
142
- | `createdAt` | `string` | ✅ | Client-declared timestamp when this record was originally created | |
143
-
144
- #### Defs
145
-
146
- ##### item
147
-
148
- | Property | Type | Required | Description |
149
- | ---------------- | -------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
150
- | `itemIdentifier` | `ref` | ✅ | Strong reference to an item in this collection. Items can be activities (org.hypercerts.claim.activity) and/or other collections (org.hypercerts.claim.collection). |
151
- | `itemWeight` | `string` | ❌ | Optional weight for this item (positive numeric value stored as string). Weights do not need to sum to a specific total; normalization can be performed by the consuming application as needed. |
152
-
153
- ---
154
-
155
211
  ### `org.hypercerts.claim.rights`
156
212
 
157
213
  **Description:** Describes the rights that a contributor and/or an owner has, such as whether the hypercert can be sold, transferred, and under what conditions.
@@ -194,26 +250,31 @@ Hypercerts-specific lexicons for tracking impact work and claims.
194
250
 
195
251
  ---
196
252
 
197
- ## Certified Lexicons
198
-
199
- Certified lexicons are common/shared lexicons that can be used across multiple protocols.
253
+ ### `org.hypercerts.helper.workScopeTag`
200
254
 
201
- ### `org.hypercerts.defs`
255
+ **Description:** A reusable scope atom for work scope logic expressions. Scopes can represent topics, languages, domains, deliverables, methods, regions, tags, or other categorical labels.
202
256
 
203
- **Description:** Common type definitions used across all certified protocols.
257
+ **Key:** `tid`
204
258
 
205
- #### Defs
259
+ #### Properties
206
260
 
207
- | Def | Type | Description | Comments |
208
- | ------------ | -------- | ----------------------------------------- | --------------------------------------- |
209
- | `uri` | `object` | Object containing a URI to external data | Has `uri` property (string, format uri) |
210
- | `smallBlob` | `object` | Object containing a blob to external data | Has `blob` property (blob, up to 10MB) |
211
- | `largeBlob` | `object` | Object containing a blob to external data | Has `blob` property (blob, up to 100MB) |
212
- | `smallImage` | `object` | Object containing a small image | Has `image` property (blob, up to 5MB) |
213
- | `largeImage` | `object` | Object containing a large image | Has `image` property (blob, up to 10MB) |
261
+ | Property | Type | Required | Description | Comments |
262
+ | ------------------- | -------- | -------- | ------------------------------------------------------------------------------------------------ | ------------------------------------ |
263
+ | `createdAt` | `string` | ✅ | Client-declared timestamp when this record was originally created | |
264
+ | `key` | `string` | ✅ | Lowercase, hyphenated machine-readable key for this scope (e.g., 'ipfs', 'go-lang', 'filecoin'). | maxLength: 120 |
265
+ | `label` | `string` | ✅ | Human-readable label for this scope. | maxLength: 200 |
266
+ | `kind` | `string` | ❌ | Category type of this scope. Recommended values: topic, language, domain, method, tag. | maxLength: 50 |
267
+ | `description` | `string` | ❌ | Optional longer description of this scope. | maxLength: 10000, maxGraphemes: 1000 |
268
+ | `parent` | `ref` | ❌ | Optional strong reference to a parent scope record for taxonomy/hierarchy support. | |
269
+ | `aliases` | `string` | ❌ | Optional array of alternative names or identifiers for this scope. | maxLength: 50 |
270
+ | `externalReference` | `union` | ❌ | Optional external reference for this scope as a URI or blob. | |
214
271
 
215
272
  ---
216
273
 
274
+ ## Certified Lexicons
275
+
276
+ Certified lexicons are common/shared lexicons that can be used across multiple protocols.
277
+
217
278
  ### `app.certified.location`
218
279
 
219
280
  **Description:** A location reference
@@ -227,11 +288,19 @@ Certified lexicons are common/shared lexicons that can be used across multiple p
227
288
  | `lpVersion` | `string` | ✅ | The version of the Location Protocol | maxLength: 10 |
228
289
  | `srs` | `string` | ✅ | The Spatial Reference System URI (e.g., http://www.opengis.net/def/crs/OGC/1.3/CRS84) that defines the coordinate system. | maxLength: 100 |
229
290
  | `locationType` | `string` | ✅ | An identifier for the format of the location data (e.g., coordinate-decimal, geojson-point) | maxLength: 20, Known values: `coordinate-decimal`, `geojson-point` |
230
- | `location` | `union` | ✅ | The location of where the work was performed as a URI or blob. | |
291
+ | `location` | `union` | ✅ | The location of where the work was performed as a URI, blob, or inline string. | |
231
292
  | `name` | `string` | ❌ | Optional name for this location | maxLength: 1000, maxGraphemes: 100 |
232
293
  | `description` | `string` | ❌ | Optional description for this location | maxLength: 2000, maxGraphemes: 500 |
233
294
  | `createdAt` | `string` | ✅ | Client-declared timestamp when this record was originally created | |
234
295
 
296
+ #### Defs
297
+
298
+ ##### `app.certified.location#string`
299
+
300
+ | Property | Type | Required | Description |
301
+ | -------- | -------- | -------- | ------------------------- |
302
+ | `string` | `string` | ✅ | The location string value |
303
+
235
304
  ---
236
305
 
237
306
  ### `app.certified.badge.definition`
@@ -287,6 +356,90 @@ Certified lexicons are common/shared lexicons that can be used across multiple p
287
356
 
288
357
  ---
289
358
 
359
+ ### `app.certified.actor.profile`
360
+
361
+ **Description:** A declaration of a Hypercert account profile.
362
+
363
+ **Key:** `literal:self`
364
+
365
+ #### Properties
366
+
367
+ | Property | Type | Required | Description | Comments |
368
+ | ------------- | -------- | -------- | ------------------------------------------------------------------------------ | ---------------------------------- |
369
+ | `displayName` | `string` | ❌ | | maxLength: 640, maxGraphemes: 64 |
370
+ | `description` | `string` | ❌ | Free-form profile description text. | maxLength: 2560, maxGraphemes: 256 |
371
+ | `pronouns` | `string` | ❌ | Free-form pronouns text. | maxLength: 200, maxGraphemes: 20 |
372
+ | `website` | `string` | ❌ | | |
373
+ | `avatar` | `union` | ❌ | Small image to be displayed next to posts from account. AKA, 'profile picture' | |
374
+ | `banner` | `union` | ❌ | Larger horizontal image to display behind profile view. | |
375
+ | `createdAt` | `string` | ❌ | | |
376
+
377
+ ---
378
+
379
+ ### `app.certified.defs`
380
+
381
+ **Description:** Common type definitions used across certified protocols.
382
+
383
+ #### Defs
384
+
385
+ ##### `app.certified.defs#did`
386
+
387
+ | Property | Type | Required | Description |
388
+ | -------- | -------- | -------- | --------------------- |
389
+ | `did` | `string` | ✅ | The DID string value. |
390
+
391
+ ---
392
+
393
+ ## Type Definitions
394
+
395
+ Common type definitions used across all protocols.
396
+
397
+ ### `org.hypercerts.defs`
398
+
399
+ #### Defs
400
+
401
+ ##### `org.hypercerts.defs#uri`
402
+
403
+ | Property | Type | Required | Description |
404
+ | -------- | -------- | -------- | -------------------- |
405
+ | `uri` | `string` | ✅ | URI to external data |
406
+
407
+ ##### `org.hypercerts.defs#smallBlob`
408
+
409
+ | Property | Type | Required | Description |
410
+ | -------- | ------ | -------- | ---------------------------------- |
411
+ | `blob` | `blob` | ✅ | Blob to external data (up to 10MB) |
412
+
413
+ ##### `org.hypercerts.defs#largeBlob`
414
+
415
+ | Property | Type | Required | Description |
416
+ | -------- | ------ | -------- | ----------------------------------- |
417
+ | `blob` | `blob` | ✅ | Blob to external data (up to 100MB) |
418
+
419
+ ##### `org.hypercerts.defs#smallImage`
420
+
421
+ | Property | Type | Required | Description |
422
+ | -------- | ------ | -------- | ----------------- |
423
+ | `image` | `blob` | ✅ | Image (up to 5MB) |
424
+
425
+ ##### `org.hypercerts.defs#largeImage`
426
+
427
+ | Property | Type | Required | Description |
428
+ | -------- | ------ | -------- | ------------------ |
429
+ | `image` | `blob` | ✅ | Image (up to 10MB) |
430
+
431
+ ---
432
+
433
+ ## External Lexicons
434
+
435
+ External lexicons from other protocols and systems.
436
+
437
+ ### `com.atproto.repo.strongRef`
438
+
439
+ **Key:** `tid`
440
+
441
+ ---
442
+
290
443
  ## Notes
291
444
 
292
445
  - All timestamps use the `datetime` format (ISO 8601)