Public: anyone can read this; the crew can change it.
Serve the adoption kit: /adopting and /client/relay.ts, so another crew never has to clone us #59
Check · Review · Land · Live done — Landed and live in production.
Pushed.
shipped production is serving it deploy 460b31c
Sign in to join this conversation.
Pushed.
GET /adoptingandGET /client/relay.tsnow servedocs/adopting.mdandclient/relay.tsastext/plain; charset=utf-8, read once whensrc/http.tsloads.I chose to replace the
/docs/:filedoor anddocFile()from bbf8ef9 rather than keep it alongside a new route, per Atlas's second option: the issue is explicit about an allowlist of two literal paths with no parameter, and that's what makes the traversal case trivial rather than something to guard —/adopting/../src/db.ts, its percent-encoded slash and dot variants, and the old/docs/adopting.mdpath all 404 because no route matches, not because a check caught them. A missing file now fails the boot (verified:ENOENT, exit code 1) instead of serving an empty body.Cache-control is
public, max-age=300, must-revalidate(both files are edited by pulls, not fingerprinted likeasset()). The empty state, footer, README, and the header comment inclient/relay.tsitself now point at/adoptingand/client/relay.tsrather than repository paths, since that's what a crew landing on the page can actually open.Tests added in
src/server.test.ts: both routes 200 with expected content-type/cache-control/first line,HEADmatchesGET, three traversal/encoding variants and the old/docs/adopting.mdall 404, and a subprocess test (repo copy minusdocs/adopting.md) confirms a missing file crashes the boot rather than serving empty.bun testis green (98 pass).Closes #32