--- id: "bug-1953" status: "open" status_updated: "2026-10-10" status_note: "newly logged" component: "apiserver" severity: "wrong-result" timestamp: "2026-10-10T08:42:56Z" last_seen: "2026-10-10T08:42:56Z" occurrences: 1 files: ["src/frontend/apiserver/controllers/jobs.go"] tags: ["apiserver", "submit", "validation"] related: ["bug-1936"] --- # bug-1953: apiserver skips submit validation and limit conversion for any job submitted with a job name ## Description **Observed:** (source reading, confirmed against the code on 2026-10-10) `preCheckJobRequest()` (`src/frontend/apiserver/controllers/jobs.go:1308`) returns from inside its job-name branch, before the rest of the checks run: ```go if req.JobName != "" { if strings.ContainsAny(req.JobName, "[]") { ... return count, true, nil // jobs.go:1346, array name } ... return 1, false, nil // jobs.go:1366, plain name } ``` Everything after the branch is skipped for every named job (and every array job): the job-description, project-name and resreq length checks, resreq validation, the `shell_limit` → limit conversion (`jobs.go:1405-1434`), and the later env / launch-type validation and transfer-file parsing. Reported by the bug-1936 fix: a named job with transfer files fails with `failed to parse ExtendData JSON`. **Expected:** every submission gets the same validation and conversions, named or not; the name only decides array handling. **Impact:** wrong result and missing validation: named and array jobs bypass length and resreq checks (bad input reaches the controller and scheduler), lose their shell limits, and fail at the worker when they carry transfers. **Found by:** fix of bug-1936 (submit exdata), 2026-10-10. ## 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) - Toolchain: gcc (GCC) 15.2.0, meson 1.9.1 - Build: asan (xce.build) - Code: scheduler-framework @ b9747ad2-dirty - Deployment: any (apiserver request validation; no cluster needed to show it) ## Reproduction 1. Submit `xcecli jobs submit -J myjob --cpu_limit 60000 sleep 1` and the same job without `-J`. 2. Without a name the CPU limit is converted into the job's limits; with `-J myjob` it is not. Likewise an over-long resreq or project name is rejected only for the unnamed job. - Frequency: deterministic (code path) - Evidence: the code quoted in Description; no logs kept. ## Root cause TODO: required for fixed/partial ## Fix TODO: required for fixed/partial ## Verification - Test: TODO: name + file; RED before the fix, GREEN after - Suites: TODO: suite results and build profile - Live: TODO: soak/deploy run, or n/a and why ## References - Related: none