github-actions[bot]
chore: sync uc-deliveries Space
f6213fc
# Repository Guidelines
## Project Structure And Naming
This repo follows the current `solverforge-cli` app shape. The app package
version is `1.0.1`, and the release binary is `solverforge_deliveries`.
- `src/domain/mod.rs` owns the `solverforge::planning_model!` manifest.
- `src/domain/plan.rs` owns the `Plan` planning solution.
- `src/domain/delivery.rs` owns the `Delivery` problem fact.
- `src/domain/vehicle.rs` owns the `Vehicle` planning entity and its
`delivery_order` list variable.
- `src/domain/preview.rs` owns transport/view preview structs.
- `src/domain/route_metrics/` owns route preparation, CVRP hooks, scoring
preview, route geometry, and insertion ranking.
- `src/constraints/` owns one score rule per file plus `mod.rs` assembly.
- `src/data/data_seed/` owns deterministic city demo-data modules with grouped
visit files for scaled delivery counts.
- `src/api/` owns REST, DTO, and SSE surfaces.
- `src/solver/` owns retained-job runtime orchestration.
- `static/app/models/` owns frontend plan modeling.
- `static/app/ui/` owns browser layout and rendering helpers.
Keep the canonical solution name `Plan`. Do not reintroduce `DeliveryPlan` or
`delivery_plan.rs`.
## File Size Rule
No source, test, frontend, config, or repo documentation file should reach 300
lines. Split by responsibility before that point. Large generated/cache output
under `target/` and `.osm_cache/` is outside this rule.
## Build And Validation Commands
- `make help` shows the supported command surface.
- `make run-release` runs the app locally on `:7860`.
- `make test` runs Rust, frontend, and Playwright browser tests.
- `make test-e2e` runs the real browser Playwright smoke.
- `make space-build` builds the Docker image used by Hugging Face Spaces.
- `make space-run` builds and runs that image locally.
- `make ci-local` runs formatting, clippy, release build, standard tests, and
the Space Docker image build.
- `make test-live-road` runs the env-enabled road-network smoke test.
- `make pre-release` runs `ci-local` and the live road-network smoke.
- `cargo test` runs Rust unit and integration tests.
- `node --test tests/frontend_models.test.mjs` runs frontend model tests.
Use the Makefile as the authoritative local workflow, matching the
`solverforge-hospital` Space/Docker validation standard.
## No Suppression Policy
Do not add warning suppressions, fallback compatibility branches, or unused
helper modules. If a split creates unused code, restructure the modules so each
compiled item is used by its crate.
## Documentation Policy
Keep `Cargo.toml`, `Cargo.lock`, `Makefile`, `Dockerfile`, `README.md`,
`WIREFRAME.md`, `AGENTS.md`, `docs/screenshot.png`,
`solverforge.app.toml`, `solver.toml`, `static/sf-config.json`, and the visible
API guide in
`static/app/ui/api-guide.mjs` aligned.
When changing routes, solver policy, demo IDs, dependency sources, file layout,
or browser behavior, update the docs and screenshot in the same patch. Prefer
current-state documentation over planning language.
## Testing Guidance
Add Rust unit tests next to the behavior they protect. Add API integration
coverage under `tests/api_contract/` and shared integration helpers under
`tests/support/` only when every helper is used by the single
`tests/api_contract.rs` crate. Add frontend model tests in
`tests/frontend_models.test.mjs`, and browser-flow tests in `tests/e2e/`.
Road-network tests should stay env-gated unless the test uses only cached or
straight-line behavior. Use `SOLVERFORGE_RUN_LIVE_TESTS=1` through
`make test-live-road` when validating live map/routing paths.
## Runtime Notes
`solver.toml` is embedded by `Plan` through the planning-solution macro. Treat
it as the solver policy source of truth.
`Cargo.toml` currently uses Rust `1.95` and crates.io dependency declarations.
Keep every direct dependency declaration, `solverforge.app.toml`, `Cargo.lock`,
and docs truthful if dependency sources or versions change.
The app serves stock `solverforge-ui` assets, local static app modules, and
Axum API routes from one process. Retained solver jobs are controlled through
REST and observed through SSE.