Testing and verification

Verification is part of the change, not a final confidence statement. The required frontend checks are:

pnpm lint
pnpm check-types
pnpm test

Rust changes also require:

cd src-tauri
cargo clippy --all-targets --locked -- -D warnings
cargo nextest run --locked

Use cargo test --locked when cargo nextest is unavailable locally.

What needs a test

Core subsystem changes need a test that locks the invariant being changed. This includes shell spawn, workspace authorization, Git command guards, filesystem mutation, IPC contracts, AI tools, OSC parsing, cwd inheritance, tab transforms and renderer pooling.

Test the deny path and the edge, not only the happy path. A path-security test should cover the literal path, canonicalized symlink target, case variants and Windows path oddities where relevant.

Frontend tests

Frontend pure helpers and module behavior use Vitest. Prefer tests that exercise public module behavior rather than implementation details. A UI-only theme or syntax table change generally does not need a new test when the type system and existing rendering contract cover it.

Rust tests

Platform-specific tests use #[cfg(windows)] and #[cfg(unix)]. ConPTY and Job Object behavior must not be assumed to behave like Unix process groups. Protocol framing, path guards and pure parsers should be tested without requiring a live UI.

Documentation checks

The public documentation is validated separately:

mkdocs build --strict -f docs/mkdocs.yml

The strict build catches invalid navigation references and Markdown warnings. Run it after changing navigation or moving a page.