Skip to content

Commit 6b2529d

Browse files
authored
Merge pull request #67 from hypercerts-org/fix/data-model-mutability
docs: fix mutability section in core data model
2 parents db64a18 + a8a42e4 commit 6b2529d

4 files changed

Lines changed: 29 additions & 20 deletions

File tree

pages/core-concepts/hypercerts-core-data-model.md

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,24 @@ description: The data model behind hypercerts — record types, dimensions, and
55

66
# Core Data Model
77

8-
A hypercert is a collection of linked records that together describe a contribution. This page explains the data model — what records exist, what they contain, and how they connect.
8+
*Last updated: March 5, 2026*
99

10-
{% callout type="note" %}
11-
A hypercert is not one record. It's a bundle of records linked by strong references. The activity claim is the anchor; everything else — contributions, attachments, measurements, evaluations — adds context around it.
12-
{% /callout %}
10+
A hypercert is an [activity claim](/lexicons/hypercerts-lexicons/activity-claim) with linked records that describe work done. The activity claim is the anchor — contributions, attachments, measurements, and evaluations reference it to add context.
11+
12+
This page explains what records exist, what they contain, and how they connect.
1313

1414
## The core record: activity claim
1515

1616
Every hypercert starts with an **activity claim** — the central record that answers four questions:
1717

1818
| Dimension | Question | Example |
1919
|-----------|----------|---------|
20-
| **Contributors** | Who is doing (or did) the work? | `did:plc:alice123`, `did:plc:bob456` |
21-
| **Work scope** | What are they doing (or what did they do)? | "Documentation", "Reforestation" |
22-
| **Time of work** | When is it happening (or when did it happen)? | 2026-01-01 to 2026-03-31 |
23-
| **Location** | Where is it taking (or did it take) place? | GeoJSON location data |
24-
25-
In addition to these core dimensions, the activity claim can define the rights that come with this claim. The basic right is just "public display", e.g. bragging rights about financial or non-financial contributions to impact. If the hypercert is tokenized, the field can define how the hypercert is allowed to be transferred.
20+
| **Contributors** | Who is doing (or did) the work? | Alice, Bob |
21+
| **Work scope** | What are they doing (or what did they do)? | Documentation, Reforestation |
22+
| **Time of work** | When is it happening (or when did it happen)? | January – March 2026 |
23+
| **Location** | Where is it taking (or did it take) place? | Coastal Kenya |
2624

27-
The activity claim is the core record you create when making a hypercert. It gets a permanent AT-URI like `at://did:plc:alice123/org.hypercerts.claim.activity/3k7`.
25+
The activity claim gets a permanent AT-URI like `at://did:plc:alice123/org.hypercerts.claim.activity/3k7`.
2826

2927
## Additional details
3028

@@ -41,7 +39,9 @@ Other records link to the activity claim to add context. Again, each is a separa
4139

4240
The following diagram shows record types and how they reference the activity claim. Records can be created by different people and live in different repositories.
4341

44-
{% figure src="/images/hypercert-erd.png" alt="Hypercert record relationships" /%}
42+
{% figure src="/images/hypercert-erd.svg" alt="Hypercert record relationships" /%}
43+
44+
The diagram includes a **token** entity — tokenization (anchoring a hypercert onchain) is not yet implemented.
4545

4646
| Record type | What it adds | Who creates it | Lexicon |
4747
|-------------|-------------|----------------|---------|
@@ -59,15 +59,15 @@ This means a hypercert grows over time – it is a living record. The core claim
5959

6060
## Grouping hypercerts
6161

62-
Often hypercerts belong to each other in a project, e.g. in a multi-year project a hypercert might represent the work in one year, such that the full project is a collection of multiple hypercerts.
62+
Hypercerts can be grouped into **collections**. A multi-year project might have one hypercert per year, with a collection representing the full project. But collections are flexible — anyone can create one for any purpose. Someone might curate a personal collection of hypercerts they find interesting, or an organization might group all their hypercerts together. A hypercert can belong to many collections.
6363

6464
| Record type | What it adds | Who creates it | Lexicon |
6565
|-------------|-------------|----------------|---------|
6666
| **Collection** | Groups activity claims and/or other collections into a project or portfolio. Supports recursive nesting. | E.g. the project organizer | `org.hypercerts.claim.collection` |
6767

6868
## How records connect
6969

70-
Records reference each other using **strong references**a combination of AT-URI + CID (content hash). The CID makes the reference tamper-evident: if the referenced record changes, the CID won't match.
70+
Records reference each other using [strong references](/reference/glossary#strong-reference)if a referenced record is modified after the reference was created, the change is detectable.
7171

7272
```text
7373
Activity Claim (the core record)
@@ -83,14 +83,12 @@ Activity Claim (the core record)
8383
└── Evaluation: "High-quality documentation" (by Carol)
8484
```
8585

86-
Every arrow in this tree is a strong reference. Anyone can verify the entire chain by checking CIDs.
8786

8887

8988
## Mutability
9089

91-
Activity claims and their linked records are mutable on ATProto by default — authors can update their records as work evolves. Strong references use a CID (content hash) to pin a specific version, so references remain tamper-evident even if the original record is later updated. A full history of edits will be available so that changes are transparent and auditable (work-in-progress).
90+
Activity claims and their linked records are currently immutable once created. Record versioning and edit history will be supported in a future release, along with the ability to lock a hypercert at a specific version for funding.
9291

93-
When a hypercert is ready for funding, it can be locked by anchoring a snapshot onchain. Once locked, the claim cannot change — funders know exactly what they are funding. See [Funding & Value Flow](/core-concepts/funding-and-value-flow) for the full design.
9492

9593
## What happens next
9694

pages/getting-started/creating-your-first-hypercert.md

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,12 @@ await agent.login({
2525

2626
## Create the activity claim
2727

28-
The activity claim is the core record — it describes what work was done, when, and in what scope.
28+
The activity claim is the core record — it describes what work was done, when, and in what scope. Here's how each field maps to the [activity lexicon](/lexicons/hypercerts-lexicons/activity-claim):
29+
30+
- **Contributors** can be identified inline with a DID or by referencing a [`contributorInformation`](/lexicons/hypercerts-lexicons/activity-claim) record that includes a display name and image. Each contributor can also have a weight and role.
31+
- **Work scopes** can be a simple free-form string (`{ scope: "Documentation" }`) or a structured [CEL expression](/core-concepts/work-scopes) for machine-evaluable queries across the network.
32+
- **Time** is expressed as `startDate` and `endDate` in ISO 8601 format.
33+
- **Locations** are separate [`app.certified.location`](/lexicons/hypercerts-lexicons/activity-claim) records referenced from the activity claim. They support coordinates, GeoJSON, and other formats.
2934

3035
```typescript
3136
const result = await agent.com.atproto.repo.createRecord({
@@ -35,7 +40,7 @@ const result = await agent.com.atproto.repo.createRecord({
3540
title: "Hypercerts Protocol documentation, Q1 2026",
3641
shortDescription: "Wrote getting started guides, tutorials, and lexicon reference pages.",
3742
description: "Created 12 new documentation pages covering quickstart, use cases, evaluations, and architecture. Migrated from GitBook to a custom Next.js + Markdoc site.",
38-
workScope: { allOf: ["Documentation", "Hypercerts Protocol"] },
43+
workScope: { $type: "org.hypercerts.claim.activity#workScopeString", scope: "Documentation, Hypercerts Protocol" },
3944
startDate: "2026-01-01T00:00:00Z",
4045
endDate: "2026-03-31T23:59:59Z",
4146
$type: "org.hypercerts.claim.activity",
@@ -61,7 +66,7 @@ const result = await agent.com.atproto.repo.createRecord({
6166
title: "Hypercerts Protocol documentation, Q1 2026",
6267
shortDescription: "Wrote getting started guides, tutorials, and lexicon reference pages.",
6368
description: "Created 12 new documentation pages covering quickstart, use cases, evaluations, and architecture.",
64-
workScope: { allOf: ["Documentation", "Hypercerts Protocol"] },
69+
workScope: { $type: "org.hypercerts.claim.activity#workScopeString", scope: "Documentation, Hypercerts Protocol" },
6570
startDate: "2026-01-01T00:00:00Z",
6671
endDate: "2026-03-31T23:59:59Z",
6772
$type: "org.hypercerts.claim.activity",

public/images/hypercert-erd.svg

Lines changed: 1 addition & 0 deletions
Loading

styles/globals.css

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1301,6 +1301,11 @@ a.sidebar-link-active:hover {
13011301
background: var(--color-info-bg);
13021302
}
13031303

1304+
.callout--note {
1305+
border-left: 4px solid var(--color-info);
1306+
background: var(--color-info-bg);
1307+
}
1308+
13041309
.callout--warning {
13051310
border-left: 4px solid var(--color-warning);
13061311
background: var(--color-warning-bg);

0 commit comments

Comments
 (0)