docs/ — Index

Map of everything under docs/, with freshness flags so agents and humans know what to trust. Agent-facing guides live at the repo root (CLAUDE.md, AGENTS.md) and in each major directory’s CLAUDE.md.

This tree also builds as a Sphinx/MyST site for Read the Docs — conf.py, requirements.txt and index.md (the landing page + nav) here, with .readthedocs.yaml at the repo root. Build it locally with:

pip install -r docs/requirements.txt
python -m sphinx -b html docs docs/_build/html

New Markdown files are picked up by the globbed toctrees in index.md automatically; a file needs an # H1 to get a nav entry.

The site is published in the same 16 languages as the product — see translations.md for the pipeline, the translated-page subset, and the Read the Docs per-language project setup.

Trust order for conflicts: code > docker-compose.yml/deploy.sh > root CLAUDE.md / directory CLAUDE.mds > the reference docs below > dated design docs/plans (historical snapshots — they describe intent at the time of writing, not necessarily the current code).

Reference docs (keep current)

Doc

Contents

site-reference/

What the site consists of — hand-written area guides (social, economy, content, games/apps) plus generated inventories of every page route, API route, game and app (pnpm docs:site)

codebase-overview.md

Canonical code-layout overview: stack, repo layout, conventions, where to look first

architecture.md

Runtime topology + deploy pipeline: what runs where in production, images, CI, ports, auth across tiers

testing.md

Test suites (Vitest main + epic, Go Bazel), how to run them, and which CI workflows gate them

performance-slo.md

Performance guardrails: bundle budgets, synthetic probes, RUM SLO bands, and rollback trigger policy

../design.md

The statement of the design language (repo root) — what Radial Avant-Garde Glass is, why, and the laws behind it, with no values that move. Read it first; the two below are the build manual and win on any conflict

design-language.md

The visual system in detail — the radial shell / hub / liquid globe / wheel-feed architecture and the Apple-style Liquid Glass material rendered on it: --site-* token contract, the three shipped themes + accent presets + the appearance & accessibility suite, glass elevation tiers, primitives, typography, motion, a11y, and what CI enforces

page-consistency.md

Checklist + recipes for building pages that look native

../scripts/check-consistency.sh

The commit gate (pnpm check:consistency) — the design/style/convention checks that run before every commit, wired into git commit by .githooks/pre-commit and, for agent sessions, .claude/hooks/commit-gate.sh. Rationale and rules: root CLAUDE.md → “The commit gate”

../components/radial/README.md

The radial UI module: the shell frame, the globe’s gesture/ripple/physics rules, the metaball layer’s removal, and the measured frame-rate findings that constrain both signature interactions

open-graph.md

Link previews: the card design (the globe, in ink on white), the lib/og/ modules, the two satori rules that bite, how a page gets its card (own picture → dynamic card → section card → default), and the privacy rules the card routes apply

search.md

Universal search: the nine corpora, the recall/precision two-stage design, the shared 0..1 relevance scale and confidence bands, and the gated DeepSeek query-expansion fallback

adsense.md

Advertising: the five conditions under which an ad may render (publisher id, cookie consent, non-paid tier, allowed path, not in Discord), the manual-placement design and why not Auto ads, the two build-time variables and the four files each has to be threaded through, the CSP additions, and a blank-unit debugging order

people.md

RMH Capital leadership (canon) — the firm’s executive committee and six business heads, their titles and remits, plus the rules for writing them

developer-api/

The developer API documentation — guides plus a generated endpoint reference (pnpm docs:api). Replaces the removed in-app /developer/docs wiki; internals.md is the contributor view

albums-storage.md

Albums storage architecture (DB + R2/S3)

coins.md

Coin economy design (implementation plan, largely shipped)

slice-it.md

Slice It: the beatmap analyser (SuperFlux onsets, comb-filtered tempo, DP beat tracking, nested difficulty budgets), the multiplayer state machine and its two disconnect grace windows, the pause/resume rules, storage and quotas, and the scoring the score endpoint bounds submissions against

slice-it-visibility-audit-2026-08-08.md

What of Slice It you can actually reach. _handoff/implementation-status.md records 155 of the 162 ideas as shipped; this is the second count, of how many have a path to them from the running game. Seven API routes with zero client callers (L2 shelves, L3 chart reviews, L6 uploader dashboard, R7 integrity review, L9/L12 takedowns, C8/C10 regeneration, C9 chart import), seven logic modules imported only by their own tests (goals.ts, session.ts, drill.ts, patterns.ts, note-vocab.ts, hit-sounds.ts, frame-timing.ts), setPractice/setAutoplay called only from a test (P1/P3), four wire events the server handles and the client never sends (N3/N4/N5 match modes, N8 queue, N12 rejoin), and L1’s genre/tag facets unreachable from both ends at once. §D and §E — fourteen persisted settings and five modifiers with no control anywhere — were closed by the same change that wrote this. §H is a third silent i18n failure mode: i18next-parser does not recognise the const { t: ts } = useTranslation(…) alias this game uses everywhere, so those strings reach no catalog and every non-English locale serves the English default

slice-it-chart-editor.md

Slice It chart editor design (idea C1): the Chart/ChartRevision models kept beside Song.analysisData so regeneration never eats human work, the canvas timeline with quantisation colour and the three kinds of hit highlight, the command-pattern undo stack, the enforced Easy ⊆ Normal ⊆ Hard ⊆ Expert nesting invariant, playtest through the real GameEngine, onset ghosts from the analyser’s rejected candidates, the linter, the four auto-generate scopes (including auto-only, which never touches an edited note), and §12’s full neumorphic UI spec

Operations

Location

Contents

runbooks/

Current operational runbooks: Go runtime cutover (2026-06-22), Go fleet steady-state deploy (2026-06-23), assets/CDN cutover, and web hotswap rollback (flip Apache back to the previous blue/green color). Follow these for deploy/rollback work.

go-migration/

The Go+Bazel migration book: go-backend-and-bazel.md is the authoritative Go operator runbook; the PDF/HTML sections are the rendered design doc (written at the original 9-service scope — the fleet has grown since).

misc/

Security audits/reports (SECURITY.md is the current upload-security reference) + the UI redesign vision doc

opti/

Optimization/build-speed audits and plans (mostly executed)

Plans & specs (dated snapshots — check dates before trusting)

Location

Contents

plans/2026-08-08-bums-rush-design.md

Bum’s Rush — game design & implementation document (2026-08-08): the full spec for a 2–4 player hand-drawn physics party game at /bums-rush, in the tradition of Le Cartel Studio’s Heave Ho / Heave Ho 2 (§0.1 lists the source material and §0.3 the binding originality rules — mechanics recreated, nothing expressive copied). 22 sections: the notebook art direction and its --bum-* token group (§2), the grab/swing physics with every tunable and the four “feel tests” that gate the project (§3), controller/keyboard/mouse/touch bindings with full remapping (§4), a data-driven level format so eight worlds can be authored in parallel (§6), objectives and collectibles (§7), Showdown versus (§8), and the load-bearing decision in §9.1 — host-authoritative simulation with the socket hub as room manager + validating relay, because a 60 Hz matter-js world per room would turn the one Node process that hosts ~18 games from I/O-bound to CPU-bound. Also: lag-compensated grabs and the 100 ms interpolation buffer (§9.5), host migration and 90 s reconnect (§9.6), own-table saves with a guest→account merge policy (§10), progression and 12 achievement ids (§11), mobile as a design target including the Auto-Grab touch model (§12), accessibility claims held to lib/game-capabilities.ts’s honesty rule (§13), the exhaustive file map (§18), the test plan (§19), and §20’s 16 tickets with an explicit dependency graph — eight of which (the worlds) are concurrent by construction

plans/2026-08-06-slice-it-feature-ideas.md

Slice It! feature & update ideas (2026-08-06, revised same day against the two Slice It commits on main): 162 numbered ideas with an implementation sketch each, across 14 sections — note vocabulary (G1–G14), charting pipeline (C1–C12), practice (P1–P10), accessibility (A1–A10), HUD & results (H1–H10), modifiers (M1–M10), solo modes (S1–S12), multiplayer (N1–N12), ranking & integrity (R1–R10), library/lookup/creator tools (L1–L18), platform + social + Discord (X1–X14), presentation (V1–V12), input (I1–I10), content ops (O1–O8), with prior art per idea from osu!, StepMania/DDR, IIDX, Etterna/Quaver, Beat Saber, Clone Hero, Taiko, Muse Dash, FNF and Rocksmith. The load-bearing finding is R1: SongLeaderboard is unique on (songId, userId), so one board mixes all four difficulties and every modifier combination and a normal PB overwrites an expert record. §0.2 records what fb34b5f0 and d4185549 changed here — R7 (statistical anti-cheat) shipped as lib/slice-it/integrity.ts and is now only the review surface; P6/H1 got cheaper because the engine already computes the signed offsets and their Welford summary. Still-discarded data drives several more: the note’s snapped subdivision (G8), the judgement histogram types.ts documents as being “for the results screen” (H3), and health: 100 as a literal in engine.ts (G1, reframed as an opt-in multiplier mod so multiplayer needs no special case). Also L13L18 (song table, full-text search ranking, artist pages, album/pack authoring, history, saved filters), X8X12 (a Discord Activity gateway — there is no discord/index.tsx, so the Activity is permanently RMHBox — plus a Slice It Activity, guest sessions that persist nothing, and profile links from every leaderboard row). §15 ranks the top fifteen; §16 indexes which reference game to study per idea; §17 records what was checked and excluded

plans/2026-08-05-next-100-feature-ideas.md

The Next 100 (2026-08-05, round eight): 112 ideas in six sections — AI integration (A1–A20), quality of life (B1–B24), consolidation (C1–C14), deduplication & refactoring (D1–D15), future-proofing (E1–E15) and new surfaces (F1–F24) — deliberately excluding every idea in the seven prior plan docs. Two findings reframe the AI section: a real 3-provider abstraction (DeepSeek/OpenAI/Anthropic) already exists at lib/rmhladder/ai/provider.server.ts and is reachable by nothing outside RMHLadder, so A1 is a promotion rather than a build; and manifest.webmanifest’s share_target is GET-only with no files param, so links can be shared into the site and media cannot. Also flags one live correctness bug: lib/rate-limit.ts is a per-process Map while a working redisRateLimit() sits unused by all but three routes, making every documented limit wrong by a factor of (processes × RATE_LIMIT_MULTIPLIER). §9 is a machine-readable YAML index with per-idea dependencies; §10 records the repo facts each claim rests on, with the command to re-check each one

optimization-ideas-2026-08-05.md

65 catalogued optimization ideas (2026-08-05), each verified as NOT already implemented before being written down — the “Evidence” line of every entry names the file that proves the gap. Covers the critical path and CI budgets, CSS delivery (app/globals.css is one render-blocking sheet — 240 KB of source, 433 KB built per __root.tsx’s own comment — linked on all 739 routes), fonts (twelve Google families still fetched from a third party; no metric-override fallbacks), images (fetchpriority appears nowhere in the codebase), the back/forward cache (authenticated HTML is served no-store, which disqualifies every signed-in back navigation), response caching (defineHandler emits no Cache-Control or ETag at all), Postgres (no replica, no PgBouncer, no materialized views), realtime, observability (Server-Timing and INP attribution are both absent), SEO (no hreflang despite 16 locales; no IndexNow; no OpenSearch) and the PWA. Includes an appendix of measured findings that are already ruled out and must not be re-proposed

plans/2026-08-04-untapped-feature-ideas.md

Untapped feature ideas (2026-08-04, round two): thirteen features in the places the other seven plan docs share a blind spot for — the app tier (RMHType per-key analytics, RMHLadder application autofill + interview prep, RMHHomes commute-time and affordability filters; none of these apps has ever appeared in a plan doc despite RMHLadder being the schema’s largest subsystem at 26 models), the messenger (DMs have no editedAt or deletedAt at all, so no edit, unsend or delete; plus voice messages and custom emoji), and the missing safety net (a recycle bin — RMHark/RMHarkComment are soft-deleted and retained with no restore path in the codebase; bulk content management; account recovery beyond one email). Also rel=me domain-verified profile links, impersonation reporting, replay-verified speedrun categories, and AI alt-text suggestions

plans/2026-08-04-competitive-feature-gaps.md

Competitive feature gaps (2026-08-04): feature generation framed as parity against the products each tier competes with (Steam/itch for the arcade, Twitch/YouTube for the watch tier, Anki/Quizlet for study, Steam/Netflix for recommendations). Opens with two registry defects, both since fixed on the branch — 18 shipped namespaces missing from NAMESPACES (not a translation outage, as the first draft claimed and §0(a) now corrects, but 442 keys × 15 locales sitting outside the catalog test net) and 16 orphan locale directories the parser config fills and nothing serves. Eighteen features across six pillars: game capability metadata + faceted browse, a unified gamepad/remap/touch input layer, in-game assist & photosensitivity presets, video previews, player-made tracks/levels, clips from replays and watch rooms, transcripts/chapters, RMHMusic playlists + vote-to-skip, FSRS replacing SM-2, rich card types, Anki/Quizlet import, a player-protection suite for the stake surfaces (the doc’s critical item), playtime wellbeing, item-item recommendations, an i18n CI gate, and per-game telemetry. §1 is a pointer table to the still-open backlog from the five prior docs so nothing is re-specced

plans/2026-08-03-feature-generation-and-consolidation.md

Feature generation & frontend consolidation (2026-08-03): the consolidation half is the substance — nine surfaces where a fold was started and left half-landed (/shop + /pricing still live beside /store, /profile/$id beside /u/$userid, an unlinked /explore, two post-card renderers, PageLayout at 65 of 127 routes, 29k lines of CSS outside the token gate, twelve save-shaped models across five destinations, the game catalogue buried under a “Create” verb, settings across twelve pages), each with the redirect-stub recipe the repo already uses. Plus ten verified-absent features (TOTP, multi-account, signup abuse defence, media classification, community rules/mod tools, sitemap index, axe + visual-regression CI, scheduled messages, offline content) and a Part IV list of ~30 candidates checked and found already shipped

plans/2026-07-31-feature-gap-ideas.md

Feature gap ideas (2026-07-31): 24 ideas ranked with gap evidence, clustered in safety/compliance under the money-adjacent economy (age assurance, appeals, visibility tiers, keyword mutes, transparency report), platform ops (feature flags — the doc’s own highest-leverage item, status page, changelog), economy depth (auctions, faucet/sink dashboard, crafting, gift cards), games infra (unified matchmaking + anti-cheat, spectating), discovery (semantic search, RSS/ActivityPub, importers) and a11y/i18n. Appeals have since landed; feature flags have not

plans/2026-07-20-parity-qol-customization-design.md

Parity, QOL & customization design (2026-07-20): sixteen features in four pillars — parity must-haves from comparable platforms (lists/custom feeds, unified saves with folders, history & resume, game hubs with reviews + player guides, post awards, wishlists), social & presence (rich presence + friends rail, custom status, close-friends circle, modular profile showcase), QOL & user customization (appearance/accessibility suite, user-authored theme studio + theme economy, home/sidebar layout control, notification matrix + quiet hours, feed controls), and universal search v2. Verified gap inventory, data models, wave prioritization, KPIs. Companion to the 2026-07-15 and 2026-07-19 docs

plans/2026-07-19-platform-expansion-design.md

Platform expansion design (2026-07-19): twelve features specified as deltas over shipped systems — Arcade Pass (per-game daily challenges), Creator Studio (multi-tier memberships + dashboard), live Spaces, cross-game party system, RMHEvents + RSVP, replays-as-content, P2P cosmetic marketplace, gifting v2, weekly digest email, AI concierge, onboarding “First Week” arc, shareable stat cards. Includes a verified ground-truth inventory of what already exists, data models, wave-based prioritization, KPIs. Companion to the 2026-07-15 doc

plans/2026-07-15-cross-system-feature-ideas.md

Cross-system feature ideas design doc (2026-07-15): six features that compose existing systems — Tournaments Hub, Wager Matches, self-referential prediction markets, creator coin→value bridge, AI personas as residents, unified live-ops season + spectating/”Guess the ___”. Data models, economy loops, prioritization (RMHLadder “Career Mode” excluded — owned separately)

ui-audit-2026-08-01.md · ui-audit-apple-2026-07-30.md · ui-audit-2026-07-28.md

UI consistency audits — the 08-01 pass is the most recent over the site tier (token-contract holes, popover legibility, font coherence, and the three CI rules added to close them); 07-28 carries the extended theme × width test matrix

mobile-load-audit-2026-08-13.md

Why mobile is slower than desktop — the asymmetry, not the total. The current mobile pass, and the one to read before optimising for phones. Answers it structurally: the load cost here is main-thread JS and GPU compositing, the two axes a phone pays 4–6× on, so the same bytes are simply several times more expensive. Two gaps hid it — the RUM beacon had no device dimension (mobile and desktop pooled into one percentile, so a 3× regression read as drift), and every prior audit measured unthrottled desktop Chromium. Both closed. Also found that the site’s two device tiers (perf-lite, ios-webkit) covered no Android phone at all, and that perf-lite was applied from a mount effect so the devices it protects rendered the full effect stack for the whole load. Adds a handheld tier, moves the tier stamp pre-paint, and takes the quick panels + live-rail contents out of the shell chunk (SiteShell −34% brotli). Carries three measured and rejected entries — including the globals.css split, whose premise in earlier audits is wrong: that sheet is generated Tailwind utilities, not relocatable handwritten CSS

loading-audit-2026-08-11/

The current loading/runtime audit — read this before any earlier performance pass, and read its “Corrections to earlier audits” section first: two claims in 08-09 are wrong and would send you the wrong way. Measured against a running production build in a real browser. Found and fixed the actual root cause of the 431 KB lucide icon chunk (four files doing a computed lookup on a namespace import — not the 588-file codemod OPT-10 proposed), zod on the critical path via the catalog, socket.io-client on every page, nine routes blocking first paint on Google Fonts, the H3 event.res header bug still present in otel.ts (so Server-Timing never reached a client), and a missing STRIPE_SECRET_KEY 500-ing the first request to every page. Concludes that the database and the API handler layer do NOT need a revamp — with the evidence — and that the largest remaining win is adopting the caching the API wrapper already implements (269 GET handlers, 10 declare a policy)

performance-audit-2026-08-12.md · -08-09 · -08-04 · -08-01 · -07-30 · -07-17 · 3d-performance-audit.md

Measured performance passes. 08-12 asks where the work runs rather than how much there is: it finds the site had already built a zero-JS scroll-driven reveal (.u-reveal) and kept using the framer-motion one in 34 places including 19 feed columns, that AnimatedCount re-renders React once per frame ×4 per feed card, that 15 files import full motion and defeat LazyMotion app-wide, and that useReveal’s target class has zero consumers. Also the one real WASM candidate (the Slice It STFT, measured at 2.9 s per 15-min upload — where the first fix is worker_threads, not WASM) and a needless vibe-buildervite-builder serialization. 08-09 is the first pass measured against a running production build in a real browser — every game and app, signed out and in: it found the anonymous-HTML cache and security-header plugins were silent no-ops (H3’s event.res getter builds a detached response — fixed there), 8 routes whose first paint is gated on fonts.googleapis.com, a 116 KB-gzip chunk carrying all 1,074 lucide icons, zod back on the critical path via the catalog refactor, and 5–6 s of main-thread long tasks in the 3D games. 08-04 is the initial-load pass: routeTree.gen.ts imports all 739 route modules statically, so the shared entry chunk had accumulated the Discord Activity SDK, zod, twemoji, web-vitals and all of RMHBox — halved it, and states the rule that keeps them out. 08-01 is the one that ended the site’s cursor reactivity: a per-frame custom-property write on <html> restyles the whole document, and it was costing the globe drag 23.7s of blocking time. Each pass states what it does not revisit

plans/2026-07-21-liquid-glass-v2-optics.md

Liquid Glass v2 optics & floating shell design doc (2026-07-21): the rim-glint layer, lens refraction, the two-layer aurora, sheen rebuild, degradation extensions. ⚠️ Its useGlassLight v2 and GL/WebGPU shader-tier sections describe code that has since been deleteddesign-language.md is authoritative

plans/2026-07-14-liquid-glass-ui-redesign.md

Sitewide Liquid Glass redesign design doc (2026-07-14): glass as the material system — tokens, elevation tiers, realism/reactivity/performance specs, per-page coverage incl. library/studio/shop/admin, phased rollout. ⚠️ Its reactivity section (the pointer-tracked hotspot) was retired on 2026-08-01

superpowers/

The main archive of dated design specs + implementation plans (~75 files, plans/ + specs/), plus the reusable i18n-extraction-guide.md

plans/

Older dated plan/design pairs (dream-rift, rmhmusic, rmhcode CLI, terraform/helm migration, farming sim)

full-rewrite-design-2026-07-18.md

Full rewrite design & implementation spec (2026-07-18, machine-readable): target architecture, database domain-schema redesign, async backbone, frontend decomposition, exact deletion inventories, and a dependency-ordered task graph (R0–R5) with per-task verify/acceptance/rollback

scalability-audit-2026-07-17.md

Scalability & future-proofing audit (2026-07-17): what breaks at 10x–100x users/data across DB, feed/social, caching, realtime, infra, frontend, and security — with a phased roadmap

ci-speed-audit-2026-07-17.md

CI/CD speed audit (2026-07-17): measured timings for the 79-workflow fleet, deploy-pipeline latency breakdown, redundancy map, and phased recommendations (parallel deploy gate, buildx bake, PR-lane consolidation, registry layer cache). Its recommendations all shipped — see the 2026-08-08 audit below for the pipeline as it stands after them

build-deploy-audit-2026-08-08.md

Build & deploy speed audit (2026-08-08): per-phase breakdown of the post-bake pipeline from real run logs. Finds the build itself is no longer the problem — ~62 s of every deploy was a GHCR cache export running after both images were pushed, with the deploy webhook held behind it. Ships a conditional export, removes the no-op .vinxi cache, collapses server-builder’s 85 COPY layers; documents zstd compression and the ci typecheck as the next levers

website-improvement-plan.md

Cross-cutting audit + phased roadmap (2026-06-30)

mobile-friendliness-audit.md

Mobile audit — findings implemented 2026-06-29 (historical)

feed/

Feed/timeline scaling plan

Per-feature docs

Location

Feature

rmhbox/

RMHBox party games — largest doc set: info.md (agent-facing codebase reference — keep in sync when changing RMHBox), design specs, phase plans

altair/

Altair strategy game — implementation, multiplayer, balance patch history

rmhmusic/, rmhtube/, rmhvibe/, rmhtech/

App design docs (rmhtube features.md is a 2025 roadmap — historical)

signal-forge/, temple-of-joy/, void-breaker/, daily-puzzles/, rmhpoetry/

Game design docs

alex-tamagotchi/

Alex, the Discord tamagotchi pet (now implemented in go-services/internal/discordbot)

textbook/, indonesia-history/

Generated book projects (architecture textbook; Library content) — content artifacts, not code docs

⚠️ Known-stale docs (do not trust these claims)

These predate the Next.js → TanStack Start migration and/or the Go cutover:

  • Any reference to a repo-root specs/ directory — it was deleted; the legacy AI-agent game specs it held (vega.md and friends) are gone with it

  • rmhtube/features.md — 2025 roadmap for a now-shipped app (its stack line is now correct, but it still describes intent rather than the shipped feature set)

  • Older design docs in rmhbox/, plans/, misc/, and the textbook chapters mention Next.js in historical context — the routes/stack described there map to app/routes/ + TanStack Start today

  • ../go-services/FOUNDATION.md — a pkg/ API reference; the removed pkg/events/pkg/realtime sections were cut, but treat go-services/CLAUDE.md as canonical (go-services/README.md was refreshed to the current 3-service-in-prod reality)

  • Anything claiming production runs PM2 — production is Docker Compose with a blue/green web hotswap (see architecture.md)

  • Anything describing a warm .vinxi module-graph cache as load-bearingopti/build-deploy-speedup.md, runbooks/2026-06-23-go-fleet-deploy.md and ci-speed-audit-2026-07-17.md all treat it as the thing that keeps the Vite build incremental. It never was: .vinxi is a Vinxi artifact and this stack builds through Vite/Nitro, so the mount was always empty. It was removed on 2026-08-08 — see build-deploy-audit-2026-08-08.md §2. opti/ also predates the move of the image build into CI, so its deploy.sh-builds-the-image framing is superseded wholesale

  • Any design doc describing pointer-tracked optics — a hovered-glass diffuse hotspot, a pointer-parallaxing aurora or ring backdrop, useGlassLight, usePointerParallax, useCardSheen, a JS-published --light-x/--light-y scene light, or the lib/liquid-gl GL/WebGPU shader tier. All of it was deleted on 2026-08-01; the glass answers a static sun and hover is a state, not a coordinate. design-language.md §5.1.1 is the record of what went and why. The two plans/2026-07-* glass docs and the older audits still describe it as live because they are dated snapshots

Fixed in the 2026-07-29 audit: the stack lines in void-breaker/specs.md, temple-of-joy/game-design.md and rmhtube/features.md now name TanStack Start. temple-of-joy/ was rewritten again on 2026-07-30 alongside the game itself: game-design.md describes the current economy, and the four docs that described the superseded one (patch-1.md, patch-2.md, content-expansion.md, implementation-plan.md) were deleted. The repo-root specs/ directory this file used to point at no longer exists — the reference was removed rather than repaired.

Narrowed in the 2026-08-08 testing audit: the vitest suite no longer covers gameplay. 180 test files — Slice It’s judgement engine, the RMHBox minigame rules, and the whole gameplay suites for cookgame / Kowloon Knockout / Dream Rift / Temple of Joy / Versecraft / Kaikai / laundry-sort / massive-march / isleworks / nightrail / daily-puzzles / Void Breaker — were deleted to take the run from ~37s to ~20s. Any game design doc that describes a behaviour as “covered by tests” is now stale. What survived and why: testing.md §What is not tested.

Fixed in the 2026-08-08 testing audit: testing.md was rewritten. It had described a vitest-coverage.yml, an epic-tests.yml and a typecheck-server.yml that did not exist, counted “~45 workflows” and “~227 test files” against a tree with 10 and 427, and called the epic suite CI-gated when nothing ran it. The workflow count and the epic gate are now real (epic-tests.yml was written rather than the claim deleted); the rest is measured against the tree and dated in the doc’s header.