OverviewFilesCommitsIssuesDocsReleasesPeers

favela-markdown commits / 934d37a

README: the package it describes has been shipped since 0.1.0
The file said "Design. Nothing is built." while the library was at 0.1.6 with seven modules, a four-command CLI and 77/77 tests (2432 asserts) passing, including the 36 markdown-strip conformance vectors. Two corrections beyond the status line. It named three downstream consumers — favela-web, atproto-room/lib/signer.js materialize() and ap-bridge/lib/as2-project.js. None of the three imports this package; grep over all three finds nothing. The real consumers are favela-peer (record, render, strip, reach) and favela-surface (render, uri). Rather than delete the claim, it is recorded as outstanding work: those projections still derive their own way, and that is a gap, not a description of today. And there is no "main" and no "exports" in package.json, so every consumer deep-imports favela-markdown/lib/*.js. That path IS the contract whether or not anyone wrote it down, so it is written down now, with the export table. spec/design.md still opens with "Status: design. Nothing built." — flagged in the README rather than edited, since it is a decision record and not a status page. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
934d37a8f1863cab75d9d087b8d2607a4d999a24
by plankatron <fleeky@gmail.com> · 2026-09-09T17:47:47.000Z

Changed files (1) +35 -4

README.md +35 -4
……@@ -23,17 +23,48 @@ never the hash**.
2323Parse markdown, one file per record, replication. **No MST, no DAG-CBOR, no byte-exact
2424CIDs.** Those are the bridge's problem.
2525
26## The surface
27
28⚠ There is no `main` and no `exports` — **consumers deep-import `favela-markdown/lib/*.js`**, and
29that path is the contract.
30
31| module | exports |
32|---|---|
33| `lib/record.js` | `parse`, `serialize`, `CANONICAL` — frontmatter + body, both directions |
34| `lib/strip.js` | `strip` — the projection down to plain text + facets |
35| `lib/render.js` | `render`, `embeds` — HTML, and the embeds a record names |
36| `lib/uri.js` | `parseUri`, `recordUri`, `userUri`, `blobUri` and their `is*` guards |
37| `lib/dialect.js` | the pinned micromark extension set, `isMention`, `isBlob`, `blobOid` |
38| `lib/reach.js` | `NETWORKS`, `maxReach` — how far a record is allowed to travel |
39| `lib/lint.js` | `lint` |
40
41`bin/favela-markdown` exposes `explain`, `lint`, `project` and `strip`.
42
2643## Status
2744
28Design. Nothing is built.
45**Working**, 0.1.6 — the design below shipped.
46
47- `npm test` — **77/77 tests, 2432 asserts pass** (brittle-bare, run 2026-09-09), including the
48 36 `markdown-strip` conformance vectors and a strip fuzzer.
49- Real consumers today are **`favela-peer`** (`record`, `render`, `strip`, `reach`) and
50 **`favela-surface`** (`render`, `uri`).
51
52⚠ The three consumers this file used to name — `favela-web`, `atproto-room/lib/signer.js`
53`materialize()` and `ap-bridge/lib/as2-project.js` — do **not** import this package. Those two
54projections still derive their own way; wiring them to this codec is outstanding work, not a
55description of today.
56
57⚠ `spec/design.md` still carries `**Status:** design. Nothing built.` in its header. That line is
58stale in the same way this file was.
59
60## Specs
2961
3062- `spec/design.md` — the decision and what it changes
3163- `spec/library.md` — this package's surface, its guarantees, and the sync obligations it inherits
3264- `spec/record-vocabulary.md` — the `net.favela.post` vocabulary
65- `spec/interaction.md`
3366- `spec/markdown-strip.md` + `spec/vectors/markdown-strip.json` — the projection down to
3467 plain text + facets, with 36 conformance vectors
3568
3669The vocabulary and strip specs moved here from `favela-web/spec/` on 2026-09-02: they
37describe the record, not the web app, and three separate consumers project from them —
38favela-web, the atproto signer (`atproto-room/lib/signer.js` `materialize()`) and
39`ap-bridge/lib/as2-project.js`.
70describe the record, not the web app.