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:00offset. Filename-safe dossier timestamps keep their exactYYYYMMDDTHHMMSSZshape, so archive and download naming is unchanged. Redundant manually appendedUTCtext 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
comparableandinsufficient_dataare 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 viaCompareRunIncompleteError) instead of surfacing a raw validation error or being silently coerced. - Stable disease discovery under concurrent test runs. The test-owned
zz_scaffold_testscaffold slug is excluded fromDisease.list_all(), so parallel test execution can no longer leak a transient fixture into registry sampling ordisease listoutput.
Changed¶
- The informational mypy ratchet (
make typecheck) now also covers the recently shipped stabilization surfaces: the Open Targets import adapter, all ofbiomed/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-v2remains at2.0.0; the persisted result contract remains schema2.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
httpx2migration 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.mdactive 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.