Welcome. Small, accurate experiments are the heart of this project.
Use Node 22.13+ and pnpm 11.19.0. Run pnpm install --frozen-lockfile, pnpm db:migrate:local, then pnpm dev. Before opening a pull request, run pnpm check and pnpm build. See architecture and deployment for the workspace and AI assistance for the model integration.
Keep identity at the trusted hosting boundary and every database operation scoped to its authenticated owner. Generate schema changes with pnpm db:generate; commit migrations and never rewrite an applied migration. Cover authorization and optimistic concurrency changes with real SQLite tests. For AI lifecycle changes, distinguish mock-provider tests from actual WebGPU validation; report the browser, GPU, model, and result if you run the latter.
- Open an experiment proposal with the invariant, initial state, worker operations, and a concrete failing schedule.
- Add an
Experimenttolib/experiments.ts. Use a stable, uniqueid: replay links depend on it. - Implement
make('buggy')andmake('fixed'), each returning fresh program data. - Every displayed code row must correspond to exactly one atomic transition. Operations may mutate only the copied frame they receive.
enabledpredicates must be pure. - Give every worker a finite operation list. An unavailable lock should disable a step, not busy-wait. Keep the model small enough to exhaust its schedule space under 50,000 visited nodes.
- Include an invariant, plain-language explanation, fix, model assumptions, and a primary technical reference.
- Add a regression with an explicit failing trace and an independently reasoned expectation. The generic suite must find a buggy failure and prove every modeled fixed schedule passes.
- Check keyboard use, narrow screens, reduced motion, replay restoration, and export when changing the interface. Report which checks you ran in the pull request.
Do not add arbitrary code execution, external API dependencies, or tracking to implement a teaching scenario. Do not change the meaning of a published experiment ID without adding a replay-version migration.
- Explain an operation more clearly while preserving its semantics.
- Improve a reference or add a tested teaching example to
docs/MODEL.md. - Add an independent regression for a model boundary or invalid replay.
- Improve focus visibility or screen-reader descriptions.
Describe the learner's problem, the behavior after your change, the assumptions, and the validation you ran. A screenshot is useful for interface changes. Keep code changes focused and preserve the lockfile unless a dependency change is necessary.
Credit sources, be kind in reviews, and disclose limitations. We value correctness and clarity over scenario count.