Three connected features for the deployment-strategy demo:
1. Visitor identity cookie (v3). A new visitors table backs a first-party
gb_visitor cookie: middleware on /api checks the cookie's UUID against
the database on every request and regenerates + persists it when the id
is missing, malformed, or unknown (fresh browser, pruned identity, or a
reset database). The identity remembers the name a visitor signed with
(pre-filled next time, used for unsigned posts), replaces the standalone
reaction cookie for reaction de-dupe, and feeds a live "N visiting"
counter (identities seen in the last 5 minutes) shown on the wall, in
/api/info, the admin overview, and the presence/tick SSE events. The
admin console gains Visitors/Visiting tiles and a visitors table, plus a
GET /api/me endpoint and GET /api/admin/visitors.
2. guestbook reset command. Wipes entries (including soft-deleted rows),
reactions and visitor identities under the schema advisory lock, with
--dry-run, --hard (also reset wall settings) and --reseed flags; meant
to run as a one-off Miabi Job. After a reset every outstanding cookie is
invalidated, so browsers get a fresh identity on their next request.
3. cleanup learns --prune-visitors (default 30 days): the cron job now also
forgets idle identities together with their reactions.
Docs (README, DEMO) updated: act 8 covers reset, the visitor-identity
talking point is in act 3, and the API tables list the new endpoints.
Akili-Task: tsk_ptdi5ufndrzwlljk4v5g
Akili-Agent: goldfish
Add a set of guest-facing and operator-facing features that make the
deployment-strategy demos (recreate, rolling, canary) more visual:
- Emoji reactions (heart/tada/thumbsup/smile): visitors react without an
account, a first-party cookie keeps counts honest, the tally streams
live to every tab over SSE. Backed by a new reactions table with an
idempotent upsert; whitelisted emoji so the endpoint can't be abused.
- Light & dark themes: the wall follows the OS preference, visitors can
toggle it (persisted locally), and a moderator can force a theme for
everyone from the admin console, pushed live over SSE.
- Per-replica request counter: a middleware tallies requests answered by
each replica; surfaced in /healthz, /api/info and the admin replica
table. Under load-balancing the counts diverge, and a rolling update
resets them one container at a time — the rollout made visible.
- Rolling-update wave in the Chaos lab: bounces replicas one at a time
(via the crash endpoint) while polling the replica table, so a training
session can watch each replica reset and rejoin — what a rolling update
looks like from the inside.
- Admin console: reactions tile, per-replica Requests column, reaction
tallies in moderation, and a wall-theme setting.
- Favicon + /favicon.ico redirect.
Tests cover reactions (idempotency, tallies, whitelist) and the theme
setting round-trip.
Akili-Task: tsk_xgg6sfuzkzymyc6gstr4
Akili-Agent: goldfish