OverviewFilesCommitsIssuesDocsReleasesPeers

favela-markdown commits / c940492

README: cut the remaining prose sections
The API section stays — it is the informational core. Replaced the two-properties and why-this-exists essays with a properties table and three lines of scope. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
c94049241bf065b715681c39cc6ce187b2ed3b75
by plankatron <fleeky@gmail.com> · 2026-09-09T21:34:34.000Z

Changed files (1) +12 -18

README.md +12 -18
……@@ -29,9 +29,8 @@ that path is the contract.
2929Hello.
3030```
3131
32JSON in the fence rather than YAML, because `audience: no` parsing as `false` is a privacy bug
33rather than a curiosity. One file rather than a sidecar, because one durable human-readable
34artifact is the property worth keeping.
32JSON in the fence, not YAML — `audience: no` parsing as `false` is a privacy bug. One file, not a
33sidecar.
3534
3635## Usage
3736
……@@ -168,24 +167,19 @@ favela-markdown lint <file> [--room KIND] # frontmatter, reach, directives, m
168167`--room` is `public | followers | members | dm`. `project` and `explain` are declared but **not
169168implemented** — both need a projection target.
170169
171## The two properties that govern everything
170## Properties
172171
173**Mutable** — a post is a file that can be rewritten. The content hash changes on every edit, so
174the rkey is the stable identity and the hash is not. Anything addressing a post by its hash breaks
175the first time someone fixes a typo.
172| | |
173|---|---|
174| **mutable** | a post is a file that can be rewritten; the rkey is the stable identity, never the hash |
175| **extensible** | new extensions never migrate old records; projections are derived on read |
176| **total** | every function returns on bad input; nothing here throws |
176177
177**Extensible** — a new extension never migrates old records, because projections are derived on
178read.
178Unknown frontmatter keys are preserved and sorted after `CANONICAL_KEYS`, so adding a field does
179not change the bytes of records that predate it.
179180
180## Why this exists
181
182atproto became favela's canonical P2P path by default rather than by decision. That pulled MST
183derivation, DAG-CBOR byte-exactness, lexicon field ceilings and blob CIDs sealed inside signed
184records into a network that only ever wanted to *interface* with atproto. That machinery is useful
185at the bridge layer; none of it belongs underneath every full peer.
186
187A full peer needs: parse markdown, one file per record, replicate. No MST, no DAG-CBOR, no
188byte-exact CIDs — those are the bridge's problem.
181Scope: parse markdown, one file per record. No MST, no DAG-CBOR, no byte-exact CIDs — those belong
182to the bridge layer, not under every peer.
189183
190184## Specs
191185