Dogfooding: Margin as the First Experiment
draft first cut, 2026-09-13.
This compendium is now being reviewed with a tool breadcrumbs had no part in building, no partnership with, and no advance knowledge of — and it took zero integration work to make that possible.
What margin.at actually is
Margin is a real Chrome/Firefox extension: install
it, and it lets you highlight or comment on any web page, writing what
you write as a real record in your own AT Protocol personal data
server — not to margin.at’s own database. Its lexicon (at.margin.*)
defines at.margin.note, a W3C Web Annotation Data Model-compliant
record with a motivation (commenting, questioning, assessing,
highlighting, and others), a target (the URL being annotated, plus
a W3C selector — an exact text quote, a character range, or a
CSS/XPath/fragment locator pinning down where on the page), and a
body carrying the actual comment. Replies thread via a sibling
at.margin.reply record. Like every other record this project deals
in, it is signed, portable, and lives wherever its author’s own
identity lives — not in margin.at’s infrastructure.
Why it worked immediately
Torsten installed the extension and asked whether it could double as a
review tool for this compendium. It already can, and needed nothing
built to prove that much: an at.margin.note’s target.source field
is just a URL, and Constellation — the same network-wide backlink
index this compendium’s own /whois page already uses to find who has
acknowledged the issuer — indexes it automatically, the same way it
indexes anything else on the network:
getBacklinks?subject=https://docs.breadcrumbs.run/<chapter>.html
&source=at.margin.note:target.source
That query works today, verified live. No API key exchanged with
margin.at, no schema registered anywhere, no conversation between the
two projects’ authors. A facilitator-only view in trail-of-crumbs
(/workbench/annotations) surfaces exactly that query per compendium
page, and a local script (compendium/scripts/pull-annotations.mjs)
turns a found annotation into a suggested <mark>-wrapped prose
change, feeding straight into REVIEW.md’s own draft → mark → review →
finalize cycle — the same reading-pass discipline every other chapter
in this book already goes through.
The point worth making explicit
Domains & Lexicon Authority argues breadcrumbs should co-evolve with other projects’ schemas rather than compete with them, and that a real, DNS-verifiable NSID authority makes a schema independently checkable by anyone, with nobody’s permission required. Margin is that same thesis seen from the other side — not breadcrumbs publishing something others can build on, but breadcrumbs consuming someone else’s public schema without asking. Two independent projects, each just writing plain, well-formed, public AT Protocol records over a shared open network, compose for free. Coopetition isn’t a hoped-for future benefit here; it’s already load-bearing for how this very compendium gets reviewed.
There’s a second, more literal kind of dogfooding underneath that: breadcrumbs exists to make provenance — who said what, when, attested by whom — legible instead of collapsed into an opaque verdict. The review process for the document making that argument is now itself a set of small, individually attested, PDS-anchored comments. The mechanism and the subject are the same shape.
One honest limitation
A margin.at annotation anchors to an exact span of text via its
TextQuoteSelector. This compendium’s own mark → finalize cycle
rewrites or strips exactly that text as a chapter matures — so an
annotation left during a draft or pending read can go stale once
the prose underneath it changes; the selector has no way to relocate
itself. The page-level URL anchor doesn’t have this problem — “what has
anyone said about this page” always resolves — but a specific
in-paragraph position can drift out from under a comment. This isn’t a
gap specific to this integration: any web-annotation tool anchored to
a living document has the identical fragility (Hypothesis included).
Worth living with, not solving structurally.
A second limitation, more fundamental than the first: at.margin.note
has no privacy field at all. Every annotation is public, forever,
tied to the commenter’s real identity — fine for a settled opinion,
a real ask for a half-formed reaction to a draft. AT Protocol Spaces
(gated records, already scoped for this project’s own future paper-
review pipeline — breadcrumbs-dotv) could eventually solve this for
reviewers who’d rather comment privately, but not automatically: margin.at
itself would need to support writing into a gated Space, or this
compendium would need its own separate, Spaces-based comment mechanism
instead. Captured as breadcrumbs-p3xq, not built.