Changelog
What we shipped, in plain language. Generated from our commit history, so it cannot quietly fall behind the product.
Features
- i18n: Paraglide JS across the House-owned surfaces, en + af
- lot3d: seat the study round-2b re-roll — warm-umber graduation set (CWO PASS)
- lot3d: Phase-1 signatures — ship FIVE vignettes; study re-roll pending (owner rulings)
- privacy: replay erasure runbook + export metadata — close the P1/P2 replay trust gaps
- lot: in-world upsell overlay — a locked-room click no longer ejects to /account (P0/E1)
- analytics: register fireplace_entered — D3 dwell baseline
- world-ux: wire the wave-1 lot HUD/scene changes (D1.1-D1.5, D2, D3)
- world-ux: Account control, Help card, postcard fallback components
- world-ux: D1.2 first-paint splash + branded loading rungs
- world-ux: pure decision helpers for the wave-1 lot interactions
- gateway: bake docs dist + route /docs and /api/ask-docs (no new hostname)
- ai-egress: "Ask the docs" RAG endpoint on the egress chokepoint
- docs: Starlight docs workspace + Scalar API reference (baked under /docs)
- replay: gateway @replay surface (forward_auth, before /api/* catchall)
- replay: shell recorder + consent UI + default-deny + viewer
- replay: DB sink + identity ingest/viewer routes
- flags: the shell/product consumer seam — useSession().hasFlag + the exported hasFlag helper
- flags: the flag:<name> gradual-rollout namespace — /_verify DB-resolved, fail-soft, kill-switched (FLAGS_ROLLOUT_DESIGN.md)
- analytics: bake the Umami website id — the landing beacon goes live
- analytics: re-enable Umami — pgcrypto fixed, migrate hand-proven
- pricing: P7 RATIFIED — Math Board 2026-07-19 verdict recorded, price gate flipped
- pricing: encode Math Board caveats — allowance 75, refund clamp, trial policy, overage invoicing
- identity: /_verify enforces expires_at at read time + mints X-House-Allowances
- billing: v2 runtime — one-main CAS, tier reconcile, allowances write, 0031 hardening; suite 24F/55P -> 99P
- analytics: T0-3 in-house product-analytics pipeline (HOUSE-R-007 storage half)
- catalogue: P7 go-live price gate — LIVE Paddle sync refuses unratified seed prices
- tools: sync_paddle_catalogue — the registry is the source of truth, Paddle is derived
- catalogue: registry 0.3.0 — per-room tier ladders, packs, hero addons + catalogue gate v2
- 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)
- 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)
- 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)
- 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)
- gateway+services: X-Request-Id correlation (PR-2.6) + /healthz probes & compose healthchecks (PR-2.5)
Fixes
- i18n: notfound_back speaks House — EN aligned to the world-language (owner ruling)
- ai-egress: clamp Ask-the-docs question length (input-token cost guard)
- catalogue: canonical tier-key grammar (Math Board A3) + 2 known-bad teeth
- ai-egress: generalize the free-path gate off 'home' + wire Kragara through ai-egress in dev
- 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)
- gateway: route-wrap ai-egress to end the /health+/version 404 (HOUSE-R-117)
- gates: wire lot_clip/lot_materials into health_signals + raise the asset budget for Hearthfelt
- 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)
Performance
- identity: pool the /_verify DB connections; close HOUSE-R-061