From 8f164b82056815cb629f574742bb8e063719fa26 Mon Sep 17 00:00:00 2001 From: Rongsong Shen Date: Sat, 10 Oct 2026 08:42:58 +0000 Subject: [PATCH] docs(buglog): log bug-1953 (named jobs skip submit validation) Co-Authored-By: Claude Opus 5.5 (1M context) --- .wolf/buglog.json | 25 +++++++++++++++ .wolf/bugs/bug-1953.md | 73 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+) create mode 100644 .wolf/bugs/bug-1953.md diff --git a/.wolf/buglog.json b/.wolf/buglog.json index 0bd5f685..54380cc3 100644 --- a/.wolf/buglog.json +++ b/.wolf/buglog.json @@ -18207,6 +18207,31 @@ "related_bugs": [], "fix_commits": [], "record": ".wolf/bugs/bug-1952.md" + }, + { + "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, + "error_message": "apiserver skips submit validation and limit conversion for any job submitted with a job name\n\n**Observed:** (source reading, confirmed against the code on 2026-10-10)\n`preCheckJobRequest()` (`src/frontend/apiserver/controllers/jobs.go:1308`)\nreturns from inside its job-name branch, before the rest of the checks run:\n```go\nif req.JobName != \"\" {\n if strings.ContainsAny(req.JobName, \"[]\") {\n ...\n return count, true, nil // jobs.go:1346, array name\n }\n ...\n return 1, false, nil // jobs.go:1366, plain name\n}\n```\nEverything after the branch is skipped for every named job (and every array\njob): the job-description, project-name and resreq length checks, resreq\nvalidation, the `shell_limit` → limit conversion (`jobs.go:1405-1434`), and\nthe later env / launch-type validation and transfer-file parsing. Reported by\nthe bug-1936 fix: a named job with transfer files fails with\n`failed to parse ExtendData JSON`.\n\n**Expected:** every submission gets the same validation and conversions,\nnamed or not; the name only decides array handling.\n**Impact:** wrong result and missing validation: named and array jobs bypass\nlength and resreq checks (bad input reaches the controller and scheduler),\nlose their shell limits, and fail at the worker when they carry transfers.\n**Found by:** fix of bug-1936 (submit exdata), 2026-10-10.", + "file": "src/frontend/apiserver/controllers/jobs.go", + "root_cause": "TODO: required for fixed/partial", + "fix": "TODO: required for fixed/partial\n\nVerification:\n- Test: TODO: name + file; RED before the fix, GREEN after\n- Suites: TODO: suite results and build profile\n- Live: TODO: soak/deploy run, or n/a and why", + "tags": [ + "apiserver", + "submit", + "validation" + ], + "related_bugs": [ + "bug-1936" + ], + "fix_commits": [], + "record": ".wolf/bugs/bug-1953.md" } ] } diff --git a/.wolf/bugs/bug-1953.md b/.wolf/bugs/bug-1953.md new file mode 100644 index 00000000..a34c1f6b --- /dev/null +++ b/.wolf/bugs/bug-1953.md @@ -0,0 +1,73 @@ +--- +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