hypercerts-org / hypercerts-org/hypercerts-lexicon

Expand app.certified.graph.* with the rest of the social-graph primitives

Open
#210 4 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement Product: lexicons
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

  1. subject typing: Bluesky's graph records use a raw format: did string. app.certified already has app.certified.defs#did (used by badge.award); these can either reuse that for in-namespace consistency or stay as raw format: did strings for byte-level parity with bsky. Worth picking one direction up front.
  2. via becomes meaningful once starterpack exists. Today it's a forward-compatibility placeholder (which is exactly what bsky did when they introduced the field).
  3. Mute is intentionally out of scope — Bluesky doesn't ship a mute lexicon either; mutes are AppView-private state, not public graph records.
  4. 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

  1. block (smallest, highest safety value, same shape as follow)
  2. list + listitem (unlocks the rest)
  3. listblock + starterpack (depend on list)
  4. 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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.