Optional text params with regex (or other) validators would reject
None/"" in request format even though the runtime correctly skips
validation for empty optional params. Add optional flag to validator
chain so None/"" short-circuit before reaching static validators.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Organize the flat list of ~30 collection tools into 6 labeled
subcategories (Build, Restructure, Filter, Pair and Combine,
Sort and Label, Extract) to help users find tools faster.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Rewrite help with clearer descriptions of ABSENT/PRESENT modes,
add two-case SVG showing both filtering directions with dual
output collections (filtered + discarded).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add nested collection explanation with examples showing both flat
list extraction (case A) and list:list mapped extraction (case B).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add examples, workflow use case, and a clean SVG schematic showing
a single dataset being duplicated into a list collection.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace the 207KB Inkscape-generated build_list.svg with a 10KB
hand-coded SVG matching the style of the sample sheet tool diagrams.
Uses abstract labels (Dataset 1, Dataset A, etc.) for all three cases.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add "What is a sample sheet?" sections, concrete examples, and SVG
diagrams to both __CONVERT_SAMPLE_SHEET__ and __SAMPLE_SHEET_TO_TABULAR__
so newcomers understand what sample sheets are and when to use each tool.
Also adds the missing macros import to sample_sheet_to_tabular.xml.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Vue 2's initMethods calls .bind(vm) on every method, which creates a new
function that loses custom properties. The DOMPurify default export is a
callable function with .sanitize() as a property, so binding it strips
sanitize entirely, causing "TypeError: e.purify.sanitize is not a function"
at runtime.
Move purify out of methods/data and into setup() which returns values to
the template without binding. Also fix an import ordering lint issue in
DataTables.vue.
Fixes#22239
Prevents optional integer fields from defaulting to 0 and treats blank input as unset, so empty values no longer get saved as a real number.
Adds test coverage for empty, parsed, and null integer values.
The @app.middleware("http") decorator uses Starlette's BaseHTTPMiddleware
which buffers the entire response body through an anyio memory channel
between two tasks.
Replace with a pure ASGI middleware that injects the X-Frame-Options
header directly into the response start message, avoiding the buffering
entirely.
Improves coverage around misconfigured file source templates and OAuth setup.
Ensures missing environment values and secrets fail with clear configuration errors, and missing OAuth credentials surface an actionable user-facing message for administrator follow-up.
Fails fast when required secrets or environment variables are missing and no default is provided, instead of letting empty values reach OAuth setup.
Surfaces a clear configuration problem for administrators and a safe user-facing error, preventing downstream OAuth client pair validation failures.
Shows a user-facing error instead of silently do nothing when instance removal fails.
Adds focused coverage for successful and failed removal flows across both supported instance types.
Allows metadata-only updates to skip variable validation when no new variable values are provided.
Prevents hide (remove) operations from failing for instances backed by templates with required variables, while preserving the previously stored values.
Adds regression coverage for both supported instance types to ensure hidden updates remain safe and predictable.
Replace per-row sa_session.get() calls with batch IN queries,
reducing query count from O(N + 2M) to O(1) where N is the number
of job steps and M is the number of implicit collection job steps.
Before:
Step listing: 1 query
Job state lookups: N queries (sa_session.get per job)
ICJ lookups: M queries (sa_session.get per ICJ)
ICJ state aggregation: M queries (GROUP BY per ICJ)
Total: 1 + N + 2M queries
After:
Step listing: 1 query
Job state lookups: 1 query (batch IN)
ICJ lookups: 1 query (batch IN)
ICJ state aggregation: 1 query (batch IN + GROUP BY)
Total: 4 queries
Sentry showed 13.6M individual job SELECTs and 6M ICJ-related
queries over 14 days on usegalaxy.org for this endpoint alone.
Non-string values (e.g. dicts) in replacement_params cause a
ProgrammingError when inserting into the TEXT column of
workflow_request_input_parameters.
Fixes#22247
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
If a request includes a query parameter named `method`, it ends up in
kwargs, and the call to handle_controller_exception unpacks it alongside
the positional `method` argument, causing a TypeError. Pass kwargs as a
plain dict instead of unpacking to avoid any possible collision.
Fixes https://github.com/galaxyproject/galaxy/issues/22243