This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
pnpm build # tsc -b, needed only for dist-consuming smokes
pnpm test # all vitest projects
pnpm vitest run <path> # single test file
pnpm typecheck:tests # strict-typecheck packages/*/test — CI gate, not part of pnpm test
pnpm docs:check # compile-check doc snippets — run after public API changesTests run against packages/*/src via vitest aliases — no build needed. No linter or formatter is configured.
- Layering is acyclic; nothing imports upward.
@ecsia/schema→@ecsia/core→ everything else. Sibling packages (relations, scheduler, serialization) attach to core through__-prefixed seams onWorld, never by core importing them. - The
ecsiaumbrella is pure static re-exports. ItOmits the__seams from public types and must stay free of module-scope side effects (tree-shaking depends on it). Don't expose seams publicly or add glue there. src/internal.tsis for that package's own tests only (relative import, not inexports). Symbols that sibling packages need live on core's publicindex.tsunder the "INTERNAL (cross-package)" banner — don't move them.docs/spec/is normative;world.mdis the keystone. Check the relevant spec before changing semantics. Published docs live inwebsite/.- Parallel must equal serial — the threaded scheduler's output is property-tested byte-identical to single-threaded. Changes to storage, scheduling, or command buffers must preserve this.