Goal
Adopt the same validation shape as delaunay: just ci should be the GitHub-equivalent flat union of leaf validators, and each changed surface should have a focused validator that can be composed once.
Deliverables
Desired validation buckets
- GitHub Actions:
action-lint + zizmor
- Markdown: markdown lint + spell check
- TOML: parse, Taplo lint, Taplo format check
- YAML/CFF: dprint/yamllint + citation checks when applicable
- Python: Ruff format/check, ty, pytest
- Notebooks: reusable checker CLI plus fast headless execution bucket
- Core Rust: rustfmt, core/library Clippy, rustdoc, repository Semgrep if present
- Rust focused tests: unit, doctest, integration recipes for changed-surface validation
- Rust broad CI tests: one release-profile nextest bucket for lib unit + integration tests, plus separate doctests
- Benchmarks: benchmark harness compile
- Examples: example validation
Notebook standard
Even if la-stack has no notebooks today, add or plan for the standard notebook leaf so future notebooks do not invent a separate workflow:
notebook-lint: validate .ipynb JSON, reject committed outputs/execution counts, extract code cells, run Ruff format/check and ty, compile cells.
notebook-check: notebook-lint plus fast headless execution, writing executed notebooks/artifacts under target/notebooks without mutating source notebooks.
notebook-check-slow: explicit slow notebook execution bucket.
notebook-clear-outputs-all: mutating cleanup helper.
Prefer a reusable scripts/notebook_check.py CLI for lint/hygiene/extracted-code checks, with Just recipes owning headless execution policy.
CI shape
just ci should compose the leaf validators directly. Avoid broad nested bundles that precompile a target class and then run it again. In particular, avoid the debug-plus-release Rust test split in broad CI: --lib and --tests select different target classes, but running them in different profiles recompiles the library twice. For scientific correctness and less duplicate compilation, broad Rust CI should use one release-profile nextest pass for lib unit + integration tests.
Goal
Adopt the same validation shape as delaunay:
just cishould be the GitHub-equivalent flat union of leaf validators, and each changed surface should have a focused validator that can be composed once.Deliverables
just cicompose leaf validators directly instead of depending on broad nested bundles.test-unit,test-doc, andtest-integrationas focused recipes for local or changed-surface validation.test-rust-ci, that runs lib unit tests and integration tests together withcargo nextest run --release --profile ci --lib --tests.just test-rustandjust cithroughtest-rust-ciplus the separate doctest bucket, rather than compiling unit tests in the default profile and integration tests again in release.cargo test --docis not covered by nextest.clippy --all-targetsas an optional sweep outsidejust ciif it duplicates tests/examples/benches that have their own validators.just cifor core Rust or GitHub-equivalent validation.Desired validation buckets
action-lint+zizmorNotebook standard
Even if la-stack has no notebooks today, add or plan for the standard notebook leaf so future notebooks do not invent a separate workflow:
notebook-lint: validate.ipynbJSON, reject committed outputs/execution counts, extract code cells, run Ruff format/check and ty, compile cells.notebook-check:notebook-lintplus fast headless execution, writing executed notebooks/artifacts undertarget/notebookswithout mutating source notebooks.notebook-check-slow: explicit slow notebook execution bucket.notebook-clear-outputs-all: mutating cleanup helper.Prefer a reusable
scripts/notebook_check.pyCLI for lint/hygiene/extracted-code checks, with Just recipes owning headless execution policy.CI shape
just cishould compose the leaf validators directly. Avoid broad nested bundles that precompile a target class and then run it again. In particular, avoid the debug-plus-release Rust test split in broad CI:--liband--testsselect different target classes, but running them in different profiles recompiles the library twice. For scientific correctness and less duplicate compilation, broad Rust CI should use one release-profile nextest pass for lib unit + integration tests.