suite_tcl90: -notfiles exclusion knob; Tk census excludes native-dialog files
The Tk opt-in census surfaced that the full suite cannot run unattended in
the batch/suite-built shell: winDialog.test (72 cases) and winMsgbox.test (19)
pop real OS dialogs whose message-injection automation does not drive them
here, so each blocks waiting on a human. The first attempt hung there and the
engine correctly reported no-totals/fail.
Adds a dedicated file-exclusion mechanism: tools/test_gate.tcl gains -notfiles
(a Tcl list of test-file globs passed to the driver as one -notfile list
value - a flat -testargs cannot carry a multi-file list through the option
chain, since -notfile takes a single list arg), and build905.zig gains a
per-library -Dtestnotfiles-<lib> knob defaulting to each LibSuite's
default_notfiles. tk defaults to excluding winDialog.test + winMsgbox.test so
its census completes hands-off; -Dtestnotfiles-tk="" re-includes them for a
manual interactive run. The exclusion is recorded in the evidence summary
(notfiles key). Empty for every other library (no behaviour change).
Verified: tk census now completes unattended (9865 run / 8127 passed / 1711
skipped / 27 failed, result pass; log shows winDialog/winMsgbox in the driver
skip list); thread gate still PASS with notfiles {} recorded.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
constlibtests_step=b.step("test-libraries","library testsuites under the built shell per policy tier (default: thread+tclvfs gate, tcllib+tklib record; tk excluded - see test-tk)");
constlibtests_step=b.step("test-libraries","library testsuites under the built shell per policy tier (default: thread+tclvfs gate, tcllib+tklib record; tk excluded - see test-tk)");
constlib_testargs=b.option([]constu8,b.fmt("testargs-{s}",.{ls.name}),b.fmt("extra tcltest/driver args for the {s} testsuite",.{ls.name}))orelse"";
constlib_testargs=b.option([]constu8,b.fmt("testargs-{s}",.{ls.name}),b.fmt("extra tcltest/driver args for the {s} testsuite",.{ls.name}))orelse"";
constlib_notfiles=b.option([]constu8,b.fmt("testnotfiles-{s}",.{ls.name}),b.fmt("test-file glob patterns excluded from the {s} run (default \"{s}\")",.{ls.name,ls.default_notfiles}))orelsels.default_notfiles;
constis_tk=std.mem.eql(u8,ls.name,"tk");
constis_tk=std.mem.eql(u8,ls.name,"tk");
conststep=b.step(b.fmt("test-{s}",.{ls.name}),b.fmt("{s} testsuite under the built shell (policy: {s})",.{ls.name,policy}));
conststep=b.step(b.fmt("test-{s}",.{ls.name}),b.fmt("{s} testsuite under the built shell (policy: {s})",.{ls.name,policy}));