Milestone revision — 200 unbroken rev-by-rev cadence revs shipped on the public changelog. Deliberate diversification away from the 13-rev templates grind (rev 188-199 each closed industry-template wave candidates) onto three orthogonal axes that have been named in the running state but kept getting deprioritised: prefers-reduced-motion accessibility support across every animation in the app (genuine a11y gap — ~48 keyframes + every transition fired regardless of OS-level user preference until rev 200), per-category recently-shipped HTML strip on the rev-191 /templates/by-category/{category} archive pages (closes the named rev-199 next-sprint candidate at the per-category axis on the human-readable surface), per-category recently-shipped v1 endpoint at GET /api/v1/onboarding-templates/by-category/{category}/recent (closes the same candidate on the protocol-bound side — mirrors the rev-199 workspace-axis convenience read at the per-category axis), plus a milestone visual treatment on the /changelog hero anchoring rev 200 as a meaningful inflection point (every 100 revs gets the milestone pill since rev 100; rev 200 also gets a soft hero card surfacing the round-number cadence achievement). The connecting thread: every rev-200 change makes an *existing* primitive load-bearing on a new axis — the rev-22+ design language gains its first explicit accessibility primitive (reduced-motion query covering ~48 keyframes), the rev-191 HTML archive pages reach the recency-axis read shape rev-196 introduced on the workspace surface, the rev-190 by-category v1 cluster reaches its second axis (drill-down + recent), and the rev-100 milestone-rev visual treatment lights up its second occurrence (rev 200)
Accessibility — prefers-reduced-motion support across every animationUntil rev 200 every one of the ~48 @keyframes animations + every transition in globals.css fired regardless of OS-level user preference. Operators with vestibular disorders, attention-related sensitivities, or migraine triggers — plus anyone running on battery-saver mode where the browser respects reduced-motion — had no escape hatch. Pulses (rev-12 heartbeat, rev-76 what's-new badge, rev-77 personal inbox, rev-97 sources health + latest-release pill, rev-180 shipping cadence, rev-183 cadence-trend chip), spinners, fade-ins (every rev-33 .app-panel ld-fade-in), slide-downs (rev-114 live-preview, rev-118 memory bulk import), and hover lifts all fired full-strength. Rev 200 adds the standard accessibility recipe: a single @media (prefers-reduced-motion: reduce) block in globals.css collapses every animation + transition to ~0.01ms so dependent JS transitionend / animationend handlers still fire (which some chip-pulse + flash-highlight components rely on for their state cleanup), but the visible motion is functionally zero. Affordances that signal state via transform (hover lift, sparkline highlight, FAB entrance) keep their final visual state — only the transition between states is collapsed. Strategic significance: every rev 22+ has carried at least one piece of cumulative polish. Rev 200's polish is the first one that's genuinely an accessibility fix rather than a visual-hierarchy refinement — it benefits every operator on every surface that uses motion. The rev-22+ visual-hierarchy thread now has a load-bearing accessibility primitive supporting it.
Per-category recently-shipped HTML strip on /templates/by-category/{category} archive pagesCloses the named rev-199 next-sprint candidate at the per-category axis on the human-readable surface. Until rev 200 the rev-196 'Recently added' featured strip lived only on the workspace-axis /templates index — visitors landing on a per-category archive page (rev 191) had no equivalent surface. The rev-191 archive pages list every template in the category in declaration order, but a procurement reviewer landing through 'AI workspace for healthcare practices' search snippet had no signal of which healthcare templates shipped most recently without parsing every card's 'Added in rev N' meta line by hand. Rev 200 closes that. New 'Recently added in {category}' strip surfaces the 3 most-recently-shipped templates in that category (descending by launch date with enum order as tiebreak; pure derived state from the rev-176 TEMPLATE_LAUNCH metadata map — no schema cost, no migration). Hidden when the category has fewer than 4 templates in total (the strip would tautologically be the whole category). Each strip card shares the rev-196 .ld-templates-recent CSS vocabulary so the workspace + per-category recency surfaces read with one consistent visual story. Strategic significance: closes the recency-axis read shape on every public-facing template surface — workspace index (rev 196 strip), per-category archive (rev 200 strip), workspace-axis v1 (rev 199 endpoint), per-category v1 (rev 200 endpoint).
GET /api/v1/onboarding-templates/by-category/{category}/recent — per-category recency read shapeCloses the named rev-199 next-sprint candidate on the protocol-bound side. New bearer-less GET endpoint returns the N most-recently-shipped templates in a given category, sorted descending by launch date with enum order as a deterministic tiebreak (mirrors the rev-199 /onboarding-templates/recent shape at the per-category axis). Optional limit query param (default 3, max 20). Returns 404 with typed { error: 'category_not_found', category, validCategories[] } when the slug is unknown (mirrors the rev-190 by-category 404 shape). Each row carries the same fields as the rev-199 workspace-axis endpoint: key + name + description + keywordHint + category + categoryLabel + memoryCount + signalCount + url + apiUrl + launchRev + launchDate. Cache-control public, max-age=300, s-maxage=1800. The OpenAPI 3.1 spec types the new endpoint with full request/response schemas + 404 error path in lockstep — the cadence pattern from rev 78 onward (every dashboard primitive gets typed in the OpenAPI 3.1 spec in the same cycle it ships) reaches its 108th unbroken rev with rev 200. Pairs with the rev-190 by-category drill-down + rev-200 by-category recent strip + rev-199 workspace-axis recent endpoint as the four-axis recency read cluster on the templates v1 surface (workspace listing rev 172 + workspace recent rev 199 + per-category drill-down rev 190 + per-category recent rev 200). Strategic significance: the templates v1 cluster reaches its seventh read shape — the upcoming MCP server's templates-axis tooling has nothing left to design across all seven read shapes including per-category recency.
Rev 200 milestone visual treatment + cumulative changelog hero polishRev 200 marks 200 unbroken cadence revs shipped on the public changelog (rev 100 was the first milestone; rev 200 is the second). The rev-100 .ld-changelog-item-milestone visual treatment fires automatically (every rev whose number is a multiple of 100 gets the brand-purple left-border accent + 'milestone' pill on the changelog page) — rev 200 inherits it. Plus a new milestone hero card surfaces above the rev list on /changelog itself naming the round-number cadence achievement: '200 unbroken cadence revs shipped' headline + '~6 months of public, frequent, audit-trail-grade product velocity' subline + a CTA inviting subscribers to the rev-37 RSS feed + rev-178 cadence calendar + rev-179 weekly pulse pill. The hero card uses a brand-purple gradient background distinct from the rev-179 brand-color teal pulse pill so the milestone reads as anniversary signal rather than ambient cadence chrome. Cumulative micro-polish — every rev 22+ has carried at least one — and rev 200's polish is load-bearing because the milestone-rev visual treatment had only ever fired once (rev 100). Strategic significance: anchors the rev-200 inflection as a moment worth marking, and explicitly diversifies away from the 13-rev templates grind by being a non-template celebration of cadence consistency. The rev-by-rev visual-hierarchy discipline (every rev 22+ has carried at least one piece of cumulative polish) reaches its 178th unbroken rev with rev 200.
Start free — there are no metered credits to run out.