worker

Whiskers' hubs as a Cloudflare Worker with one Durable Object per household. The same build (worker-build --release, giving build/index.js and build/index_bg.wasm) runs under Cloudflare's wrangler dev and under celld dev.

What it serves today: POST /memory/sync, /household/sync and /chat/sync, answered by whiskers-service over a backend whose three hubs live in the household's object. That is all the Worker has (it implements HasMemory, HasHousehold and HasChat and no other capability), so it is all the service is given: every other route, /check and /usage and the rest, is not there and answers 404 as an unknown path does. Moving a capability onto the Worker is implementing its Has… trait and giving the service its route (Service::serve), see crates/whiskers-ports/README.md.

PathWhat
src/The adapter.
tools/host starts, stops and restarts native, wrangler and celld each on its own port; crosscheck runs the whole comparison; probe shows what each host says to a few odd requests.
wrangler.jsoncThe one configuration both hosts read. Only keys celld accepts: no routes, never .toml.
.dev.varsRead by wrangler dev and celld dev only. It switches on the test mode (see src/household.rs).

Run it:

nix develop ~/whiskers#backend
worker-build --release
celld dev . --port 8801          # self-hosted, no bucket; state in .celld/dev
wrangler dev --local --port 8802 --persist-to .wrangler/state
cargo test                       # the pure parts, natively

One deployment serves one household, named by the HOUSEHOLD setting: the wire carries no credential today, so nothing could say which household a request is for. A harness that needs a fresh household per test turns on the test mode in .dev.vars (TRUST_HOUSEHOLD_HEADER=1), which neither deploy reads.