hypercerts-org / hypercerts-org/hypercerts-lexicon
Expand app.certified.graph.* with the rest of the social-graph primitives
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 12
- Forks
- 8
- Avg merge
- 1h 9m
- Merged PRs (30d)
- 3
Description
Context
Discovered while implementing app.certified.graph.follow in #209. That PR adds only the follow primitive; this issue tracks the additional lexicons a real social graph would need.
The recommendation is to mirror Bluesky's app.bsky.graph.* shape for each, the same way app.certified.graph.follow mirrors app.bsky.graph.follow — so feed-builders and view services that already index Bluesky's graph can index ours with the same logic.
Recommended additions
| Proposed NSID | Bluesky parallel | Why |
|---|---|---|
app.certified.graph.block |
app.bsky.graph.block |
Symmetric counterpart to follow — minimum bar for safety/moderation. Same shape: subject: did, createdAt. |
app.certified.graph.list + app.certified.graph.listitem |
app.bsky.graph.list + listitem |
Curated lists of accounts (mod lists, curate lists, reference lists). Required for starter packs, mute/block lists, feed audiences, etc. |
app.certified.graph.listblock |
app.bsky.graph.listblock |
Block-by-list — subscribe to someone else's block list. Multiplies moderation reach without per-account block records. |
app.certified.graph.starterpack |
app.bsky.graph.starterpack |
The natural target for the optional via strongRef on app.certified.graph.follow — wraps a list + a feed-gen ref into a shareable onboarding bundle. |
app.certified.graph.verification |
app.bsky.graph.verification |
Issuer-signed verified-account claims; complements the existing app.certified.badge.* and app.certified.link.evm identity primitives. |
Notes / open questions
subjecttyping: Bluesky's graph records use a rawformat: didstring.app.certifiedalready hasapp.certified.defs#did(used bybadge.award); these can either reuse that for in-namespace consistency or stay as rawformat: didstrings for byte-level parity with bsky. Worth picking one direction up front.viabecomes meaningful oncestarterpackexists. Today it's a forward-compatibility placeholder (which is exactly what bsky did when they introduced the field).- Mute is intentionally out of scope — Bluesky doesn't ship a
mutelexicon either; mutes are AppView-private state, not public graph records. - Don't conflate with
org.hypercerts.context.acknowledgement— that's a bidirectional "is this record part of that context?" primitive (e.g. "is my activity in your collection?"), not a social-graph follow. Different question, different indexers.
Suggested sequencing
block(smallest, highest safety value, same shape asfollow)list+listitem(unlocks the rest)listblock+starterpack(depend onlist)verification(independent — can land any time)
Each can ship as its own PR with the same checklist that #209 followed (lexicon JSON → gen-api → tests → SCHEMAS.md → README + SKILL + ERD updates → changeset).
Discovered-from: #209
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Review the existing app.certified.graph.follow implementation from #209 and the corresponding Bluesky graph lexicons first. Resolve the subject typing question, then work through the proposed block, list, listitem, listblock, starterpack, and verification additions in the suggested sequence. Done means each lexicon has JSON, gen-api output, tests, SCHEMAS.md, README, SKILL, ERD, and changeset updates.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- api, documentation, tooling
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100