NosoGraph v0.2.1 — Stabilization
Backward-compatible stabilization patch for the v0.2.0 Compare V2 milestone. No new features, no public API changes, and no changes to Compare V2 biomedical semantics, fingerprints, exports, or replay behavior.
Fixed
- Timezone-aware UTC timestamps in the asynchronous job queue, target hypothesis agent, and dossier web flow; machine-facing serialized timestamps carry an explicit UTC offset while filename-safe tokens retain their exact
YYYYMMDDTHHMMSSZshape. - Open Targets ingestion normalizes optional phase data at an explicit boundary (integer/numeric-string phases become integers; missing, null, boolean, malformed, or unsupported values become no phase instead of crashing import) and types snapshot identifiers as UUID values with deterministic import behavior preserved.
- Compare V2 validates persisted status at the storage boundary:
comparableandinsufficient_dataround-trip unchanged; unknown stored statuses are invalid persisted data following the existing persistence-error path rather than a raw validation error or silent coercion toinsufficient_data. - Disease discovery excludes the transient
zz_scaffold_testtest fixture so parallel test execution no longer leaks it into registry sampling.
Changed
- The informational mypy ratchet (
make typecheck) now covers the recently shipped stabilization surfaces (Open Targets import adapter,biomed/nosograph_compare/, dossier API/router/service); those files type-check cleanly. - Removed obsolete dossier-service type-suppression comments after confirming the optional WeasyPrint/ReportLab imports are typed correctly; PDF fallback behavior is unchanged.
- Technical-debt ledger refreshed with a prioritized active backlog separating current open work from the completed historical audit.
- Public package, runtime, citation, CodeMeta, roadmap, and documentation metadata advance to v0.2.1. v0.2.1 has no Zenodo archive record yet, so citation metadata uses the all-versions concept DOI; the v0.2.0 version DOI remains historical metadata for v0.2.0 only.
Known limitations
- Third-party warnings remain visible and documented: FastAPI/Starlette TestClient's future
httpx2migration and SHAP/Matplotlib color-map deprecations (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.
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
python -m med_research.cli disease validate sle|ra|ibd|ms|ss|ssc|t1d|ad --strict