| … | … | @@ -20,6 +20,32 @@ running code: |
| 20 | 20 | The room is the container and a personal feed is a one-writer room (`SOCIAL-MODEL.md`), so a fission |
| 21 | 21 | that keeps the repo as the container has **moved** the atproto shape rather than left it. |
| 22 | 22 | |
| 23 | ## 1.5 The component family |
| 24 | |
| 25 | Named 2026-09-05. The daemon/UI split is deliberate, so that clients can be interface-agnostic. |
| 26 | |
| 27 | | | role | |
| 28 | |---|---| |
| 29 | | **`favela-peer`** | the daemon — rooms, records, identity, admission. Hosts `favela-markdown` and exposes `project` as an op | |
| 30 | | **`favela-markdown`** | the codec + projections. **A library**: no storage, no network, no daemon (`library.md` §1) | |
| 31 | | **`favela-surface`** | ★ **new** — the SSR renderer for the room model: rooms, records, edges, membership | |
| 32 | | **`favela-android`** | the shell + capability bridge. **Unchanged** — it displays HTML (hyper-social #45) | |
| 33 | | `favela-web` | keeps its name and its job: the **atproto** appview | |
| 34 | |
| 35 | **Why `favela-surface`.** hyper-social #30's recurring lesson was *"every surface we control reported |
| 36 | success… the truth was only visible on the **product surface**"*. The name says what the thing is |
| 37 | for. Checked against the tree first: `view` is taken twice over (an autobase's linearized view, and |
| 38 | an atproto AppView — 32 files), as are `lens`, `scope` and `front`; `surface` appears only in prose. |
| 39 | |
| 40 | ⛔ **One renderer, not N.** #45 measured the alternative: 35 render functions / 1771 lines in |
| 41 | `render.js` plus a 483-line stylesheet, and **715 lines of React Native UI built 2026-08-07 and |
| 42 | reversed 2026-08-11** — four days each way. SSR HTML is the cheapest cross-surface artifact because |
| 43 | every target ships an HTML renderer; components trade one artifact for N permanent ports. |
| 44 | |
| 45 | ⚠ **The measured cost of `favela-surface` is the ~120 DID-keyed call sites** (`identity.md` §10 #3) — |
| 46 | counted by grep, never audited. And #45's caution applies: *"if the markup is thrown away, the |
| 47 | rationale must survive it — the comments encode the outages that caused each choice."* |
| 48 | |
| 23 | 49 | ## 2. The measured baseline |
| 24 | 50 | |
| 25 | 51 | What is actually there, at L0–L2 of the layer map (`SOCIAL-MODEL.md` §2.5): |