Skip to main content
A member is anything pnpm-workspace.yaml lists: apps/*, packages/<category>/<name>, services/*. The rules on this page apply to all of them. Kind-specific shape lives on Packages, Services and Apps.

Required files

A member with a build or tests also carries vitest.config.ts (extends a @stackra/vitest-config preset) and tsdown.config.ts (when build is tsdown), each starting with the file contract. All source lives in src/.

The PII table

AGENTS.md always has a ## PII section with the columns Data, Where, Handling. A member that handles no personal data says so and names the change that would make it revisit the answer:
Presence of the heading is checked; whether the table is still true is a review obligation (security reviewer, see Security).

package.json

Key order: name, version, private, description, license, files, type, main (Expo only), sideEffects, imports, exports, scripts, dependencies, devDependencies. Order is convention, not checked.

turbo.jsonc and tiers

The tag matches the directory: The direction rule is a law: see Boundaries and ADR 0003.

Kinds

Scaffolding

pnpm new <kind> <name> [--category <c>] [--entries <list>|none] [--description "<text>"] [--title "<Title>"] [--port <n>] [--repo <path>] [--dry-run] copies a template from tools/scaffold/templates, replaces the tokens, copies the target repo’s LICENSE, and formats the result. Then run pnpm install and pnpm verify.
Shapes: ADR 0126. Flags and tokens: Scaffolding.

What enforces this

Run it directly with node tools/scripts/validate-repository.mjs; it prints nothing when clean.