0.1.0 - 2026-06-13
First public release of the DisSModel Platform MVP.
Added
- REST API (
services/api) — FastAPI gateway withX-API-Keyauthentication applied to all routes; endpoints for job submission (async and inline), status polling, reproduction, publishing, model listing, file upload/download, and admin sync. - Worker (
services/worker) — Redis-queue consumer that delegates execution todissmodel.executor.runner.execute_lifecycle; publishes profiling metrics andExperimentRecordJSON to MinIO. - JupyterLab (
services/jupyter) — Containerised notebook environment (port 8888) withdissmodel,ipyleaflet,ipywidgets, andfoliumpre-installed. - Streamlit CA Explorer (
services/streamlit-ca) — Interactive explorer for Cellular Automata models. - Streamlit SysDyn Explorer (
services/streamlit-sysdyn) — Interactive explorer for System Dynamics models. - Nginx reverse proxy (
services/nginx) — Routes/dissmodel/jupyter,/dissmodel/api,/dissmodel/minioin production. - Docker Compose — Development (
docker-compose.yml) and production (docker-compose.prod.yml) stacks with Redis, MinIO, config-sync sidecar, and all services. - CI pipeline (
.github/workflows/ci.yml) — Lint (ruff), type-check (mypy), security scan (bandit), API tests, worker executor validation, and Docker build jobs; all gates are enforced (no|| truebypasses). - Dependabot — Automated dependency updates for
services/api,services/worker, andservices/jupyter. - Presigned URL generation — Local HMAC signing for MinIO download links without extra network round-trips.
- Config-sync sidecar — Git-backed model registry auto-pulled into all services at runtime.
- Executor contract validation (
scripts/validate_executors.py) — CI step that checks registered executors comply with the dissmodel interface before tests run.
Fixed
- Moved mid-file imports (
hmac,hashlib,urllib.parse,datetime.timezone) to module top inservices/api/main.py. - Removed unused imports (
json,timedelta,S3Error,start_sync_scheduler,reproduce_experiment,run_experiment) fromservices/api/main.pyandservices/worker/storage.py. - Added
# type: ignore[misc]for redis-py sync/async stub ambiguity inservices/worker/worker.py. - Added
# nosec B104and# nosec B310for intentional false positives in bandit scan.
Changed
- Renamed
services/frontend/→services/jupyter/to reflect that the service is JupyterLab, not a generic web frontend. - Updated all repository URLs from
LambdaGeo/dissmodel-platform→DisSModel/dissmodel-platforminREADME.mdanddocs/deployment.md. - Updated core library link from
LambdaGeo/dissmodel→DisSModel/dissmodel. - Updated organisation name from
LambdaGeo / INPE→DisSModel / INPEinREADME.mdcontact section. typecheckCI job now setsPYTHONPATH=$PWD/servicesso worker imports resolve correctly without stubs.