Skip to content

NON-BREAKING: add org.hypercerts.claim.post lexicon#138

Draft
holkexyz wants to merge 4 commits intomainfrom
feat/add-post-lexicon
Draft

NON-BREAKING: add org.hypercerts.claim.post lexicon#138
holkexyz wants to merge 4 commits intomainfrom
feat/add-post-lexicon

Conversation

@holkexyz
Copy link
Copy Markdown
Member

@holkexyz holkexyz commented Feb 24, 2026

Summary

  • Adds org.hypercerts.claim.post lexicon for updates, reports, and comments on hypercerts records
  • Adds type shims for app.bsky.embed.* and com.atproto.label.defs external lexicon references
  • Regenerates SCHEMAS.md

Design

Modeled after app.bsky.feed.post with hypercerts-specific extensions:

Field Type Description
text string Primary content (up to 5000 graphemes)
facets ref[] Rich text annotations (mentions, URLs, hashtags)
replies replyRef[] Multi-reply support — a post can reply to up to 10 threads
embed union Single featured embed (images, video, external link, record)
labels union Self-label content warnings
tags string[] Additional hashtags
attachments union[] Up to 100 URIs or blobs
createdAt datetime Client-declared creation timestamp

Why a single embed (not an array)

The embed field is deliberately singular, matching Bluesky's design. This separates concerns between:

  • embed: one rich, featured media item with full rendering support (image gallery, video player, link card with preview, quoted record)
  • attachments: supplementary references (additional URLs, documents, files)

This distinction is semantically cleaner than a flat array of embeds and maintains compatibility with Bluesky clients that expect a single embed to render. For example, a post about a reforestation update could have an embed with before/after photos and attachments linking to the full report PDF, a YouTube timelapse, and GPS data.

MaEarth adoption path

This schema can replace several of MaEarth's custom types defined in types.maearth.ts:

MaEarthUpdateComment → direct replacement

MaEarth field post field Notes
body text Direct match
subject: { uri, cid } replies[].root / replies[].parent Both are strongRefs pointing back to the entity being commented on
createdAt createdAt Identical

By adopting org.hypercerts.claim.post, MaEarth's update/comment pattern gains rich text (facets), embeds, tags, attachments, multi-language support, and content labels — all for free.

MaEarthPostMetadata → mostly replaceable

MaEarth field post field Notes
embeds: External[] embed (singular) + attachments Primary media goes in embed, overflow URLs go in attachments as org.hypercerts.defs#uri
createdAt createdAt Identical

MaEarth currently uses an array of AppBskyEmbedExternal.External for multiple link previews. With this schema, the primary embed goes in embed and additional URLs go in attachments.

Test plan

  • npm run check passes (gen-api, lint, typecheck, build, test)
  • Review schema design against AT Protocol conventions
  • Validate MaEarth adoption mapping

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features
    • Added support for posts on hypercerts records — create updates, reports, and comments with rich text, replies, embeds, labels, tags, attachments, and timestamps.
  • Documentation
    • Public schema and ERD updated to document the new post record and reply reference structure.
  • Chores
    • Added generated type shims to support embed and label types.

@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented Feb 24, 2026

🦋 Changeset detected

Latest commit: 08e3b3c

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@hypercerts-org/lexicon Minor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Feb 24, 2026

📝 Walkthrough

Walkthrough

Adds a new org.hypercerts.claim.post lexicon (JSON and SCHEMAS.md entry), a changeset for a minor release, TypeScript shims for external embed/label lexicons, and an ERD update describing the new post entity.

Changes

Cohort / File(s) Summary
Changeset & Release
.changeset/add-post-lexicon.md
New changeset requesting a minor bump for @hypercerts-org/lexicon describing the post lexicon addition.
Lexicon JSON & Docs
lexicons/org/hypercerts/claim/post.json, SCHEMAS.md
Added org.hypercerts.claim.post lexicon and SCHEMAS.md entry: post record with text, facets, replies (replyRef), embed, labels, tags, attachments, createdAt, plus replyRef defs.
TypeScript Type Shims
scripts/create-shims.sh, generated/types/...
Script added to create TS shims for external lexicons; new generated type re-exports for app.bsky.embed.* and com.atproto.label.defs.
ERD
ERD.puml
Added post dataclass and relationships for replies fields in the ERD diagram.

Sequence Diagram(s)

(silently omitted — changes are lexicon/schema/type additions without multi-component runtime control flow)

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Suggested reviewers

  • aspiers
  • s-adamantine

Poem

🐇 A tiny post hops into place,
With replies, tags, and a gentle embrace,
Shims stitch the types, schemas take flight—
Records now chatter into the night.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Lexicons Styleguide Compliance ⚠️ Warning The post.json lexicon has 11 documented styleguide violations including 6 critical errors with unresolved external AT Protocol references and missing constraints. Document intentional deviations for external references, add maxLength constraints to facets array, enhance replyRef field descriptions, and clarify datetime field validation expectations.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Lexicon Documentation Sync ✅ Passed Pull request successfully maintains synchronization between post.json, SCHEMAS.md, ERD.puml, and README.md with all required lexicon fields and relationships properly documented.
Title check ✅ Passed The title clearly identifies the main change: adding a new lexicon org.hypercerts.claim.post. It is concise, specific, and accurately reflects the primary objective of the changeset.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/add-post-lexicon

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (3)
lexicons/org/hypercerts/claim/post.json (2)

71-78: replyRef def and its properties are missing description fields.

The replyRef object def has no top-level description, and neither root nor parent carry descriptions. This is inconsistent with every other def in the repository (e.g., org.hypercerts.claim.activity#contributor, org.hypercerts.claim.evaluation#score) and causes empty cells in the SCHEMAS.md replyRef table.

✏️ Suggested addition
    "replyRef": {
      "type": "object",
+     "description": "Identifies the thread root and direct parent that this post is replying to.",
      "required": ["root", "parent"],
      "properties": {
-       "root": { "type": "ref", "ref": "com.atproto.repo.strongRef" },
-       "parent": { "type": "ref", "ref": "com.atproto.repo.strongRef" }
+       "root": { "type": "ref", "ref": "com.atproto.repo.strongRef", "description": "The root record of the thread being replied to." },
+       "parent": { "type": "ref", "ref": "com.atproto.repo.strongRef", "description": "The direct parent record being replied to (may be the same as root for top-level replies)." }
      }
    }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@lexicons/org/hypercerts/claim/post.json` around lines 71 - 78, Add missing
description fields for the replyRef definition and its properties so schema docs
render correctly: update the replyRef object (symbol: replyRef) to include a
top-level "description" summarizing its purpose (e.g., points to the root and
parent posts of a reply) and add "description" entries for "root" and "parent"
properties (symbols: root, parent) explaining that "root" is the original
thread/root record strongRef and "parent" is the immediate replied-to strongRef;
keep descriptions concise and consistent with other defs like contributor/score.

30-39: Add a description to the embed field.

Every other field in this lexicon has a description, but embed does not — this propagates as an empty cell in SCHEMAS.md. A brief description like the one used in app.bsky.feed.post would make the intent clear (e.g., distinguishing why embed is singular while attachments is plural).

✏️ Suggested addition
          "embed": {
            "type": "union",
+           "description": "The primary featured media for this post (images, video, external link, or quoted record). At most one embed per post, matching Bluesky conventions.",
            "refs": [
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@lexicons/org/hypercerts/claim/post.json` around lines 30 - 39, The lexicon's
"embed" field (type "union" with refs
["app.bsky.embed.images","app.bsky.embed.video","app.bsky.embed.external","app.bsky.embed.record","app.bsky.embed.recordWithMedia"])
is missing a description; add a concise "description" property for "embed"
(similar to the description used in app.bsky.feed.post) that explains this field
holds at most one embedded object and clarifies why "embed" is singular while
"attachments" is plural so the intent is clear in generated documentation.
scripts/create-shims.sh (1)

28-70: New embed shims are inconsistent with the existing richtext-facet shim — namespace re-export is missing.

The existing app/bsky/richtext/facet.ts shim (lines 17-18) both imports the namespace and re-exports it:

import type { AppBskyRichtextFacet } from '@atcute/bluesky';
export type { AppBskyRichtextFacet };   // ← namespace re-export

The five new embed shims only export individual members and omit the export type { ... } namespace re-export. If any generated code does import { AppBskyEmbedImages } from './embed/images' (namespace-style access), it will fail to resolve.

✏️ Suggested fix — add namespace re-exports (shown for images.ts; apply to all five)
 import type { AppBskyEmbedImages } from '@atcute/bluesky';
+export type { AppBskyEmbedImages };
 export type Main = AppBskyEmbedImages.Main;
 export type Image = AppBskyEmbedImages.Image;
 export type View = AppBskyEmbedImages.View;
 export type ViewImage = AppBskyEmbedImages.ViewImage;
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@scripts/create-shims.sh` around lines 28 - 70, The new embed shims import the
upstream namespaces (e.g. AppBskyEmbedImages, AppBskyEmbedVideo,
AppBskyEmbedExternal, AppBskyEmbedRecord, AppBskyEmbedRecordWithMedia) but fail
to re-export the namespace itself, breaking consumers that do namespace-style
imports; for each shim (images.ts, video.ts, external.ts, record.ts,
recordWithMedia.ts) add a namespace re-export line after the import — e.g. add
"export type { AppBskyEmbedImages };" (and the corresponding symbol for each
file: AppBskyEmbedVideo, AppBskyEmbedExternal, AppBskyEmbedRecord,
AppBskyEmbedRecordWithMedia) while keeping the existing individual export type
lines.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@lexicons/org/hypercerts/claim/post.json`:
- Around line 1-80: ERD.puml is missing the new post entity for the lexicon
org.hypercerts.claim.post; update ERD.puml to add a "post" entity that models
the record (omit the cosmetic facets field), and add relationships from replyRef
→ com.atproto.repo.strongRef and attachments → org.hypercerts.defs#uri and
org.hypercerts.defs#smallBlob (use the replyRef name and attachments array to
guide the relationship cardinality/labels). Ensure the entity name references
org.hypercerts.claim.post (or simply "post") and include links to
com.atproto.repo.strongRef and org.hypercerts.defs entries per project ERD
style.

In `@SCHEMAS.md`:
- Around line 252-255: The schema table for the replyRef properties is missing
descriptions: update the Description cells for the `root` and `parent`
properties (the two `ref` fields) to clearly state their meaning and usage —
e.g., `root` is a reference to the top-level thread/root message ID and `parent`
is a reference to the immediate parent message ID (used to reconstruct reply
hierarchy); ensure the wording matches other lexicon defs in SCHEMAS.md and
mention they are message refs/IDs so generated docs are informative.
- Around line 240-244: Fix two copy issues in the post lexicon table: add the
missing period after the abbreviation in the `facets` description so "etc)"
becomes "etc.)", and populate the empty description cell for the `embed` row
with a short explanatory sentence (for example: "Featured embed for this post —
images, video, external link, or quoted record."). Update the table rows for
`facets` and `embed` accordingly so the generated docs include the corrected
punctuation and the new embed description.

---

Nitpick comments:
In `@lexicons/org/hypercerts/claim/post.json`:
- Around line 71-78: Add missing description fields for the replyRef definition
and its properties so schema docs render correctly: update the replyRef object
(symbol: replyRef) to include a top-level "description" summarizing its purpose
(e.g., points to the root and parent posts of a reply) and add "description"
entries for "root" and "parent" properties (symbols: root, parent) explaining
that "root" is the original thread/root record strongRef and "parent" is the
immediate replied-to strongRef; keep descriptions concise and consistent with
other defs like contributor/score.
- Around line 30-39: The lexicon's "embed" field (type "union" with refs
["app.bsky.embed.images","app.bsky.embed.video","app.bsky.embed.external","app.bsky.embed.record","app.bsky.embed.recordWithMedia"])
is missing a description; add a concise "description" property for "embed"
(similar to the description used in app.bsky.feed.post) that explains this field
holds at most one embedded object and clarifies why "embed" is singular while
"attachments" is plural so the intent is clear in generated documentation.

In `@scripts/create-shims.sh`:
- Around line 28-70: The new embed shims import the upstream namespaces (e.g.
AppBskyEmbedImages, AppBskyEmbedVideo, AppBskyEmbedExternal, AppBskyEmbedRecord,
AppBskyEmbedRecordWithMedia) but fail to re-export the namespace itself,
breaking consumers that do namespace-style imports; for each shim (images.ts,
video.ts, external.ts, record.ts, recordWithMedia.ts) add a namespace re-export
line after the import — e.g. add "export type { AppBskyEmbedImages };" (and the
corresponding symbol for each file: AppBskyEmbedVideo, AppBskyEmbedExternal,
AppBskyEmbedRecord, AppBskyEmbedRecordWithMedia) while keeping the existing
individual export type lines.

ℹ️ Review info

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2bb200c and d597c87.

📒 Files selected for processing (4)
  • .changeset/add-post-lexicon.md
  • SCHEMAS.md
  • lexicons/org/hypercerts/claim/post.json
  • scripts/create-shims.sh

Comment on lines +1 to +80
{
"lexicon": 1,
"id": "org.hypercerts.claim.post",
"defs": {
"main": {
"type": "record",
"description": "Record containing a hypercerts post, e.g. an update, a report, a comment.",
"key": "tid",
"record": {
"type": "object",
"required": ["text", "createdAt"],
"properties": {
"text": {
"type": "string",
"maxLength": 50000,
"maxGraphemes": 5000,
"description": "The primary post content. May be an empty string, if there are embeds."
},
"facets": {
"type": "array",
"description": "Annotations of text (mentions, URLs, hashtags, etc)",
"items": { "type": "ref", "ref": "app.bsky.richtext.facet" }
},
"replies": {
"type": "array",
"description": "The subjects that this post is in reply to. Each entry identifies a thread root and the direct parent being replied to.",
"items": { "type": "ref", "ref": "#replyRef" },
"maxLength": 10
},
"embed": {
"type": "union",
"refs": [
"app.bsky.embed.images",
"app.bsky.embed.video",
"app.bsky.embed.external",
"app.bsky.embed.record",
"app.bsky.embed.recordWithMedia"
]
},
"labels": {
"type": "union",
"description": "Self-label values for this post. Effectively content warnings.",
"refs": ["com.atproto.label.defs#selfLabels"]
},
"tags": {
"type": "array",
"description": "Additional hashtags, in addition to any included in post text and facets.",
"maxLength": 8,
"items": { "type": "string", "maxLength": 640, "maxGraphemes": 64 }
},
"attachments": {
"type": "array",
"description": "The files, documents, or external references attached to this post.",
"items": {
"type": "union",
"refs": [
"org.hypercerts.defs#uri",
"org.hypercerts.defs#smallBlob"
]
},
"maxLength": 100
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "Client-declared timestamp when this post was originally created."
}
}
}
},
"replyRef": {
"type": "object",
"required": ["root", "parent"],
"properties": {
"root": { "type": "ref", "ref": "com.atproto.repo.strongRef" },
"parent": { "type": "ref", "ref": "com.atproto.repo.strongRef" }
}
}
}
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# First, check if ERD.puml exists and its current state
if [ -f "ERD.puml" ]; then
  echo "=== ERD.puml exists ==="
  wc -l ERD.puml
  echo ""
  echo "=== Checking for post-related references in ERD.puml ==="
  grep -n "post\|Post" ERD.puml || echo "(no 'post' references found)"
else
  echo "ERD.puml does not exist"
fi

echo ""
echo "=== Checking if ERD.puml was modified in this PR ==="
git diff --name-only 2>/dev/null | head -20

echo ""
echo "=== Repository structure (checking for diagram files) ==="
find . -maxdepth 2 -name "*.puml" -o -name "*ERD*" -o -name "*erd*" 2>/dev/null | head -20

Repository: hypercerts-org/hypercerts-lexicon

Length of output: 411


🏁 Script executed:

#!/bin/bash
# Check the git log to see recent changes to ERD.puml
echo "=== Recent git history for ERD.puml ==="
git log --oneline --all -- ERD.puml 2>/dev/null | head -10 || echo "No git history available"

echo ""
echo "=== Files in the repository root ==="
ls -la | head -30

Repository: hypercerts-org/hypercerts-lexicon

Length of output: 2522


🏁 Script executed:

#!/bin/bash
# Read the ERD.puml file to see its current structure
echo "=== ERD.puml content ==="
cat -n ERD.puml

Repository: hypercerts-org/hypercerts-lexicon

Length of output: 9787


🏁 Script executed:

#!/bin/bash
# Check the git diff for the commit that added post.json to see if ERD.puml was modified
echo "=== Git diff for d597c87 (post.json commit) ==="
git show d597c87 --stat

echo ""
echo "=== Did post.json commit touch ERD.puml? ==="
git show d597c87 --name-only | grep -i "erd\|post"

Repository: hypercerts-org/hypercerts-lexicon

Length of output: 7447


Add post entity to ERD.puml.

The new post lexicon introduces a record type with relationships (replyRef → com.atproto.repo.strongRef, attachments → org.hypercerts.defs#{uri,smallBlob}), but ERD.puml was not updated. Add the post entity and its relationships to the diagram, omitting the facets field (which is a cosmetic annotation). Per coding guidelines, ERD.puml must reflect all entity relationships whenever lexicons are added or modified.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@lexicons/org/hypercerts/claim/post.json` around lines 1 - 80, ERD.puml is
missing the new post entity for the lexicon org.hypercerts.claim.post; update
ERD.puml to add a "post" entity that models the record (omit the cosmetic facets
field), and add relationships from replyRef → com.atproto.repo.strongRef and
attachments → org.hypercerts.defs#uri and org.hypercerts.defs#smallBlob (use the
replyRef name and attachments array to guide the relationship
cardinality/labels). Ensure the entity name references org.hypercerts.claim.post
(or simply "post") and include links to com.atproto.repo.strongRef and
org.hypercerts.defs entries per project ERD style.

Comment thread SCHEMAS.md Outdated
Comment thread SCHEMAS.md Outdated
@holkexyz
Copy link
Copy Markdown
Member Author

According to my investigation the Style Guide Check errors are false positives...

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
ERD.puml (1)

350-351: Consider modeling replies as a generic strongRef relationship.
replies is defined via replyRefcom.atproto.repo.strongRef, which isn’t limited to just activities/collections. If replies can target other records (e.g., posts), the ERD may be misleading. Consider pointing to a generic strongRef (or adding additional relationships) to match the schema.

As per coding guidelines, “When ERD.puml is modified, verify that all relationships shown are valid based on JSON lexicon schemas.”

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@ERD.puml` around lines 350 - 351, The ERD currently maps post::replies to
specific targets (activity, collection) but the schema defines replies via
replyRef -> com.atproto.repo.strongRef and can target arbitrary records; update
ERD.puml so post::replies points to a generic strongRef entity (or add explicit
additional relationships) instead of only activity and collection to match
replyRef/com.atproto.repo.strongRef in the JSON lexicon and ensure every shown
relationship is validated against the schema.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@ERD.puml`:
- Around line 350-351: The ERD currently maps post::replies to specific targets
(activity, collection) but the schema defines replies via replyRef ->
com.atproto.repo.strongRef and can target arbitrary records; update ERD.puml so
post::replies points to a generic strongRef entity (or add explicit additional
relationships) instead of only activity and collection to match
replyRef/com.atproto.repo.strongRef in the JSON lexicon and ensure every shown
relationship is validated against the schema.

ℹ️ Review info

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d597c87 and e25ef20.

📒 Files selected for processing (4)
  • ERD.puml
  • SCHEMAS.md
  • lexicons/org/hypercerts/claim/post.json
  • scripts/create-shims.sh

"@hypercerts-org/lexicon": minor
---

Add org.hypercerts.claim.post lexicon for updates, reports, and comments on hypercerts records
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not sure about the .claim. domain because this can point to many things, including evidence, that aren't directly the claim

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, I feel like the whole folder structure isn't super ideal yet, but don't have a very clear alternative.

regarding evidence, that is claim.attachment, so claim.post would for that. I agree with you in general though... will think about the folder structure more

"type": "object",
"required": ["text", "createdAt"],
"properties": {
"text": {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The description is in opposition with required. Requiring an empty string doesn't make much sense

"maxLength": 8,
"items": { "type": "string", "maxLength": 640, "maxGraphemes": 64 }
},
"attachments": {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

and this is functionally different from embeds?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, there is just one main embed, but if you want to add just more files, you can with the attachment.

@aspiers aspiers force-pushed the feat/add-post-lexicon branch from 629947d to 6f5e5e9 Compare February 26, 2026 16:28
@aspiers aspiers marked this pull request as draft February 27, 2026 14:57
@aspiers
Copy link
Copy Markdown
Contributor

aspiers commented Feb 27, 2026

Discussed and agreed to hold fire for now as we might just reuse app.bsky.feed.post and leaflet

@holkexyz
Copy link
Copy Markdown
Member Author

holkexyz commented Apr 1, 2026

@bitbeckers how did you implement updates in MaEarth?

holkexyz and others added 4 commits April 2, 2026 18:34
Add a post record type for updates, reports, and comments on hypercerts
records. Modeled after app.bsky.feed.post with hypercerts-specific
extensions (multi-reply, attachments).

Also adds type shims for app.bsky.embed.* and com.atproto.label.defs
external lexicon references.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add descriptions to embed, replyRef, root, and parent fields
- Fix "etc)" to "etc.)" in facets description
- Add namespace re-exports to embed/label type shims for consistency
- Add post entity and relationships to ERD.puml
- Regenerate SCHEMAS.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…AS.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@aspiers aspiers force-pushed the feat/add-post-lexicon branch from 6f5e5e9 to 08e3b3c Compare April 2, 2026 18:36
@aspiers aspiers changed the base branch from develop to main April 2, 2026 18:36
@aspiers aspiers changed the title feat: add org.hypercerts.claim.post lexicon NON-BREAKING: add org.hypercerts.claim.post lexicon Apr 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants