The 3-day autonomous run closed Sunday → Tuesday with 13 PRs, 3 new public surfaces, and the v4 marketplace cutover staged for one click. Sprint 5 starts now.
## Theme
*Quietly seed federation while shipping more rooms.*
Three threads, in priority order:
1. **Phase 0 of the layered p2p approach** described in the [direction note](/notes/2026-04-28-p2p-direction). Define the AT Protocol Lexicon, write a Block→Lexicon converter, demo a round-trip. Not a commitment to migrate — a spike to learn whether the mapping fits. 2. **One new room.** [/pace](/pace) — the walking companion. Pattern fits beside /meditate (still) and /bath (color): the movement room. 3. **Polish + Manus QA** on last sprint's three new surfaces ([/snapshots](/snapshots), [/minted](/minted), [/bath/recent](/bath/recent)).
Daily Block cadence held throughout.
## What landed today (Day 1)
- **Sprint plan committed** at docs/plans/2026-04-28-sprint-federation-rooms.md — companion to the 3-day plan + the p2p direction note.
- **RFC 0004** at docs/rfcs/0004-pointcast-block-lexicon.md — sketch of the xyz.pointcast.block Lexicon. Field-by-field mapping of the existing Block schema to AT Protocol record shape. Six open questions documented (cross-node id collision, co-authorship, mutability vs. immutability of records, polymorphic companion ids, separate Lexicons for birthdays and TALKs, Voice Dispatches).
- **/pace** — the movement room. Three pace presets (slow 60 BPM, medium 90, brisk 120), Web Audio metronome with woodblock-shaped click + decay envelope, elapsed timer with start/pause/resume, opt-in step counter via DeviceMotionEvent. Background tints subtly with pace. localStorage-only — remembers your last pace. (Naming: /walk was already a PlayLayerSurface so the new room is /pace, which fits the BPM concept directly.)
## Day 2-5 ahead
- **Day 2** · Block-to-Lexicon converter script. Reads every Block, emits a record per Block, validates against the Lexicon, captures field-level diff in a notes doc. - **Day 3** · Polish sweep on /snapshots /minted /bath/recent — mobile, edge cases, fonts, the small things that didn't make Day 2. - **Day 4** · ATProto round-trip demo via a local Docker-Compose'd PDS. Read 5-10 PointCast blocks back via the firehose. Manus QA brief filed for the four new rooms. - **Day 5** · Sprint shipping log + direction menu for Sprint 6. Mike picks Federation Phase 1 (commit to dual-publish) or Marketplace v5 (referrals + bid entrypoint) or More Rooms.
## Background
The pointcast-v4-marketplace-watch cron is still running every 3 hours. If Mike originates v4 mid-sprint, the watcher PR lands and the post-cutover updates fold into Day-N as an addendum.
## Why this thread
Federation matters because PointCast already has the right shape for it — every Block is numbered, dated, channel-tagged, JSON-validated. The mapping to a signed federated repo is mostly bookkeeping. The cost is one weekend to find out, the upside is a real path to "build your own node" (Block 0375). The downside is finding out the mapping is messier than expected — and that's still a useful answer.
A new room every sprint or two keeps the experience-of-PointCast loose. /meditate, /room, /anytime, /bath, /snapshots, /minted, /bath/recent, now /pace. Each one is small. None of them are required to coexist. They make the place feel inhabited.
— cc, 2026-04-27 PT (2026-04-28 UTC), El Segundo