Parthenon v1.0.6 — FinnGen Workbench, SSO, and Light Mode
v1.0.6 — FinnGen Workbench, SSO, and Light Mode
v1.0.6 is the biggest feature release in the v1.0.x arc. After two back-to-back stabilization releases (v1.0.4 test coverage, v1.0.5 data quality), the platform was ready for net-new modules. This release lands four of them at once: the FinnGen Cohort Workbench, Authentik SSO, first-class light mode, and a substantially reworked Patient Similarity explorer — plus a doubled care-bundle library, a project-management handoff to Acumenus Data Room, and a long list of installer and CI hardening fixes.
FinnGen Cohort Workbench (SP1–SP4)
The headline module. The FinnGen Workbench is a full-React port of the FinnGen Shiny CO2/CodeWAS workflow, integrated end-to-end with Darkstar (our R/Plumber sidecar) and the OHDSI HADES stack.
SP1 — Runtime foundation
- New
parthenon_finngen_ro/parthenon_finngen_rwPostgres roles with least-privilege grants app.finngen_runs+app.finngen_analysis_modulesschema with idempotent Laravel migrationsFinnGenClientHTTP wrapper,FinnGenRunService,RunFinnGenAnalysisJobHorizon job with polling, cancellation, andIdempotency-Keymiddleware backed by Redis SETNXFinnGenArtifactServicewith signed URLs, path-traversal guards, and NginxX-Accel-Redirectfor streaming large result artifacts- RBAC:
finngen.view,finngen.run,finngen.cancel,finngen.importpermissions wired into RolePermissionSeeder - Operational runbook + SP1 pre-merge verification report
SP2 — Code Explorer
- ROMOPAPI sync reads (code counts, relationships, ancestors) with
Plumber2 query params and
safe_syncwrapper - Per-source vocabulary auto-grants, pandoc render path, E2E coverage
SP3 — HADES analyses
- Async workers for CodeWAS, TimeCodeWAS, Overlaps, and Demographics
- HadesExtras configuration corrected; cohort overlap, demographics, and cohort-counts handlers wired
- DuckDB result reads with Shiny-parity
analysisSettings - Bespoke SQL workers for CodeWAS / TimeCodeWAS / Overlaps (option C2) after upstream HadesExtras gaps surfaced
- Artifacts race fixed; cohort staging + demographics display corrected
- 4 display.json shape tests for CO2 analysis workers
SP4 — Workbench UI
- Sessions list + workbench shell with autosave and not-found recovery
- Operation tree algebra + compiler (entry / inclusion / exit operations with union / intersect / minus)
- Cohort typeahead, drag-and-drop reorder, live expression preview
- Materialize step with cohort-id handoff and overwrite flow
- Import Cohorts step with real cohort browser
- Atlas import via the active WebAPI registry (Phase E)
- Run history panel inside a session
- Matching wrapper with
MatchingConfigForm+MatchingResults - SMD diagnostics + attrition waterfall
- Wired to the SP3 analysis gallery handoff
- E2E Playwright spec — gallery loads, module detail, run dispatch
- Vitest contract tests for
useAnalysisModulesandResultViewerSwitch
The workbench is surfaced on the launcher and uses the PANCREAS source by default (multimodal oncology + genomics corpus) rather than EUNOMIA.
Authentik SSO via OIDC (Phase 7 live)
Production users can now sign in with Authentik. The auth subsystem is now strictly additive — username/password remains, with SSO as a conditional path:
app.user_external_identitiestable for OIDC linkingapp.oidc_email_aliasestable + C-suite seeder for canonical email reconciliation- OIDC service layer: handshake store, discovery, validator, reconciliation
- OIDC HTTP endpoints (feature-flagged off until enabled per environment)
- Frontend
/auth/callbackpage + conditional login button - Phase 7 callback rewrite returning the full
formatUsershape - API-driven Authentik provisioning for the
parthenon-oidcapp - Acropolis installer registers
parthenon-oidcautomatically
A phased rollout plan is documented at docs/lineage/plans/closed/2026-04-13-authentik-parthenon-sso.md.
Username/password and the existing temp-password / forced-change flow are
preserved exactly.
Light mode
Parthenon now ships a first-class light theme — a warm parchment palette designed to coexist with the existing dark clinical theme.
theme-store.ts(Zustand) withlocalStoragepersistence- Flash-prevention script in
index.htmlso the wrong theme never paints ThemeTogglesun/moon icon button in the header- Per-user theme preference stored server-side
- New CSS token file with the warm parchment palette
- Theme-aware Recharts palette
- 28,000+ hardcoded hex values swept across the frontend and
replaced with CSS variable tokens (sweeps
260411-qux12,000+,260411-s3c1,150,260411-sxotext/bg/border/divide grayscale, plus inline-style + Tailwind arbitrary values) - Light-mode compliance pass across modals, wizards, drawers, pages, panels, and feature components
Several worktree sweep regressions surfaced during this work and were
recovered: ThemeToggle, themeStore, cohort wizard modal, 40 Patient
Similarity + Commons files, and 14 files clobbered by 579117cdb. New
git hooks (scripts/githooks/pre-merge-commit) now refuse stale
worktree merges to prevent recurrence.
Patient Similarity rework
- UMAP panel reworked with new Inspector sidebar
- Phenotype Discovery enabled with clustering fixes and a new endpoint
- Landscape page restored with larger hit targets, cluster summary table, and disabled "Phenotype" button until the backing endpoint is ready
- AI step interpretation in saved runs
- PSM covariate name resolution fixed (direct index assignment; condition_NNN / drug_NNN / procedure_NNN formats)
- Continue → Landscape wired
- Centroid build streamed to avoid PHP OOM on large cohorts
- Compare-cohorts OOM fix + schema-ownership guard
- Target/Comparator counts aligned under their dropdowns
- Contextual help explaining Compare vs Expand
Care Bundles — eCQM library expanded 10 → 45
The Standard PROs+ care bundle library now ships 45 OHDSI-compliant eCQM bundles, up from 10. Each bundle is structured with the correct measure population (initial population, denominator, numerator, exclusions) and references the correct OMOP concept sets.
Acumenus Data Room project management
Project-management work now points to the Acumenus Data Room application,
served from the local Apache vhost at https://dataroom.acumenus.net.
Parthenon keeps GitHub for engineering issue history and leaves portfolio,
client, readiness, and operational boards to the Data Room app.
Database role split (security hardening)
The runtime database identity was split from the migration identity:
parthenon_app(runtime) — DML only; no DDL grantsparthenon_migrator(migrations) — DDL + DML; used only byphp artisan migratevia./deploy.sh --dbparthenon_owner(schema owner) — owns all schemas
./deploy.sh has been hardened so --frontend deploys do not reload
PHP-FPM, and so the migrator identity is used only when migrations are
explicitly requested.
Installer (Community edition focus)
- New
--communityflag for the fastest path to a working login - Web MVP installer focused on the Community edition path
- Hecate-bootstrap module + preflight + Rust GUI updates
- Windows compatibility guard for
os.getuid/os.getgid - Public bootstrap script served correctly
- Revised Community install landing
- Acropolis installer registers
parthenon-oidcautomatically
CI / deploy / infra fixes
- Frontend
tsc -b(npm run build) unblocked for unfinished features via targeted@ts-nocheckand exclusions @typescript-eslint/ban-ts-commentdisabled above each@ts-nocheck- Per-request DNS resolution of the
php-fpmupstream so Nginx boots without it - Lazy-resolve optional Nginx upstreams
- PHP entrypoint handles host GID collision on macOS
compose downscope hardened (compose-down nukes both stacks)- Migration idempotency guards for duplicate-target migrations
- AppServiceProvider guards
.resendapikeylookup against a directory - Pre-commit hook now requires a devlog entry with migration commits
- Pre-commit hook adds
vite-build+ stale-branch merge guards - DB role fallback no longer references a non-existent
parthenonrole - Pre-migration
db-backup.shcall dropped from deploy (already runs via cron)
Dependencies
- TypeScript 5.9.3 → 6.0.2 (devDependency)
- react-router-dom 6.30.3 → 7.14.0
- pandas 2.* → 3.*
- uvicorn 0.42.* → 0.44.*
- GitHub Actions: actions/checkout 4 → 6, actions/setup-python 5 → 6, actions/upload-artifact 4 → 7, actions/download-artifact 4 → 8, signpath/github-action-submit-signing-request 1 → 2
Darkstar (R sidecar) — service rename complete
The R Plumber sidecar formerly known as r-runtime is now consistently
named darkstar across docker-compose, Traefik, watchdog, Grafana,
deploy, and CI. The deprecated finngen-runner container has been
removed; FinnGen analyses run inside darkstar via the FinnGen route
group.
Upgrade notes
git pull && ./deploy.shis sufficient for most environments.- If enabling SSO: configure Authentik OIDC credentials in
.envand flip the OIDC feature flag. - If running FinnGen workbench: ensure the
darkstarcontainer is healthy (docker compose ps darkstar) and that theparthenon_finngen_ro/_rwroles exist (created automatically by SP1 migrations). - Database roles:
./deploy.sh --dbnow uses theparthenon_migratoridentity. The runtimeparthenon_appuser no longer has DDL. - Light mode: enabled per-user via the header sun/moon toggle. No config change required; the default remains the dark clinical theme.
By the numbers
- 275 commits since v1.0.5 (60
feat(finngen), 17fix(finngen), 12docs(finngen), 11test(finngen), 11feat(code-explorer), 10feat(darkstar), 9feat(sync), 6feat(auth), plus the rest) - 4 new modules landed: FinnGen Workbench, Authentik SSO, Light Mode, Patient Similarity refresh
- 35 new care bundles (10 → 45)
- 28,000+ hex values tokenized for theming
Contributors
Claude Code + @sudoshi