4.1 KiB
| id | status | status_updated | status_note | component | severity | timestamp | last_seen | occurrences | files | tags | related | fix_commits | gitea_issue | gitea_synced_status | gitea_synced_hash | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| bug-1935 | fixed | 2026-10-10 | apiserver | wrong-result | 2026-10-10T04:31:27Z | 2026-10-10T04:31:27Z | 1 |
|
|
|
|
360 | fixed | 0b51c602bc8f |
bug-1935: xcecli jobs list -P fails: apiserver rejects project_name filter (unsupported filter)
Description
Observed: xcecli jobs list -P <project> (-P/--project,
src/frontend/xcecli/cmd/jobs/list.go:356) sends the filter
{project_name:eq:<project>} (xcecli/filters/job_filter.go:108-109), but
project_name is commented out of the apiserver's JOB_SUPPORT_FILTERS
(src/frontend/apiserver/models/jobs.go:178), so validateJobQueryFilters()
(controllers/jobs.go:470-483) rejects the request:
unsupported filter: project_name
(HTTP 400, INVALID_PARAMS). The same holds for license_project
(models/jobs.go:179, job_filter.go:112-113). Found by source reading; not
yet run against a live apiserver.
Expected: xcecli jobs list -P eng lists the caller's visible jobs whose
project is eng.
Impact: wrong result: the documented -P (and license-project) filter of
xcecli jobs list always fails with an error; users cannot list jobs by
project. No data is affected.
Found by: review, during /kiro-spec-requirements project-config
(2026-10-10); project-config Requirement 7.5 needs this filter.
UPDATE (2026-10-10): confirmed by TestJobHandler_ProjectFilters
(src/frontend/apiserver/controllers/job_scope_test.go) before the fix:
status = 400 ... unsupported filter: project_name.
Environment
- OS: no /etc/os-release; Docker container; NixOS kernel; kernel Linux 6.18.33 x86_64
- libc: glibc 2.42-47 (interpreter /nix/store/wb6rhpznjfczwlwx23zmdrrw74bayxw4-glibc-2.42-47/lib/ld-linux-x86-64.so.2), from src/xce.build/frontend/apiserver/xce_apiserver
- Toolchain: go1.25.5 linux/amd64 (nix dev shell); gcc (GCC) 15.2.0, meson 1.9.1
- Build: asan (xce.build) binary exists at this commit; the bug was found by reading the source, not by running it
- Code: scheduler-framework @
54c8b29e - Deployment: any apiserver deployment (single or HA); not reproduced on a running cluster yet
Reproduction
- Start an apiserver (any deployment) and submit a job with
xcecli jobs submit -P eng sleep 1. xcecli jobs list -P eng- Expected: the job is listed; per the source, the apiserver replies HTTP 400
unsupported filter: project_name.
- Frequency: deterministic by code reading; not yet executed.
- Evidence: the code lines quoted in Description; no logs.
Root cause
JOB_SUPPORT_FILTERS (src/frontend/apiserver/models/jobs.go) had
project_name and license_project commented out, and
validateJobQueryFilters() (controllers/jobs.go) rejects every field not on
that list, while xcecli (filters/job_filter.go:108-113) sends exactly
those fields for -P and the license-project option. The job store already
carries both fields (JobInfo.ProjectName, LicenseProject). Since:
pre-existing, origin unknown.
Fix
models/jobs.go: project_name and license_project are now in
JOB_SUPPORT_FILTERS. No other change was needed: the store query filters
by the JSON field name. ARRAY_JOB_SUPPORT_FILTERS (array statistics) is
unchanged.
Verification
- Test:
TestJobHandler_ProjectFilters(src/frontend/apiserver/controllers/job_scope_test.go): RED before (400 unsupported filter), GREEN after ({project_name:eq:eng}and{license_project:eq:lic2}select only the matching job). - Suites: same run as bug-1934: apiserver and xcecli Go tests ok, meson
apiserversuite 1/1 OK, asan, 2026-10-10. - Live: n/a: the change is a filter whitelist entry exercised through the real handler and store in the test.
References
- Related: bug-1934
- Spec:
.kiro/specs/project-config/requirements.mdRequirement 7.5