feat(xce-test-cli-ux): migrate all flag-accepting commands to flagspec
Migrates 17 commands (cmd_hello, cmd_jobinfo, cmd_jobrun, cmd_jobsub, cmd_resval, cmd_jobkill, cmd_jobckpt, cmd_qctrl, cmd_hostctrl, cmd_runtasks, cmd_setpend, cmd_jobstart, cmd_jobfinish, cmd_jobfail, cmd_resupdate, cmd_walcompare, join_worker_parse_attrs) from raw getopt()/hand-rolled parsing to the shared flagspec_t + getopt_long mechanism, so every one now uniformly rejects an unrecognized or malformed flag with a usage summary and, where a close match exists, a suggestion. cmd_walcompare's hand-rolled parser needed a leading '+' in its optstring to preserve its pre-migration flags-only-before- positionals behavior. Also fixes bug-1704: cmd_qctrl's uninitialized action variable, now sentineled and rejected when unset, mirroring cmd_hostctrl's existing pattern -- this also makes the destructive- command gate's -i/-c detection (task 3.3) safe to rely on. Every existing short flag's letter, value format, and default is unchanged for a valid invocation. 1357/1357 across the full controller suite (+4), 0 regressions. Task 3.1 of .kiro/specs/xce-test-cli-ux/tasks.md. Requirements: 2.1, 2.2, 2.3, 2.4, 6.1, 6.2, 6.3, 6.4, 10.1, 10.2, 10.3 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019jaMf9QEwpugH2W9KAuc7f
This commit is contained in:
parent
878a42fb48
commit
f152c59e75
6 changed files with 883 additions and 92 deletions
|
|
@ -19290,7 +19290,7 @@
|
|||
"error_message": "cmd_qctrl declares `int action;` with no initializer and only assigns it inside the -a/-i/-o/-c getopt cases; there is no post-loop check that one of them was given before `queuectrl.action = action` is sent over the wire. Running `qctrl -q normal` with no action flag (syntactically valid per USAGE_QCTRL, which lists all four as optional) transmits indeterminate stack memory as the queue action.",
|
||||
"file": "src/controller/testsuite/test.c:2663 (declaration), :2668-2688 (getopt loop), :2695 (queuectrl.action = action)",
|
||||
"root_cause": "Missing initializer + missing post-loop validation, unlike the very next sibling command cmd_hostctrl which initializes action=HOST_DO_NONE and explicitly rejects that sentinel.",
|
||||
"fix": "NOT YET FIXED. Recommended: initialize action to a sentinel (e.g. -1) and reject with a clear error if unset after the getopt loop, mirroring cmd_hostctrl's existing pattern.",
|
||||
"fix": "FIXED (2026-09-09, xce-test-cli-ux task 3.1, flagspec migration). cmd_qctrl now initializes action = QUEUE_DO_NONE (xce/types.h pre-existing sentinel, same enum family as HOST_DO_NONE) before the getopt_long() loop, and rejects the invocation post-loop if action is still QUEUE_DO_NONE after parsing -- mirroring cmd_hostctrl's exact HOST_DO_NONE pattern. Landed as part of migrating cmd_qctrl (and 16 other flag-accepting commands) from getopt() to the shared flagspec_t + getopt_long() mechanism (flagspec.c/.h, tasks 1.1/1.2). Regression-locked by test_qctrl_missing_action_flag_rejected and test_qctrl_flag_forms_short_and_long_both_accepted in src/controller/testsuite/test_test_cli.c.",
|
||||
"tags": [
|
||||
"controller",
|
||||
"testsuite",
|
||||
|
|
@ -19299,11 +19299,11 @@
|
|||
"uninitialized-variable",
|
||||
"undefined-behavior",
|
||||
"cli-ux-audit",
|
||||
"unfixed"
|
||||
"fixed"
|
||||
],
|
||||
"related_bugs": [],
|
||||
"occurrences": 1,
|
||||
"last_seen": "2026-08-26T09:32:18Z"
|
||||
"last_seen": "2026-09-09T00:00:00Z"
|
||||
},
|
||||
{
|
||||
"id": "bug-1705",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue