You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
yt issues list --format json (and --all) requests a heavy field set by default —
dominated by customFields(...) expanded for every issue — producing large responses that,
on a constrained/remote network, make a full-project fetch exceed a gateway's per-request time
limit and get killed (the process is SIGTERM'd, exit 15). There is currently no working way
to trim the field set for JSON output, because --profile is broken (#726).
Evidence (v0.24.2, 178-issue project)
yt issues list --project-id NGDEV --format json --top 178:
customFields(...) returns every custom field for every issue, which is the bulk of
the payload. Scaled up: a 2,000-issue project ≈ 3 MB in one response. Over a remote link with,
say, a ~20s gateway timeout, the request never completes and is killed — the caller sees 0
issues, no error.
Observed request-time curve (against a real gated instance)
--top
wall time
100
~6s
250
~8s
500
~22s → killed (exit 15)
--all / default (whole project)
killed
So the per-request payload/time grows past the gateway ceiling well before the whole project
is fetched.
Add a JSON-friendly lean profile (e.g. compact) that includes summary/description
but omits the full customFields expansion, for callers that don't need every custom field.
Consider a leaner default fields for --format json, or at least document that large
JSON fetches should pass --fields/--profile to stay under network limits.
Request-time resilience for --all: smaller default page size and/or streaming/NDJSON
output so a large project is fetched as many small responses rather than one big one that a
gateway can kill.
Context
Hit while building a tool that fetches whole projects as JSON over a remote network. We worked
around it by chunking (--top + a created-date cursor) so each request is bounded, but the
underlying payload weight and the broken --profile are the real levers, especially for JSON.
Summary
yt issues list --format json(and--all) requests a heavy field set by default —dominated by
customFields(...)expanded for every issue — producing large responses that,on a constrained/remote network, make a full-project fetch exceed a gateway's per-request time
limit and get killed (the process is SIGTERM'd, exit 15). There is currently no working way
to trim the field set for JSON output, because
--profileis broken (#726).Evidence (v0.24.2, 178-issue project)
yt issues list --project-id NGDEV --format json --top 178:--fields idReadable,summary,description,created,customFields(name,value(name))--fields idReadable,summary,description,created(no customFields)The default field set (from
youtrack_cli/services/issues.py, ~line 141):customFields(...)returns every custom field for every issue, which is the bulk ofthe payload. Scaled up: a 2,000-issue project ≈ 3 MB in one response. Over a remote link with,
say, a ~20s gateway timeout, the request never completes and is killed — the caller sees 0
issues, no error.
Observed request-time curve (against a real gated instance)
--top--all/ default (whole project)So the per-request payload/time grows past the gateway ceiling well before the whole project
is fetched.
Suggestions (in priority order)
--profile(--profileis broken: profile name is passed to the RESTfieldsparam instead of being resolved #726) so--profile minimal/standardactually shrink the payload —the primary lever for JSON perf.
compact) that includessummary/descriptionbut omits the full
customFieldsexpansion, for callers that don't need every custom field.fieldsfor--format json, or at least document that largeJSON fetches should pass
--fields/--profileto stay under network limits.--all: smaller default page size and/or streaming/NDJSONoutput so a large project is fetched as many small responses rather than one big one that a
gateway can kill.
Context
Hit while building a tool that fetches whole projects as JSON over a remote network. We worked
around it by chunking (
--top+ acreated-date cursor) so each request is bounded, but theunderlying payload weight and the broken
--profileare the real levers, especially for JSON.