| … | … | @@ -3,13 +3,15 @@ |
| 3 | 3 | The **full-node** that composes a Favela community's two substrates (see |
| 4 | 4 | [`favela-web/spec/lens-export.md`](../favela-web/spec/lens-export.md) §3): |
| 5 | 5 | |
| 6 | | 1. the community's **co-owned atproto DID** — an [hyper-proto-peer](../hyper-proto-peer)-style identity |
| 6 | 1. the community's **co-owned atproto DID** — an [hyper-proto-peer](../hyper-proto-peer)-style |
| 7 | identity |
| 7 | 8 | whose admins co-sign its repo ([atproto-room](../atproto-room): `StateBaseV3` admins + `Lease` + |
| 8 | 9 | `Signer` / `LabelRoom` = the **multiswarm-PDS pattern**). Owns/signs the community's |
| 9 | 10 | `app.bsky.feed.generator` + `app.bsky.labeler.service` records and its `com.atproto.label` labels. |
| 10 | 11 | It is the **owner** of those records; the service each one points at is a `did:web`, not this DID |
| 11 | 12 | (see Notes). |
| 12 | | 2. the keyless **CommunityRoom** roster ([favela-community](../favela-community)) — the MEMBER audience |
| 13 | 2. the keyless **CommunityRoom** roster ([favela-community](../favela-community)) — the MEMBER |
| 14 | audience |
| 13 | 15 | [favela-web](../favela-web) reads. The room's **mods == the DID's admins** (one attested set). |
| 14 | 16 | |
| 15 | 17 | A community is thus a **co-owned did:plc**: to bsky it's one account; behind it, N admins co-author with no |
| … | … | @@ -18,9 +20,11 @@ single point of key custody — exactly how a multi-device hyper-proto-peer pres |
| 18 | 20 | ## Which stack this belongs to |
| 19 | 21 | |
| 20 | 22 | The atproto / lens-export stack, alongside [favela-community](../favela-community) — not the |
| 21 | | markdown-record stack, whose rooms live in `favela-peer` on autobee and share none of this. |
| 23 | markdown-record stack, whose rooms live in [favela-peer](../favela-peer) on autobee and share none |
| 24 | of this. |
| 22 | 25 | |
| 23 | | Nothing imports this package. `serve.js` runs as a pgh daemon on tabertron, and what it uniquely holds |
| 26 | Nothing imports this package. `serve.js` runs as a [pgh](../pgh) daemon on tabertron, and what it |
| 27 | uniquely holds |
| 24 | 28 | is a **writable** store for `loser-club` — the one that could add or ban a member. It is not what keeps |
| 25 | 29 | the roster readable: measured 2026-09-20, favela-web on both tabertron and stortron holds its own |
| 26 | 30 | keyless replica of that room from its shipped default, stortron serves the live feed skeleton from |