diff --git a/TODO.md b/TODO.md index f255944..efb3ed5 100644 --- a/TODO.md +++ b/TODO.md @@ -1,5 +1,10 @@ # Production Readiness TODO +- [ ] Keep no-driver package QA reliable under hosted-runner load while still + enforcing bounded SIGINT shutdown. QA: the shared Linux smoke and Homebrew + formula use the same 30-second bound, focused regression tests pass, the full + TypeScript suite remains green, and the v0.76.1 packaging recovery completes. + - [ ] Accept producer-declared native runtime license material in verified product bundles so v0.76.1 CUDA packaging can complete without weakening the existing checksum, entry-type, tree-digest, or single-runtime checks. diff --git a/packaging/homebrew/Formula/mesh-llm.rb.template b/packaging/homebrew/Formula/mesh-llm.rb.template index 3c8fc97..c013af1 100644 --- a/packaging/homebrew/Formula/mesh-llm.rb.template +++ b/packaging/homebrew/Formula/mesh-llm.rb.template @@ -88,7 +88,7 @@ class MeshLlm < Formula ensure begin Process.kill("INT", pid) if Process.kill(0, pid) - _, status = Timeout.timeout(10) { Process.wait2(pid) } + _, status = Timeout.timeout(30) { Process.wait2(pid) } assert_predicate status, :success?, "mesh-llm client did not shut down cleanly" rescue Errno::ESRCH, Errno::ECHILD flunk "mesh-llm client exited before bounded SIGINT shutdown" @@ -103,7 +103,7 @@ class MeshLlm < Formula rescue Errno::ECHILD nil end - flunk "mesh-llm client did not stop within 10 seconds of SIGINT" + flunk "mesh-llm client did not stop within 30 seconds of SIGINT" end end end diff --git a/scripts/client-readiness-smoke.sh b/scripts/client-readiness-smoke.sh index a467e26..c366d65 100644 --- a/scripts/client-readiness-smoke.sh +++ b/scripts/client-readiness-smoke.sh @@ -6,7 +6,7 @@ set -eu mesh_llm_bin="${MESH_LLM_SMOKE_BIN:-/usr/local/bin/mesh-llm}" ready_timeout="${MESH_LLM_SMOKE_READY_TIMEOUT_SECONDS:-45}" -shutdown_timeout="${MESH_LLM_SMOKE_SHUTDOWN_TIMEOUT_SECONDS:-10}" +shutdown_timeout="${MESH_LLM_SMOKE_SHUTDOWN_TIMEOUT_SECONDS:-30}" case "$ready_timeout:$shutdown_timeout" in *[!0-9:]*|:*|*:) echo "smoke timeouts must be positive integer seconds" >&2; exit 2 ;; diff --git a/tests/client-readiness-smoke.test.ts b/tests/client-readiness-smoke.test.ts index c9cda1b..77d79b4 100644 --- a/tests/client-readiness-smoke.test.ts +++ b/tests/client-readiness-smoke.test.ts @@ -130,6 +130,7 @@ setInterval(() => {}, 1000) test("client readiness smoke polls readiness without shell-signal wakeups", { concurrency: false }, () => { const source = readFileSync(smoke, "utf8"); assert.match(source, /--no-console client/); + assert.match(source, /MESH_LLM_SMOKE_SHUTDOWN_TIMEOUT_SECONDS:-30/); assert.doesNotMatch(source, /client --auto/); assert.match(source, /readiness_reached=false/); assert.match(source, /readiness_in_log/); diff --git a/tests/homebrew-release.test.ts b/tests/homebrew-release.test.ts index a8ed69d..d8666ef 100644 --- a/tests/homebrew-release.test.ts +++ b/tests/homebrew-release.test.ts @@ -41,7 +41,7 @@ test("formula test certifies isolated no-driver client readiness", () => { '"--no-console", "client"', "Client ready", 'Process.kill("INT", pid)', - "Timeout.timeout(10)", + "Timeout.timeout(30)", ]) assert.match(template, new RegExp(snippet.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"))); assert.doesNotMatch(template, /"client", "--auto"/); assert.match(template, /assert_path_exists libexec\/"product-manifest\.json"/);