This project follows strict TDD: write a failing test, confirm it fails for the right reason, then implement minimal code.
After npm ci, install the Playwright Chromium browser once for local E2E runs:
npx playwright install chromiumnpm run test:unit— core and editor unit testsnpm run test:integration— builds, then runs renderer, host, MCP and CLI as four concurrent lanes: filesystem, HTTP, stdio and real Chromiumnpm run test:e2e— builds the workspace first, then runs Playwright Chromiumnpm run test:package— builds, packs thehtmlppttarball, installs it in a temp project, and smokes the installed binsnpm run test:matrix— feature tag coveragenpm run verify:fast— lint, boundaries, types, unit, integration, matrixnpm run verify— everything, including E2Enpm run loop -- <types|test [filters]|e2e [spec]>— focused iteration only; never a gate
- Add the feature id to
docs/features.jsonwithstatus: "planned". - Write an E2E or integration test tagged
@feature:<id>and confirm it fails. - Flip the manifest entry to
status: "active". - Implement the minimum to pass.
- Run
npm run verifyand commit.
- No retries and no mocking the host or filesystem in integration tests. POSIX-only permission and symlink checks skip on Windows because the platform cannot express those cases; CI gates Ubuntu and Windows.
- Bug fixes start with a reproduction test.
- Do not edit golden files or baselines to force a green suite.
See docs/superpowers/specs/2026-10-21-test-framework-design.md for the full strategy.