feat(xce-test-cli-ux): add command-name tab completion scoped to context
Registers libedit's GNU-readline-compatible rl_attempted_completion_function under g_interactive only. The candidate generator reads active_ctx->commands[] live on every call, so completion correctly tracks context switches rather than freezing at registration time. Single/multi-match UI (auto-complete vs. double-Tab candidate listing) is entirely libedit's stock behavior once given a correct context-scoped generator. Proven via a black-box pty test verified sound against a false-positive risk: xce_test has no fuzzy command-name matching, so an uncompleted partial token cannot coincidentally trigger the same effect a real completion would. Also fixes a harness bug (bug-1792): disabling kernel ECHO for output capture was silently suppressing libedit's own completion feedback too; added clitest_spawn_ex() with disable_echo as an explicit parameter, clitest_spawn() unchanged for existing callers. 1307/1307 controller suite passing (+1), re-verified 8/8 for flakiness. Task 2.3 of .kiro/specs/xce-test-cli-ux/tasks.md. Requirements: 7.1, 7.2, 7.3, 7.4 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019jaMf9QEwpugH2W9KAuc7f
This commit is contained in:
parent
07d238eada
commit
0ef232a013
4 changed files with 356 additions and 14 deletions
|
|
@ -21490,6 +21490,29 @@
|
|||
"related_bugs": [],
|
||||
"occurrences": 1,
|
||||
"last_seen": "2026-09-09T08:50:58.000Z"
|
||||
},
|
||||
{
|
||||
"id": "bug-1792",
|
||||
"timestamp": "2026-09-09T12:40:00.000Z",
|
||||
"error_message": "test_test_cli.c tab-completion test (xce-test-cli-ux task 2.3): Tab keystroke produced zero effect (no bell, no redraw, no completion) when driven through the existing clitest_spawn() pty harness -- 'wo' + Tab + Enter submitted literally \"wo\" (\"wo: No such command for xce test.\"), never \"worker\".",
|
||||
"file": "src/controller/testsuite/test_test_cli.c",
|
||||
"root_cause": "clitest_spawn() (task 1.7) deliberately clears kernel ECHO on the pty slave BEFORE forking, documented at the time as affecting ONLY the line discipline's own re-echo of injected bytes, 'not readline()/libedit's own prompt/redraw output, which stays intact'. An A/B probe (standalone C program linked against this project's exact pinned libedit, driven both ways via a raw openpty()+fork() harness, controlling for controlling-terminal presence too) showed that assumption does not hold for THIS libedit build: when the slave's ECHO bit already reads off at the moment readline() is invoked, libedit treats the session as a silent/non-interactive (password-style) input mode and suppresses ALL of its own live editing feedback, not just kernel echo -- Tab is accepted as a no-op, the line is only ever consumed whole on Enter, and no bell/redraw/candidate-list ever appears. With kernel ECHO left at its default-on state (libedit reconfigures the tty itself once its own readline() call takes over, taking on echo/redraw duties without any raw kernel double-echo reaching the captured stream), the identical Tab sequence produced the expected bell + in-place completion + ambiguous-match candidate listing. Controlling-terminal setup (setsid()/TIOCSCTTY) was also probed and made no observable difference -- ECHO state was the sole deciding factor.",
|
||||
"fix": "Refactored clitest_spawn() into clitest_spawn_ex(sess, path, argv, disable_echo) with the ECHO-clearing block made conditional on the new parameter; clitest_spawn() itself is preserved as a one-line wrapper calling clitest_spawn_ex(..., true), so every existing (output-only) caller is unaffected. The new xce-test-cli-ux task 2.3 tab-completion test calls clitest_spawn_ex(..., false) directly to keep kernel ECHO on, which restored full interactive completion behavior end-to-end (single-match auto-complete, ambiguous-match double-Tab listing, all verified via the real xce_test binary). Documented the finding in both clitest_spawn_ex()'s own comment and the file's top-of-file API summary so future tasks in this spec (3.5, 4.1-4.4) that add more interactive-feedback-dependent tests to this same file know to use clitest_spawn_ex(..., false) rather than rediscovering this the hard way.",
|
||||
"tags": [
|
||||
"libedit",
|
||||
"readline",
|
||||
"tab-completion",
|
||||
"pty",
|
||||
"ECHO",
|
||||
"test-harness",
|
||||
"xce-test-cli-ux",
|
||||
"task-2.3",
|
||||
"test_test_cli.c",
|
||||
"silent-input-mode"
|
||||
],
|
||||
"related_bugs": [],
|
||||
"occurrences": 1,
|
||||
"last_seen": "2026-09-09T12:40:00.000Z"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue