Changelog
User-facing changes to the Sterryk platform, drawn from our commit history.
Features
- ops: prod_signals.py — single scheduled prod-pulse collector (Phase 3.4)
- observability: Gatus uptime monitor + status page → the phone
- shell: /verify-email landing page (unblocks the email-verification prod-flip)
- identity: email delivery seam for forgot-password + verify-email (HOUSE-R-017)
- billing: book non-USD MoR settlement in the functional currency (HOUSE-R-012)
- identity: build the self-serve password-reset flow (HOUSE-R-017)
- ops: Phase 3.3-3.5 ops hardening — alarm teeth, scheduled heartbeat, key-hygiene runbooks
- rls-gate: standing prod-side RLS-coverage cadence (HOUSE-R-111 Slice G residual)
- security: Slice H House-side + ledgers — HOUSE-R-111 built, only Slice P remains
- rls-gate: Slice K+G of HOUSE-R-111 — kragara/ledger EXEMPTs + vacuity teeth
- register+backup: Phase 3.1 off-host backups live; file HOUSE-R-110 (Coolify volumes-render gap)
- lot3d: the tree wears its coils — sitting 2b PASSES and F3 CLOSES with zero residuals
- lot3d: F3 sitting 2 — the walk winds, the facade closes, the rim rings (5 of 6 shipped)
- lot3d: the clip gate sees the signature anchors — and its first run caught two real clips
- lot3d: the wall probe PASSES — the house is felt (sitting 1b)
- lot3d: F3 sitting 1 — 6 of 8 assets shipped; the yard comes alive
- lot3d: the felt hill — plateau, skirt, treeline, stitch hem + drag clamp (W4a)
- lot3d: F3 AUDIT #1 + every confirmed composition/scene fix (W2+W3)
- 3d: F3 W1 eyes — unpack_kit.py + render_lot.py headless review renders
- lot3d: F3 W0+W1 CI slice — clip/parity + material-law gates, day-one fixes
- lot3d: spirits roam free — home-tethered wander per the motion law
- lot3d: F2 — the spirits move in (Rykie, Vonkie, Heldie, Kraggie)
- lot3d: the lamplighting — dusk parity pass (Track D round 2)
- lot3d: the amber hour — dusk horizon glow + warm dusk grade (Track D gap fix)
- 3d: Tier-3 felt pass — cream walls + oak floors; compose fixes
- lot3d: V3 re-compose of the default lot — the Hearthfelt landmark silhouette
- 3d: Hearthfelt Minimum Lot Set installed — 11 new pieces + 4 replacements, catalog + thumbs
- 3d: Hearthfelt intake processor + proof-round adjudication + batch convention
- gates: token-drift gate covers the mascot-law colours (star-glow, ember, krag)
- brand: 3D-lot design review ratified (Hearthfelt) + mascot canon committed + MASCOT_LAW gate
- lot3d: Hearthfelt F0 — warm token night, a sky full of homes, hearth glow, void fix
- kragara: wire the ingest+generate worker + ai-egress base URL (Kragara W6a/W6b go-live)
- dashboard: remediation steps per risk row — normal + novice toggle, "no known fix" highlight (#58)
- dashboard: one-click interactive viewer (dashboard.cmd → localhost server + Run buttons) (#57)
- dashboard: DASH-P1b + P3 — light the last blind lanes + verdict-change alerting (adversarially reviewed) (#56)
- dashboard: DASH-P1 — module-budget gate (lights blind QUA) + reconcile newly-measurable rows (#55)
- dashboard: DASH-P2 — must-act aging + multi-run history/trend (assess change, not just state) (#53)
- dashboard: EFF efficiency dimension + apply the top-tier infra optimizations (#52)
- dashboard: house health + risk register dashboard (tools/house_health.py) (#50)
- infra: single prod-compose source + reconcile cron sidecars + FX guard (#48)
- shell: wire the paywall into the 3D lot + delete the dead 2D-lot engine (#46)
- gateway: serve Microsoft publisher-domain verification file
- shell: Phase 2 — per-product 'open the door' room previews
- shell: Sterryk legal pages + close Phase-1 gaps
- shell+identity: Sterryk landing + /login + /signup + 14-day gate + Google/Microsoft OAuth (Phase 1)
- infra: wire fail-soft R2 storage env for kragara-svc (portal content store)
- infra: add kragara-worker service (daily-plan queue consumer)
- gateway+services: X-Request-Id correlation (PR-2.6) + /healthz probes & compose healthchecks (PR-2.5)
- rls-gate: EXEMPT the 13 Vonkara house-mode global/infra/inert tables
Fixes
- deps: replace the dead pnpm-audit lane with OSV over pnpm-lock.yaml (HOUSE-R-120)
- db: REVOKE platform.cancel_request from house_app — the RLS exemption rested on a false premise (HOUSE-R-121)
- db: re-assert the D14 REVOKE in the role bootstrap — house_app regained the billing pivot on every deploy
- ci: install billing's pinned deps so the money-path receiver tests actually run
- codegen: regenerate stale identity openapi-snapshot + client types (pinned-dep drift)
- dr: make bootstrap_roles.py restore-clean on a truly fresh target (HOUSE-R-112)
- health: score gate launch-failure (rc 127) as unknown, not a false red
- compose: mount ./registry into reconcile-seats + reconcile-ai-cogs (crash on /registry/plans.json)
- gateway: route-wrap kragara/heldaro/vonkara (HOUSE-R-117 class hardening)
- secrets: HELDARO_BEARER_TOKEN must be 43-char urlsafe, not hex (heldaro boot-validation rejected the hex value → 502)
- gateway: route-wrap ai-egress to end the /health+/version 404 (HOUSE-R-117)
- deploy: pin DB volume to the live Coolify-managed volume (HOUSE-R-115)
- deploy: rclone secret via stable host bind, not Coolify file-mount (HOUSE-R-114)
- backup: durable rclone mount — literal ./rclone, not ${VAR} (HOUSE-R-110)
- register: Phase 3.2 restore rehearsal — file a CRITICAL live RLS gap + a DR-runbook gap
- register: correct HOUSE-R-108's closed resolution — key was not restored, it's a pseudo value
- register: update HOUSE-R-108 — catalogue load fixed live, price map still empty
- register: file HOUSE-R-108 — billing catalogue has been dead in prod since ~06-27
- deploy: correct the deploy-mechanism doctrine — prod is Coolify-git-managed, not /opt/house
- gates: wire lot_clip/lot_materials into health_signals + raise the asset budget for Hearthfelt
- codegen: regenerate the identity OpenAPI snapshot + TS client (drift from the 3D-world merge)
- register: repair RISK_REGISTER.md header corrupted by a bad redirect
- gates: re-bless Kragara's standalone entrypoint after W6a ingestion (rebaseline)
- gates: acknowledge tools/house_health.py in the module-budget allowlist (HOUSE-R-068)
- lot3d: the night world comes back — homes over the canopy (C-23) + the outbuildings lamplight (C-26)
- lot3d: the black arc dies (4 layers deep) + the live-shot verification harness
- lot3d: rose glow, window panes, treeline — all placed by measurement
- lot3d: the sky orb, the floating window glows, and the flat hill
- 3d: re-aim the postcard + room review cameras
- lot3d: dusk brightness floor raised + rose-window glow seated on the ring
- lot3d: GableWing rose-window end faces the camera; chimney seated as the library hearth
- identity: handle Microsoft personal-account id_tokens (no email_verified)
- identity: OAuth outcome lands on /login (was dropped on the landing)
- infra: pass OAuth env to identity in the Coolify compose
Performance
- identity: pool the /_verify DB connections; close HOUSE-R-061