Getting Started
Local Validation
Moltis provides a local validation script that runs broad CI-style checks (format, lint, build, line limits), plus targeted Rust and Playwright tests for tests changed or added on the branch.
Why this exists
- Faster feedback for Rust-heavy branches (no long runner queues for every push)
- Better parity with a developer’s local environment while iterating
- Clear visibility in the PR UI (
fmt,biome,zizmor,clippy,test,macos-app,e2e)
Run local validation
Run all checks on your current checkout:
./scripts/local-validate.sh
When working on a pull request, pass the PR number to also publish commit statuses to GitHub:
./scripts/local-validate.sh 63
To intentionally run the full Rust and Playwright suites locally, use:
just local-validate-full
just local-validate-full 63
The script runs these checks:
local/fmtlocal/biomelocal/zizmorlocal/lockfile— verifiesCargo.lockis in sync (cargo fetch --locked)local/lintlocal/test— runs only changed or added Rust tests from the branch difflocal/macos-app— validates the native Swift macOS app build (Darwinonly)local/e2e— runs only changed or added gateway UI Playwright specslocal/e2e-ollama— opt-in live Ollama/Qwen Playwright regression check
In PR mode, the PR workflow verifies these contexts and surfaces them as checks in the PR.
Notes
- The script requires a clean working tree (no uncommitted or untracked changes). Commit or stash local changes before running.
- On macOS without CUDA (
nvcc), the script automatically falls back to non-CUDA test/coverage defaults for local runs. - On Linux,
local/lintandlocal/testuse--all-features. If you want the opt-in Vulkan path covered locally, install the Vulkan development packages first, for examplelibvulkan-devandglslang-toolson Debian/Ubuntu (on Ubuntu 22.04, installglslang-toolsfrom the LunarG Vulkan SDK). local/lintuses the same clippy flags as CI and release:cargo clippy -Z unstable-options --workspace --all-features --all-targets --timings -- -D warnings(uses the nightly pinned inrust-toolchain.toml).zizmoris installed automatically (Homebrew on macOS, apt on Linux) when not already available.zizmoris advisory in local runs and does not block lint/test execution.- Test output is suppressed unless tests fail.
local/testderives changed Rust tests from the branch diff. Integration tests undercrates/<crate>/tests/*.rsrun as specific test targets; changed in-source test modules run by package with a filename filter. Override withLOCAL_VALIDATE_TEST_CMDwhen a branch needs broader local coverage.local/macos-appruns only on macOS; on Linux it is marked skipped.- Override or disable macOS app validation with:
LOCAL_VALIDATE_MACOS_APP_CMDandLOCAL_VALIDATE_SKIP_MACOS_APP=1. local/e2eauto-runsnpm cionly whencrates/web/ui/node_modulesis missing, then runsnpm run e2e:installand changed Playwright specs fromcrates/web/ui/e2e/specs/. Override withLOCAL_VALIDATE_E2E_CMD.- Enable the live Ollama/Qwen regression check with
LOCAL_VALIDATE_OLLAMA_QWEN_E2E=1. It starts a local Ollama server onMOLTIS_E2E_OLLAMA_QWEN_API_PORT(default11435), pulls the configured Qwen model if missing, and runs the dedicated Playwright project. Override the command withLOCAL_VALIDATE_OLLAMA_QWEN_E2E_CMD. - Coverage is opt-in because it runs Rust tests. Enable it with
LOCAL_VALIDATE_COVERAGE=1when needed.
Merge and release safety
This local-first flow is for pull requests. Full Rust and Playwright suites still run on GitHub runners for CI/release paths where required.