Skip to content

Releases: Acumenus-Data-Sciences/Parthenon

Parthenon v1.0.8 — Publish, Library Lifecycle, and Agentic Copilots

29 May 00:05

Choose a tag to compare

v1.0.8 — Publish, Library Lifecycle, and Agentic Copilots

After the v1.0.7 platform/architecture release (CE/EE fork, extension
points, AGPLv3), v1.0.8 returns to the research surface and lands three
intertwined feature lines at once: the Publish module for authoring and
sharing study write-ups, Library Lifecycle management that gives every
cohort, concept set, and analysis a draft → published → archived →
deprecated state machine plus an admin console, and the first two
Claude Agent SDK copilots — a Study Designer and a Publication
assistant — gated behind a single runtime toggle.

Publish module

A full authoring surface for turning a study into a shareable write-up,
persisted server-side with no "lost work" failure modes:

  • Server-side draftsPublishPage loads and saves drafts through the
    API rather than browser state, with a stable documentHash for autosave
    deduplication
  • Debounced autosave with retry and a beforeunload guard, surfaced via
    a SaveStatusIndicator, SaveDraftButton, and a HybridPromptModal
  • SnapshotsPublicationSnapshotService with create/list/revert
    endpoints under optimistic locking, wired into CreateSnapshotModal,
    RevertSnapshotDialog, and a SnapshotsPanel
  • Study-scoped sharingPublicationDraftPolicy, per-draft visibility,
    a VisibilityBadge, a ShareDropdown, and a read-only wizard mode for
    viewer collaborators (Study::scopeAccessibleBy)
  • Publication library/publish/library route + PublicationLibraryPage

Shipped across PR #339 (Phase 1) and PR #347.

Library Lifecycle management

Every library artifact — cohort definitions, concept sets, and the eight
analysis types — now carries a lifecycle state, with the plumbing to manage
it at both user and admin scale.

Model + API (Phases A–B)

  • HasLibraryLifecycle trait with draft / published / archived /
    deprecated transitions, reapplied to 9 models
  • Lifecycle columns on concept_sets, cohort_definitions, and 8 analyses
    tables
  • Owner + super-admin lifecycle policies
  • promote / archive / restore endpoints plus bulk-archive and
    bulk-restore
  • RequiresPromotionException409 contract, with auto-promote when a
    draft artifact is attached to a study

List-page UX (Phase B7–B9)

  • Status tabs with live counts on the cohort-definitions, concept-sets, and
    analyses list pages
  • Super-admin scope=all on list endpoints with an AllUsersToggle (D1–D2)

Admin console (Phase D3–D9)

  • /admin/library unified index across all artifact types (D3)
  • Hard-delete with attachment preflight + audit (D4)
  • Nightly 30-day purge of soft-deleted items (D5)
  • Owner reassignment with permission check + audit (D6)
  • Bulk delete, reassign, and trash on the admin page (D7)
  • library:backfill-lifecycle command for existing rows (D8)
  • One-time lifecycle notice toast for end users (D9)

Cleanup suggestions (Phase C1–C3)

  • Nightly SuggestLibraryCleanupJob (C1), a cache table + model, an API
    endpoint (C2), and a suggestions page + banner (C3)

33 feat(library) commits, landed across PR #339 and the D-phase series.

Claude Agent SDK copilots

The first two agentic copilots, built on the Claude Agent SDK and gated so
they can be turned off entirely:

  • Study Designer (PR #343) — a read-only slice (Phase 0+1) that assists
    study design from inside the Studies workspace
  • Publication agent (PR #347) — assists manuscript drafting in the
    Publish module (read-only Phase 1 + write/approval Phase 2)
  • Generalized agent core (PR #346) — refactored for multi-profile use so
    both copilots share one engine (Phase B)
  • Runtime AI Agents toggle (PR #348) — a single admin switch gating both
    copilots, replacing the earlier publish.agent feature flag

Studies v2

  • Compiler Workbench v2 promoted to default, with v1 fidelity restored
  • Create wizard shell with an 8-step stepper (Phase 3) and a version popover
  • Post-flip audit closeout (H1–H5, M1–M19, L3–L4) plus 204 new i18n keys
  • Study::scopeAccessibleBy for collaborator lookups

Hypertension v3 outcomes study

  • v3 cohort redesign + manuscript update
  • 12 OHDSI negative controls with empirical-null calibration
  • End-to-end study run on the Acumenus OMOP CDM (1M patients)

Dependencies

  • Documented all directly-imported Python dependencies in the AI service
  • umap-learn >=0.5.0>=0.5.12; python-multipart >=0.0.27
    >=0.0.29 (PRs #330, #331, #344)

Upgrade notes

  • git pull && ./deploy.sh is sufficient for most environments. Run
    ./deploy.sh --db to apply the lifecycle-column migrations.
  • Run php artisan library:backfill-lifecycle once to set lifecycle state on
    pre-existing library rows.
  • AI Agents (Study Designer + Publication assistant) are off by
    default
    — enable them from the admin AI Agents toggle. The legacy
    publish.agent flag is no longer read.
  • The nightly purge and cleanup-suggestion jobs are scheduled automatically.

By the numbers

  • 205 commits since v1.0.7 over 18 days
  • 33 feat(library), 31 feat(publish), 11 feat(studies)
  • 3 feature lines landed together: Publish, Library Lifecycle, Agentic Copilots

Contributors

Claude Code + @sudoshi

Parthenon v1.0.7 — CE/EE Fork, Extension Points, AGPLv3

10 May 22:47

Choose a tag to compare

v1.0.7 — CE/EE Fork, Extension Points, AGPLv3

v1.0.7 is the largest architectural release in the v1.0.x arc. Where v1.0.6
was a feature drop (FinnGen, SSO, light mode), v1.0.7 is the foundation
work that makes Parthenon a platform — a Community edition (AGPLv3) that
remains fully usable on its own and an Enterprise edition that swaps in
proprietary drivers for auth, tenancy, crypto, audit, observability,
feature flags, installer phases, and compose composition.

It also completes the AGPLv3 relicense, ships Harmonia (AI-assisted
concept-mapping with a reviewer UI), lands four new industry templates
(NAACCR, STS, NCDR, lis_lab_to_omop), brings up the managed OHDSI Shiny
runtime
, and closes four critical Sentinel security findings.

CE/EE fork — Plans 01-04

Parthenon now has two editions sharing one source tree:

  • Community Edition (CE) — AGPLv3, fully featured, single-tenant defaults.
    Everything in this repo is CE.
  • Enterprise Edition (EE) — proprietary, layered on top via the eight
    extension points below. EE lives in Acumenus-Data-Sciences/Parthenon-EE
    with a sync from CE main.

Plan 01 handled the legal foundation: relicense from Apache-2.0 to
AGPL-3.0-only (#314), org transfer from sudoshi/Parthenon to
Acumenus-Data-Sciences/Parthenon (#311), CI license guard
(license-text, license-metadata, notice-and-trademarks jobs in #312).

Plans 02-04 are the architectural work — extension points, industry
templates, and the Phase 4 spec set. The detailed phase plans live in
docs/devlog/specs/ and docs/devlog/plans/.

Eight Phase 2 extension points

Every "place where EE swaps in proprietary code" is now a contract with a
default CE implementation, a typed interface, and a dependency-injection
seam. All eight landed in v1.0.7:

# Extension point PR What CE ships, what EE swaps
1 AuthDriver #315 CE: Sanctum + Spatie. EE: Authentik OIDC, Keycloak, SAML
2 TenantResolver #316 CE: single-tenant. EE: multi-tenant via host/header/JWT claim
3 CryptoProvider #317 CE: Laravel Crypt. EE: HSM/KMS-backed key wrapping
4 AuditSink #318 CE: stdout/log file. EE: SIEM (Wazuh, Splunk, Elastic)
5 ObservabilityShipper #319 CE: local Grafana. EE: Datadog, New Relic, OTel collectors
6 FeatureFlags #320 CE: env + featureFlags Zustand store + EnterpriseGate component
7 AcropolisPhases #321 CE: built-in installer phases. EE: discoverable phase plugins
8 ComposeContract #322 CE: composition contract verifier (scripts/verify_compose_contract.py)

A devlog landed late in the cycle adding --check-infra-overlay mode to
the compose verifier so CE-bundled Acropolis overlays are validated as
EE-style overlays without false positives.

Harmonia — AI-assisted concept-mapping (Plans 6+7)

The concept-mapping decision layer is now a first-class module called
Harmonia:

  • Plan 6 (#292) — backend: AI suggestion service, scoring, candidate
    generation, batch processing pipeline (Llettuce on HOLD as T-024B blocker)
  • Plan 7 (#293) — reviewer UI + ARTEMIS R-install fixes
  • "Read, Write, Think" blog post explains how Plan 6 closes the
    concept-mapping stack

Harmonia integrates with the existing OMOP vocabulary tables and the
Aqueduct ingestion pipeline.

Industry templates (Phase 3)

Four new commercial templates landed:

  • NAACCR cancer registry (T-022A, #287) — Plan 4A
  • STS National Database (T-022B, #288) — Plan 4B
  • lis_lab_to_omop (T-023, #291) — Plan 5
  • NCDR — column map + types + reader, SQL stages, manifest, fixture,
    E2E test, README (in templates/commercial/)

Plus an earlier SDTM → OMOP v5.4 bridge (Plan 6, T-016 + T-020, #274)
and ARTEMIS chemo regimens (Phase 2 Plan 5, T-019b, #275).

Managed OHDSI Shiny runtime

Parthenon now manages OHDSI Shiny app launches end-to-end:

  • Result manifest contract + result loader readiness
  • Official OHDSI viewer handoff with deepened schema guards
  • Launch metrics + throttle context surfaced
  • Managed launch workspaces with pruning
  • Smoke tests for official module entrypoints
  • Tenant grants fixed for managed Shiny smoke setup
  • HADES freshness + parity work

A dedicated devlog at docs/devlog/ documents the runtime architecture.

Aqueduct ingestion templates

The Aqueduct templates contract now ships end-to-end:

  • Run progress, current_node, timestamps, error_message exposed
  • Cancel + reconciliation flow
  • DB credentials wired correctly; pending migrations run reliably
  • Type tightening + tests + runbook
  • Comprehensive session devlog committed

Frontend i18n — 121 commits

A sustained i18n hardening pass: locale coverage, fallback handling,
missing-key detection, Arabic locale alignment with backend hidden flag,
i18n resource null placeholder support, hard-coded string elimination.

CMS Measures — 72 eCQM titles backfilled

VSAC value-set imports were missing 72 CMS eCQM measure titles. Backfilled
in #b5f32d381 (b5f32d381), exposed via a sortable + filterable Measures
page (#76e87577a), with title column added to VSAC measures table.

GIS Phase 19 — county stratification

  • gis schema deployed with HIGHSEC GRANT posture (Phase 19-02)
  • Eloquent models + dataset registration + legacy audit (19-02)
  • Nationwide multi-source load_geography + load_crosswalk (19-03)
  • UA county loader + README + conftest env override (19-03)
  • IncidenceRateService location_urban_pct + FormRequests (19-04)
  • Frontend stratifyByLocation dropdown + Pancreas warning (19-04)
  • Legacy GIS loader remediation + DSN regression guard (19-05)
  • Search_path PostGIS fix + boundary explorer + OHDSI todo consolidation

Installer GUI v0.3.0 (Tauri)

The cross-platform GUI installer made it through Phases 1-8 in this cycle:

  • Phase 1 — cross-platform run_elevated() primitive
  • Phase 2 — Linux polkit policy + privileged helper
  • Phases 3+4 — Fix-this UI + Linux Docker auto-install
  • Phase 5 — recovery panel HTML/CSS + Rust shims, Resume/Retry/Reset
  • Phases 6a-c — Windows action handlers + UAC dispatch, WSL2 + VM Platform
    preflight detection, reboot state persistence + welcome-back banner
  • Phase 7 — macOS Docker Desktop / Colima / Rancher
  • Phases 8a-b — server-mode setup (Caddy + Let's Encrypt + UFW)

Plus Hero Done page, 9-cell phase progress strip, Verify step health probe,
service-status grid + runtime-image upgrade prompt, auto-updater notify
banner, Tauri 2 plugin migration (dialog/shell/store/updater), WSL distro
enumeration, four P0 fixes from Linux Phase A bench testing.

Installer-c (contract layer)

The contract-driven installer engine reached feature parity with the GUI:

  • omop_cdm phase complete (run + check, shell-injection / password-exposure
    / output-capture fixes)
  • New contract actions: health, credentials, service-status, open-app,
    port-holder, recover, diagnose
  • 50-fingerprint diagnostic KB (10 seed → 50 expanded)
  • End-to-end round-trip tests for new actions

Security — Sentinel findings

Four critical/high findings closed in this cycle:

  • CRITICAL — SQL injection bypass in DataInterrogationService (#298)
  • CRITICAL — plaintext password leak in logs (#294)
  • CRITICAL — hardcoded Orthanc credentials (#280)
  • HIGH — SQL safety bypass in DataInterrogationService (#279)

Plus per-route permissions on /study-agent/*, FormRequest authorize()
hardening, Wazuh ports bound to localhost with token-based healthchecks,
and the existing HIGHSEC.spec.md continues to be enforced.

Studies + Patient Similarity hardening

  • Studies: protocol import → study designer; OCC/if-unmodified-since
    precondition on lock endpoint; lock-race guard; dirty-form unsaved-changes
    warning; orphan StudyDesigner.tsx (1380 LOC dead code) removed; default
    Anthropic study designer to Opus
  • Patient Similarity: temporal compare validation; workspace workflow repair
  • Care Bundles: workbench workflow hardening; VSAC measures table title column

CI / deploy / infra fixes

  • deploy — auto-heal composer autoloader poisoned by /tmp worktree paths
    (this prevents the worktree-vendor incident captured in feedback memory)
  • docker — install libuv1-dev so R fs package builds; preserve
    .gitignore mode in php entrypoint chmod sweep; fix scispacy
    en_core_sci_md wheel URL (was 404)
  • ci — pin DB_TEST_* env vars to CI postgres service; share ingest
    timestamp across wiki pages; AI review advisory; Darkstar build
    timeout 60→120; PostGIS for FinnGen migrations; align frontend Arabic
    locale + tests with backend hidden flag
  • test-infra — respect CI env when resolving test DB host; only patch
    *_testing config when broken
  • docs — harden docs deploy build; harden docs content tree deployment;
    auto-fix duplicate blog slugs

Dependencies

  • Frontend@tanstack/react-query (#308), react-joyride 3.0.2→3.1.0
    (#310), zod 4.3.6→4.4.3 (#309), deck.gl 9.2.11→9.3.2 (#237)
  • AItransformers (#302), esda >=2.5→>=2.9.0 (#305), cyvcf2

    =0.31.0→>=0.32.1 (#304), asyncpg >=0.30.0→>=0.31.0 (#303), spreg
    =1.4→>=1.9.0 (#300), geopandas >=1.0.0→>=1.1.3 (#248), scikit-learn
    (#249)

  • GitHub Actionsactions/github-script 7→9 (#301),
    astral-sh/setup-uv 3→7 (#299)
  • Production deps group — 7 updates (#307)
  • Dev deps group — 2 updates (#306)

Org transfer + license

The repo moved from sudoshi/Parthenon to
Acumenus-Data-Sciences/Parthenon on 2026-04-26 (#311). GitHub
auto-redirects, but please re-set your remotes:

git remote set-url origin git@github.com:Acumenus-Data-Sciences/Parthenon.git

License changed from Apache-2.0 to AGPL-3.0-only (#314). All
existing source contributions are re-licensed under AGPL-3.0-only per the
rel...

Read more

v0.2.0-rc2 — Linux Phase A bench-test fixes

26 Apr 01:21

Choose a tag to compare

Fixes 4 P0s found while bench-testing rc1 on Ubuntu 24.04 (Wayland) end-to-end.

What's fixed

  • Bundle 404 on every fresh install. The installer hard-coded `releases/latest/download/` which on this repo follows the Parthenon application release (v1.x.y) — not an installer release — and 404s on the bundle asset. Each shipped installer now embeds the canonical per-tag URL at compile time.
  • Bundle never attached to release. The bundle was uploaded as a CI artifact (90-day expiry) but never `gh release upload`ed. It now ships next to the .deb / .dmg / .msi.
  • Cross-device rename failure (Linux desktops). `fs::rename()` failed with `Invalid cross-device link` when the bundle cache and install target lived on different filesystems (typical: /tmp on tmpfs, $HOME on root fs). Now falls back to copy + remove on EXDEV.
  • Hecate / Qdrant blocking preflight. The `datasets/` Python package was missing from the bundle, crashing the installer on import. Added to the bundle. Also fixed Rust default for `enable_hecate` to match Python (false), so preflight no longer demands ports 6333/6334 + bootstrap assets when the user hasn't opted into Hecate.

Validation

Tested end-to-end on Ubuntu 24.04 + Wayland (beastmode):

  • Step 1 "Check System" passes through bundle download + extract + cross-device move + Python contract preflight ✓
  • Reaches Step 2 successfully (further phases pending fresh-machine test)

Known follow-ups for v0.2.0 final

  • Step 1 deployment-mode chooser (single-machine vs server / FQDN + Caddy / Apache / Traefik)
  • Skip optional-service preflight checks when corresponding `enable_*` is false
  • Smarter container name + port collision detection on machines with existing Parthenon stacks

v0.2.0-rc1 — Installer comprehensive first-run improvements

25 Apr 23:42

Choose a tag to compare

First release candidate. Take 5.

Recent fixes

  • Visible bundle download progress (be2cd81c8) — chunked reads + progress bar replace the silent 30-90s synchronous download that made users think the app was hung.
  • Clearer Step 1 copy — explicit "~80 MB download" mention so users know what's about to happen.
  • macOS PATH augmentation (7e4685a80) — preflight finds Docker.
  • Trust pill removed (7e4685a80) — UX noise.
  • Notary retry (a144b6054) — handles Apple's transient connection timeouts.
  • Windows .sha256 CRLF fix (0ed6f7dc6) — UTF-8 no-BOM no-newline.

Built from

Commit: be2cd81c8 — fix(installer-gui): visible bundle download progress + clearer Step 1 copy

v0.1.0-rc1 — Installer GUI release candidate

24 Apr 21:16

Choose a tag to compare

First release candidate for the cross-platform Parthenon installer GUI.

Platforms:

  • Linux x64 (.deb, .rpm, .AppImage with GPG signatures)
  • macOS universal (.dmg, signed and notarized, works on Intel and Apple Silicon)
  • Windows x64 (.msi, signed with Azure Trusted Signing)

This is a release candidate for smoke testing — do not use in production.

Parthenon v1.0.6 — FinnGen Workbench, SSO, and Light Mode

16 Apr 23:18

Choose a tag to compare

The biggest feature drop of the v1.0.x arc — 275 commits in 5 days.
Four new modules, a doubled care-bundle library, and a long list of
installer / CI / deploy hardening fixes.

Highlights

FinnGen Cohort Workbench (SP1–SP4)

Full-React port of the FinnGen Shiny CO2/CodeWAS workflow, integrated
end-to-end with Darkstar (R/Plumber) and the OHDSI HADES stack.

  • SP1 — Runtime: parthenon_finngen_ro/_rw PG roles, app.finngen_runs,
    FinnGenClient, FinnGenRunService, RunFinnGenAnalysisJob, signed
    artifact URLs with X-Accel-Redirect, RBAC, Idempotency-Key middleware.
  • SP2 — Code Explorer with ROMOPAPI sync reads, vocabulary auto-grants,
    pandoc render, E2E coverage.
  • SP3 — HADES analyses (CodeWAS, TimeCodeWAS, Overlaps, Demographics)
    with bespoke SQL workers (option C2) and DuckDB result reads.
  • SP4 — Workbench UI: sessions list + shell with autosave,
    operation-tree algebra + compiler, cohort typeahead + DnD reorder, live
    expression preview, materialize step, Atlas import via active WebAPI
    registry
    (Phase E), run history, matching wrapper with SMD diagnostics
    • attrition waterfall, SP3 analysis gallery handoff, E2E + Vitest tests.

Authentik SSO via OIDC

  • app.user_external_identities + app.oidc_email_aliases tables
  • OIDC service layer, HTTP endpoints, /auth/callback page
  • API-driven Authentik provisioning of parthenon-oidc
  • Phased rollout plan; username/password preserved exactly

First-class light mode

  • Theme store + flash-prevention + ThemeToggle + per-user preference
  • 28,000+ hardcoded hex values swept to CSS variable tokens
  • Theme-aware Recharts palette
  • Light-mode compliance pass across modals, wizards, drawers, pages

Patient Similarity rework

UMAP rework, Phenotype Discovery, Inspector sidebar, AI step
interpretation, OOM streaming fixes, PSM covariate name resolution.

Care Bundles 10 → 45

Standard PROs+ eCQM library expanded with OHDSI-compliant bundles.

OpenProject bidirectional sync

n8n workflows, reconciliation server (port 9890), GSD/OP/GitHub mapper,
backfill script.

Database role split (security hardening)

  • parthenon_app (DML only — no DDL)
  • parthenon_migrator (migrations)
  • parthenon_owner (schema owner)

Installer hardening

--community flag, hecate-bootstrap module, Windows compat guard,
revised Community install landing, public bootstrap script.

Upgrade

git pull && ./deploy.sh is sufficient for most environments.

  • SSO: configure Authentik OIDC creds in .env and flip the OIDC flag.
  • FinnGen workbench: ensure darkstar is healthy.
  • DB roles: ./deploy.sh --db now uses parthenon_migrator.
  • Light mode: per-user via the header sun/moon toggle (default = dark).

Dependencies bumped

TypeScript 5.9 → 6.0, react-router-dom 6 → 7, pandas 2 → 3,
uvicorn 0.42 → 0.44, plus actions/checkout 4→6, setup-python 5→6,
upload-artifact 4→7, download-artifact 4→8.

By the numbers

  • 275 commits since v1.0.5 (60 feat(finngen), 11 feat(code-explorer),
    10 feat(darkstar), 9 feat(sync), 6 feat(auth), plus the rest)
  • 4 new modules (FinnGen, SSO, Light Mode, OpenProject Sync)
  • 35 new care bundles
  • 28,000+ hex values tokenized

Full release notes: docs/blog/2026-04-16-v1-0-6-release-notes.md


Installer: release assets are source-only. Use curl -fsSL https://parthenon.acumenus.net/install.sh | sh or run python3 install.py from the source archive. Native packages are paused until signed installers pass install smoke tests.

Parthenon v1.0.5 — Data Quality & Validation

16 Apr 23:19

Choose a tag to compare

v1.0.5 — Data Quality & Validation

v1.0.5 is the second stabilization release in the v1.0.x arc. With test
infrastructure in place from v1.0.4, this release focuses on data integrity
across the platform
— programmatic audits that verify correctness of SQL
generation, schema routing, vocabulary resolution, FHIR transformation,
migration safety, and cross-schema referential integrity.

Why data quality matters

Parthenon queries OMOP CDM data across 5 sources, each in its own PostgreSQL
schema but sharing a single vocab schema for vocabulary. Every SQL template,
every DQD check, every concept set resolution must correctly substitute the
right schema name — a single hardcoded omop. in a template breaks silently
for SynPUF, IRSF, Pancreas, and Eunomia. v1.0.5 adds programmatic guards
that catch these issues automatically.

Achilles & DQD audit

  • 128 Achilles SQL templates audited — every analysis verified for correct
    {@cdmSchema}, {@resultsSchema}, and {@vocabSchema} placeholder usage.
    No vocabulary tables using {@cdmSchema}, no hardcoded schema names, no
    unresolved placeholders. Zero violations found; test serves as regression guard.
  • 170+ DQD checks validated across all 5 CDM sources — each check's
    sqlTotal() and sqlViolated() verified for correct schema substitution
    with Acumenus (omop/vocab), SynPUF (synpuf/vocab), IRSF (irsf/vocab),
    Pancreas (pancreas/vocab), and Eunomia (eunomia/eunomia). 4,770 assertions.
  • Results schema routing validated — confirmed each source resolves to a
    distinct results schema (results, synpuf_results, irsf_results,
    pancreas_results, eunomia_results) with no collisions, and that
    SET search_path succeeds for each.

Vocabulary validation

  • Solr index completeness command (solr:validate-vocabulary) — compares
    Solr vocabulary core document count against vocab.concept standard
    concepts, with spot-check sampling. Reports coverage % and exits non-zero
    if below 95%.
  • Concept set resolution schema audit — verified resolveToSql() generates
    correct vocab.concept_ancestor and vocab.concept_relationship references,
    uses singular OMOP table names, and correctly substitutes eunomia schema
    for the Eunomia demo source.

Ingestion & ETL validation

  • Row count verification infrastructure — validated that
    PostLoadValidationService, ValidationResult, and IngestionJob have
    the correct method signatures, column schemas, and relationship wiring for
    end-to-end row count tracking through the pipeline.
  • FHIR-to-CDM transformation fidelity — 31 tests covering Patient (gender
    mapping to OMOP concept IDs, birth date parsing, US Core race/ethnicity
    extensions), Condition (SNOMED/ICD-10-CM mapping, onset/abatement dates),
    MedicationRequest (RxNorm mapping), Observation (category-based routing to
    measurement vs observation), and code system URI resolution.

Database integrity

  • 242 migrations audited for idempotency — verified all have both up()
    and down() methods, no unsafe DROP TABLE without IF EXISTS in rollback,
    no $guarded = [] HIGHSEC violations. 3 advisory dropIfExists warnings
    in up() (all intentional cleanup migrations).
  • Cross-schema FK integrity validated — live queries against localhost PG17
    verifying person.gender_concept_id, condition_concept_id,
    measurement_concept_id, and visit_occurrence.person_id all resolve to valid
    vocab.concept or person records. Finding: orphan drug_concept_ids in the
    40213xxx range (SynPUF vocabulary version mismatch) — flagged as warning,
    investigation pending.
  • OMOP CDM CHECK constraints migration — adds 24 database-level CHECK
    constraints across 4 CDM schemas (omop, synpuf, irsf, pancreas) enforcing
    required fields: person gender/year_of_birth, visit/condition/drug start
    dates, and observation_period date ordering. Idempotent via DO/EXCEPTION.

OMOP Extension Bridge validation

  • 1,715 imaging + 47 genomics records validated — read-only count
    verification of the OMOP extension bridge (image_occurrence, specimen,
    genomic_test, variant_occurrence, variant_annotation) and all app-layer
    xref tables. 10 Pest smoke tests for bridge model queryability.

By the numbers

  • New test files: 11
  • New tests: 68
  • New assertions: 4,916
  • Achilles analyses audited: 128
  • DQD checks validated: 170+
  • CDM sources cross-validated: 5
  • Migrations audited: 242 (now 243)
  • CHECK constraints added: 24

Data quality finding

The cross-schema FK audit discovered orphan drug_concept_id values in the
40213xxx range within omop.drug_exposure. These are SynPUF-era concept IDs
that don't exist in the current vocab.concept table — a vocabulary version
mismatch. This is flagged as a warning and will be resolved in a future
vocabulary re-index or concept remapping pass.

Upgrade notes

One new migration: 2026_04_11_000001_add_omop_cdm_check_constraints.php.
Run php artisan migrate to apply the CHECK constraints. The migration is
idempotent — safe to re-run.

New Artisan command: php artisan solr:validate-vocabulary for operational
Solr index validation.

All other changes are test files — no API changes, no frontend changes, no
breaking changes.

Contributors

Claude Code + @sudoshi


Installer: release assets are source-only. Use curl -fsSL https://parthenon.acumenus.net/install.sh | sh or run python3 install.py from the source archive. Native packages are paused until signed installers pass install smoke tests.

v1.0.4 — Test Coverage & CI Hardening

09 Apr 21:12

Choose a tag to compare

v1.0.4 — Test Coverage & CI Hardening

v1.0.4 is the first stabilization release in the v1.0.x arc. No new features
only refinement of what exists. This release fills the test coverage gaps
identified during the v1.0.3 launch and hardens the CI pipeline so every
subsequent release starts from a trustworthy baseline.

Why stabilization matters

v1.0.3 landed fast. It shipped the installer rewrite, Poseidon + Vulcan,
Standard PROs+, Risk Scores v2, the Commons wiki ChromaDB refactor, the
Acropolis enterprise installer, Hecate semantic search, and a dozen other
modules. By the time the dust settled, the test suite had drifted: 74 PHP
test files and 37 Playwright E2E specs covered the older surfaces, but the
newer modules had thin unit coverage, zero Vitest tests on the frontend, and
several "contract" tests for inter-service communication had been scheduled
but never written.

v1.0.4 is the release that pays that debt. Every scope item listed in
ROADMAP.md v1.0.4 is now either shipped or explicitly deferred with a
rationale.

Backend test coverage

  • Pest service tests for Achilles, DQD, Cohort, and Analysis services
    (shipped in commit 4b3a77c)
  • 8 database connection integration tests — one per Laravel connection,
    each verifying its search_path resolves the correct schemas for clinical
    data, vocabulary, and results (commit 4b3a77c)
  • RBAC enforcement tests on every route group (auth, research, admin,
    data pipeline) — these verify that removing a permission actually breaks
    the corresponding endpoint (commit 39cfe57)
  • OpenAPI spec drift detection in CI — generated TypeScript types are now
    verified against live API responses so the frontend never diverges from the
    backend (commit 4b3a77c)
  • R Plumber contract tests — a new RRuntimeContractTest.php hits the
    darkstar service /health endpoint via config('services.r_runtime.url'),
    asserting the response shape: status, service=darkstar, semver version,
    the checks.{packages,jvm,memory_ok,jdbc_driver} dict, and non-empty
    packages.ohdsi metadata. The test gracefully skips when darkstar is not
    running so CI stays green in environments that don't deploy the R sidecar.
  • Python AI contract tests — a matching AiServiceContractTest.php hits
    the python-ai service /health endpoint via config('services.ai.url'),
    asserting service=parthenon-ai, llm.provider=ollama, and non-empty
    model/base_url. Same graceful-skip fallback.
  • PHPUnit/Pest runtime detection for local test isolation (commit
    5a5ff2cd9) — fixes a regression where Redis-backed middleware poisoned
    the test database transaction.

Python AI test coverage

Three new FastAPI TestClient contract tests land in ai/tests/:

  • test_abby_router_contract.py — covers /abby/parse-cohort with a mocked
    call_ollama function. Verifies the full CohortParseResponse shape, the
    422 validation errors on missing and short prompts, and the fallback shape
    when the LLM returns unparseable output.
  • test_embeddings_router_contract.py — covers /embeddings/encode and
    /embeddings/encode-batch with a mocked SapBERT service. Verifies the
    {embedding, model} and {embeddings, model, count} response contracts
    plus the 422/400 validation guards.
  • test_concept_mapping_router_contract.py — covers /concept-mapping/map-term
    and /concept-mapping/map-batch with every strategy singleton (exact,
    cache, SapBERT, LLM, ranker) patched. Verifies the RankedCandidate shape
    and the {results, total_time_ms, strategies_used} batch response.

All Python contract tests mock every external dependency (Ollama, SapBERT,
pgvector, ChromaDB) so they need no network and no model weights.

Frontend test coverage

Vitest + React Testing Library + jsdom infrastructure was already landed in
vite.config.ts during v1.0.3. v1.0.4 populates it:

  • 66 pre-existing frontend test files covering estimation, prediction,
    SCCS, analyses, evidence synthesis, data-explorer, publish, auth,
    vocabulary, patient similarity, ingestion, and more.
  • 7 new cohort builder component testsCohortExpressionEditor,
    CriteriaGroupEditor, DomainCriteriaSelector, ConceptSetPicker,
    CohortStatsBar, CohortGenerationPanel, and CohortSqlPreview. Together
    they exercise the store-backed top-level editor, the nested criteria group
    depth guard, the seven OMOP domain buttons, the concept set creation flow,
    the stats bar interaction, and the generation/SQL preview TanStack Query
    states. 33 tests total.
  • 5 new concept set editor component testsConceptSetEditor,
    ConceptSetItemRow, ConceptSetItemDetailExpander, ConceptSetStatsBar,
    PhoebeRecommendationsPanel. These cover the empty state, row rendering,
    the three toggle switches (includeDescendants, isExcluded,
    includeMapped), the four-tab detail expander, and the Phoebe
    recommendations accept flow. 26 tests total.
  • 10 dark clinical theme snapshot testsBadge, Button, StatusDot,
    EmptyState, MetricCard, Panel, Tabs, Progress, FilterChip, and
    FormInput. Each file uses toMatchInlineSnapshot() plus a regex
    assertion for the theme token (e.g. btn-primary, badge-critical,
    form-input error). The goal is to fail loudly when someone renames a
    class, removes a variant, or accidentally swaps the #9B1B30 crimson for
    a different red. 33 snapshots total.

Analysis stores — scope clarification

The v1.0.4 scope called for "unit tests for all Zustand stores (authStore,
cohort stores, analysis stores)." Here is the actual status:

  • authStore, abbyStore, and wikiStore already have Vitest unit tests
    (landed during the wiki UX cleanup work).
  • cohortExpressionStore already has a Vitest unit test for
    normalizeCohortExpression.
  • There is no analysisStore. The frontend/src/features/analyses/
    module uses TanStack Query (useIncidenceRates, useCharacterizations,
    useEstimations, usePatientLevelPredictions, etc.) exclusively — all
    analysis state lives in the server cache, not in client-side Zustand
    stores.

This scope item is therefore N/A by design. TanStack Query is the
analysis feature's state layer, and it is already tested through the
feature-level component tests and the OpenAPI drift detection.

CI/CD hardening

  • Pre-commit hook now runs Pint + PHPStan + tsc + ESLint + Vitest on
    every commit. A silent bug in the hook's ESLint invocation — newline
    separators leaking into a sh -c command, causing staged files after the
    first to be interpreted as shell commands — was fixed as a side effect
    of this release.
  • Chroma ingestion mypy types fixed (commit 58a8910a4).
  • GitHub Actions pipeline: lint → test → build → deploy gate. OpenAPI
    drift detection runs on every PR.

Not yet shipped in v1.0.4 (deferred to v1.0.5+)

  • Playwright cross-browser validation (Chromium, Firefox, WebKit).
  • Playwright E2E coverage for GIS Explorer, imaging viewer, and
    genomics workflows.

These are tracked in the v1.0.5 section of ROADMAP.md.

Upgrade notes

No migrations, no config changes, no breaking API changes. This is pure
test coverage and CI hardening — git pull && ./deploy.sh is sufficient.
New test files are picked up automatically by Vitest, Pest, and pytest
discovery.

By the numbers

  • New backend tests: 6 Pest contract tests
  • New Python AI tests: 11 FastAPI TestClient contract tests
  • New frontend component tests: 33 cohort builder + 26 concept set
  • New snapshot tests: 33 across 10 UI primitives
  • Total new tests landed in v1.0.4: 109

Contributors

Claude Code + @sudoshi

Parthenon v1.0.3 — Foundation Release

30 Mar 00:33

Choose a tag to compare

Parthenon v1.0.3 — Foundation Release

March 30, 2026

Parthenon v1.0.3 is the public Foundation Release — the starting point for the stabilization arc (v1.0.4-v1.0.10) that will harden, optimize, and polish the platform over the next six weeks.

What Ships

Full OHDSI Research Lifecycle

Vocabulary exploration, cohort design, characterization, estimation, prediction, SCCS, pathways, incidence rates — all in one application. 5 CDM data sources (Acumenus, SynPUF, IRSF, Pancreas, Morpheus) plus the Eunomia demo dataset.

Risk Scores v2

20 validated clinical instruments (Charlson, CHADS2-VASc, APACHE II, Wells, MELD, and 15 more) with a cohort-scoped execution engine, eligibility checking against CDM data, score catalogue with detail modals, and risk score criteria in the cohort definition editor.

Standard PROs+

Survey instrument library with 32 public-domain instruments (PHQ-9, GAD-7, C-SSRS, and more — 685+ items), tabbed workspace, domain coverage charts, and SNOMED CT mapping.

BlackRabbit — Next-Gen Source Profiling

Replaces WhiteRabbit with a Python 3.12 FastAPI service adding SQL Server, Azure Synapse, and Oracle database support. Existing installations are migrated automatically during upgrade.

LiveKit — Voice & Video in Commons

Real-time voice and video calls in Commons workspaces, powered by LiveKit Cloud with runtime provider switching.

Arachne — Federated Study Execution

Opt-in Arachne DataNode integration for participating in OHDSI network studies. Enable with docker compose --profile arachne up.

Phoebe — Concept Recommendations

AI-powered concept recommendations from OHDSI's concept_recommended table, integrated into Concept Set Editor and Detail pages.

Poseidon — Data Lakehouse

Dagster-orchestrated data lakehouse with dbt transformations for incremental CDM ETL, FHIR ingestion scaffolding, and source profiler integration.

Aqueduct Canvas Overhaul

Full-screen canvas mode, persistent viewport, compact toolbar, universal CDM selector, and click-to-map field detail modals.

Also Included

  • Abby AI — concept mapping, text-to-SQL, data interrogation, institutional knowledge capture
  • GIS Explorer — social determinants, air quality, hospital networks, comorbidity mapping
  • Medical Imaging — OHIF/DICOM via Orthanc, radiogenomics correlation
  • Genomics — VCF import, ClinVar sync, variant analysis
  • HEOR — claims analysis and evidence synthesis
  • FHIR R4 — integration with CDM transformation pipeline
  • Studies — protocol management, multi-site coordination, artifact tracking
  • Commons — collaborative workspace with real-time messaging
  • Phenotype Library — 1,100+ OHDSI definitions synced
  • Monitoring — Prometheus, Grafana, Loki, cAdvisor
  • Documentation — Docusaurus v3 user manual with Scribe API reference

Upgraded

  • Hecate — EmbeddingGemma-300M via Ollama, Qdrant v1.17.1 with 8GB memory
  • Darkstar (R Runtime) — CohortMethod 6.0.1, PLP 6.6.0, DeepPatientLevelPrediction, DQD
  • Nginx — Security headers, template-based config, DICOM proxy caching, 5GB upload support
  • Scribe API Docs — Replaced Scramble with Scribe, integrated into Docusaurus

Installer

  • Module-grouped setup — Services organized by function (Research, Commons, AI & Knowledge, Data Pipeline, Infrastructure)
  • --upgrade flag — In-place upgrades with version detection, changelog display, and automatic migrations
  • WhiteRabbit -> BlackRabbit migration — Detected and handled automatically during upgrade

Upgrading

# From v1.0.2
python3 install.py --upgrade

# With Acropolis infrastructure
python3 install.py --with-infrastructure --upgrade

Infrastructure

  • Host UID/GID auto-detection for PHP/Scanner containers
  • Configurable DB_PORT
  • Qdrant ports exposed (6333 REST, 6334 gRPC)
  • Poseidon Dagster services (webserver + daemon)
  • Non-root Docker users across all custom services

Security

  • HIGHSEC model: Spatie RBAC, Sanctum 8-hour tokens, non-root containers, schema isolation
  • Nginx security headers (X-Content-Type-Options, X-Frame-Options, X-XSS-Protection)
  • Redis, Orthanc, and Grafana authentication enforced

Full Changelog

v1.0.2...v1.0.3

Parthenon v1.0.2 — Unified OHDSI Outcomes Research Platform

23 Mar 18:33

Choose a tag to compare

What's New in v1.0.2

Major release with 757 commits spanning the Morpheus Inpatient module, Evidence Investigation workbench, Abby AI 2.0 intelligence upgrade, Acropolis universal installer, and the Commons real-time collaboration workspace.


Highlights

Morpheus Inpatient Module

  • Population dashboard with 8 aggregate endpoints, smart filtered patient list, and 5 SVG chart components
  • Patient Journey page — location track, medications, diagnoses, microbiology with 16 clinical data endpoints
  • Labs dashboard with sparklines, masonry layout, and interactive charts
  • Vitals bedside monitor — 2x3 grid with timeline visualization
  • Microbiology — antibiogram heatmap (CLSI M39), culture table, and concept detail drawer
  • AtlanticHealth dataset — 243K inpatient patients synthesized from Epic EHR statistical distributions (7-phase pipeline)
  • Multi-dataset support — dataset selector with parameterized queries and registry table
  • OMOP CDM pipeline — MIMIC-IV adapter, vocabulary lookup, person/visit/clinical domain mappers, era builder, and quality gate

Evidence Investigation Workbench

  • Full investigation lifecycle — create, explore, build cohorts, validate phenotypes, run analyses, synthesize evidence
  • Concept Explorer with vocabulary search, hierarchy navigation, and patient counts
  • Cohort Builder with Atlas JSON import, set operations, Venn diagrams, and attrition funnels
  • Clinical analysis gallery — 7 analysis types with config drawers, execution tracker, and pinnable results
  • Genomic panel — Open Targets, GWAS Catalog search, Manhattan/QQ plots, and summary stats upload
  • CodeWAS validation with D3 forest plots and signal bar charts
  • Synthesis panel — narrative editing, PDF/JSON export, and version history with auto-snapshot
  • Schema density heatmap and inline patient counts in Explore tab

Abby AI 2.0 Intelligence Upgrade

  • Memory system — PostgreSQL-backed conversation store with pgvector search, context assembler, intent stack, and scratch pad
  • Profile learner — extracts user research interests and passes profile data through to AI service
  • Cloud intelligence — hybrid LLM routing (local Ollama + Claude API), PHI sanitizer with spaCy NER, cost tracker with budget enforcement
  • Agency system — Plan-Confirm-Execute engine with DAG executor, tool registry with risk levels, dry run mode, and action audit trail
  • Institutional intelligence — automatic knowledge capture, FAQ auto-promoter, contextual knowledge surfacing
  • Knowledge graph — hierarchy traversal with Redis caching, data profile service with CDM coverage analysis
  • Live database tools — 8 tools for querying concept sets, cohorts, analyses directly from chat

Acropolis Universal Installer

  • 9-phase Python TUI for one-command Parthenon deployment (Docker, bare metal, Kubernetes)
  • Dataset Acquisition TUI — post-install utility for downloading public datasets (OMOP Vocabulary, Eunomia, SynPUF, SyntheA, GIAB, ClinVar, DICOM, GIS boundaries) with recommended bundles
  • GHCR container registry — all 16 Docker images published to ghcr.io/sudoshi/parthenon-* with dependency-aware CI builds
  • Traefik reverse proxy, Portainer, pgAdmin, Grafana/Loki/Alloy observability stack
  • --defaults-file flag for fully non-interactive pre-seeded installs
  • Kubernetes Helm charts and Kustomize overlays for enterprise deployment

Commons Real-Time Collaboration

  • Channel-based messaging with WebSocket (Laravel Reverb), typing indicators, and online presence
  • Threaded replies with depth tracking, reactions with emoji picker, and pinned messages
  • Direct messaging, @mentions autocomplete, unread count badges, and notification system
  • Request-for-review workflow and file attachments for messages
  • Announcement board with OHDSI RSS feed integration and knowledge base wiki
  • Abby AI channel — dedicated Ask Abby interface within Commons
  • What's New modal — accessible from Commons sidebar, auto-opens on version bumps

Studies & HADES Execution

  • LEGEND-HTN replication — ACEi vs CCB estimation complete on Acumenus CDM
  • Phase B — 5 OHDSI studies with 22/29 analyses producing results (S6–S10)
  • All 29 HADES analysis configurations with cohort definitions seeded
  • Artisan command for research study seeding with cohort ID resolution

JupyterHub Integration

  • Multi-user JupyterHub with DockerSpawner and JWT authentication
  • Per-user JupyterLab singleuser images with HADES R packages
  • Audit log tables, PostgreSQL roles, and archive command
  • Starter notebooks for Morpheus, FinnGen, and penuX

Additional Modules

  • Aqueduct ETL — vocabulary lookup generator (deprecated)
  • GIS Explorer v3 — data import wizard, FastAPI geo conversion, Abby spatial analysis
  • Chroma Studio — 3D Vector Explorer with PCA→UMAP projections, Solr-accelerated 48x faster load
  • User profiles — avatar upload, settings page, account security tab
  • Workbench launcher — toolset grid with discovery cards for all research tools
  • Query Library — SQL runner modal with parameter inputs, live pg_stat_activity, and CSV export
  • Grafana monitoring — 38-panel log-centric dashboard, Alloy log collection, cAdvisor metrics

Infrastructure & DevOps

  • Single-DB migration complete — all schemas consolidated on host PostgreSQL 17
  • Health watchdog for container auto-recovery
  • Database backup tripwire in deploy.sh (aborts if 0 real users detected)
  • Fort Knox design protection with audit log and fixture export/import
  • /ci-fix command for automated CI failure diagnosis and repair
  • Dependency-aware Docker CI triggers with weekly scheduled rebuilds

Security (HIGHSEC)

  • WADO/DICOM endpoints require authentication
  • New users receive viewer-only role (no privilege escalation)
  • Horizon dashboard gated by super-admin role check
  • Mass assignment protection restored on all models
  • Redis, Orthanc, and Grafana authentication enforced
  • Non-root Docker users on all application containers
  • Sanctum 8-hour token expiration
  • PHI sanitizer with regex detection and spaCy NER in AI pipeline

Tech Stack

  • Backend: Laravel 11, PHP 8.4, Sanctum auth, Spatie RBAC, Horizon queues
  • Frontend: React 19, TypeScript strict, Vite 8, Tailwind 4, Zustand, TanStack Query/Table
  • AI Service: Python 3.12, FastAPI, Ollama (MedGemma), pgvector, Claude API hybrid routing
  • R Runtime: Darkstar (R 4.4, Plumber2, s6-overlay, mirai 3-worker pool, HADES packages)
  • Search: Solr 9.7 (10 configsets)
  • Database: PostgreSQL 17 (single parthenon DB, schema-isolated, pgvector)
  • Infrastructure: Docker Compose (20+ services), Acropolis installer, GHCR registry

Getting Started

git clone https://github.com/sudoshi/Parthenon.git
cd Parthenon
python3 install.py

Full documentation: https://parthenon.acumenus.net/docs