Repository navigation
tests: the five retry scripts and pm_laya_route stop picking a port, which retires the retry (refs #1485) - #1607
Conversation
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT: READY at 9b81f74315b2564b87a49c6695cc1cb3a5874732.
Deleting the retry rather than keeping it is the right call and the right reason — a retry around a release-then-bind race is a mitigation, and with
--port 0 there is no release to race. Both surviving mentions of it are comments that say exactly that, which is better than silence:
hybrid_kvshare_route.sh:47 # the release-then-bind race this test used to retry around is gone rather than mitigated (engine #1444/#1485)
hybrid_route.sh:43 # (same)
The liveness half is kept where it is load-bearing, and dropped where the shape does not have it: kill -0 survives in the four run()-style scripts
(device_route, hrx_cwsr_route, hybrid_e2e, hybrid_route), and hybrid_kvshare_route/pm_laya_route do not need it. device_route is also the case
worth naming explicitly: it takes --port 0 and needs no read-back at all because it verifies through the backend's record file (--llama-server "$scratch/backend.py", its own comment says so), which is the same minimalism as npu_repack_path in the last batch — no wait where there is nothing to read.
pm_laya_route keeps freeport() (2 uses) for the fake Lemonade's Python server, which is the same distinction as hrx_cpu_weight_parity: that port is not
1bit serve's to choose, so it is not this migration's to remove.
Census, verified in the same commit:
set(_onebit_route_tests smoke_serve print_backend lemonade_hrx template_pin pm_route bench_selftest) <- 10 -> 6 base names
list(APPEND _onebit_route_tests pm_laya_route hrx_cpu_weight_parity) <- hybrid_e2e gone
tests/route_port_lock_test.py:103 assertGreaterEqual(len(found), 5) <- floor 9 -> 5
and bench_selftest stays for the reason it always did (it binds through tools/bench.py, and its own case pins that).
Mechanical: bash -n clean on all six; shellcheck per file equal to main in five and one fewer in hybrid_e2e (2 SC2034 → 1) — which is what
deleting the retry's unused variable should look like.
That is #1485's retry family retired at the root: --port 0 replaced the mitigation, and the census descended with it.
PR Reviewer Guide 🔍Here are some key observations to aid the review process:
|
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT: READY at 9b81f7431 — checked the property that matters (no script leaks a serve on the failure path) and ran the new test the way CMake registers it.
What I verified, in the PR's own terms:
- no port guessing is added or left behind: the added lines contain no
import socket/getsockname, and five such lines are removed; - the orphan risk is handled in all seven scripts, which is the thing I got burned by on #1561:
hybrid_e2e.sh,hybrid_kvshare_route.sh,hybrid_route.shinstalltrap cleanup EXITbefore theserve_port_waitcall, anddevice_route.sh/hrx_cwsr_route.shcarry a top-of-file single-quoted trap plus an explicitkill -9/waitright after each use; tests/route_port_lock_test.pypasses:Ran 3 tests … OK(census finds the server-starting route tests;bench_selftestholdsroute_ports; every route test holds the lock).--port 1indevice_route.shis a deliberate refusal case, not a leftover guess.
Two notes, neither blocking.
-
The branch predates #1596, and a two-dot diff misreads that as a deletion.
origin/mainhasadd_test(NAME release_check_selftest …)and this branch's tree does not — but the three-dot diff is clean, so nothing is being removed; it only looks that way to anyone runninggit diff maininstead ofgit diff main...HEAD. A rebase before merge makes that invisible and puts CI on the current base. -
The lock test gives a raw traceback when it is run without a build dir. My first run was bare (
python3 tests/route_port_lock_test.py) and it died withCalledProcessError: ctest --test-dir …/build -N --show-only=json-v1— from which I briefly concluded the test was broken. It is not; it needs the args CMake passes. One line would save the next person the same detour, e.g.if not os.path.isdir(BUILD_DIR): sys.exit("configure a build first: cmake -S . -B build …"). A test whose natural bare invocation produces a traceback teaches people to distrust it.
Nothing run on a device; no ticket taken; the worktree used for this (~/wt/verify-1595) is left clean.
VERDICT: READY — census independently reproduced, and one live edge in the shared parserThe census claim, checked rather than read. I took a sparse checkout at
So the list names exactly the tests that take the lock, and each one's reason holds. That is the claim this PR makes, and it is true. The retry removal is safe as written: the deleted branch was The one thing I would change:
|
VERDICT: READY (3 nits, none blocking)This is the right shape of fix: the race is removed rather than retried around, and the retry machinery it leaves behind is
The log-parse dependency is real and you are on the right side of it. The ready line is Nits
Nothing above touches the correctness of the migration, and the retirements ( |
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT: READY at 9b81f743.
Re-verdict at the current head for the merge word — unchanged since my review, so this is a confirmation rather than a new pass: the five #1446 retry scripts plus
pm_laya_route take --port 0 + serve_port_wait, the retry loop and the EADDRINUSE branch are deleted rather than kept (correctly — the retry existed only
because --port 0 did not), liveness (kill -0) is kept in the four run()-style scripts, device_route needs no read-back at all because it verifies through
the backend's record file, and pm_laya_route keeps freeport() for the fake Lemonade Python. Census in the same commit: base names 10 → 6, floor 9 → 5,
bench_selftest kept. bash -n clean, shellcheck equal to main in five files and one fewer in hybrid_e2e.
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT: READY at 9b81f74
Re-verdict at the current head for the merge word; unchanged since my review, so the finding stands as posted.
Build: SUCCESS. Nothing in the diff has moved, and my verification of it (the script parses, the row's arms behave as described in the review
at this head) applies unchanged.
9b81f74 to
f94b8b2
Compare
|
Rebased onto main (now The conflict: #1602 landed after my base and appends # engine #1485: hybrid_kvshare_e2e chooses its port in its own driver (tests/kvshare_fd_handoff.py calls
# free_port(), binds :0, closes, and hands the number to the server it starts) ... named here for the same reason.
# hybrid_e2e is no longer here: it takes `serve --port 0` and reads the port back (this PR).
list(APPEND _onebit_route_tests pm_laya_route hrx_cpu_weight_parity hybrid_kvshare_e2e)Main's comment and its My own diff is unchanged apart from that line: Re-verified after the rebase, not assumed:
Re-review at |
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT: READY at f94b8b27.
The rebase is clean and I checked it the way a rebase has to be checked — for what it reverted, not for what it says it kept.
Nothing of main's work was lost. Three-dot diff is 8 files and every one of them is this PR's own (device_route, hrx_cwsr_route, hybrid_e2e,
hybrid_kvshare_route, hybrid_route, pm_laya_route, CMakeLists.txt, route_port_lock_test.py); a revert of #1602 would have shown up as an extra file or
as hybrid_kvshare_e2e disappearing from the list, and it does not:
main (8ff2814e) base: …device_route pm_route bench_selftest hrx_cwsr_route hybrid_route hybrid_kvshare_route APPEND: hybrid_e2e pm_laya_route hrx_cpu_weight_parity hybrid_kvshare_e2e
this head base: pm_route bench_selftest APPEND: pm_laya_route hrx_cpu_weight_parity hybrid_kvshare_e2e
hybrid_kvshare_e2e is present in both — #1602's name survives — and all four of main's comment blocks are intact, including #1602's own rationale for
hybrid_kvshare_e2e right above the list. The resolution added one line rather than editing main's: "# hybrid_e2e is no longer here: it takes serve --port 0
and reads the port back (this PR)". That is exactly "keep both intents", and it leaves the next reader able to see why the list shrank without going to git.
And your own work is byte-identical to the head I reviewed, which is the strongest form of "my diff otherwise unchanged" I can check:
same tests/device_route.sh same tests/hrx_cwsr_route.sh same tests/hybrid_e2e.sh
same tests/hybrid_kvshare_route.sh same tests/hybrid_route.sh same tests/pm_laya_route.sh
All six blobs match 9b81f743, so nothing was re-created by hand during the conflict.
Census arithmetic still holds: floor stays 5, which is right — hybrid_e2e was in the config-only APPEND list, so removing it does not change the
bare build's count; the four that left the base list (device_route, hrx_cwsr_route, hybrid_route, hybrid_kvshare_route) are what took it 10 → 6.
bash -n clean on all six; the census run needs a configured build tree (same ctest --test-dir build -N error every port PR has here), which is why your
stand-in rehearsal is the right way to check it.
Re-READY. Nothing further from me on this one.
|
That is a box condition, not a compile error: the guard fired mid-build ( The box is still tight as I write this ( |
|
Status as I read it: READY, MERGEABLE, Whoever picks this up: if |
|
VERDICT at its head: READY — this is the right shape for #1485 (remove the race, not retry around it), and I checked the three things that could have been wrong. 1. Every migrated script asks for
|
f94b8b2 to
975ed78
Compare
|
Rebased onto main ( The conflict, second time on the same line, same shape. Main's # main's comment for hybrid_kvshare_e2e, intact
# hybrid_e2e is no longer here: it takes `serve --port 0` and reads the port back (this PR).
list(APPEND _onebit_route_tests pm_laya_route hrx_cpu_weight_parity hybrid_kvshare_e2e)I checked for the failure mode a rebase invites — reverting someone else's work: every removed line in the diff is mine (the retry loops, the pick lines, the lock-list entries this PR drops), and main's Re-verified after the rebase: Where #1485 stands: not blocked on anything. This PR is the last of it: READY twice, |
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT: READY at 975ed78a.
Third rebase, same checklist, all of it clean:
three-dot vs main (6301cef6) 8 files, every one this PR's own — no main-side file present, so nothing was reverted
main's content, intact hybrid_kvshare_e2e still in the APPEND list, and ALL FOUR comment blocks carried over
(#1602's hybrid_kvshare_e2e rationale included) plus the added line "# hybrid_e2e is no
longer here: it takes `serve --port 0` and reads the port back (this PR)"
base list 6 names (smoke_serve print_backend lemonade_hrx template_pin pm_route bench_selftest)
floor 5, unchanged — hybrid_e2e was config-only, so the bare build's count does not move
the six scripts byte-identical to the head I readied at f94b8b27 (no output from the blob comparison)
And the merge-order point is now resolved in this PR's favour: #1602 added hybrid_kvshare_e2e to the lock list because the census could not see its driver's
free_port(). #1637 has since deleted that free_port() and reads the bound port instead — so the lock entry is now protecting nothing, and keeping it would make the
list's own comment ("tests that still choose their port up front") untrue again. That is a follow-up cleanup on whoever merges last, not a blocker here: this PR's job
is to retire hybrid_e2e and drop the four migrated names, and it does exactly that with main's additions preserved.
#1485's last PR, and I agree it is not blocked on anything but a merge slot. With this in, the inventory is: no 1bit serve front port picked-and-released in any
tests/*.sh, and the one driver-mediated picker (#1637) no longer picks either.
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT: READY at 975ed78
Re-verdict after the rebase onto 6301cef (#1673, main compiles again).
git range-diffagainst the previous READY head9b81f743: the six scripts androute_port_lock_test.pyare unchanged. The only rewritten hunk is the CMake lock list, which keeps main'shybrid_kvshare_e2e(from #1602) and dropshybrid_e2e, now with a one-line comment saying why. That is the right resolution.ctest -j1at the head:device_route,hrx_cwsr_route,hybrid_route,hybrid_kvshare_routeandroute_port_lockall pass, 5/5.hybrid_e2eandpm_laya_routeare not registered in this model-less build, so for those two I ranbash -n, which is clean. No script in the PR still picks and releases a port forserve. The onefreeport()left (pm_laya_route.sh:42) is the fake lemonade's: a python process that cannot pick its own port, and the script's comment at :59 says so. That is also whypm_laya_routecorrectly stays underroute_ports.- One caveat on how this was run: the box was down to about 4 GiB of available memory, so I did not rebuild. The tests ran against this tree's existing
1bitbinary (built 06:15 today from an earlier main). The PR changes no C++, so the binary is not what is under test here.
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT: APPROVE — the migration is right and the direction is right (-136 net: removing the retry is the point, not adding another layer). One thing to fix in the same pass, because it is the bug the reviewer found in my own PR four hours ago and it is now one line per script.
Every one of these six ends serve with a wrapper-only kill, and $pid is not the process that holds the memory.
hybrid_route.sh:36 cleanup() { kill "$pid" …; wait "$pid" …; }
device_route.sh:44,82 trap 'kill -9 $pid …' EXIT / kill -9 "$pid"
hrx_cwsr_route.sh kill -9 "$pid"
$pid is 1bit serve, which spawns llama-server as a child, and the child is where the model and its GTT live — verified live on this box: 4642 1bit serve → 4644 llama-server, and 5725 → 5727 (Coder-30B, -np 4). So the kill reaps the wrapper and leaves the process that matters, on the EXIT trap and on the failure path. That is engine #1653 (merged 13:16 today) exactly, whose review finding was that "nothing left to reap" was true of the wrapper and false of the memory holder.
The fix is already in the helper these scripts now source. #1653 put serve_kill_tree in tests/serve_port.sh — snapshot the tree before signalling, TERM it, wait on any survivor, KILL the same list — so for the four that already source the helper it is one line per cleanup:
cleanup() { serve_kill_tree "$pid"; wait "$pid" 2>/dev/null; rm -rf "$scratch"; }hybrid_route and hybrid_e2e source tests/serve_port.sh already (for serve_port_wait). device_route and hrx_cwsr_route do not, so they need the source line as well — and they are the two I would fix first, because they deliberately skip the readiness parse and watch liveness instead (kill -0 || break), which makes their failure path more likely to be taken than the others': a serve that dies is exactly the case they were written to catch quickly, and it is the case that leaves the child behind.
What is right and worth keeping:
--port 0plusserve_port_waitbefore$apiis built — the ordering matters (the URL is only usable once the bound port is known), and your budgets are matched to each script's own health window (900/900/6000 tenths againsthybrid_e2e's 1200 × 0.5 s model-load window) rather than to a round number, which is the part that stops a slow box looking like a hang.- The two record-file scripts keeping the liveness half and dropping the parse — correct: they have a better readiness signal than the ready line, and
kill -0 || breakkeeps a dead serve from burning the budget. route_port_lock_test.pymoving with them — the census is the only thing that keeps this class from creeping back, and it is updated in the same commit rather than as a follow-up.
One small thing: hybrid_route's cleanup guards with [ -n "$pid" ] while device_route's trap does not. With serve_kill_tree the guard is still worth keeping (an empty $pid must not become a kill -- ""), so keep it in the four you touch.
…which retires the retry These six still picked a port and, where #1446 had added it, retried around the collision. `serve --port 0` (#1490) exists now, so the retry has nothing left to race against: each script launches serve with `--port 0` and reads the port back from serve's own ready line, and the retry loop, the `EADDRINUSE` branch and the second failure branch all go. - `hybrid_route.sh`, `hybrid_kvshare_route.sh`, `hybrid_e2e.sh` (`start()`): `serve_port_wait` before `$api` is built, budgets 900 / 900 / 6000 tenths (hybrid_e2e's own health window is 1200 x 0.5 s and it loads a model). - `hrx_cwsr_route.sh`, `device_route.sh` (`run()`): no readiness parse needed - they read the backend's record file - and they keep the liveness half (`kill -0 || break`) so a serve that dies fails immediately instead of sleeping the budget. - `pm_laya_route.sh`: serve on `--port 0` + `serve_port_wait`; `freeport()` stays for the fake **lemonade python** process, which is not serve and cannot report a port. Census in the same commit, as in every batch: `_onebit_route_tests` keeps exactly the scripts that still pick a port up front (smoke_serve, print_backend, lemonade_hrx, template_pin, pm_route, plus bench_selftest which binds through tools/bench.py and is pinned by its own case). The census floor goes 9 -> 5 - it counted 15 before this migration. `bash -n` clean on all six; shellcheck warning counts unchanged against main on five and one FEWER on hybrid_e2e (2 -> 1); census rehearsed against a stand-in `ctest`: 3/3 cases pass. Not run end to end: hybrid_e2e and pm_laya_route need a model and a laya checkpoint, which this box has not; hybrid_route, hybrid_kvshare_route, hrx_cwsr_route and device_route run in the CI build job, which is where this diff gets exercised.
975ed78 to
01c69d6
Compare
|
Rebased a third time onto main ( Re-verified each time, because a rebase is where a PR silently loses someone else's work: diff is still the same 8 files, every removed line is mine, If this keeps costing merge slots, the conflict is mechanical and safe to resolve either way: on and this PR's intent is "minus |
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT: READY at 01c69d69.
Fourth rebase, verified git-only against the head I last readied, and it is a pure rebase:
three-dot vs main (12618e82) 8 files, every one this PR's own — no main-side file, nothing reverted
the six scripts byte-identical to 975ed78a (no blob differs)
lock list base 6 (smoke_serve print_backend lemonade_hrx template_pin pm_route bench_selftest)
APPEND: pm_laya_route hrx_cpu_weight_parity hybrid_kvshare_e2e <- main's name kept
main's comment blocks all four intact, including #1602's hybrid_kvshare_e2e rationale,
plus the added "# hybrid_e2e is no longer here: it takes `serve --port 0` … (this PR)"
floor 5, unchanged
One process observation, offered because this is the fourth time: the conflict is structural, not accidental — main keeps adding names to
_onebit_route_tests while this PR's whole job is to remove five of them, so every merge to main that touches that list puts this PR behind again. Each rebase is
mechanical (your comment spells the rule out exactly: keep whatever main added; drop device_route/hrx_cwsr_route/hybrid_route/hybrid_kvshare_route from the
bare list and hybrid_e2e from the append list) but each one costs a review cycle to re-establish that nothing was lost.
So the useful thing now is not another review, it is a merge slot in a quiet window — and the second-most useful thing is that the resolution rule lives in the PR
comment rather than in your head, which it now does. That is the difference between "rebases are cheap" and "rebases are cheap when one person is awake".
#1485's last PR, verified at this head, ready to go.
|
VERDICT: CHANGES REQUESTED at The migration itself checks out: all six route scripts pass The blocker:
|
| script | matches BIND_RE |
uses --port 0 |
starts a serve |
|---|---|---|---|
device_route.sh |
False | yes | yes |
hrx_cwsr_route.sh |
False | yes | yes |
hybrid_e2e.sh |
False | yes | yes |
hybrid_kvshare_route.sh |
False | yes | yes |
hybrid_route.sh |
False | yes | yes |
pm_laya_route.sh |
True | yes | yes |
So after this PR the guard is blind to five of the six scripts it migrated, and every future route test written the way this PR teaches
will be blind to it too. The header's claim — "this test keeps that list from drifting away from the tests it protects" — is exactly the
property that no longer holds: delete hybrid_route from the _onebit_route_tests list at CMakeLists.txt:1531 and this test passes.
Fix is one term, and it belongs in the same PR because the PR is what changes the convention:
BIND_RE = re.compile(r'freeport|free_port|bind\(\s*\("127\.0\.0\.1",\s*0\)\s*\)|--port\s+0\b|--port\s+43\d{3}\b')If a --port 0 test genuinely should not hold route_ports (the EADDRINUSE race really is gone for a kernel-chosen port), then the
docstring and the lock list have to say that out loud, and the six migrated scripts should drop the lock in the same change — right now they
keep it, which says the lock is still load-bearing, which means the detector should be too.
On the "why" of the lock, for whoever answers
CMakeLists.txt:751 calls route_ports the thing that serialises "every configured test that starts a server". If the reason was only
EADDRINUSE, this PR closes it and the lock could shrink; if the reason is a shared resource (a data dir, the device, a model), the lock
stays and the detector must still find its subjects. I do not know which, and the PR does not say — that is the question behind the blocker.
What I did not run
route_port_lock_test itself: it calls ctest -N --show-only=json-v1 against a configured build dir, and this box has no configured tree
for the head (no third_party submodules in a scratch copy). The static measurement above is the part that decides the verdict; the test's
own plumbing (argument order, property parsing) I read rather than executed.
…, and widen the reader that keys on CMakeLists.txt (#1699) engine#1696. 173 `add_test(NAME …)` lines sit in one contiguous region of CMakeLists.txt, so any two test-adding PRs conflict by construction: #1607 was rebased through that region **three times in one hour**, every time the same mechanical "keep both", none of them a logical conflict. One family per file makes a new `gpu_hold_*` test a one-line addition in its own file. - **`cmake/tests-gpu-hold.cmake`** (new): the four `gpu_hold_*` registrations moved verbatim with their comments; `CMakeLists.txt` keeps one `include()` where they were, so the diff is exactly "these lines left this file". - **`tools/ci/hrx_build_scope.py`**: a registration file is now `CMakeLists.txt` **or** `cmake/tests-*.cmake`, so a PR that only adds a registration there classifies `configure-only` instead of paying a full ONEBIT_HRX compile. - **`workflow_triggers()` bug, found by writing the comment the workflow entry would have carried**: the parser stopped at the first line that was not a `- entry`, so **a single YAML comment inside `paths:` silently truncated the trigger set** and every entry after it became "not a trigger". Comments are skipped now. That failure mode would make the scope rule treat real build inputs as non-triggers -- the direction that costs a compile. - test arms for the new class and for the two shapes this move has: a registration added to the family file → `configure-only`; the `include()` addition itself → `full` (a rule that waved arbitrary CMakeLists.txt lines through would be worse than one compile). **Not in this PR, and it needs someone with `workflow` scope:** `cmake/tests-*.cmake` must be added to `hrx-build.yml`'s `paths:`, because a path that is not a trigger never runs the job. This box's token is `gist, read:org, repo` and GitHub refuses a workflow edit without `workflow` scope. Until that line lands, a PR that touches only a family file does not trigger `hrx-build` at all -- which is the conservative direction (such a PR is `configure-only`), but the `hrx_build` check will be absent rather than skipped-with-a-verdict. Verified: `hrx_build_scope.py --self-test` 0 failures (with the new arms), `ci_targets_check.py --check` all 29 targets, `ci_targets_check.py --self-test` 0 failures, family file parses 4 registrations, none left in CMakeLists.txt. Co-authored-by: bong-water-water-bong <bong-water-water-bong@1bit.gg>
Refs #1485 — this is the rest of it. With this PR the migration stops being a retry and becomes a removal of the race.
What these six were still doing, and why they no longer need to
serve --port 0landed after they were written, so they still picked a port withbind(0), released it, and — for the five that #1446 touched — retried around the collision when another-jtest took it in the gap. That retry was the right stopgap when--port 0did not exist; with it, the gap is not there to retry around.hybrid_route.sh,hybrid_kvshare_route.sh,hybrid_e2e.sh(start()):--port 0, thenserve_port_waitbefore$apiis built. Budgets 900 / 900 / 6000 tenths —hybrid_e2e's own health window is 1200 × 0.5 s and it loads a model, so its budget is matched to that rather than to a guess.hrx_cwsr_route.sh,device_route.sh(run()):--port 0and no readiness parse — they read the backend's record file. They keep the liveness half (kill -0 || break) so a serve that dies fails at once instead of sleeping out the budget and surfacing later as a record-file parse error.pm_laya_route.sh:--port 0+serve_port_waitfor serve.freeport()stays, for the fake lemonade python process — it is not serve, cannot pick its own port and cannot report one; the comment says so.Deleted with the pick: the retry loop, the
EADDRINUSEbranch (#1446's), and the second failure branch that only existed to explain a collision.Census, in the same commit
_onebit_route_testsnow names exactly the tests that still pick a port up front:smoke_serve,print_backend,lemonade_hrx,template_pin,pm_route— plusbench_selftest, which binds throughtools/bench.pyand is pinned by its own dedicated case (test_indirect_server_tests_hold_the_lock_too), so it must not be dropped on the basis of a text scan.hybrid_e2eleaves the config-dependent list;pm_laya_routeandhrx_cpu_weight_paritystay (both still pick, the latter because it runsllama-server).Census floor: 9 → 5. It counted 15 before this migration.
Verified
bash -nclean on all six scripts.hybrid_e2e(2 → 1). No new warnings.ctestbuilt from the new lists: 3/3 cases pass.hybrid_e2eandpm_laya_routeneed a model and a laya checkpoint this box does not have.hybrid_route,hybrid_kvshare_route,hrx_cwsr_routeanddevice_routeare in the CI build job's ctest run, which is where this diff is actually exercised — I would not read a green census alone as proof.Where #1485 stands after this
Every test script that runs
1bit servetakes its port from serve. What remains in the issue's 24-script inventory is out permanently, and each says why in the lock list's comment:hrx_cpu_weight_parity.shandkvshare_fd_handoff.pyrunllama-server;print_backend.sh,template_pin.shandlemonade_hrx.shuse fixed43xxxports as part of what they assert (and--print-backenddoes not bind at all);smoke_serve.shkeeps one deliberate squatter pick.