Handbook
The contract lives in the repo root: AGENTS.md is the single source, and
estate.yml is the registry of record. This page is the tour.
The four compounding rules
Section titled “The four compounding rules”- Everything arrives by script.
bun run scripts/new-kit.ts name areascaffolds a package with SPEC, tests, tsconfig, and a registry entry. Nothing depends on remembering steps. - Wire truth is written once. Fixtures in
conformance/are consumed by Bun tests and Rustcargo testalike; both languages must pass the same file. Where a kit mirrors a Rust crate (mirrors:in estate.yml), the wire shapes are named after the Rust side. - Status is earned.
coremeans a consumer app pins the package at an exact version;scripts/estate-audit.tsfails a package that claims core without the pin. Drifting pins fail the same audit. - wasm is optional behind a twin. Rust never touches the DOM; Solid owns rendering. Every wasm crate implements the ABI of a TS reference implementation and passes the same fixtures, so shipping without the wasm binary is always safe.
The verbs
Section titled “The verbs”build test lint fmt fmt-check coverage contract ci: Makefile aliases of
package.json scripts. CI runs make ci and nothing else; there are no
CI-only steps.
| Layer | Choice | Why |
|---|---|---|
| Runtime/tooling | Bun | workspaces, test runner, scripts |
| UI runtime | SolidJS | signals-first, islands-friendly |
| App framework | Astro | prerendered entity pages, islands only where interactive |
| Docs | Starlight | estate handbook and kit reference |
| Pure logic | Rust to wasm | money math, search, CRDTs; never the DOM |