rmnr
DocsTourSlicesBest PracticeAgentsInstall

Command Palette

Search for a command to run...

New
  • Changelog
Release notes

Changelog

What changed in each rr release — page 4 of 17. Full prose history in CHANGELOG.md.

JUN102026
Improvementos-apps@upstream-syncJun 10, 2026

os-vps upstream sync wave — shell framework + 12 OS app upgrades + 3 new slices

Backfilled entry for the big upstream sync (landed 2026-06-10 alongside the agentic waves). appshell 1.4.0 rebuilds the Android (Material-You) shell — wallpaper clock, pull-down Control Center, Spotlight pill — and bundles a single-pane Dashboard shell; browser 1.1.0 gains a Chrome-style multitab strip + screencast hook; os-terminal puts a PTY surface behind an injectable configurePty seam with a LIVE/MOCK banner; file-explorer 1.2.0, assistant 1.1.0, reel-editor 1.1.0 (container-first compact mode), image-editor 2.1.0, app-store 1.1.0, media-viewer 1.1.0, system-monitor 1.1.0, image-picker 0.2.0 (debounced Unsplash search + CSS-escaped url() values), code-editor 1.1.0 all sync responsive/touch upgrades from upstream. New lifts: media-studio 1.0.0 (standalone canvas studio on a configureMediaStudio seam), quicklinks 1.0.0 (injectable QuicklinksStore), shell-settings 1.0.0 (settings-app UI primitives over an AppearanceAdapter).

JUN102026
Featureslices@motion-kit-0.1.0Jun 10, 2026

Motion Kit slice — scroll reveals + carousel + accordion lifted from the fleet

New motion-kit slice (0.1.0): zero-dependency scroll-motion layer (IntersectionObserver + CSS) plus embla Carousel and radix Accordion. Ships Reveal (fade-up/fade/fade-left/fade-right/zoom), Stagger (incremental per-child reveal for grids), CountUp (rAF count-to-value, locale-aware), Marquee (infinite logo strip, hover-pause), useInView hook, Carousel*, Accordion*. All reveal/keyframe motion gated behind prefers-reduced-motion. Consumers append globals-motion.css to app/globals.css. Lifted from the _templates fleet where 8 standalone website templates already ship a byte-identical copy (motion pass 2026-06-10); this rr slice is now the SSOT for future scaffolds. carousel.tsx split into carousel.tsx + carousel-context.tsx to stay under the 200-LOC gate. Pairs with landing-sections (its kind renderers consume these primitives).

JUN102026
Featureslices@storefront-checkout-0.1.0Jun 10, 2026

E-commerce wave 1 — storefront-checkout slice + doku-payment 0.2.0 guest checkout, proven on wirausaha-os

First REAL consumption of the payment base — and it found real bugs. New storefront-checkout slice (0.1.0): guest cart (CartProvider + localStorage), CartWidget header sheet with qty steppers, CheckoutSummary — props-driven R3, host re-prices server-side (client subtotal is display-only). doku-payment 0.2.0: paymentOrders.userId now optional with guest buyer contact, create actions key-guarded ({ok:false,notice} when DOKU creds unset — fresh clones never crash), status query guest-readable via unguessable orderId, DokuDirectForm's raw <select> replaced with themed shadcn Select (same white-dropdown class bug onboarding-wizard fixed) and supports server-generated orderIds. Fixed broken _generated paths that proved the base was never consumed: internal.features.payment.mutations.* → .mutation.* (file is mutation.ts) in doku/midtrans actions + webhook handlers, api.features.payment.queries.* → .query.*. Payment feature README rewritten to match the ACTUAL shared-table schema (the namespace-split tables it described were never applied). End-to-end host wiring (catalog → cart → server-priced placeOrder → DOKU Direct instructions → webhook) shipped live on wirausaha-os as the reference implementation.

Consumption-found fixes

JUN102026
Featureagentic-wave-3bJun 10, 2026

Assistant goes live — real function-calling over every slice

configureAgentStream is now wired to a real Anthropic backend. New /api/agent-stream SSE proxy runs one model turn per call; the client-side runAgentLoop dispatches each tool_use against the live tool registry (tools bind to real React state, so they execute in the browser). createSseAgentStream + an AgentBridge mounted across /preview flip the assistant from the typing-demo to driving the 10 registered OS-app tool collections for real. Key-guarded (ANTHROPIC_API_KEY) + per-IP rate limited; falls back to the demo when unconfigured.

JUN072026
Improvementsite@behavioral-testsJun 7, 2026

Behavioral tests land — sidebar interactions, badge anchors, changelog gate, CLI aliases + coverage baseline

Hardening W5, closing the report's core critique: structural gates were strong but nothing verified behavior — the U7 dead-toggle shipped without a single failing test. New targeted suites (+22 tests, 425 total): nav-parts interaction tests click the actual Collapsible triggers (toggle works, collapsed-by-default, and the group/* class sits on the data-state carrier — the exact U7 chevron regression); recently-updated-badge asserts the card variant renders NO anchor (the W2 nested-<a> regression) and that deep links are page-aware; validate-changelog gets fixture-driven unit tests (future date, dup id, wrong epoch unit) via a new optional dir arg; and an offline CLI e2e spawns `rr info blog-section` to pin the U3 alias fall-through ('superseded by landing-sections'). Coverage measurement exists for the first time: vitest --coverage via @vitest/coverage-v8, baseline 35% statements / 38% lines — a number to move, not a gate (yet).

Tests (new)

  • docs-sidebar nav-parts: 7 interaction tests (toggle, default-collapsed, data-state carrier)
  • recently-updated-badge: card renders no anchor; badge href page-aware; changelogHref + page math
JUN072026
Improvementmcp@1.2.0Jun 7, 2026

Gates actually gate — agent.md + changelog checks in pre-commit, vitest in pre-push, MCP↔CLI version coupling

Hardening W4. The drift checks existed (gen:agent-md:check, slices:check) but were never wired to a hook — agent.md drifted across three waves before anyone noticed. pre-commit now runs gen:agent-md:check + validate:changelog (verified: a deliberately corrupted agent.md fails the commit); pre-push runs vitest before the build (the audits are structural — no audit ever caught a dead click). MCP's rahman-resources dependency had drifted to ^1.9.1 while the CLI sat at 1.12.x — published MCP installs silently served a stale catalog; bumped to ^1.13.0 and a new prepublishOnly check-peer gate fails any future publish whose range lags the sibling CLI. DX: typecheck script carries the 4GB heap bump (cold tsc OOMs default Node), allowedDevOrigins unblocks 127.0.0.1 dev browsing (the silent no-hydrate trap), dev:alt serves port 3457 for parallel sessions, and a warn-only ui-drift report (41 drifted primitives, 13 site-only, 5 template-only) runs at the tail of validate:all so the dual shadcn trees diverge by decision, not accident.

Gates

  • pre-commit: + gen:agent-md:check + validate:changelog
  • pre-push: + vitest (~12s) before the production build
JUN072026
Improvementsite@debt-sweepJun 7, 2026

Debt sweep — bidir block removed (generalization promoted), files joins the metadata system, 3.3MB orphan assets purged

Hardening W3. The BSDL-era bidir block survived in 20 slice contracts as pure noise — syncPolicy died with BSDL, but its nested generalization payload (level / forbiddenTerms / requiredProps) still feeds check-forbidden-terms.mjs, so it was promoted to a top-level contract field instead of deleted: all 20 contracts rewritten, SliceSyncPolicy + SliceBidirContract types and validateBidir dropped from the contract DSL, validateGeneralization replaces it. The files slice was the only catalog entry without a slice.json (the parity gate silently skipped it) — authored from its contract + catalog entry, versions aligned at 0.2.1, parity now checks 63/63 with zero skips. public/brand-assets/ carried PNG+WebP twins of every banner with no code references — 10 orphans deleted (4.4MB → 1.1MB), keeping the og:image PNG, icons, and the SVGs the footer actually uses.

Slices

  • files 0.2.1 — slice.json authored; parity gate now covers all 63 slices (0 skipped)

Site + CLI lib

JUN072026
Fixsite@changelog-integrityJun 7, 2026

Nested-anchor hydration fix + changelog data integrity (page-aware badge links, date validator)

Hardening W2. Three site bugs: (1) RecentlyUpdatedBadge's card variant rendered a <Link> inside CatalogCard's own <Link> — invalid HTML, confirmed hydration error, and the inner anchor sat under pointer-events-none so it was unreachable anyway; the card variant now renders the bare pill. (2) Four changelog entries were future-dated (a miscomputed UTC-midnight epoch landed on Jun 8) which made badges read 'Updated today' for a day that hadn't happened — dates corrected. (3) Badge deep links pointed at /changelog#id, but the feed paginates 10/page and anchors on later pages never scroll — PAGE_SIZE moved to changelog-helpers as SSOT, getLatestUpdate now reports the entry's page, and links carry ?page=N. New gate: scripts/validation/validate-changelog.mjs (unique ids + no future dates + epoch sanity) wired into validate:changelog and slices:check so both data bugs stay fixed.

Site (fixed)

  • RecentlyUpdatedBadge card variant: no more anchor-in-anchor (hydration error gone)
  • Badge deep links are page-aware: /changelog?page=N#id via changelogHref()
  • Four future-dated entries corrected to their real dates
JUN072026
Fixrate-limit@0.2.0Jun 7, 2026

Security hardening W1 — touchToken bearer-proof, rate-limit policy map, Convex-backed admin login gate

Security audit follow-up. Two public Convex mutations were anonymously abusable: touchToken took a row id (anyone could enumerate token ids and tamper lastUsedAt) and rate-limit consume took caller-supplied limit/windowMs (anyone could forge a loose window and bypass the limit, or burn a victim key's budget). Neither can become internalMutation — ConvexHttpClient callers can't reach internal functions — so both are hardened in place: touchToken now takes the bearer token VALUE and resolves it via by_token (possession = authorization, no-op on miss); consume's limits moved to an in-code per-prefix POLICY map (unknown prefix rejected) plus an optional RATE_LIMIT_SERVER_KEY env gate compared constant-time. Admin login now uses the Convex-backed limiter when a deployment is configured (replica-safe, fail-open) with the in-memory bucket as dev fallback — and success no longer resets the counter, so a correct guess can't refund an attacker's budget. Session-token trade-off (signed-not-encrypted payload) documented in admin-auth.

Slices (hardened)

  • rate-limit 0.2.0 — consume({ key, serverKey? }) + in-code POLICY map; README documents the forged-window and budget-burn vectors
JUN072026
Improvementos-apps@status-tokensJun 7, 2026

Semantic status tokens + responsive guards — backported from os-vps across 5 slices

The os-vps de-gaudy sweep lands in the lifted slices: every raw Tailwind palette class used for STATUS meaning (bg-red-500, text-emerald-500, bg-amber-400, bg-sky-500, …) now reads the semantic tokens the site palette already defines — bg-success / bg-destructive / bg-warning / bg-info — so notification dots, toast icons, taskbar activity pips, error states, mute buttons and mask-edit banners all follow the active theme preset instead of fighting it. Intentionally colorful surfaces (app-icon gradients, file-type icon colors, avatar palettes) are untouched. Same wave adds responsive guards to the three fixed-width panels that could overflow small viewports: notification center (340px), inspector (300px) and the image-editor side panel (312px) now carry max-w clamps. Consumers on older copies: `npx rr update <slug>` — the slices assume --success/--warning/--info/--destructive tokens in globals.css (the rr init template ships them).

Slices (updated)

  • appshell 1.3.1 — app-badge, mobile-notification dots, notification-center (+max-w guard), window close-confirm, Windows-taskbar pips, toast-host, dynamic-island, inspector max-w guard → status tokens
NewerPage 4 / 17Older
  • internal.features.payment.mutations.* → .mutation.* (6 webhook refs + 2 actions) — base never compiled in a consumer before
  • doku config.ts category 'integrations' invalid in fleet defineFeature unions — consumers adjust (wirausaha used 'payment')
  • midtrans-client npm missing in doku-only consumers breaks convex bundling — delete actions/midtrans.ts or install it
  • payment README claimed namespace-split tables (doku_orders/midtrans_orders) that were never in _schema.ts
  • validate-changelog: 5 fixture tests (clean, future, dup, epoch, real data)
  • CLI alias e2e: rr info <old-slug> resolves with superseded warning, offline
  • test:coverage script — baseline 35.1% stmts / 38.5% lines
  • packages/mcp prepublishOnly: check-peer.mjs — dependency range must admit the sibling CLI version (was ^1.9.1 vs CLI 1.12.x)
  • DX

    • typecheck script bakes NODE_OPTIONS=--max-old-space-size=4096; validate:all uses it
    • next.config allowedDevOrigins: 127.0.0.1 dev pages hydrate again
    • dev:alt script (port 3457) for concurrent sessions
    • report-ui-drift.mjs — warn-only components/ui vs template-base diff at validate:all tail
    • contract DSL: bidir removed; generalization is a top-level field (forbidden-terms audit keeps its data)
    • 20 slice.contract.ts rewritten — zero bidir blocks remain
    • brand-assets: 10 orphaned banner/wordmark files deleted (-3.3MB static weight)
  • validate-changelog gate: unique ids, no future dates, epoch sanity (123 entries checked)
  • create-your-mcp — touchToken({ token }) by_token lookup replaces enumerable { id }; route template passes the bearer
  • Site

    • admin login rate-limit: Convex consume when NEXT_PUBLIC_CONVEX_URL set (fail-open), memory bucket fallback; reset-on-success dropped
    • admin-auth: session payload signed-not-encrypted trade-off documented
  • image-editor 2.0.2 — brush warning chip + mask-edit banner → warning token; side panel max-w clamp
  • reel-editor 1.0.2 — mute toggle, delete action, error states, out-of-clip indicator → status tokens
  • browser 1.0.2 — omnibar secure-lock indicator → success token
  • code-editor 1.0.2 — status-bar save-error indicator → warning token