Spica is a small Rust workspace centered on spica-asl, a library crate that models a JSONata-oriented subset of Amazon States Language (ASL). The repository also contains a thin spica binary crate that currently serves as a placeholder executable.
crates/asl—spica-asl, the main library cratecrates/cli—spica, the remote CLI binary crate
The library is the primary implementation surface today. It defines typed state-machine models for ASL states such as Task, Choice, Map, Parallel, Pass, Wait, Fail, and Succeed, along with supporting types like retries, catches, branches, and item processors.
spica-asl intentionally models a JSONata-only learning subset of ASL. The crate-level documentation in crates/asl/src/lib.rs is the canonical statement of scope.
In particular:
- JSONata-based
Output,Arguments,Assign, andConditionhandling is modeled - JSONPath-specific fields and broader Step Functions surface area are intentionally omitted
- the serde model is intentionally lenient in some places, so fixture-based tests are an important contract
Run these commands from the repository root.
- Build the whole workspace:
cargo build
- Build the ASL library only:
cargo build -p spica-asl
- Build the binary crate only:
cargo build -p spica
- Run the whole workspace test suite:
cargo test
- Run only the ASL library tests:
cargo test -p spica-asl
- Run a single test by name filter:
cargo test -p spica-asl test_state_machine_minimalcargo test -p spica-asl test_valid_resources_roundtrip
- Check formatting:
cargo fmt --all --check
- Run clippy across the workspace:
cargo clippy --workspace --all-targets --all-features -- -D warnings
- Run the binary crate:
cargo run -p spica
- Build documentation:
cargo doc --workspace
The most important test coverage currently lives in spica-asl.
State modules and support modules contain inline unit tests that exercise serde behavior and round-trip expectations.
The library also uses a fixture corpus under:
crates/asl/tests/resources/validcrates/asl/tests/resources/invalid
The crate-level tests in crates/asl/src/lib.rs use this corpus to enforce parse and round-trip behavior. If you change the modeled subset or field validation rules, check those tests and fixture expectations carefully.
This repository is still early-stage at the project level:
spica-aslcontains the meaningful implementation workspicais still a placeholder binary- repository automation and contributor guidance are intentionally lightweight and focused on the current Rust/Cargo workflow
For architecture and design decisions, see Architecture.md. For contributor workflow details, see CONTRIBUTING.md. For Claude Code guidance, see CLAUDE.md. For broader AI-agent guidance, see AGENTS.md.