--- id: "bug-1674" status: "fixed" status_updated: "2026-09-24" status_note: "" component: "apiserver" severity: "unknown" timestamp: "2026-08-24T13:40:00Z" last_seen: "2026-09-19T09:00:00Z" occurrences: 1 files: ["src/frontend/apiserver/controllers/jobs.go:553", "src/frontend/apiserver/controllers/jobs.go:901"] tags: ["gitea-issue-41", "apiserver", "go", "jobs.go", "jobs-list", "field-validation", "regression"] related: [] legacy: true gitea_issue: 41 gitea_synced_status: "fixed" --- # bug-1674: Gitea issue #41 ("job output timestamp is incorrect"): reporter's transcript shows `xcecli jobs… ## Description Gitea issue #41 ("job output timestamp is incorrect"): reporter's transcript shows `xcecli jobs list -l ` succeeding but omitting submit/start/done timestamps. Reproduced live on branch scheduler-framework, but the actual failure is more severe than reported: `xcecli jobs list -l ` (and bare `xcecli jobs list -l`) fail OUTRIGHT with `query request failed: [invalid parameters: unsupported query field: pending_reason]` -- no output is produced at all, not even a partial listing missing timestamps. Likely a regression introduced after the original issue was filed (this branch is under active scheduler-framework development). ## Environment _Not recorded (migrated from buglog.json)._ ## Reproduction _Not recorded (migrated from buglog.json)._ ## Root cause Both the `-l`/fields-filtered job-list code paths (jobs.go:553 and the near-duplicate at jobs.go:901) validate the requested field list via `utils.GetSupportedFields(models.JobSubmitRequest{})` -- the job SUBMISSION request struct -- instead of `models.JobInfo{}`, the job query/response struct (the correct pattern, confirmed already used correctly for hosts at hosts.go:105/307 with `models.HostInfo{}`, and for at least one other job code path at jobs.go:1131 with `models.JobInfo{}`). Read-only/response-only fields like `pending_reason`, `start_time`, `end_time`, `pids`, `pgids` don't exist on JobSubmitRequest, so the first such field hit in Go's randomized map-iteration order triggers a hard `unsupported query field` rejection, making `-l` (and any custom -o field list touching these fields) fail unconditionally. ## Fix FIXED (2026-08-24). src/frontend/apiserver/controllers/jobs.go:553,901 -- both field-validation call sites now use utils.GetSupportedFields(models.JobInfo{}) instead of models.JobSubmitRequest{}, matching the already-correct pattern at jobs.go:1131. Caught during live verification (not source review alone): core_limit/mem_limit exist on JobSubmitRequest but not JobInfo/JobAdditionalFields -- switching wholesale would have newly broken those two previously-valid -o/-l fields. Fixed by adding CoreLimit/MemLimit (CustomLimit) to models.JobAdditionalFields (models/jobs.go), the existing merge-in bucket already used for pids/pgids/interactive_job_url. Added TestJobsListFieldValidation_UsesJobInfoNotSubmitRequest (jobs_test.go) covering all 24 fields in xcecli's real JobFieldsMap vocabulary. Full apiserver/controllers suite passes (CGO_ENABLED=0, this package's pre-existing required mode). Live-verified: `jobs list -l` and `-o "pending_reason start_time core_limit mem_limit pid pgid"` all now succeed -- every one previously errored with "unsupported query field". ## Verification _Not recorded (migrated from buglog.json)._ ## References - Gitea: #41