Skip to content
Documentation

NosoGraph v0.2.1 — Stabilization

NosoGraph v0.2.1 is a backward-compatible stabilization patch for the v0.2.0 Compare V2 milestone. It fixes verified correctness defects, removes project-owned deprecated runtime behavior, closes recently introduced typing gaps behind an expanded type-check ratchet, and refreshes the technical-debt ledger. It adds no product features, widens no public API, and does not change Compare V2 biomedical semantics, fingerprints, exports, or replay behavior.

Fixed

  • Timezone-aware UTC timestamps. The asynchronous job queue, target hypothesis agent, and the dossier web flow now construct UTC values with explicit timezone awareness, and machine-facing serialized timestamps carry an explicit +00:00 offset. Filename-safe dossier timestamps keep their exact YYYYMMDDTHHMMSSZ shape, so archive and download naming is unchanged. Redundant manually appended UTC text was removed where the serialized value already carries the offset.
  • Open Targets ingestion hardening. Optional drug-development phase data is normalized at a small explicit boundary: integer and numeric-string phases become integers; missing, null, boolean, malformed, or unsupported values normalize to "no phase" instead of crashing import. Snapshot identifiers are typed as UUID values. Deterministic import behavior and existing snapshot identity are preserved.
  • Compare V2 persisted-status validation. Persisted results are validated at the storage boundary before constructing the typed response. Only comparable and insufficient_data are valid stored states; valid states round-trip unchanged, and an unknown stored state is treated as invalid persisted data through the service's existing persistence-error behavior (HTTP 409 via CompareRunIncompleteError) instead of surfacing a raw validation error or being silently coerced.
  • Stable disease discovery under concurrent test runs. The test-owned zz_scaffold_test scaffold slug is excluded from Disease.list_all(), so parallel test execution can no longer leak a transient fixture into registry sampling or disease list output.

Changed

  • The informational mypy ratchet (make typecheck) now also covers the recently shipped stabilization surfaces: the Open Targets import adapter, all of biomed/nosograph_compare/, and the dossier API/router/service modules. Those files type-check cleanly; the older pre-existing backlog in previously checked files remains tracked as debt and is unchanged by this release.
  • Obsolete type-suppression comments were removed from the dossier service after confirming the optional PDF imports (WeasyPrint, ReportLab) are typed correctly; fallback behavior is unchanged and still covered by tests.
  • Public package, runtime, citation, CodeMeta, roadmap, and documentation metadata advance to v0.2.1.

Compatibility

  • Backward-compatible patch release: no CLI, API, package, or persisted-data contract changes.
  • Compare algorithm nosograph-compare-v2 remains at 2.0.0; the persisted result contract remains schema 2.0.
  • Citation note: v0.2.1 has no Zenodo archive record yet. Until one exists, the preferred citation uses the all-versions concept DOI; the v0.2.0 version DOI remains a historical record for v0.2.0 only and must not be cited for v0.2.1.

Known limitations and remaining debt

  • Third-party warnings remain visible and documented: FastAPI/Starlette TestClient's future httpx2 migration and SHAP/Matplotlib color-map deprecations are dependency-family work deferred to the ledger.
  • The mypy ratchet across remaining legacy runtime boundaries (59 known errors in 45 previously checked files) continues as incremental debt work.
  • Remaining open items — including a single UTC timestamp utility, SPDX/SBOM license reporting, trusted PyPI publishing with provenance, and scaffold-validation cost reduction — are prioritized in the repository-root TECHNICAL_DEBT_ISSUES.md active backlog.

Verification

python -m ruff check src tests
python -m ruff format --check src tests
python scripts/lock_verify.py
python scripts/check_imports.py
python scripts/check_public_metadata.py
python scripts/check_public_fonts.py
python -m pytest tests/ -m "unit and not network and not slow" -q --tb=short -n auto --dist=loadscope --ignore=tests/test_evidence_workspace_browser.py
python -m pytest tests/ -m "integration and not slow" -q --tb=short
python -m mkdocs build --strict
nosograph disease validate sle|ra|ibd|ms|ss|ssc|t1d|ad --strict   # curated eight, individually

Maturity

Public Alpha — research use only. NosoGraph is not medical advice, a diagnostic system, or clinical decision support. No public hosted demo is deployed.