Skip to content
Resource
DocsTourSlicesBest PracticeAgentsInstall

Command Palette

Search for a command to run...

New
  • Changelog

Changelog

Release notes

Changelog

What changed in each rr release — page 14 of 25. Full prose history in CHANGELOG.md.

JUN072026
Improvementsite@shell-hierarchyJun 7, 2026

Shell hierarchy made explicit — one chrome, inner surfaces mount inside it

UX wave U5. Six shell-family slices (appshell, dashboard-shell, workspace-shell, admin-panel, admin, platform-admin) had no documented composition story — consumers couldn't tell which renders chrome and which mounts inside it. Now: /architecture gains a "Shell hierarchy — who composes whom" section (one rule: exactly one outer chrome, never nest two); admin-panel + platform-admin declare dashboard-shell as a peer with the mount direction in the reason; the admin slice's description states upfront that it is HEADLESS (nav-from-registry scaffold, no chrome); AdminShell's docblock spells out that it is the INNER section nav. Investigation note: AdminShell composing DashboardShell directly would nest two chromes — wrong by the hierarchy's own rule — so the DRY here is the contract, not a forced refactor.

Site (changed)

  • /architecture: shell hierarchy section (appshell → dashboard-shell → inner surfaces)

Slices (changed)

  • admin-panel + platform-admin: dashboard-shell peer with mount-direction reason
  • admin: description repositioned as headless scaffold (pair with dashboard-shell)
JUN072026
Improvementsite@consistencyJun 7, 2026

UI consistency pass — one header family, one spacing rhythm, detail-page parity

UX wave U4. Docs pages had three header patterns (PageHeader, inline text-3xl copies, a custom text-lg bar on /build) and four page-spacing values. Now: PageHeader gains a compact bar variant (used by /build); /control-room, /audit-chain and /agents/[slug] swap their hand-rolled headers for PageHeader; page root spacing standardized to space-y-8; section h2 standardized to text-2xl (audit-chain, best-practice); DocCard bakes in p-4 default padding (twMerge keeps explicit overrides working); ShotThumbnail's aspect-[8/5] normalized to the same aspect-[16/10] string everyone else uses (identical 1.6 ratio, one spelling). Slice detail pages gain the prev/next arrows the layout detail header already had — both detail chromes now match.

Site (changed)

  • PageHeader compact variant; adopted on /build, /control-room, /audit-chain, /agents/[slug]
  • space-y-8 page rhythm + text-2xl section h2 everywhere
  • DocCard default p-4; ShotThumbnail aspect-[16/10]
  • Slice detail header: prev/next catalog navigation (parity with layouts)
JUN072026
Improvementcli@aliasesJun 7, 2026

Superseded slugs stay installable — CLI aliases + URL redirects for the merged landing sections

UX wave U3. The seven landing-page section slices (blog-section, faq-section, portfolio-section, changelog-feed, feature-grid, testimonials-grid, pricing-page) were merged into landing-sections as kind-variants back in v0.2.0 — but their old slugs just errored in the CLI and 404'd on the site. Now: lib/content/slice-aliases.json is the SSOT; gen-manifest embeds it as manifest.aliases; the CLI's findEntry falls through to the alias with a "superseded by" warning, so npx rahman-resources add blog-section installs landing-sections; /slices/<old-slug> redirects to /slices/landing-sections; each old slice.json carries deprecated: "landing-sections" (new optional schema field). Also fixed: landing-sections was miscategorized as infra — it's content.

CLI (changed)

  • manifest.aliases — superseded slug → successor; findEntry resolves through it with a warning
  • slice-schema.json: optional "deprecated" field (successor slug)

Site (changed)

  • /slices/<old-section-slug> → redirect to landing-sections; category fixed infra → content
JUN072026
Improvementsite@taxonomy-ssotJun 7, 2026

Taxonomy SSOT — 8 categories, one label map, no more sidebar drift

UX wave U2. Category order + labels were duplicated in four components and drifted: docs-sidebar showed "Ai"/"Ui" (naive capitalize), the /build picker was missing "os" entirely (OS slices invisible in the group list), the /slices tab row was missing OS too, and an empty "Storage" group sat in the sidebar. New lib/content/taxonomy.ts is the single source; all four consumers import it. Categories merged 12 → 8: payment+email → integrations, search+realtime → data, storage dropped (was empty). Moved: doku-payment, midtrans-payment, resend-newsletter, contact-form-resend → integrations; vector-search, broadcast-channel-sync → data. Sidebar label "Website templates" → "Templates — full apps" and both catalog heroes now state what they are NOT (layouts = single page shapes; templates = complete apps) — killing the layouts-vs-templates confusion.

Site (changed)

  • lib/content/taxonomy.ts — SLICE/LAYOUT category order + label SSOT (4 duplicates deleted)
  • Categories 12 → 8: integrations (payment+email), data absorbs search+realtime, storage removed
  • Fixed: /build picker + /slices tabs missing the os group; "Ai"/"Ui" labels
  • Templates vs Layouts disambiguated in sidebar labels + catalog hero subtitles

Slices (changed)

  • doku-payment, midtrans-payment, resend-newsletter, contact-form-resend → integrations
  • vector-search, broadcast-channel-sync → data
JUN072026
Improvementsite@terminologyJun 7, 2026

One name for one thing — "Slices" everywhere, "kitab" retired from copy

UX wave U1. The catalog had two names for the same artifact: nav said Slices while the homepage hero, /docs intro, breadcrumbs, command palette and detail titles said Modules — and the live site description still said "kitab" (pre-2026-05-16 internal codename). All user-facing copy now says Slices; kitab → catalog/resources in site.ts, /build, /mcp and /directory copy. Dead code out: the orphaned /recipes/[slug] route (parent already redirects to /slices) and the never-used "template" layout category (union + LAYOUT_CATEGORY_TITLE entry).

Site (changed)

  • Modules → Slices: hero, /docs intro + card, showcase heading, command palette, slice detail breadcrumb + meta title, /agents copy
  • kitab → catalog: site description, /build subtitle, /mcp pages, /directory footer
  • Removed orphan app/(docs)/recipes/[slug] + dead "template" layout category
JUN072026
Improvementshots@layoutsJun 7, 2026

Screenshot pipeline — /layouts cards go from 36 live iframes to 36 static webps

Last VP-wave leftover. scripts/capture-shots.mjs drives the VPS headless Chromium (the os-browser service) over the deployed site, captures every layout previewPath at 1280×800, downscales to 800×500 webp via PIL (~18KB each, 656KB total) and writes public/shots/layouts/* plus the lib/preview/shots.gen.json manifest. /layouts catalog cards now render the captured shot first (one <Image>, accurate, instant), keep the live-iframe path only for slugs without a capture, and the procedural mock as last resort — previously every card booted a full Next page in a scaled iframe. Operator-run via npm run shots:capture (all / single slug / SHOTS_BASE override) — screenshots drift slowly, so it's not a CI gate. /templates keeps its existing poster system.

Infra

  • scripts/capture-shots.mjs + npm run shots:capture — capture → PIL webp → manifest, per-slug filter + failure exit
  • components/site/catalog/shot-thumbnail.tsx — static <Image> thumbnail + layoutShot() lookup
  • app/(docs)/layouts/page.tsx — shot → iframe → mock fallback chain
JUN072026
Improvementtaxonomy@os-categoryJun 7, 2026

New "OS Apps" category — 11 os-vps slices leave the UI junk drawer

The UI cluster had ballooned to 24 slices, 11 of them the os-vps app family. New `os` category across the taxonomy (SliceCategory union, slice-schema enum, sidebar order + "OS Apps" label, /build picker groups automatically): appshell, file-explorer, image-editor, reel-editor, code-editor, media-viewer, system-monitor, os-terminal, assistant (moved from AI — it is the OS assistant app; ai tag stays), browser, app-store. Category is metadata-only — no version bumps, `npx rr add <slug>` unchanged. Sidebar now: UI 13, OS Apps 11.

Slices touched

  • appshell, file-explorer, image-editor, reel-editor, code-editor, media-viewer, system-monitor, os-terminal, assistant, browser, app-store — category ui/ai → os

Infra

  • defineFeature SliceCategory + slice-schema enum + site-sidebar ORDER/LABEL + build-sections — "os" wired end to end
JUN072026
Improvementvariant-previews@detail-pagesJun 7, 2026

Live variant previews on /slices detail pages

Site-simplify follow-up: variant previews were only reachable inside the Bundle Builder, so the catalog detail pages still read as static docs. Every /slices/<slug> page whose slug is in the preview registry now gets a "Live" tab next to Preview/Code/Details — the same auto-knob VariantPreview widget the builder mounts, fed by the same rr-demo localStorage data. 37 slices become interactive where people actually evaluate them.

Infra

  • app/(docs)/slices/[slug]/slice-detail-client.tsx — "Live" tab via PREVIEW_SLUGS registry membership; renders <VariantPreview slug> in the docs-shell tab chrome
JUN072026
Improvementvariant-previews@template-baseJun 7, 2026

dashboard-shell + admin-panel join the preview registry (template-base root)

gen-preview-registry now scans template-base/frontend/slices too — with a twist the smoke gate caught before production: template-base ships its OWN node_modules (a second react), so any .tsx living there crashes hooks when bundled. Render files for template-base slices therefore live SITE-SIDE at components/templates/_shared/previews/<slug>.preview.tsx (importing only site-compiled code) while the previews declaration stays in the slice's slice.json. dashboard-shell previews the real _shared DashboardShell all 8 OS templates mount (flat-nav / grouped-nav scenarios); admin-panel previews the 17-block operational overview grid. Registry: 37 slugs. Honest boundary documented in the spec: motion-primitives, responsive-dialog, three-column and workspace-shell are facades over @/frontend/shared/* — their implementations exist only in consumer projects, so rr cannot preview them truthfully; contact-form-resend is convex-bound.

Slices touched

  • dashboard-shell — flat-nav / grouped-nav scenarios over the real _shared shell
  • admin-panel — operational-blocks overview, density axis

Infra

  • gen-preview-registry — second scan root + per-root render-file location + slug-collision guard
  • docs/SLICE-PREVIEW-SPEC.md — template-base rules + smoke-gate + not-previewable boundary
JUN072026
Improvementvariant-previews@smoke-gateJun 7, 2026

Preview smoke gate + honest no-preview cards in the builder

Investigating a "previews are missing" report: every one of the 35 registered previews renders clean (verified live on production via headless Chromium + a new happy-dom smoke test). The real gap was silence — selected slices WITHOUT a preview (headless/server slices, opt-outs, template-base slices outside the registry) rendered nothing at all in /build, which reads as broken. The SlicePreviews panel now shows coverage (n/total) and an explicit "No live preview — headless / server-side, or preview not yet authored" card listing those slugs. New permanent gate: lib/preview/preview-smoke.test.tsx mounts EVERY registered preview with default variants in happy-dom on `npm test` (pre-push) — catches mount crashes and declared-component drift that tsc + the generator can't. vitest aliases now mirror tsconfig paths (@/features, @/shared dual-mapping) so tests can import through the registry.

Infra

  • lib/preview/preview-smoke.test.tsx — 35 previews mount-tested in happy-dom (now 357 tests total)
  • components/build/variant-preview.tsx — coverage header + dashed no-preview card for previewless selections
  • vitest.config.mts — @/features + @/shared alias parity with tsconfig (custom dual-dir resolver)
NewerPage 14 / 25Older