Changelog · what shipped, when, why
Honest history.
Every entry has a release date, the founder’s voice, and an optional “what we got wrong” note. We don’t edit losses out. G.005 binds us to honest numbers; this page is the long-form version.
P1.3.0172026-05-22
- launch
- infra
Launch retro infrastructure + /blog scaffold
`pnpm retro:stats` CLI pulls honest numbers straight from local.db / D1 (signups + attribution + library activity + beta cohort + issue SLA attainment). `/blog` index + `/blog/launch-retro` placeholder ready to receive the real post within 14 days of the PH launch.
Honest note: The retro itself is humans-only — drafted from the runbook template with stats output pasted in. G.005 binds us to publishing the raw numbers, including the losses.
P1.3.0162026-05-22
- beta
- infra
Post-launch SLA tracker (P0 24h · P1 7d)
`beta_issue` extended with `priority` (P0/P1/P2/P3) + `kind` + auto-computed `sla_due_at`. `lib/issue-sla.ts` 6-state classifier. `/beta/inbox` SLA board with breach/warning/on-track stat cards + pulse on breached. 22/22 round-trip.
Honest note: The 24h/7d SLA targets only have meaning post-launch; engineering verified now, attainment % accrues Wk 10.
P1.3.0152026-05-22
- launch
- infra
Launch infrastructure
Signup attribution table (referer + UTM), /api/signup-event, /api/launch-stats (admin), honest /changelog page. PH launch playbook in the runbook.
Honest note: The PH launch itself is humans-only on Tue/Wed 12:01 AM PT. Engineering verified now; ≥ 1k wk-1 signups accrue then.
P1.3.0142026-05-22
- beta
- infra
Beta iteration tracker (top-5 feedback loop)
`beta_issue` table with 6-state machine (triaged → in-progress → fixed → confirmed + wont-fix/duplicate). Admin /beta/inbox. Reporter-only confirm flow with denormalised reporter_user_id. 20/20 round-trip.
Honest note: 5-issues-closed + 4/5-confirmed accrues during Wk 8 once beta has feedback.
P1.3.0132026-05-22
- beta
- infra
Closed beta — invite codes + feedback + activity
30-invite cohort program (5-cohort split d/t/h/f/p). Soft-gate model — invites mark testers, don't block access. Per-cohort SQL metrics. 21/21 round-trip.
P1.3.0122026-05-22
- perf
Performance budget — every route ≤ 200 KB gzipped
All 8 public routes ship under 200 KB gz first-load. Avg 183 KB, max 190.3 KB (/primitives), max TTFB 93 ms / 500 ms ceiling. Two-tier gate: CI-safe shared-bundle audit + live per-route audit.
Honest note: LCP/TTI/Lighthouse ≥ 90 need real Chrome — bundle weight + TTFB are the verifiable proxies; PageSpeed runs at deploy time.
P1.3.0112026-05-22
- a11y
Accessibility pass — WCAG 2.2 AA
axe-core 4.11 + jsdom 29 across 8 routes returned 0 critical · 0 serious · 0 moderate · 0 minor. Skip-to-main-content link, agent sidebar dialog ARIA + ESC + focus return, nested <aside> demoted to <div role=note>, 9/9 pages have <main>, 75/75 static a11y assertions in CI.
Honest note: axe-in-jsdom can't compute color-contrast (no real CSSOM) — 3 'incomplete' per route. NVDA/VoiceOver smoke is humans-only.
P1.3.0102026-05-22
- polish
Polish — empty states, animations, easter egg
Every empty state gets a fruit emoji + warm copy + 2+ CTAs + role='status'. Custom /404 with 3 CTAs. Easter-egg /credits page (Shoulders of giants). Three brand keyframes (fai-fade-in / slide-in-right / pop) gated on prefers-reduced-motion. Global :focus-visible emerald ring.
Honest note: Tracker said 'dark mode' — studio was dark-by-default since P1.3.002. Building a light theme would've burned the sub-phase; deepened the dark commitment instead.
P1.3.0092026-05-22
- studio
- auth
My Library — save/fork plays & primitives
Per-user library scoped by UNIQUE(userId, kind, itemId) for idempotent saves. /api/library Node route. <SaveButton> self-contained client component keeps host pages on edge runtime. 26/26 round-trip including persistence-after-sign-out proof.
Honest note: Anonymous library is per-cookie not per-human — amber banner tells users to link a real provider for portability.
P1.3.0082026-05-22
- studio
Agent FAI sidebar — RAG with citations
Floating chat button → SSE-streamed drawer over 973-doc corpus (101 plays + 847 primitives + 25 knowledge modules). 4-provider LLM abstraction (echo / openai / anthropic / cloudflare-ai). 10/10 canonical Qs. p95 retrieval = 14.26 ms.
P1.3.0072026-05-22
- studio
- perf
Primitive Explorer — search/filter 847 primitives
p95 = 1.344 ms — 148× under the 200 ms target. Faceted by type/WAF/play-usage, URL-state pagination, case-insensitive search.
P1.3.0062026-05-22
- studio
Deploy-to-Azure button
Canonical portal.azure.com/#create/Microsoft.Template URL builder + ARMVIZ link + honest AWS/GCP graceful-degrade. 81/81 unit tests.
P1.3.0052026-05-22
- studio
Play Detail — DevKit/SpecKit/TuneKit/IaC tabs
Server-rendered ?tab= URL state. JSON-syntax-highlighted reconstructed manifest. 5 IDE deep-links (vscode://, vscode.dev, cursor://, GitHub view, copy clone). 72/72 tests.
P1.3.0042026-05-22
- studio
Play Browser — filter, search, paginate
5-dim faceted filtering + free-text search + URL-state pagination over 101 plays. 20/20 combinatorics tests.
Honest note: Tracker said '104 plays' — reality is 101. Tracker said '862+ primitives' — reality is 847. Trust data over spec.
P1.3.0032026-05-22
- auth
Better Auth — anonymous + GitHub + Entra
Three sign-in lanes. Anonymous lane verified end-to-end (5/5 round-trip). Drizzle adapter + 4-table schema + dev migrator.
Honest note: Turbopack can't trace better-auth through pnpm symlinks — switched dev+build to --webpack. Bumped Drizzle peer deps mid-flight.
P1.3.0022026-05-22
- infra
Studio scaffold — Next.js 16 + Tailwind 4 + edge
Hello Studio page renders in 1.33 s. CI workflow (corepack → pnpm → typecheck + lint + build, frozen-lockfile, store cache). 0/0/0 errors.
P1.3.0012026-05-22
- infra
ADR-0001 — Studio MVP stack
9 stack decisions accepted via MADR convention in /decisions. Marginal monthly MVP cost €0 (every choice fits a free tier). G.010 + G.011 explicitly honoured.