Skip to content

feat: release v1.5 - #928

Merged
diegomayorga-dept merged 635 commits into
mainfrom
staging
Sep 2, 2026
Merged

feat: release v1.5#928
diegomayorga-dept merged 635 commits into
mainfrom
staging

Conversation

@diegomayorga-dept

@diegomayorga-dept diegomayorga-dept commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

🧬 Easy Genomics v1.5


✨ Summary of changes

This release is the largest since v1.0 and focuses on data organisation, cost visibility and run observability, alongside a substantial reduction in CloudFormation footprint.

For lab users, v1.5 introduces Data Collections (samples and sequence collections with tagging, metadata-sheet import and one-click run launch), saved run presets, per-run cost estimates, run completion progress polling and email notifications, navigation breadcrumbs, and a reworked Lab Settings page with always-inline editing. AI failure analysis can now explain why a run failed, using Bedrock, Anthropic or OpenAI.

For organisation admins, v1.5 adds per-lab S3 bucket access management and improved user membership management.

Under the hood, v1.5 delivers an OpenAPI 3.1 foundation (119 documented routes, API Gateway provisioned from the generated spec, public Swagger UI, and a CI breaking-change gate), a CloudFormation resource reduction that cuts the easy-genomics stack from 459 to 235 resources, HealthOmics VPC networking, privacy-safe opt-in analytics, a restructured documentation tree, a full accessibility remediation pass, and security upgrades to Nuxt, axios and the AWS CDK.

Baseline: main at v1.4.2. Delta: 648 files changed, +86,643 / −12,630.


⚠️ Before you deploy

  • CloudFormation topology change. The back-end stack split introduced in v1.4 is still documented under [Unreleased] in CHANGELOG.md and carries a data-loss hazard for already-deployed environments — read docs/operations/migration-runbooks/EASY_GENOMICS_PROD_MIGRATION.md before deploying.
  • New DynamoDB tables: laboratory-data-tagging-table, laboratory-s3-access-table, workflow-run-preset-table. New GSIs on existing tables are applied one index per stack update via deploy-dynamodb-gsi-waves, which pnpm deploy now runs before cdk deploy; migrate-laboratory-s3-access-seed runs after it to seed default bucket grants for existing labs.
  • Backfills available (all support --dry-run): backfill-billed-costs, backfill-run-cost-outcomes, backfill-run-input-profiles, backfill-run-usage-expires-at, backfill-workflow-run-history-and-usages, plus migrate-samples-and-sequence-collections and migrate-file-tags-to-samples.
  • New optional config blocks in easy-genomics.yaml: analytics and cost-explorer, both off by default. Existing configuration files remain valid unchanged.
  • Node floor raised to >= 20.20.2.

📋 What's Changed

✨ Features

  • ✨ feat(runs): surface and classify HealthOmics + Seqera run failures (BYOK per integration) (#779)
  • ✨ feat: restructer document folders and links (#780)
  • ✨ feat: visually differentiate org admin view from lab view (#781)
  • ✨ feat: improve navigation accessibility for top and left menus (#782)
  • ✨ feat: add/reorder package readme (#783)
  • ✨ feat: improve accessibility navigation in dashboard (#787)
  • ✨ feat: improve accessibility in users and settings pages (#788)
  • ✨ feat: improve accessibility for workflow access and user pages (#789)
  • ✨ feat(EGV-179): sequence sets and data collections foundation (#792)
  • ✨ feat(EGV-179): rename to samples and sequence collections (#793)
  • ✨ feat(EGV-179): analysis indicators on samples (#794)
  • ✨ feat: add privacy safe analytics implementation (#798)
  • ✨ feat: polish data collections UI and fix sample rename tests (#801)
  • ✨ feat: sidebar collapse+expand (#802)
  • ✨ feat: files table sorting (#814)
  • ✨ feat(EGV-200): re-implement lasso selection on samples (#818)
  • ✨ feat: adjust Sample explorer scroll container (#819)
  • ✨ feat(EGV-201): update default sample merge regexes (#821)
  • ✨ feat: enable search on batches (#827)
  • ✨ feat(egv-202): replace samplesheet presets with single/paired/hybrid/assembled defaults (#829)
  • ✨ feat: add organization name under the lab name in the workflows view (#834)
  • ✨ feat: changes from outcome of accessibility audit from axe-core (EGV-212) (#839)
  • ✨ feat(data-collections): tag samples from a metadata sheet during import (#840)
  • ✨ feat: S3 bucket access controls (#843)
  • ✨ feat(egv-214): membership management (#845)
  • ✨ feat: retry healthomics workflow run (#848)
  • ✨ feat: per-run cost estimates with cost explorer (EGV-224) (#850)
  • ✨ feat(egv-222): healthomics vpc networking (#851)
  • ✨ feat: workflow run progress bar (#853)
  • ✨ feat: (egv-225) lab 02 email notifications (#854)
  • ✨ feat: save workflow parameters presets (EGV-230) (#856)
  • ✨ feat: updates to dashboard overview section, change title and position (EGV-232) (#857)
  • ✨ feat: add optional description to laboratory workflow runs (#859)
  • ✨ feat: Add clickable lab nav breadcrumbs (EGV-238) (#861)
  • ✨ feat: added my runs only switch to recent runs in dashboard (#863)
  • ✨ feat: added script to populate new envs with labd and org data (#865)
  • ✨ feat: added alerts for file upload validation for workflow runs (#869)
  • ✨ feat: add workflow name column and adjusted dashboard font sizes (#872)
  • ✨ feat: relative date timestamp display pipe (#877)
  • ✨ feat: reorder pipeline runs table columns (#883)

🐛 Fixes

  • 🐛 fix: s3 bucket errors for past runs (#773)
  • 🐛 fix: redirect to correct laboratory when org changed (#774)
  • 🐛 fix: workflow parameters form autopopulate input and outdir (#776)
  • 🐛 fix: data collections s3 error handling (#807)
  • 🐛 fix: s3 IAM policy bug (#808)
  • 🐛 fix: stale lab data race condition s3 bug (#809)
  • 🐛 fix: run workflow steps error caused activeTabKey (#810)
  • 🐛 fix: s3 permissions, multiple config checks (#811)
  • 🐛 fix(yaml): fix yaml for deployment (#812)
  • 🐛 fix: remove conflicting library (#817)
  • 🐛 fix: workflow run title trimmed and input status stale (#832)
  • 🐛 fix: regenerate openapi assembly fasta (#835)
  • 🐛 fix: workflow access bugs (#838)
  • 🐛 fix: resolve TDZ crashes, org-redirect reload loop, and run wizard stepper desync (#841)
  • 🐛 fix: load Swagger UI spec as JSON so the docs route works on the local dev server (#842)
  • 🐛 fix: gate org view and authorize list-organization-users-details (#844)
  • 🐛 fix: workflow access bugs (#847)
  • 🐛 fix: wire analytics_enabled and analytics_allow_dev into ci/cd workflows (#849)
  • 🐛 fix: restore shared HealthOmics workflow access (EGV-219) (#852)
  • 🐛 fix: suppress spurious error toasts on intentional logout (#858)
  • 🐛 fix: align Add Lab Users select dropdowns with their trigger width (#862)
  • 🐛 fix: create-laboratory-run throws an unclassified error on a legitimate retry with the same RunId (#868)
  • 🐛 fix(EGV-229): move task progress card above run detail tabs (#870)
  • 🐛 fix: marshal DynamoDB update values so terminal run status writes succeed (EGV-244) (#871)
  • 🐛 fix: remove unintelligible process name from run progress UI (#874)
  • 🐛 fix: added back favorite and run workflow icon buttons (#878)
  • 🐛 fix: persist run status before cost capture so large Omics runs don't hang at RUNNING (#879)
  • 🐛 fix: link header logo home and show current lab in labs nav (#882)
  • 🐛 fix: keep long run descriptions aligned in details and review (#884)
  • 🐛 fix: pin sidebar collapse control and prevent tab switch scroll jump (#885)
  • 🐛 fix(lab-settings): dedupe VPC networking copy and fix notification spacing (#886)
  • 🐛 fix: fit dashboard spend, escape-dismiss dialogs, and basic shell responsiveness (#887)
  • 🐛 fix: Remove Edit button from Lab Settings — make fields always editable (#888)
  • 🐛 fix: show loading skeletons on first paint instead of flashing content (#889)
  • 🐛 fix: keep sidebar collapse button visible while page scrolls (#892)
  • 🐛 fix(lab-settings): fix Save Changes failing when LLM provider set to None (#893)
  • 🐛 fix: align lab settings S3 bucket options with org admin catalog (#894)
  • 🐛 fix: show specific error and require Model ID on Lab Settings save (#895)
  • 🐛 fix: prevent long lab names from stretching the header nav (#897)
  • 🐛 fix: disable per-user notification prefs when lab-wide emails are off (#905)
  • 🐛 fix: Correct Bedrock tooltip to not imply calls run in the lab's own AWS account (#906)
  • 🐛 fix: keep sidebar right border visible behind collapse control (#908)
  • 🐛 fix: stop preset name modal flashing a duplicate error on save (#909)
  • 🐛 fix: allow renaming presets when the tier is at its cap (#910)
  • 🐛 fix: cancel runs with externalrunid instead of internal runid (#916)
  • 🐛 fix: coalesce concurrent loadWorkflowsForLab requests for same lab (#917)
  • 🐛 fix: Bundle @aws-sdk/client-omics into create/update-laboratory Lambdas (#918)
  • 🐛 fix: HealthOmics AI Failure Analysis LLM key/model reuse across providers (#921)
  • 🐛 fix: (EGV-294) cross-account HealthOmics shared workflow access (Run Workflow stepper) (#922)
  • 🐛 fix: stop spurious Seqera error toast when cancelling a run (#923)
  • 🐛 fix: apply dynamodb gsi changes one index per stack update (#925)
  • 🐛 fix: apply dynamodb gsi changes one index per stack update (#926)

🔒 Security

  • 🔒 fix: dependabot non breaking changes (#816)
  • 🔒 fix(EGC-208): security dependabot pr3 transitive overrides (#822)
  • 🔒 fix(EGV-206): upgrade aws-cdk-lib libraries (#823)
  • 🔒 fix(EGV-207): upgrade axios ^1.8.4 -> ^1.18.1 (#824)
  • 🔒 fix(security): dependabot follow-up — transitive overrides + remove stale npm lockfile (#830)

📚 Documentation

  • 📚 docs: first workflow run user guide (#784)
  • 📚 docs: add production deployment guide (#785)
  • 📚 docs: add upgrading documentation for next releases (#786)
  • 📚 docs: add troubleshooting and contributing guidence (#790)
  • 📚 docs: add OpenAPI 3.1 spec generator for the Easy Genomics API (API-01) (#791)
  • 📚 docs(egv-176): serve public Swagger UI for the Easy Genomics API (#796)
  • 📚 docs(egv-173): ci breaking api change detection (#797)
  • 📚 docs(egv 175): auto generate ts types (#799)
  • 📚 docs(EGV-177): Deploy API Gateway from the OpenAPI spec via SpecRestApi (#806)
  • 📚 docs: add docusaurus investigation (#813)
  • 📚 docs: data collections documentation (#867)
  • 📚 docs: commit architecture.md into the repo (#880)

🧹 Chores, CI & Infrastructure

  • 🧹 chore: added graphify tool implementation (#803)
  • 🧹 chore: remove the second lambda permission created for running tests from aws console (#804)
  • 🧹 fix: sample sheet unit test error (#805)
  • 🧹 fix(EGV-197): reduce CI log noise, surface E2E failures, and fix Playwright login selector (#820)
  • 🧹 fix: suppress pnpm pack file listing and restore lib/src import paths (#825)
  • 🧹 fix(ci): set working-directory for playwright install step to packages/front-end (#826)
  • 🧹 fix(ci): cap back-end jest workers to prevent OOM on CI runner (#828)
  • 🧹 fix(ci): stream nx output so failures are not lost in buffered dumps (#831)
  • 🧹 chore(ci): halve development pipeline time — remove duplicate work, scope E2E to UAT, fix sandbox workflow (#833)
  • 🧹 refactor: cut easy-genomics nested stack from 459 to 235 CFN resources (#860)
  • 🧹 chore: Shorten Lab Settings card descriptions, move detail into hover tooltips (#866)
  • 🧹 fix: lint import order in test files generating warnings (#873)
  • 🧹 fix: flaky 5s timeout in backfill-laboratory-run-attributes test suite (#876)
  • 🧹 fix: broken unit test (#896)
  • 🧹 fix: broken unit test (#904)
  • 🧹 fix: skip API diff when base branch has no baseline spec (#919)

🎫 Release board tickets

Ticket Summary PR(s)
EGV-118 Technical spike (prototype review) — (spike, no code artifact)
EGV-165 Commit ARCHITECTURE.md into the repository #880
EGV-201 Update default sample merge regexes #821
EGV-202 Update default samplesheet schemas #829, #835
EGV-214 User membership management improvements #845, #862
EGV-216 Per-lab S3 bucket access management (org admin) #843, #894
EGV-220 Update dashboard font size #872
EGV-227 Per-run cost estimates #850
EGV-229 Workflow run completion progress polling #853, #870
EGV-230 Saved run presets #856
EGV-231 Inaccurate error messages on logout #858
EGV-232 Dashboard lab metrics position #857
EGV-234 Run descriptions #859
EGV-236 Reduce CloudFormation resources #860
EGV-237 "My runs only" switch in Dashboard Recent runs #863
EGV-238 Navigation breadcrumbs #861
EGV-239 LaboratoryRun creation not retry-safe #868
EGV-241 Lab Settings: shorten card descriptions #866, #906
EGV-242 Data Collections documentation #867
EGV-244 Run hangs in stopping state #871, #879
EGV-245 Workflow name column on Recent runs / Pipeline Runs #872
EGV-246 Remove process name from run progress displays #874
EGV-247 Only show timestamp for current date #877
EGV-250 Workflow description breaks left alignment #884
EGV-252 Reorder workflow runs table columns #883
EGV-253 App header: logo home + current lab context #882
EGV-254 Sidebar: pin collapse control + fix tab jump #885, #908
EGV-255 Lab Settings: VPC copy + Run Notifications spacing #886
EGV-256 Dashboard spend sizing, keyboard a11y, responsive #887
EGV-257 Remove Edit button from Lab Settings #888
EGV-258 Collapse button not visible when page scrolls #892
EGV-260 Long lab name creates invisible margin #897
EGV-261 Settings Details container flickers on load #889
EGV-270 No-LLM model permits Save and throws error #893
EGV-272 Model ID not a required field #895
EGV-273 Lab Settings errors don't indicate which section failed #895
EGV-274 Run notifications pill hierarchy confusing #905
EGV-276 Preset save flashes duplicate-name error #909
EGV-277 Unable to rename presets at cap #910
EGV-294 Shared resource Dev→QA not loading run configuration #922 (with #917, #918, #921)

Also shipping in v1.5 but not on the release board: EGV-164/166/168/169/170/171/172/173/174/175/176/177 (docs + OpenAPI foundation), EGV-179/182/198/199/200/203/215 (Data Collections), EGV-180/181 (AI failure analysis), EGV-212 (accessibility audit), EGV-217, EGV-219, EGV-221, EGV-222 (HealthOmics VPC networking), EGV-225 (run email notifications), EGV-259, and EGV-206/207/208 (security upgrades).


✅ Type of Change

  • New feature
  • Bug fix
  • Documentation update
  • Refactoring
  • Hotfix
  • Security patch
  • UI/UX improvement

🧪 Testing

Not verified on this release head. No code is authored in this PR — it promotes already-reviewed, already-merged branches. Verification to date is what each constituent PR carried, plus the development / staging pipeline runs.

To verify before merging:

  1. Full workspace pnpm install && pnpm test, and pnpm lint per package, on the release head.
  2. pnpm run test-e2e against the deployed quality environment (Playwright; requires a deployed env, and now fails the run on any user-type failure rather than || true-ing past it).
  3. Dry-run every migration/backfill script against a non-prod environment first — see ⚠️ Before you deploy above.
  4. Smoke-test the release-critical paths: create a run from a Data Collection, save/rename a preset at the cap, grant a per-lab S3 bucket as org admin, receive a run-completion email, save Lab Settings with each LLM provider option (including None), and load a shared HealthOmics workflow across accounts.

📌 Notes for reviewers

  • CHANGELOG.md has no v1.5 entry. Its only section is the [Unreleased] — Back-End API stack split block carried over from v1.4, which predates the three new DynamoDB tables, the deploy-dynamodb-gsi-waves deploy step, and the migrate-laboratory-s3-access-seed hook. This should be written and the release tagged before/with the merge.
  • git log main..staging overstates the change set, because main records releases as squashed commits (feat: release v1.4 (#772)) — pre-v1.4 merge commits therefore appear as "new". The git diff figures above are the accurate content delta, and the ticket mapping is built from that diff rather than the commit list.
  • staging and development are content-identical at this point (git diff origin/staging origin/development is empty); they differ only by one parallel merge commit of the same DynamoDB GSI fix (fix: apply dynamodb gsi changes one index per stack update #925 on staging, fix: apply dynamodb gsi changes one index per stack update #926 on development).
  • EGV-118 is a spike with no traceable code artifact in the diff — confirm it is closed as decision/documentation-only.

☑️ Checklist

  • No new errors or warnings have been introduced. (not verified on the release head — see Testing)
  • All tests pass successfully and new tests added as necessary. (tests shipped with each constituent PR — 79 back-end and 14 front-end test files changed/added — but the full suite has not been run against the release head)
  • Documentation has been updated accordingly. (new docs/ tree, ERROR_HANDLING.md, docs/development/architecture.md, docs/getting-started/data-collections.mdCHANGELOG.md still needs its v1.5 entry)
  • Code adheres to the coding and style guidelines of the project. (per-PR lint/review; no new code in this PR)
  • Code has been commented in particularly hard-to-understand areas. (e.g. the analytics construct and the new config schema blocks carry why-comments)

diegomayorga-dept and others added 30 commits July 17, 2026 10:48
Create a new USlideover-based drawer component that wraps EGUserAccessPanel.
The drawer provides a side panel UI for editing user access within an
organization, with conditional mounting to avoid unnecessary data fetches
when the drawer is closed.

Task 11 of EGV-214: Membership Management.
…uery param

Row clicks now open the drawer inline instead of navigating to a separate
edit-user page, using the query param as the single source of truth so
page reloads and future deep-links reopen the same drawer.
Replaces the two edit-user page files with redirect-only shims that push
to the /orgs/:orgId?openUser=:userId form, preserving deep-link and
bookmark compatibility now that user access is managed via drawer.
…mbly-fasta

fix: regenerate openapi assembly fasta
…rower width

The org-admin-toggle row used justify-between with no shrink/grow
constraints on either side, so it worked fine at full page width but
in the drawer's narrower context the unbounded EGUserDisplay text
(name/email) squeezed the "Organization Admin" label/toggle instead of
yielding space to it. The user info side now shrinks/overflows-hidden
first; the label+toggle side is shrink-0 so it always renders in full.
…odal

EGAddLabUsersModule.vue was originally designed to render inline on a
full-width page. Wrapping it in a modal (this PR) exposed two layout
problems it never hit before: the user-picker's forced min-w-96 on its
trigger overflowed the modal's narrower width, and both USelectMenus
used the default 'absolute' popper strategy, which can misposition a
floating dropdown relative to a modal's stacking/overflow context.

Fix: stack the user picker (full width) above the role picker + Add
button (their own row) instead of one wide horizontal row, drop the
min-w-96 override so the picker respects its container's actual width,
and set popper strategy to 'fixed' on both selects so their dropdowns
anchor to the viewport instead of the modal's boundary.
fix: resolve TDZ crashes, org-redirect reload loop, and run wizard stepper desync
Task 3 registered the new endpoint in ROUTE_SCHEMAS and regenerated the
OpenAPI spec (yaml), but never ran generate:api-types, so
generated.d.ts never picked up AddBulkLaboratoryUsersRequest /
addBulkLaboratoryUsers. development now runs both generation steps in
pre-commit and guards their freshness in CI (a54af56); this file was
stale relative to that guard.
…in the drawer header

The overflow-hidden added to stop the Org Admin toggle from being
squeezed clips EGUserDisplay's name/email text abruptly with no
indication it's cut off. Pierce into EGUserDisplay's text column
(scoped :deep()) to constrain its width and apply proper ellipsis
truncation instead, without touching the shared component itself.
…uncating

USlideover defaults to max-w-md (448px), too narrow for the header
card's name + email + "Organization Admin" toggle plus the two-column
lab-access table below it. Widen to max-w-xl (576px) so this content
has room to breathe instead of relying on truncation to cope.
…the request is in flight

The dialog closed immediately on click, before the removeUser API call
even started, leaving a window where the user had no visual feedback
and could re-trigger the same or another action. EGDialog already
supports a :loading prop (spinner + disables both buttons) — it just
wasn't wired here. Stop closing the dialog eagerly; let the existing
finally block close it once the request actually completes, and pass
isRemovingUser as :loading so it can't be double-triggered.
fix: load Swagger UI spec as JSON so the docs route works on the local dev server
feat(data-collections): tag samples from a metadata sheet during import
This generated sibling of easy-genomics-api.yaml was never staged in
Tasks 1-3's commits (the plan's git-add lists only named the .yaml and
generated.d.ts outputs), so it silently drifted out of sync in the
working tree after each commit's pre-commit hook regenerated it.
#889)

* fix: show loading skeletons on first paint instead of flashing content
* fix: dont flash integration off status while lab details load
* fix: clear stale run wizard load flags and skeleton lab settings sections

---------

Co-authored-by: Nacho Nistal <ignacio.nistal@Nachos-MacBook-Pro.local>
Selecting HealthOmics VPC Networking and saving Lab Settings threw
'import_client_omics.GetConfigurationCommand is not a constructor' in
the deployed environment (worked fine locally).

Root cause: every Lambda here bundles with externalModules:
['@aws-sdk/*'], so @aws-sdk/* imports resolve from the AWS-managed
Lambda Node.js 20.x runtime's own bundled SDK at runtime, not from the
pinned @aws-sdk/client-omics@^3.1090.0 in package.json. HealthOmics'
Configuration API (used for custom VPC networking) is new enough that
it's missing from whatever SDK snapshot the managed runtime ships,
so GetConfigurationCommand is undefined there.

create-laboratory and update-laboratory both call
assertHealthOmicsVpcConfigurationIsActive, which calls
OmicsService.getConfiguration() -> new GetConfigurationCommand(...).
Adding nodeModules: ['@aws-sdk/client-omics'] to those two Lambda
entries forces esbuild to install the actual pinned package into the
deployment artifact instead of relying on the runtime's copy, matching
the existing nodeModules: ['swagger-ui-dist'] escape-hatch pattern
used elsewhere for the same bundling mechanism.
fix: coalesce concurrent loadWorkflowsForLab requests for same lab
…undling

fix: Bundle @aws-sdk/client-omics into create/update-laboratory Lambdas
…r changes

The API key and Model ID for AI Failure Analysis (HealthOmics) were
single fields shared across all LLM providers (bedrock/openai/anthropic)
rather than scoped per-provider. Switching the provider dropdown (e.g.
OpenAI -> Anthropic) silently reused the previous provider's saved key
and model with no validation error, only failing downstream at the
actual provider API call.

- Front-end: clear Model ID/API Key when the provider changes away
  from the originally-saved one; validate() now enforces the key
  requirement via the previously-unused LlmApiKeySchema (the :required
  prop alone was cosmetic and never enforced anything); hide the
  'KEY SAVED' badge once it no longer applies to the selected provider.
- Back-end: update-laboratory.lambda.ts rejects the save with a 400
  when HealthOmicsLlmProvider changes to openai/anthropic without a
  new HealthOmicsLlmApiKey in the request, closing the same gap for
  direct API calls.

Scoped to HealthOmics only; Seqera has the identical pattern but is
being soft-deprecated.
* feat: release candidate v1.4 (#759)
* fix: error handling in modified create-run lambda
* feat: omics run tag based access controls on workflows
* Revert "feat: omics run tag based access controls on workflows"
This reverts commit bdf90ab.
* feat: surface workflow versions
* fix: resolve merge conflict
* feat: revert server-side pagination of runs table
* feat: added new side menu across application (#704)
* fix: merge error on org admin tabs
* feat: refactor aws cdk stacks to avoid cf limit
* fix: run linter
* feat: migration - add preflight deletion protection script
* docs: update migration script readme
* fix: organization written in british english in some places (#727)
* fix: text in egdialog component rendering outside of component (#728)
* fix: migration for dynamodb tables, ui deploy
* fix: cicd unit test failures re: shared lib imports
* fix: unit tests modules mapping paths (#731)
fix: jest config adding missing module mapper

fix: github pipelines dependencies install

fix: unit tests path imports

* fix: front-end import for Sequera workflow (#733)

* fix: dashboard side menu item re added (#734)

* fix: Dashboard side menu item re added

* fix: api gateway urls in ci-cd pipeline build after migration (#737)

* fix: workflow run name validation to allow numbers in health omics runs (#739)

* fix: invite user to organization error (#743)

* fix: show only worflows assigned to laboratory (#749)

* fix: saved workflow parameters not pre filling form (#748)

---------

Co-authored-by: Kevin Loftus <kevin.loftus@deptagency.com>

* fix: organizations table org switch with context (#767)

* fix: dialog component break word instead of all (#768)

* fix: s3 bucket errors for past runs

* docs: update migration docs for s3 retention

* feat: add s3 refs script, fix s3 construct call

* fix: add script to projen

* fix: redirect to correct laboratory when org changed (#774)

* chore: reset staging content to match main

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix: workflow access bugs

---------

Co-authored-by: Kevin Loftus <kevin.loftus@deptagency.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Nacho Nistal <ignacio.nistal@Nachos-MacBook-Pro.local>
Two related bugs in RAM-shared HealthOmics workflow handling:

1. GetWorkflow/ListWorkflowVersions/StartRun require an explicit
   workflowOwnerId for a workflow owned by another account - AWS never
   resolves a bare workflow id outside the caller's own account, even
   with IAM authorizing the call. None of read-private-workflow,
   list-workflow-versions, or create-run-execution passed it, so the
   Run Workflow stepper failed to load a shared-in workflow even after
   granting cross-account IAM access. Added resolveSharedWorkflowOwnerId
   (looked up via ListShares) with a retry-on-404 fallback in all three
   handlers.

2. ListWorkflows(type: PRIVATE) never includes cross-account RAM-shared
   workflows - only ListShares(resourceOwner: OTHER) surfaces those.
   list-private-workflows, which backs the lab dashboard's workflow
   list and New Run search, only called ListWorkflows, so a shared-in
   workflow could be shared, accepted, and enabled for a lab and still
   never appear where a user goes to run it. Merged in ListShares
   results, filtered through the same laboratory-workflow-access rules
   already applied to owned workflows.

Also grants the new omics:ListShares calls in IAM (own-account /shares
resource, no cross-account grant needed for that action).

Verified against live AWS in both dev (851725267090) and qa
(654654609030) accounts before and after the fix.
…smatch

fix: HealthOmics AI Failure Analysis LLM key/model reuse across providers
…s-shared-workflow-cross-account-iam

# Conflicts:
#	packages/back-end/src/app/controllers/aws-healthomics/run/create-run-execution.lambda.ts
#	packages/back-end/src/app/controllers/aws-healthomics/workflow/list-private-workflows.lambda.ts
#	packages/back-end/src/app/controllers/aws-healthomics/workflow/list-workflow-versions.lambda.ts
#	packages/back-end/src/app/controllers/aws-healthomics/workflow/read-private-workflow.lambda.ts
#	packages/back-end/src/app/utils/omics-shared-workflow-utils.ts
#	packages/back-end/src/infra/stacks/aws-healthomics-nested-stack.ts
#	packages/back-end/test/app/controllers/aws-healthomics/run/create-run-execution.lambda.test.ts
#	packages/back-end/test/app/controllers/aws-healthomics/workflow/list-workflow-versions.lambda.test.ts
#	packages/back-end/test/app/controllers/aws-healthomics/workflow/read-private-workflow.lambda.test.ts
#	packages/back-end/test/app/utils/omics-shared-workflow-utils.test.ts
Per review (kevin-loftus-dept): development's list-shared-workflows
Lambda already surfaces cross-account RAM-shared workflows correctly
(ACTIVE-only, access-filtered, tagged source: SHARED with
ownerAccountId), and the front-end store already fetches it alongside
list-private-workflows and dedupes with private winning.

Merging shared workflows into list-private-workflows too made a
shared-in workflow appear in the private response first, so the FE
store's dedup claimed it as an untagged PRIVATE row before the
correctly-tagged SHARED row was processed - stripping the Shared
badge and ownerAccountId in EGLabView. Reverted
list-private-workflows.lambda.ts to development's plain
listAllPrivateWorkflows-only version, dropped the now-unused
omics:ListShares IAM grant on that Lambda, and removed the
corresponding test.
fix: stop spurious Seqera error toast when cancelling a run
Extends the cross-account shared-workflow IAM test coverage added for
read-private-workflow, list-workflow-versions, and create-run-execution
to also cover read-workflow-schema's GetWorkflow and ListShares grants
(GitHub-fallback path).
…ss-account-iam

fix: (EGV-294) cross-account HealthOmics shared workflow access (Run Workflow stepper)
Co-authored-by: Cursor <cursoragent@cursor.com>
Intermediate waves now patch currently deployed templates instead of
cdk deploying app code, include nested-stack tables, and share
deploy-env/CFN helpers. Tests cover the wave loop, restore-on-failure
path, and nested template discovery. GitHub OIDC session duration is
2 hours so multi-wave CI does not expire mid-rollout.

Co-authored-by: Cursor <cursoragent@cursor.com>
fix: apply dynamodb gsi changes one index per stack update
@sf-dept
sf-dept self-requested a review September 2, 2026 13:20

@sf-dept sf-dept left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Release has been tested.

@diegomayorga-dept
diegomayorga-dept merged commit 3444f40 into main Sep 2, 2026
12 of 15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants