This guide is the practical local workflow for Arco contributors.
- Rust toolchain (repo targets Rust 1.85.x)
just(task runner)uv(Python package/env runner)- Python 3.12+ recommended for local bindings workflows
Install just if needed:
cargo install just --locked --version 1.43.0From repo root (recommended before running anything else):
just install-hooks
just setup
just py-synccargo install --path ~/dev/arco/crates/arco-cli --force --lockedcargo run -p arco-cli -- --help
cargo run -p arco-cli -- run examples/dense-lp/input.kdl --compactjust py-devjust check-pkg arco-ops
just test-pkg arco-ops
just clippy-pkg arco-opsjust py-fmt-check
just py-lint-check
just py-type
just py-testjust docs-test
just test-example-formulationsArco uses a repo-local architecture contract:
architecture-layers.tomlscripts/check_architecture.py
Run policy checks with:
just arch-checkRules are strict:
- every workspace crate must be classified in
architecture-layers.toml - unknown/unclassified crates fail the check
- disallowed crate-to-crate layer edges fail the check
When adding a new crate, update architecture-layers.toml in the same change.
- Open draft PRs early for visibility and CI signal.
- Keep PRs scoped; split unrelated changes before review.
- Reference issues in PR body (
Closes #123) only when fully resolved. - Prefer force-push only on your feature branch; avoid rewriting shared history.
- Re-run checks after resolving merge conflicts; don’t trust stale CI.
- If CI fails, post a short root-cause + fix note in the PR for reviewers.
Suggested PR checklist:
-
just arch-checkpasses -
just cipasses - docs updated for behavior/API changes
- migration/dependency impacts called out
Before pushing substantial changes:
just ciThis is the canonical pre-push validation path.
- Format/lint/tests pass for touched scope.
just arch-checkpasses.just cipasses for broader changes.- Docs updated for any user-visible behavior/API changes.
Some solver backends may require external SDK/runtime setup depending on target.
Use package-scoped commands (just test-pkg, just clippy-pkg) while iterating,
then run full just ci in a fully provisioned environment.
Rebuild editable extension:
just py-devThen re-run tests:
just py-testUpdate architecture-layers.toml for:
- new crate classification
- intentional dependency overrides (only when justified)
Use concise sections in GitHub PR descriptions:
- Summary: what changed
- Why: problem/risk addressed
- Validation: exact commands run
- Follow-ups: explicit non-goals or deferred work