OverviewFilesCommitsIssuesDocsReleasesPeers

favela-surface commits / 2ac0ee4

README: the route list was 16 releases out of date, and claimed four that do not exist
The Routes section predated 0.0.48 and the file is at 0.0.63. Missing entirely: /status, /discover, /welcome and its three POSTs, /settings as a POST, all six /namespace/* routes, /rooms/create, /rooms/join, the /r/<key>/{post,request,admit} room verbs, and the whole /bridge/* and /did/* surface — which is how an identity gets minted, designated, carried and published from a browser. It also listed four routes that are not in lib/router.js: /unfollow, /knock, /dismiss and /directory. Extracted every path with its method rather than trusting the list. Those first three are daemon verbs the CLI has and the surface never grew a route for, so they are unreachable from a browser; the README now says so instead of implying they work. That is the same shape router.js already documents for unlike — "the daemon has had unlike all along and nothing on the surface could reach it, so a like was one-way from a browser" — which is why it is worth naming rather than quietly fixing the list. Numbers re-measured: version 0.0.47 -> 0.0.63 tests 175 -> 239 asserts 565 -> 738 composer.js 2.6 KB -> 5.3 KB Checked the other two figures in the JavaScript table rather than assuming: the /login signer is 22,474 bytes across four vendored files (22 KB, correct) and three.js is 750,938 bytes across two (733 KiB, correct). Status no longer names ashatron, which does not resolve from this host. It states what was measured and when: 0.0.63 installed on tabertron and stortron, running verified on tabertron only. Added a line to Boundary saying the /did/* and /bridge/* routes do not violate it — they call the daemon like every other route. A reader seeing "did" in a route list next to a rule forbidding atproto imports would reasonably wonder. Glyph count 1 -> 0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2ac0ee401c1f72031c60682a779f3032c7fb666b
by plankatron <fleeky@gmail.com> · 2026-09-20T20:43:23.000Z

Changed files (1) +27 -9

README.md +27 -9
……@@ -52,7 +52,7 @@ Reading needs none. Three pages load a script; two of them require it.
5252| page | loads | JS off |
5353|---|---|---|
5454| `/login` | inline module + vendored signer (22 KB) | breaks — no form post makes an Ed25519 signature |
55| `/` timeline | `composer.js` (2.6 KB), the `@`-picker | works — posts a real multipart form |
55| `/` timeline | `composer.js` (5.3 KB), the `@`-picker | works — posts a real multipart form |
5656| `/explore` | `explore.js` + three.js (733 KB) | breaks — rotating 3D view |
5757
5858- `/explore` is the only page that loads three.js. Its legend is server-rendered.
……@@ -62,30 +62,48 @@ Reading needs none. Three pages load a script; two of them require it.
6262
6363## Routes
6464
65`/` `/u/<key>` `/r/<key>` `/t/<tag>` `/search` `/settings` `/explore` `/graph`
66`/following` `/notifications` `/mentions` `/knocks` `/rooms` `/directory`
65Pages (GET): `/` `/u/<key>` `/r/<key>` `/t/<tag>` `/search` `/settings` `/status` `/explore`
66`/graph` `/following` `/notifications` `/mentions` `/knocks` `/rooms` `/discover` `/welcome`
6767
68Actions (POST): `/post` `/follow` `/unfollow` `/like` `/unlike` `/react` `/unreact` `/repost`
69`/unrepost` `/reply` `/block` `/unblock` `/knock` `/admit` `/peek` `/reach` `/handle` `/theme`
68Actions (POST): `/post` `/follow` `/like` `/unlike` `/react` `/unreact` `/repost` `/unrepost`
69`/reply` `/block` `/unblock` `/admit` `/peek` `/reach` `/handle` `/theme` `/settings`
7070
71JSON: `/api/graph` `/api/records` `/api/mentions` `/api/node`
71Rooms: `/rooms/create` `/rooms/join`, and `/r/<key>/post` `/r/<key>/request` `/r/<key>/admit`
72
73Namespace: `/namespace/join` `/namespace/forget` `/namespace/request` `/namespace/invite`
74`/namespace/admit` `/namespace/withdraw`
75
76Bridges and DIDs: `/bridge/claim` `/bridge/release` `/did/create` `/did/carry` `/did/publish`
77`/did/designate` `/did/project`. The four that need a confirmation answer GET as well as POST.
78
79Onboarding: `/welcome` `/welcome/pair` `/welcome/create` `/welcome/restore`
7280
7381Auth: `/login` `/logout` `/auth/challenge` `/auth/login` `/auth/redeem` `/auth/claim` `/auth/handoff`
7482
83JSON: `/api/graph` `/api/records` `/api/mentions` `/api/node`
84
7585Blobs: `/blob/<oid>` `/avatar/<key>` `/static/<file>`
7686
87Three daemon verbs have no route here, so they are unreachable from a browser: `unfollow`, `knock`
88and `dismiss`. `directory` has none either. `unlike` was in the same state until it got one — the
89daemon had it all along and a like was one-way from a browser, which is the shape to watch for.
90
7791## Boundary
7892
79⛔ No `corestore`, `hypercore`, `autobee`, `autobase`, `hyperswarm`, `hyper-overlay`, `atproto-*`
93No `corestore`, `hypercore`, `autobee`, `autobase`, `hyperswarm`, `hyper-overlay`, `atproto-*`
8094or `ap-bridge` — in any source file or dependency. `test/boundary.test.js` enforces it.
8195
96The `/did/*` and `/bridge/*` routes do not break this: they call the daemon like every other route.
97Nothing atproto is imported here.
98
8299A renderer that grows a Corestore has become a second peer implementation.
83100
84101## Status
85102
86Working. 0.0.47, running on tabertron, ashatron and stortron.
103Working. `npm test` — 239 tests, 738 asserts, passing (`brittle-bare test/*.test.js`, ~3.5 s).
87104
88`npm test` — 175 tests, 565 asserts, passing.
105Deployed as a pgh app. Measured 2026-09-20: 0.0.63 installed on tabertron and stortron, and running
106on tabertron.
89107
90108## License
91109