Spaces:
Sleeping
Repository Guidelines
Project Structure & Module Organization
src/ follows the current solverforge-cli app shape: api/ for HTTP
routes, SSE, and DTOs; solver/ for retained-job orchestration; domain/mod.rs
for the current solverforge::planning_model! manifest; domain/ for the
exported model modules; constraints/mod.rs for constraint assembly; and
constraints/*.rs for the individual score rules. data/mod.rs is the stable
wrapper; data/data_seed.rs is the thin public data surface; and
data/data_seed/ holds the deterministic sample dataset modules, including the
public entrypoints and the LARGE instance builder. domain/plan.rs owns
Plan, the scalar-variable Shift, and the scalar nearby hook functions;
domain/employee.rs and domain/care_hub.rs hold supporting domain types.
static/ holds the browser app (static/app/**/*.mjs) and generated UI config.
Frontend tests live in tests/frontend/. Container packaging is defined by
Dockerfile.
This project depends on the published solverforge and solverforge-ui crates.
Build, Test, and Development Commands
make helpβ show the supported local development and validation commands.make run-releaseβ run the app locally on:7860.make testβ run the standard Rust, frontend, and Playwright validation surface.make test-e2eβ run the real browser Playwright smoke.make ci-localβ run the Space-oriented local CI pipeline: fmt, clippy, release build, standard tests, and Docker image build.make test-slowβ run the ignored large-demo acceptance solve.make pre-releaseβ runmake ci-localplus the slow acceptance solve.make space-buildβ build the Docker image used by the Docker-based Space deployment path.cargo run --release --bin solverforge-hospitalβ run the app locally on:7860.cargo testβ run Rust unit and integration tests.cargo test large_demo_solves_to_feasible_terminal_state -- --ignored --nocaptureβ slow end-to-end solver acceptance test.find static/app -name '*.mjs' -print0 | xargs -0 -n1 node --checkβ syntax-check frontend modules.node --test tests/frontend/*.test.jsβ run browserless frontend tests.docker build -f Dockerfile -t solverforge-hospital .β build the image from the repository root context.
Coding Style & Naming Conventions
Use Rust 2021 style with cargo fmt; keep imports and formatting
rustfmt-compatible. Prefer small, explicit functions over clever indirection.
Rust module and file names are snake_case; types are UpperCamelCase; tests
should describe behavior plainly. Frontend modules are plain ES modules in
snake-case filenames. Keep generator logic deterministic: do not introduce
random behavior without a fixed seed and an explicit reason.
Documentation And Commenting Policy
Assume a beginner reader who is new to SolverForge and new to optimization modeling.
- Treat
README.md,WIREFRAME.md, this file,docs/api-and-solver-policy.md,docs/screenshot.png,solver.tomlcomments, and the visible API help instatic/app/shell/api-guide.mjsas one canonical documentation surface. When one changes, audit the others that describe the same behavior. - Add module-level docs or comments for every new module that explain its role in the app and where it sits in the data flow.
- Add function comments when the function does real coordination work, rebuilds invariants, shapes demo data, converts between layers, or otherwise does something a beginner would not infer immediately from the signature.
- Write comments that explain intent, domain meaning, invariants, and runtime consequences. Do not write comments that merely restate syntax.
- Keep comments truthful. If behavior changes, update or delete the stale comment in the same patch.
- When docs mention versions, counts, routes, solver policy, or validation expectations, verify those facts against the current code and tests in the same turn.
- Prefer present-tense current-state docs after a refactor lands. Do not leave future-tense planning language in repo docs unless the file is intentionally a still-pending plan.
- When onboarding surfaces change, keep
README.md,WIREFRAME.md, and this file aligned.
The standard to aim for is: a new reader should be able to understand why a piece of code exists before they need to understand every line of how it works.
This repo does not have a canonical hosted GitHub Actions workflow yet. Treat
the Makefile targets, especially make ci-local and make pre-release, as the
authoritative validation surface for the current Hugging Face Space-oriented
deployment path.
Testing Guidelines
Add Rust tests next to the behavior they protect, usually in src/...
#[cfg(test)] modules. Frontend behavior belongs in tests/frontend/ and
should use the existing fake DOM support in tests/support/; real browser
flows belong in tests/e2e/. If you change solver behavior, run both
cargo test and the ignored large-demo solve. If you change UI modules, run
the Node syntax check, frontend tests, and Playwright tests.
Commit & Pull Request Guidelines
Follow the workspace commit style seen upstream: conventional prefixes such as
fix(...), feat(...), refactor(...), test(...), and chore(...) (for
example, fix(runtime): route pure scalar construction to descriptor path).
PRs should state user-visible impact, changed config or API surface, and the
exact validation commands run. Include screenshots only for visible UI changes.
Configuration & Runtime Notes
solver.toml is embedded from domain/plan.rs via
#[planning_solution(..., solver_toml = "../../solver.toml")]; treat it as
the runtime source of truth. Keep solverforge.app.toml,
static/sf-config.json, and Docker/runtime port settings aligned with any port
or route changes.