Goal
Align causal-triangulations with the shared validation shape: just ci should be the GitHub-equivalent flat union of leaf validators, and notebook validation should keep the current strong behavior while moving more logic into a reusable checker CLI.
Deliverables
Keep from the current notebook workflow
causal-triangulations already has the right notebook behavior:
- source notebooks must not commit outputs or execution counts
- notebook code is linted/type-checked after extraction
- fast notebooks execute headlessly in CI
- executed notebooks/artifacts are written under
target/notebooks
- slow notebooks stay in an explicit
notebook-check-slow bucket
Standardize
- Move output hygiene, JSON validation, cell compilation, extracted-code Ruff/ty checks, and diagnostics into a reusable
scripts/notebook_check.py CLI.
- Keep Just recipes responsible for launch/headless execution policy:
notebook, notebook-lint, notebook-check, notebook-check-slow, notebook-clear-outputs-all.
- Make
just ci compose leaf validators directly rather than depending on broad nested bundles that may duplicate target classes.
Desired validation buckets
- GitHub Actions
- Markdown
- TOML
- YAML/CFF
- Python
- notebooks
- core Rust
- 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
- benchmark harness compile
- examples
CI shape
Broad all-target Clippy sweeps can remain as optional manual recipes, but should not make just ci compile tests/examples/benches before their own validators run. 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
Align causal-triangulations with the shared validation shape:
just cishould be the GitHub-equivalent flat union of leaf validators, and notebook validation should keep the current strong behavior while moving more logic into a reusable checker CLI.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.just ciif they duplicate tests/examples/benches that have their own validators.just cifor core Rust or GitHub-equivalent validation.Keep from the current notebook workflow
causal-triangulations already has the right notebook behavior:
target/notebooksnotebook-check-slowbucketStandardize
scripts/notebook_check.pyCLI.notebook,notebook-lint,notebook-check,notebook-check-slow,notebook-clear-outputs-all.just cicompose leaf validators directly rather than depending on broad nested bundles that may duplicate target classes.Desired validation buckets
CI shape
Broad all-target Clippy sweeps can remain as optional manual recipes, but should not make
just cicompile tests/examples/benches before their own validators run. 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.