Contributing
Monorepo conventions
- Package manager: pnpm 10+ with workspaces
- TypeScript: strict mode, ES modules
- Runtime model: Effect services and typed error channels
- Formatting: oxfmt
- Testing: vitest
- Task graph: Nx derives package order from declared dependencies
Branches and releases
mainis the only long-lived branch; every change lands there by pull request.- Releases are manual runs of
.github/workflows/publish.yml. One run publishes the five public packages at one calendar version, pushes the simulator images tagged with it, and commits the digests and changelog stamp. The identities and repository settings a release needs are listed underRelease publishinginpackages/simulator/gke/README.md. - Authority for design work is
docs/vision.md, then the decision records, thendocs/spec/; seeAGENTS.md.
Before submitting a PR
Documentation
The docs site atdocs/ is built with
Mintlify. Source JSDoc generates per-folder module
pages, and source-owned constants generate shared snippets. Run
pnpm docs:generate before landing changes to either surface.
- Guides and development pages: edit the MDX files directly in
docs/. - Module pages and constants: edit their source or generator, then run
pnpm docs:generate. - Reusable content: shared snippets live in
docs/snippets/.
Code style
- Decode network, disk, environment, and dynamic-import inputs with Effect
Schema. - Declare branded domain values in their owning package.
- Keep typed errors in the Effect error channel.
- Prefer integration tests at real process and storage boundaries.