This document defines the minimum test class expected for each change type.
unit: isolated behavior in one package, no external servicesintegration: cross-package flow with runtime adapters mocked or local-onlysmoke: non-interactive CLI journey checks for install and first-run confidencee2e(optional): full stack (docker compose --profile dormant up) path validation
- Runtime logic changes in a package:
- required:
unit - recommended:
integrationwhen crossing package boundaries
- required:
- CLI command or output changes:
- required:
unit(command tests) +smoke
- required:
- Setup, workflow, and docs process changes:
- required:
smokeupdates if command sequence changes
- required:
- Service or multi-node behavior changes:
- required:
integration - optional:
e2efor full-stack confidence
- required:
- Full gate:
pnpm run validate - Package-only test:
pnpm --filter @lifeos/<name> run test - Smoke journey:
pnpm lifeos --version,pnpm lifeos status --json --graph-path ./.tmp/lifeos-smoke/life-graph.json,pnpm lifeos demo --dry-run --goal "Smoke test goal" --graph-path ./.tmp/lifeos-smoke/life-graph.json CLI Smokeruns those direct commands on Ubuntu and Windows.
When opening a PR, explicitly note:
- which test class(es) were updated (
unit,integration,smoke,e2e) - why skipped classes are not needed for this change
- Any change touching
modules/household-*requires a multi-user integration test. - Voice capture changes require running
pnpm test:voice-capture. - Any PR touching more than one household module must pass
pnpm test:household-mvp.