Repository navigation
Description
Child implementation step for #3811 / slice 3 of #2852, grounded in #2258 §5 and the #2046 ruling.
Scope
Add the first local-only hosted data-plane vertical slice: a Cloudflare Worker HTTPS/WebSocket front door that resolves an already-authenticated account/binding to a lazily created per-user Durable Object; use the stable binding_id from merged #3808 (never email or a rebindable key), and fail closed on missing/unsupported jurisdiction or mismatched/undefined DO jurisdiction. The same restricted jurisdiction namespace must produce the ID and stub; no unrestricted fallback. Bootstrap a versioned SQLite schema idempotently before serving. Reconcile the stale google:<sub> / userObjectId(sub) example in doc/2026-11-01_jurisdiction_aware_user_store_design.md against the binding_id contract in #2258, #3811, and pkgs/id/src/hosted_binding.rs.
Acceptance
- A first request lazily creates one UserDO for the stable binding_id and initializes the schema; concurrent/retried bootstrap is safe.
- Distinct binding IDs cannot access each other; missing/unknown jurisdiction and both
ctx.id.jurisdictionundefined/mismatch cases fail closed before side effects. - Local Workerd/Wrangler tests cover routing, isolation, cold start, and schema bootstrap/retry.
- Keep this as an isolated Worker package; do not run Iroh QUIC inside Workers.
Excludes / gates
R2 blobs/references, metering and caps are later bounded steps under #3811; production signed-object sync belongs to #3818. No account-level Cloudflare deployment, production binding/config, residency claim, or billable resource creation: #2285 remains open/escalated and #3403 blocked pending Drew authorization and verified account evidence. Use the merged jurisdiction design #3843 and the #2046 ruling; no new product decisions.
Activity
dezren39 commentedon Nov 3, 2026
agent-note:v1
state: queued
dezren39 commentedon Nov 4, 2026
🤖 Agent note · picked up (small_fix, task 8897)
pkgs/id/hosted-worker(front door + routing module + UserDO), following thepkgs/id/worker-poc/pkgs/pkarr-workerpatterns; reconcile the stalegoogle:<sub>routing example indoc/2026-11-01_jurisdiction_aware_user_store_design.md; tests via node --test + local wrangler dev smoke. No deployment, no account resources (gates id: PoC: verify DO jurisdiction mechanics and confirm vendor residency guarantees #2285 / id: gate hosted jurisdiction provisioning on verified DO and R2 support #3403 untouched).dezren39 commentedon Nov 4, 2026
🤖 Agent note · parked (CI pending, task 8897)
queue/8897-5199-hosted-worker, commit 933de63) — hosted-worker scaffold + jurisdiction design-doc reconciliation.node --test4/4, smoke 15/15 across two localwrangler devpasses,tsc --noEmitclean — all on the laptop worktree. PR is MERGEABLE; the only check,basic: production line limit (2500), is still pending in the CI backlog (run 41775353789) after a 5-minute poll; every new production file is under 200 lines, so the check's substance is satisfied — resume should merge once it reports green (after reading any Codex findings per the merge gate).2 remaining items
dezren39 commentedon Nov 4, 2026
Intake review
binding_idfrom merged id: implement hosted account + ID binding ceremony (from #2046/#2852 slice 1) #3808. Open PR feat(id): hosted data-plane scaffold — binding-backed per-user Durable Object (#5199) #5286 (feat(id): hosted data-plane scaffold — binding-backed per-user Durable Object) implements this issue and is with the parked holder.ctx.id.jurisdictionundefined and mismatch cases must fail closed before any side effect, per the issue body.🤖 Fleet monitor intake pass, 2026-11-03 run.
dezren39 commentedon Nov 4, 2026
🤖 Agent note · picked up (resume, task 8897)
basic: production line limit (2500)run 41775353789, is still queued in the CI backlog after ~30 min; its substance is verified directly — the whole PR adds 571 lines across 13 files, max new file under 200 lines, far below the 2500 limit.feat(id): hosted data-plane scaffold — binding-backed per-user Durabl…
dezren39 commentedon Nov 4, 2026
🤖 Agent note · done (task 8897)