# A clean playground

> For agents: start with the [agent guide](https://ratstack.sh/llms.txt). Every page is Markdown by default; add `Accept: text/html` for HTML.

New on /news: [Effect Office Hours 52 with Resonate HQ](/news).

Every package must do useful work and stay easy to add and remove.
This is the house rule behind the "clean playground" name.
A cartridge 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 cartridge](/systems/database) 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 [capabilities](/systems/capabilities), 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.

[Analytics](/systems/analytics) supplies another working package, with an explicit removal checklist. [Interest signup](/systems/interest) keeps delivery in an [adapter package](/lore/hexagonal-architecture) outside core. One-line infrastructure removal remains unproven for that adapter.

See [cartridges](/lore/cartridges) for the infrastructure example and [the fence](/lore/the-fence), the compiler checks, lint rules, tests, and hooks that enforce these rules.

## Sources

1. [rat-stack/VISION.md at main · joelhooks/rat-stack · GitHub](https://github.com/joelhooks/rat-stack/blob/main/VISION.md)
   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](https://github.com/joelhooks/rat-stack/blob/main/.brain/projects/layer-startups.svx)
   GitHub joelhooks/rat-stack. Layer-startup decision; used for the self-contained construction boundary. Accessed 2026-10-01.

## Lore on this page

- [A cartridge owns one job and its resources](/lore/cartridges)

## Linked from

- A cartridge owns one job and its resources → A cartridge owns one job and brings the infrastructure its service needs. → [Read page](https://ratstack.sh/lore/cartridges)

- Agent guide → An Effect stack so pure (aspirational) Kit Langton will blush. → [Read page](https://ratstack.sh/llms.txt)

- Change log → What changed in the files served here, newest first. → [Read page](https://ratstack.sh/log)

- Effect keeps the surfaces on one contract → Schema owns values, projections build interfaces, and Layers supply implementations. → [Read page](https://ratstack.sh/lore/how-we-do-it-with-effect)

- Full agent guide → An Effect stack so pure (aspirational) Kit Langton will blush. → [Read page](https://ratstack.sh/llms-full.txt)

- Purpose and boundaries of rat-stack (VISION.md) → What this starter is for and what a useful copy should keep. → [Read page](https://ratstack.sh/VISION.md)

- Rat Stack lore | rat-stack → Short, source-grounded notes on the ideas and decisions behind rat-stack. → [Read page](https://ratstack.sh/lore)

- Source change history (log.md) → The generated change log as Markdown. → [Read page](https://ratstack.sh/log.md)

- The fence → The fence uses compiler checks, lint rules, and hooks to reject unsafe shortcuts. → [Read page](https://ratstack.sh/lore/the-fence)
