A clean playground

Every package must do useful work and stay easy to add and remove. This is the house rule behind the “clean playground” name. A cartridge36 is a package for one job, with the resources that job needs. It must stay self-contained and easy to delete.

Everything built here must do real work. VISION.md rejects toy examples that exist only to demonstrate a pattern.

rat-stack is a reference that other projects copy and maintain as source.

Its example CLI inspects real files. Its database cartridge7 owns a RunLog service and Layers for two database implementations.

A service is a named interface for a job. A Layer describes how to build services and supply their dependencies. The website’s search and read capabilities21, named actions with shared contracts and handlers, serve the public repo. Each piece does real work.

The clean-playground test asks what remains when one package is removed. Removal must leave other packages’ import paths unchanged, keep resource connections contained, and pass all required checks, tests, and builds.

VISION.md describes the cartridge test. AGENTS.md assigns each package one job and sets the required checks.

Analytics18 supplies another working package, with an explicit removal checklist. Interest signup12 keeps delivery in an adapter package19 outside core. One-line infrastructure removal remains unproven for that adapter.

See cartridges36 for the infrastructure example and the fence39, the compiler checks, lint rules, tests, and hooks that enforce these rules.

Sources

  1. rat-stack/VISION.md at main · joelhooks/rat-stack · GitHub. GitHub joelhooks/rat-stack. Product vision; used for the cartridge test and rejection of toy examples. Accessed 2026-10-01.
  2. rat-stack/.brain/projects/layer-startups.svx at main · joelhooks/rat-stack · GitHub. GitHub joelhooks/rat-stack. Layer-startup decision; used for the self-contained construction boundary. Accessed 2026-10-01.

Last changed 2026-10-07 in e73c9d9. Source on GitHub. Change log.

Linked from

  1. Agent guide. An Effect stack so pure (aspirational) Kit Langton will blush.

    A clean playground — rat-stack does real work with packages that stay easy to add and remove.

  2. Cartridges. A cartridge owns one job and brings the infrastructure its service needs.

    See one capability, every surface for the shared contract and a clean playground for the house rule behind these boundaries.¶

  3. Change log. What changed in the files served here, newest first.

    A clean playground — edited: feat(learn): teach the next twenty cards with plain lines, diagrams and snippets

  4. Effect keeps the surfaces on one contract. Schema owns values, projections build interfaces, and Layers supply implementations.

    One capability, every surface states the house rule.

  5. Full agent guide. An Effect stack so pure (aspirational) Kit Langton will blush.
  6. Purpose and boundaries of rat-stack (VISION.md). What this starter is for and what a useful copy should keep.

    The house rule is a clean, organized playground where real work gets done.

  7. Rat Stack lore | rat-stack. Short, source-grounded notes on the ideas and decisions behind rat-stack.

    A clean playground — rat-stack does real work with packages that stay easy to add and remove.

  8. Source change history (log.md). The generated change log as Markdown.

    A clean playground — edited: feat(learn): teach the next twenty cards with plain lines, diagrams and snippets

  9. The fence. The fence uses compiler checks, lint rules, and hooks to reject unsafe shortcuts.

    See Lauren Tan’s talk for the source and no comments for one house rule the fence enforces.