OverviewFilesCommitsIssuesDocsReleasesPeers

hyper-social commits / fd22cff

docs/observed-interactions: settle N, the actor table and un-like; name the accumulate/store split
N=1000, per-subject interning, tombstone for un-like — each with the reason rather than the number. And the split that shapes the build: ap-bridge accumulates and serves, the peer asks and stores. It holds a peers feed but is not a writer on it, so it never writes a peers pointer. Two jobs, two formats — the codec is for the archive, not for a buffer that gets drained and pruned. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
fd22cffc3398b43cc2253d7b77b44f2b54c357d6
by plankatron <fleeky@gmail.com> · 2026-09-16T00:25:41.000Z

Changed files (1) +28 -16

docs/OBSERVED-INTERACTIONS.md +28 -16
……@@ -191,19 +191,31 @@ instead of a datacentre. It also names the dependency we are currently paying:
191191`hyper-proto-peer/lib/notifications.js` proxies `listNotifications` to bsky's AppView — a favela user
192192learns somebody interacted with them by asking Bluesky's servers.
193193
194## 8. Open
195
1961. **Segment size N.** Tail-rewrite cost against pointer size. Wants a measurement of real inbound
197 rates, which at current volume is single digits — so any N is fine and the honest answer is to pick
198 one and revisit if it ever matters.
1992. **One actor table, or one per subject?** Shared is ~3x smaller (the same people like many of your
200 posts) and makes one archive file depend on another, which an archive has to answer for. The codec
201 currently interns per-subject.
2023. **Un-like.** A tombstone tuple, or rewrite the tail segment? Sealed segments say tombstone; §4.3 of
203 `interaction.md` already says reversal is a tombstone everywhere else.
2044. ~~**Who writes it.**~~ **CLOSED 2026-09-15 (operator): the writer is `ap-bridge`. favela-web is
205 deprecated.** It already holds the properties the ingest needs — a socket that stays up, a swarm
206 membership, N admitted peers, and a registration that binds a peer's identity root to a feed key.
207 The ingest code currently lives in favela-web (`spacedust.js`, `link-drain.js`, `retention.js`) and
208 MOVES rather than gets rewritten; `link-drain.js` is already pure + injected, so the sink and the
209 store are parameters at the new home.
194## 8. Settled
195
1961. ~~**Segment size N.**~~ **1,000 tuples.** Inbound volume is single digits, so any N works and the
197 honest choice is the one that makes a sealed segment ~6 KB and one log entry per thousand
198 observations. Revisit only on a measurement.
1992. ~~**One actor table, or per subject?**~~ **Per subject.** It already delivers the measured 5.6x. A
200 shared table is worth roughly another 3x and makes one archive file depend on another, which an
201 archive has to answer for — not a commitment to make before the win is measured.
2023. ~~**Un-like.**~~ **A tombstone tuple.** Sealed segments cannot be rewritten by construction, and
203 `interaction.md` §4.3 already makes reversal a tombstone everywhere else: absence is ambiguous in a
204 replicated log, so a retraction has to be positive evidence.
205
206## 9. The split — who accumulates, who stores
207
208⛔ **ap-bridge ACCUMULATES AND SERVES. The peer ASKS AND STORES.** ap-bridge holds a registered peer's
209feed but is **not a writer on it**, and authoring into somebody's feed is what the model forbids
210(#61 §4). So it never writes a peer's pointer or segments.
211
212⇒ Two different shapes for two different jobs, and conflating them would be the mistake:
213
214| | ap-bridge | the peer |
215|---|---|---|
216| role | a serving buffer until peers collect | the archive |
217| lifetime | bounded; prunable | durable |
218| format | append-only rows + a cursor | sealed segments, interned, delta-encoded (§4.2) |
219
220⚠ **The codec is for the PEER side.** Compression earns its place where data is kept for ever, not in
221a buffer that is drained and pruned. Using it in both would be symmetry for its own sake.