Skip to content
VPRamonPublic

Repository files navigation

spod

CI License: AGPL-3.0-or-later

A service application for Siderust POD in Rust.

spod is an engineering-oriented service for configuration, orchestration, artifact handling, and interfaces around the reusable POD APIs in Siderust. It does not maintain a second scientific POD implementation.

The current MSRV is Rust 1.89, matching the dependency graph and the Docker builder image.

Status: engineering preview (pre-1.0). The synthetic end-to-end POD path is usable for development and validation. Real-data workflows and the REST surface are still evolving. This project is not yet intended for flight-critical or safety-critical operational use.

What is implemented

Area Current scope
POD science Provided by siderust::pod (forces, propagation, observations, estimation, QC and products)
Scientific backend Siderust 0.12
Full SGP4/SDP4 Local Vallado-style backend retained until upstream parity
Products & QC Residuals, orbit products, manifests, comparison/QC utilities
Interfaces Rust library, command-line interface, experimental Axum REST API

The project separates service orchestration, external interfaces, and persistence from the reusable POD implementation in Siderust.

Repository structure

src/
  service/       Configuration, orchestration, REST/CLI and artifact handling
  sgp4/          Temporary full Vallado SGP4/SDP4 compatibility layer (#29)
  bin/           CLI and experimental REST entry points

Quick start

git clone https://github.com/VPRamon/spod.git
cd spod
cargo test

Relationship with the Siderust ecosystem

Foundational astrodynamics, typed quantities, time scales, frames, standard formats, and reusable numerical mechanics live in the released Siderust ecosystem crates. spod is built on top of siderust::pod; it does not expose scientific compatibility facades. Full Vallado SGP4/SDP4 remains a documented temporary local exception while parity is tracked by #29 and Siderust #98.

Validate and run the synthetic POD configuration:

cargo run --bin spod -- validate-config examples/configs/leo_gnss_mvp1.yaml
cargo run --bin spod -- run examples/configs/leo_gnss_mvp1.yaml

Run the experimental REST service in a container:

docker build -t spod:dev .
docker run --rm -p 8080:8080 spod:dev

The service listens on SPOD_REST_BIND and writes job output below SPOD_REST_OUT.

See examples/README.md for the service workflow.

Design principles

  • Type safety for physical quantities. Units, epochs, frames and states should be difficult to mix accidentally.
  • Traceable numerical behaviour. Scientific algorithms should have explicit assumptions and validation tests.
  • Separation of concerns. Reusable dynamics, observations, estimation, formats, and QC remain independently testable in Siderust; spod keeps service orchestration at the application boundary.
  • No unsafe Rust. The library forbids unsafe_code.
  • Standards-oriented interoperability. Common astrodynamics and geodesy formats are treated as first-class interfaces.

Validation

The CI pipeline checks formatting, Clippy, tests across feature combinations, documentation, dependency direction, and source hygiene.

Run the main checks locally with:

cargo fmt -- --check
cargo check --workspace --all-targets --all-features
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo test --workspace --no-fail-fast
cargo test --workspace --no-default-features --no-fail-fast
cargo test --workspace --all-features --no-fail-fast
cargo test --doc --workspace --all-features
cargo doc --workspace --no-deps
bash scripts/check_dep_graph.sh
bash scripts/check_no_todos.sh
bash scripts/check_legacy_name_refs.sh

Build and exercise the container locally:

docker build -t spod:dev .
docker run --rm --entrypoint spod spod:dev --help
docker run --rm -p 8080:8080 spod:dev

The REST container defaults to 0.0.0.0:8080, so the published port is reachable from outside the container. Set SPOD_REST_BIND and SPOD_REST_OUT to override the defaults.

Contributing

Contributions, validation cases and format-compatibility reports are welcome. See CONTRIBUTING.md.

For security issues, see SECURITY.md. For support and commercial-licensing enquiries, see SUPPORT.md.

License

spod is available under AGPL-3.0-or-later. See LICENSE.

Commercial licensing can be discussed separately; see SUPPORT.md.