Block a user
admin: feature store browser — features sent to ml/serving per scoring call
Web Push (VAPID) — deliver the moment, not the app
Privacy: ToS/PP docs, consent capture, versioned per-user acceptance hash
Account deletion endpoint (
DELETE /me) — Phase 0
ml/serving: FastAPI scorer + RemotePolicy in recommender
Feature store skeleton with five v1 features
recommender: RandomPolicy v0 — pick one Todoist task uniformly
gateway: BFF with auth check and service fan-out
Deploy Phase 0 to a single VM via docker-compose + Caddy
ContextualBanditPolicy (LinUCB) replacing Random
ContextualBanditPolicy (LinUCB) replacing Random
Superseded by #51 (global-then-personalize LinUCB) which addresses the per-user-reward-starvation problem, and #50 which adds shadow-deploy infra so we do not replace Random in one step. Closing.