Releases: butkeraites/sirom
Release list
SIROM v0.4.4
Documentation patch over v0.4.3. No library code or API change.
Added
- A "Release history" table in
README.mdlinking each version to its GitHub release, its milestone (with PR count), andCHANGELOG.md.
Changelog index
- v0.4.4 — Documentation patch (this release)
- v0.4.3 — Tooling / process patch
- v0.4.2 — Tooling / process patch
- v0.4.1 — Documentation patch over 0.4.0
- v0.4.0 — Architecture-deepening release: make modules honest and concentrate scattered logic
- v0.3.0 — Robust CVRP demo over VRP-REP (
demo/vrp/) - v0.2.0 — First substantial release of SIROM as a deployable, documented service
Full notes for every version: CHANGELOG.md
SIROM v0.4.3
Tooling / process patch over v0.4.2. No library code or API change.
Added
scripts/refresh_release_index.py— regenerates the cross-release "Changelog index" footer on every GitHub release (versions fromgh release list, blurbs fromCHANGELOG.md); idempotent, with a--dry-runpreview.- A "Cutting a release" section in
CONTRIBUTING.mddocumenting the release flow end to end.
Changelog index
- v0.4.4 — Documentation patch
- v0.4.3 — Tooling / process patch (this release)
- v0.4.2 — Tooling / process patch
- v0.4.1 — Documentation patch over 0.4.0
- v0.4.0 — Architecture-deepening release: make modules honest and concentrate scattered logic
- v0.3.0 — Robust CVRP demo over VRP-REP (
demo/vrp/) - v0.2.0 — First substantial release of SIROM as a deployable, documented service
Full notes for every version: CHANGELOG.md
SIROM v0.4.2
Tooling / process patch over v0.4.1. No library code or API change.
Added
- This
CHANGELOG.md, documenting every release. - A three-layer guard ensuring a version bump always ships its changelog entry:
- a CI
changelog-guardjob — the un-bypassable merge gate; - a git
pre-commithook (.githooks/, enabled per clone withgit config core.hooksPath .githooks); - a Claude Code
PreToolUsehook (.claude/).
SeeCONTRIBUTING.md.
- a CI
This is the first release cut under that convention — the changelog entry shipped in the same PR as the version bump (#38), verified green by the new guard.
Changelog index
- v0.4.4 — Documentation patch
- v0.4.3 — Tooling / process patch
- v0.4.2 — Tooling / process patch (this release)
- v0.4.1 — Documentation patch over 0.4.0
- v0.4.0 — Architecture-deepening release: make modules honest and concentrate scattered logic
- v0.3.0 — Robust CVRP demo over VRP-REP (
demo/vrp/) - v0.2.0 — First substantial release of SIROM as a deployable, documented service
Full notes for every version: CHANGELOG.md
SIROM v0.4.1
Documentation patch over v0.4.0. No code or API change.
Changes
- The robust-CVRP demo README records that it runs on SIROM v0.4.0 and clarifies that v0.4.0's internal refactors don't change the
POST /solve→GET /jobs/{id}HTTP contract the demo consumes. CONTEXT.mdgains the rest of the v0.4.0 domain vocabulary: the cluster tree (Cluster tree,build,replicate) and validation status (Status,has_errors), alongside the solution-stage terms already recorded.
For the architecture-deepening work itself, see the v0.4.0 release notes.
Changelog index
- v0.4.4 — Documentation patch
- v0.4.3 — Tooling / process patch
- v0.4.2 — Tooling / process patch
- v0.4.1 — Documentation patch over 0.4.0 (this release)
- v0.4.0 — Architecture-deepening release: make modules honest and concentrate scattered logic
- v0.3.0 — Robust CVRP demo over VRP-REP (
demo/vrp/) - v0.2.0 — First substantial release of SIROM as a deployable, documented service
Full notes for every version: CHANGELOG.md
SIROM v0.4.0
Architecture-deepening release: make modules honest and concentrate scattered logic, driven by an /improve-codebase-architecture review and grilling sessions.
Highlights
- Honest two-stage
Solutioncontract — the solver produces anUnscoredSolution(decision vector present only on optimal solves); the scoring stage addsfeasibility_probabilityvia an explicitscore()transform, yielding aScoredSolution.is_optimal()/feasibility()accessors replace the.get()/"key" in resultguards consumers hand-rolled, and the type stops lying aboutsolve_status(nowint). ClusterTreeowns its own shaping — the KMeans / WCSS / selection / subdivision algorithm moved out of the orchestrator and behindClusterTree.build(root_points, n_clusters); the tree'sreplicategate no longer leaks.batch_solvershrinks ~70 lines.- One core-level error gate —
sirom/status_checks.has_errorsreplaces theany("[ERROR]" in s …)prose-match repeated at eight sites (message strings, which are test-pinned, left untouched). - Leaner result handling — the API drops a brittle results slice and counts cluster nodes directly from the tree.
- Domain docs — a new
CONTEXT.mdglossary (including thefeasibility probabilityvs robustness naming split) and the firstdocs/adr/records, which capture the decisions not to make (keepCoefficient; keep the portfolio/CVRP builders separate) so future reviews don't re-propose them.
No behavioural change to the solver or API contract; the full test suite passes and the existing endpoints are unchanged. Builds on the robust-CVRP demo from v0.3.0 and the HTTP API / Docker / MILP support from v0.2.0. Implements the method from Butkeraites, de Salles Neto & Gendreau, Expert Systems with Applications 203:117337 (2022).
Changelog index
- v0.4.4 — Documentation patch
- v0.4.3 — Tooling / process patch
- v0.4.2 — Tooling / process patch
- v0.4.1 — Documentation patch over 0.4.0
- v0.4.0 — Architecture-deepening release: make modules honest and concentrate scattered logic (this release)
- v0.3.0 — Robust CVRP demo over VRP-REP (
demo/vrp/) - v0.2.0 — First substantial release of SIROM as a deployable, documented service
Full notes for every version: CHANGELOG.md
SIROM v0.3.0
Adds a second worked demo: solving real Vehicle Routing Problems under uncertainty with SIROM.
Highlights
- Robust CVRP demo (
demo/vrp/) — pick a real instance from VRP-REP, and SIROM returns a Pareto frontier of candidate routings trading total distance against the probability the plan stays feasible. The screenshot above shows it solving AugeratA-n32-k05: the route map (depot + two vehicle routes) beside the clickable distance-vs-robustness frontier. - SIROM-as-a-service — the demo backend never imports SIROM; it builds a
SolveRequest, submits it to the SIROM HTTP API over the container network, and polls the job. Onedocker compose upbrings up redis + sirom-api + the VRP backend + the web app. - Two uncertainty modes — demand (→ vehicle capacity, in
b) and travel time (→ a synthesized per-route shift limit, inA), toggled in the UI with α / customers / scenarios / shift-tightness sliders. - Every coordinate-based CVRP dataset on VRP-REP — Augerat A/B/P, Fisher F, Christofides CMT/Set M, Uchoa 2014 X-instances, Golden, Li, VeRoLog (11 families). Instances are listed lazily from each zip; depot detection handles the fleet-departure-node convention (Uchoa-style).
- Honest robustness — scored on the decoded routes rather than SIROM's vector-level feasibility (which depends on free MTZ auxiliary variables), with physically-equivalent routings deduped before building the frontier.
- Next.js front end — SVG route map + a recharts distance-vs-robustness frontier you click to draw each routing.
Builds on the HTTP API, Docker, and MILP support shipped in v0.2.0. Implements the method from Butkeraites, de Salles Neto & Gendreau, Expert Systems with Applications 203:117337 (2022).
Changelog index
- v0.4.4 — Documentation patch
- v0.4.3 — Tooling / process patch
- v0.4.2 — Tooling / process patch
- v0.4.1 — Documentation patch over 0.4.0
- v0.4.0 — Architecture-deepening release: make modules honest and concentrate scattered logic
- v0.3.0 — Robust CVRP demo over VRP-REP (
demo/vrp/) (this release) - v0.2.0 — First substantial release of SIROM as a deployable, documented service
Full notes for every version: CHANGELOG.md
SIROM v0.2.0
First substantial release of SIROM as a deployable, documented service.
Highlights
- HTTP API — async job API (
POST /solve→ pollGET /jobs/{id}) with a self-documenting Swagger/docsand a ready-to-run/example. - Deploy in one command — multi-stage Docker image +
docker compose up; Redis-backed job store for multi-worker scale-out. - ~9–29× faster — GLOP auto-selection, vectorized quality measure + scenario generation, numpy solver build, and threaded scenario solves. See
benchmarks/. - LP and MILP — integer variables supported; solver auto-selection (GLOP/SCIP) with overrides for CLP, PDLP, and commercial GUROBI/CPLEX/XPRESS.
- Correctness — fixed the constraint-slack used for clustering; characterized its frontier impact across size/seed/structure (
benchmarks/slack_fix_frontier.md). - Tooling & docs — per-phase benchmark harness, reusable frontier-diff tool, adoption-focused README with a frontier plot,
CONTRIBUTING.md. - Demo — a polished robust investment-portfolio web app built on SIROM (
demo/).
Implements the method from Butkeraites, de Salles Neto & Gendreau, Expert Systems with Applications 203:117337 (2022).
Changelog index
- v0.4.4 — Documentation patch
- v0.4.3 — Tooling / process patch
- v0.4.2 — Tooling / process patch
- v0.4.1 — Documentation patch over 0.4.0
- v0.4.0 — Architecture-deepening release: make modules honest and concentrate scattered logic
- v0.3.0 — Robust CVRP demo over VRP-REP (
demo/vrp/) - v0.2.0 — First substantial release of SIROM as a deployable, documented service (this release)
Full notes for every version: CHANGELOG.md
