OverviewFilesCommitsIssuesDocsReleasesPeers

favela-markdown commits / 468fd46

spec: threading's spelling — frontmatter, room-relative, no CID
A reply lives in its parent's room, so the room segment is redundant. No CID in the reference: atproto's strongRef pins {uri,cid} but our record is mutable and the hash changes on edit, so a reply names the parent's identity rather than a version of it. The projection supplies the CID from the parent's stored projection - available because we stopped deriving. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
468fd46fda906cf199d051e0a0b0d642c81b36e3
by plankatron <fleeky@gmail.com> · 2026-09-05T23:34:29.000Z

Changed files (3) +27 -4

spec/design.md +2 -2
……@@ -211,8 +211,8 @@ mismatch class that caused the 2026-07-31 incidents.
211211 markdown image syntax. `record-vocabulary.md` §11 #2, still open. **The image/video downsampling
212212 work belongs here**, not in a composer: blob bytes are content-addressed and sealed into signed
213213 projections, so media policy is an authoring-time decision of the native record.
2142. **Threading natively** — `{root, parent}` is settled as canonical (§3.3), but its markdown-native
215 spelling is not.
2142. ~~**Threading natively**~~ **CLOSED 2026-09-05** — `record-vocabulary.md` §3.3: frontmatter,
215 room-relative `<collection>/<position>`, and **no CID** because the record is mutable.
2162163. **Community/list URIs** for `visibility` values (§11 #4).
2172174. **Reply visibility inheritance** (§11 #5) — almost certainly inherit, but the failure mode is
218218 publishing to the wrong people, so it must be explicit.
spec/library.md +2 -1
……@@ -323,7 +323,8 @@ OrgEventLog, and the autobee migration guard. It converts a silent fork into a l
3233231. **Embeds and attachments** across atproto blob refs, AS2 `attachment` and markdown image syntax
324324 (`record-vocabulary.md` §11 #2). The image/video downsampling work belongs here — media policy is
325325 an authoring-time decision of the native record, not a composer concern.
3262. **Threading's markdown-native spelling.** `{root, parent}` is settled as canonical (§3.3); how it
3262. ~~**Threading's markdown-native spelling**~~ **CLOSED 2026-09-05** — `record-vocabulary.md` §3.3.
327 Superseded text: `{root, parent}` is settled as canonical (§3.3); how it
327328 is written in a file is not.
3283293. **Community and list URIs** for `visibility` (§11 #4).
3293304. **Reply visibility inheritance** (§11 #5) — almost certainly inherit, but the failure mode is
spec/record-vocabulary.md +23 -1
……@@ -179,7 +179,29 @@ The old reasoning was that HTML → byte-offset facets is not reliably recoverab
179179relevant: nothing recovers facets from HTML, because facets are produced from the **markdown parse**,
180180which yields exact source ranges (§3.4). Storing them was solving a problem that the parse removes.
181181
182**Threading: `{root, parent}` is canonical, `inReplyTo` is derived.** Unchanged — atproto's pair
182**Threading: `{root, parent}` is canonical, `inReplyTo` is derived.** Its spelling is settled
1832026-09-05:
184
185```json
186"reply": { "root": "net.favela.post/3msdnle65lk22", "parent": "net.favela.post/3msdz9k2j1a04" }
187```
188
189- **Frontmatter, not body syntax.** A reply target is metadata, and putting it in prose would make
190 addressing parseable from loose text — the thing §4.1 refuses.
191- **Room-relative**, because a reply is written **in the room its parent lives in**
192 (`SOCIAL-MODEL.md` §4.1), so the room segment would be redundant in every native reply. Collection
193 is kept: a room holds more than one record collection.
194- ⛔ **No CID.** atproto's `strongRef` pins `{uri, cid}`; ours cannot, because §0.1 makes the record
195 **mutable** and the hash changes on every edit. A reply must survive its parent being edited, so it
196 names the parent's **identity**, never a version of it. The projection supplies the CID from the
197 parent's **stored** projection (§7.2) — available precisely because we stopped deriving.
198- **A foreign parent carries its origin URI as observed** (`interaction.md` §3.2) —
199 `at://…` or `https://…` — since there is no room-relative form for something that lives elsewhere.
200
201⚠ **There is no cross-room reply.** Replying means writing in the parent's room; if you cannot write
202there, you cannot reply. That is not a restriction added here, it is what §4.1 already means.
203
204Unchanged — atproto's pair
183205carries strictly more than AS2's single URI, and the projection down is trivial. Its markdown-native
184206spelling is still open (`design.md` §8 #2).
185207