- Roadmap status filter now URL-shareable (#filter=next/soon/considering)Closes the named rev-99 next-sprint candidate. Rev 99 ships per-browser localStorage persistence on the rev-99 status filter chips; rev 100 also reflects the active filter into the URL hash. An owner sharing `loopdesk.space/roadmap#filter=next` now lands the recipient on the same scoped view regardless of their saved-per-browser preference. The hash wins over localStorage on first load (a shared link is the strongest possible signal of intent), and a hashchange listener keeps the chip row in sync with back/forward navigation. `history.replaceState` keeps the URL clean so toggling filters doesn't spam the back button. The lowest-friction expression of 'this scope is meant to be shared.'
- 'Recently shipped' panel on /roadmapNew brand-purple-accented panel reads the rev-37 changelog releases module and surfaces the 3 most-recently shipped revisions directly above the rev-99 status filter. Three reading horizons in one page: past (recently shipped), present (rev-97 most-requested + rev-99 trending now), future (the phase tree). Procurement teams + early adopters reading the public surface get the full 'where we've been โ what's most-asked-for โ what we're considering' picture without leaving the page. The brand-purple palette distinguishes it from the rev-97 brand-green most-requested strip and the rev-99 amber trending strip so visitors read three distinct colour vocabularies for three distinct reading horizons.
- GET /api/v1/changelog endpointPublic read of the rev-37 changelog content on the v1 surface. Pairs with /api/v1/roadmap-items (rev 98) and /api/v1/roadmap-votes (rev 98) as the third axis of the public marketing surface on the protocol-bound side: items return what's planned, votes return what's most-requested, changelog returns what shipped. MCP hosts + procurement teams checking what shipped recently can do so without scraping. No auth (public marketing surface โ same model as /api/v1/badge.svg). Optional `limit` query param (1-100, default 20). Cache-control public, max-age=300, s-maxage=1800. The /changelog page, /changelog/rss.xml feed, and the new /api/v1/changelog endpoint all read from the rev-37 src/lib/changelog-releases.ts module so the four surfaces never drift.
- OpenAPI typed schema + milestone visual accent on the changelogThe rev-100 /api/v1/changelog endpoint is typed in /api/v1/openapi.json in the same cycle the dashboard primitive ships (cadence pattern from rev 78 onward). Plus subtle visual polish: milestone revs (every 100) on the /changelog page now wear a brand-purple left-border accent stripe + 'milestone' pill so the cadence's own anniversaries read as load-bearing rather than blending into the rev-by-rev stream. Cumulative micro-polish โ every rev 22+ has carried at least one. Closes the rev-100 thread of 'every public surface reaches every other public surface' across pages (changelog + roadmap), feeds (RSS), and protocol-bound JSON (v1).