Releases: Acumenus-Data-Sciences/Parthenon
Parthenon v1.0.8 — Publish, Library Lifecycle, and Agentic Copilots
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 drafts —
PublishPageloads and saves drafts through the
API rather than browser state, with a stabledocumentHashfor autosave
deduplication - Debounced autosave with retry and a
beforeunloadguard, surfaced via
aSaveStatusIndicator,SaveDraftButton, and aHybridPromptModal - Snapshots —
PublicationSnapshotServicewith create/list/revert
endpoints under optimistic locking, wired intoCreateSnapshotModal,
RevertSnapshotDialog, and aSnapshotsPanel - Study-scoped sharing —
PublicationDraftPolicy, per-draftvisibility,
aVisibilityBadge, aShareDropdown, and a read-only wizard mode for
viewer collaborators (Study::scopeAccessibleBy) - Publication library —
/publish/libraryroute +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)
HasLibraryLifecycletrait withdraft/published/archived/
deprecatedtransitions, reapplied to 9 models- Lifecycle columns on
concept_sets,cohort_definitions, and 8 analyses
tables - Owner + super-admin lifecycle policies
promote/archive/restoreendpoints plus bulk-archive and
bulk-restoreRequiresPromotionException→ 409 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=allon list endpoints with anAllUsersToggle(D1–D2)
Admin console (Phase D3–D9)
/admin/libraryunified 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-lifecyclecommand 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 earlierpublish.agentfeature 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::scopeAccessibleByfor 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.shis sufficient for most environments. Run
./deploy.sh --dbto apply the lifecycle-column migrations.- Run
php artisan library:backfill-lifecycleonce 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.agentflag 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), 31feat(publish), 11feat(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
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 inAcumenus-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 (intemplates/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
gisschema 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
stratifyByLocationdropdown + 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_cdmphase 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; orphanStudyDesigner.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
/tmpworktree paths
(this prevents the worktree-vendor incident captured in feedback memory) - docker — install
libuv1-devso Rfspackage builds; preserve
.gitignoremode in php entrypoint chmod sweep; fix scispacy
en_core_sci_mdwheel 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
*_testingconfig when broken - docs — harden docs deploy build; harden docs content tree deployment;
auto-fix duplicate blog slugs
Dependencies
- Frontend —
@tanstack/react-query(#308),react-joyride3.0.2→3.1.0
(#310),zod4.3.6→4.4.3 (#309),deck.gl9.2.11→9.3.2 (#237) - AI —
transformers(#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 Actions —
actions/github-script7→9 (#301),
astral-sh/setup-uv3→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.gitLicense 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...
v0.2.0-rc2 — Linux Phase A bench-test fixes
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
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
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
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/_rwPG roles,app.finngen_runs,
FinnGenClient,FinnGenRunService,RunFinnGenAnalysisJob, signed
artifact URLs with X-Accel-Redirect, RBAC,Idempotency-Keymiddleware. - 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_aliasestables- OIDC service layer, HTTP endpoints,
/auth/callbackpage - 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
.envand flip the OIDC flag. - FinnGen workbench: ensure
darkstaris healthy. - DB roles:
./deploy.sh --dbnow usesparthenon_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), 11feat(code-explorer),
10feat(darkstar), 9feat(sync), 6feat(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
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()andsqlViolated()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_pathsucceeds for each.
Vocabulary validation
- Solr index completeness command (
solr:validate-vocabulary) — compares
Solrvocabularycore document count againstvocab.conceptstandard
concepts, with spot-check sampling. Reports coverage % and exits non-zero
if below 95%. - Concept set resolution schema audit — verified
resolveToSql()generates
correctvocab.concept_ancestorandvocab.concept_relationshipreferences,
uses singular OMOP table names, and correctly substituteseunomiaschema
for the Eunomia demo source.
Ingestion & ETL validation
- Row count verification infrastructure — validated that
PostLoadValidationService,ValidationResult, andIngestionJobhave
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()
anddown()methods, no unsafeDROP TABLEwithoutIF EXISTSin rollback,
no$guarded = []HIGHSEC violations. 3 advisorydropIfExistswarnings
inup()(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
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 commit4b3a77c) - 8 database connection integration tests — one per Laravel connection,
each verifying itssearch_pathresolves the correct schemas for clinical
data, vocabulary, and results (commit4b3a77c) - RBAC enforcement tests on every route group (auth, research, admin,
data pipeline) — these verify that removing a permission actually breaks
the corresponding endpoint (commit39cfe57) - OpenAPI spec drift detection in CI — generated TypeScript types are now
verified against live API responses so the frontend never diverges from the
backend (commit4b3a77c) - R Plumber contract tests — a new
RRuntimeContractTest.phphits the
darkstarservice/healthendpoint viaconfig('services.r_runtime.url'),
asserting the response shape:status,service=darkstar, semverversion,
thechecks.{packages,jvm,memory_ok,jdbc_driver}dict, and non-empty
packages.ohdsimetadata. 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.phphits
thepython-aiservice/healthendpoint viaconfig('services.ai.url'),
assertingservice=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-cohortwith a mocked
call_ollamafunction. Verifies the fullCohortParseResponseshape, 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/encodeand
/embeddings/encode-batchwith 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-batchwith every strategy singleton (exact,
cache, SapBERT, LLM, ranker) patched. Verifies theRankedCandidateshape
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 tests —
CohortExpressionEditor,
CriteriaGroupEditor,DomainCriteriaSelector,ConceptSetPicker,
CohortStatsBar,CohortGenerationPanel, andCohortSqlPreview. 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 tests —
ConceptSetEditor,
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 tests —
Badge,Button,StatusDot,
EmptyState,MetricCard,Panel,Tabs,Progress,FilterChip, and
FormInput. Each file usestoMatchInlineSnapshot()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#9B1B30crimson 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, andwikiStorealready have Vitest unit tests
(landed during the wiki UX cleanup work).cohortExpressionStorealready has a Vitest unit test for
normalizeCohortExpression.- There is no
analysisStore. Thefrontend/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 ash -ccommand, 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
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)
--upgradeflag — 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 --upgradeInfrastructure
- 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
Parthenon v1.0.2 — Unified OHDSI Outcomes Research Platform
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-fileflag 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-fixcommand 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
parthenonDB, 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.pyFull documentation: https://parthenon.acumenus.net/docs