Repository navigation
Commit 0ffd195
* Remove test objects made without a runner label however the test ends (#189)
`withoutRunnerLabel` now labels each object it strips with a per-call test-run
ID and removes everything with that ID when the test finishes, passed, failed
or timed out. The owner sweep also removes containers that hold a swept
volume. In agent-network, the stand-in proxy and the blocker are removed in
`finally`. A pair of tests checks that a keeper left by a test that stopped
early is gone.
Closes #189
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Give the test-run sweep its own budget and an afterAll pass (#189)
Review round 1: the onTestFinished removal gets 3 minutes, not the 10 s hook
default; afterAll sweeps every test-run ID again, for a create that lands
after a timed-out test's removal; the regression pair records the storage only
after its checks and takes it out of afterAll's list first; one ps call finds
every holder.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Remove containers that hold a swept network; record the stand-in first (#189)
Review round 2: a network made without the runner label stayed when a
runner-labelled proxy held it, so the sweep now removes the containers on a
swept network too (looked up by name, which also finds a created container).
The hook budget covers the sweep's ten calls, and the impostor's name is
recorded before the stand-in exists.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Remove only exact holders of a swept network; test the holder sweep (#189)
Review round 3: Docker's network filter also matches the start of another
network's ID, so holders are checked by network name; a real-Docker test
covers created and running holders and bystanders; hook budgets cover the
sweep; label-less creates in agent-container and agent-supervisor are tracked
before they are made.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Close the remaining label-less leaks the review found (#189)
Review round 4: the rogue volume is made inside its try and removed after its
container; the foreign network is listed again in finally; the holder test
records each object before it exists; the sweep reads a partial inspect; the
hook budgets cover eleven calls.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Record label-less objects first in agent-network; remove networks by ID (#189)
Review round 5: the network and proxy shims record a name before they make
it, and the tests remove it in finally; the sweep removes networks by full
ID, reads output only from a call that exited by itself, and the holder test
runs its inspect with a missing ID, as the sweep meets it; the supervisor's
finally removals never throw.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Test removal by full network ID; say what the runner sweep removes (#189)
Review round 6.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Remove swept containers by full ID; track the blocker before it is made (#189)
Review round 7: Docker resolves a container name before an ID prefix, so the
sweep lists containers and holders with --no-trunc, and the holder test keeps
a container named like a holder's short ID; the blocker is tracked before its
run; comment wording.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Remove the foreign-runner storage in its test; clean every storage in afterAll (#189)
Review round 8: the storage made under another runner is removed in finally;
afterAll removes every storage even when one fails; the killed-create network
is listed by full ID; afterAll budgets have a minute over the sweep.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Read network names as JSON; name the seccomp probe; test --no-trunc (#189)
Review round 9: a network name may hold spaces, so the sweep reads names and
holders' networks as JSON; the label-less seccomp probe is named and tracked
before it runs; the holder test keeps a container named like a swept
container's short ID; budget comments state the real margin.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Never throw on output the sweep cannot parse; foreign creates inside try (#189)
Review round 10: a line that is not JSON is reported and skipped; the
foreign-runner network and storage are made inside their try and removed by
allocation; the recovery-handle test removes by full ID through the sweep;
doc wording.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Sweep the failed-allocation test by allocation; guard unreadable lines (#189)
Review round 11: the foreign-runner failed-allocation test removes its
objects through the sweep, by full ID and never throwing; network lines that
are not a network are skipped, with a unit test; in-test sweeps have budgets
for their worst case and their own warning prefix.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Budget the in-test sweeps; exact wording (#189)
Review round 12.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Sweep both runners of the recovery test; keep the first failure (#189)
Review round 13: the recovery test sweeps its two random runner owners after
its undo steps, so what a step could not remove or never recorded goes too;
the foreign-storage test's cleanup no longer replaces the body's failure;
doc wording.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Check the traps are live in the holder test; report every cleanup failure (#189)
Review round 14: the holder test first asserts Docker's prefix match and its
name-before-prefix resolution, so its bystander checks test something;
afterAll collects every cleanup step's failure; comment states which ending
the it.fails pair tests.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Keep the first failure in the replaced-keeper test; exact sweep wording (#189)
Review round 15 nits.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Check the partial-inspect answer; sweep the replaced keeper; budget margin (#189)
Review round 16.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Budget the replaced-keeper sweep; say what the holder test's budget covers (#189)
Review round 17.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* One per-file sweep in afterAll; real docker for the sweep; timed-out leftovers (#189)
Review round 18: objects made without the runner label also carry this file's
run ID, so afterAll removes them in one sweep within its budget; the sweep
runs the real docker found at load, never a shim left on PATH; agent-network's
label-less objects and the rogue volume are also removed in afterAll should
their test time out; the volume test checks the wrapper's labels; cleanup
warnings are logged; the fake's note names its answers.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Track the race and legacy volumes; cleanup loops inside try with real docker (#189)
Review round 19.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Sweep other runners' objects when the test finishes, timeouts included (#189)
Review round 20: async tests that make objects under another runner's owner or
their own random one register their sweep with onTestFinished, which runs
after a timeout too, so test budgets return to their old values; the shims and
afterAll use the real docker with a timeout; comment wording.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Real docker in every shim; foreign-name containers swept on finish; killed-call test (#189)
Review round 21: every shim calls the real docker found at load and refuses
when there is none; agent-supervisor's two foreign-name containers are removed
by name when their test finishes, timeouts included; a unit test shows a
killed call's output is not read; one more race volume tracked; comments name
every removal afterAll makes and what the finish-time sweep cannot cover.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Budget the supervisor finish hooks; name a signal kill; exact comments (#189)
Review round 22.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Register late-landing agent-network objects by name; exact comments (#189)
Review round 23: the three agent-network tests whose foreign object may land
after their own removal register it by name for afterAll, since the record
goes with the shim; the late-network test says why its network is swept;
comment wording.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Track the holder test's objects for afterAll, removed by exact name (#189)
Review round 24: the holder test's unlabelled objects and the swapped keeper
are tracked for afterAll; afterAll removes tracked names only when an object
of exactly that name exists, by its full ID, since some are named like ID
prefixes; withoutRunnerLabel uses sweepWhenFinished; the finish-time sweep
states what lands too late for it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Report removeByName failures; records keep every name; shim scoped (#189)
Review round 25: removeByName reads JSON (names with spaces), reports a failed
call other than no such object; agent-network's shims append one name per line
and every name is removed; the foreign-label shim rewrites only its own
allocation's create; the holder test checks the prefix-named network goes; the
killed-call unit test first checks its fake and asserts the warning; comments
name the networks set.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Test removeByName's exact-name guard and reports; records outside shims (#189)
Review round 26: the holder test checks removeByName leaves an object whose ID
starts with a now-missing tracked name; a unit test covers its no-such answer,
an ID-prefix match, a refused removal and a killed inspect; only a container's
name loses its leading slash; agent-network keeps its records outside the shims
so afterAll reads names a late client adds; sweepWhenFinished's doc covers
withoutRunnerLabel.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* removeByName treats only Docker's own missing answers as missing; tests every kind (#189)
Review round 27: a failure before the daemon (an unknown context) is reported;
the fake covers containers, networks and volumes, found, missing, under another
name and refused; the unlabelled-create shim acts only on its own container;
agent-supervisor's finish-time removals use removeByName; doc and import fixes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Real-Docker guard check on a free network; real error text in the fake; budgets (#189)
Review round 28: the holder test's removeByName check uses a network with no
endpoints, so a broken guard would remove it; the fake's stderr is Docker
27.4's own; the supervisor's finish-time removals get 90 s for two 30 s calls;
agent-network makes its records directory on first use; comment fixes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Holder test checks removeByName's exact removal and silence on a gone name (#189)
Review round 29: one free object of each kind is removed by exact name and
asserted gone, and a second removal of the gone names reports nothing; the
ID-prefix check's comment says what the names are; the test's finally removes
by exact name; the unit file's header names what the daemon test covers.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* The stand-in shim acts only on an exec in a proxy (#189)
Review round 30: any other exec passes through, so the shim can never run a
stand-in with an empty name, which Docker would give a random, unrecorded one.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Doc: a test may sweep its own runner owner with removeLabelledObjects (#189)
Review round 31.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Say what the killed-call fake leaves out (#189)
Review round 32.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Sweeps keep the Docker daemon set when they loaded (#189)
Review round 33: a test that times out may leave DOCKER_HOST changed
(agent-supervisor points it at a missing socket until its handle settles); every
call in docker-sweep.ts now restores DOCKER_HOST and DOCKER_CONTEXT as they were
at load, with a unit test that fails without it; the context fake says its path
is shortened.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Comment and naming fixes (#189)
Review round 34: what the loaded Docker address means for each call, which
stdout a failed call leaves unread, who adds the test-run label; the records
directory variable is lower case, as it changes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* The racer shim acts only on its own allocation's create (#189)
Review round 35: should a race test time out with the shim on PATH, other
tests' creates pass through; withoutRunnerLabel's doc says what a wrapper left
on PATH does to a later test.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* removeByName's reports name the stage and the command run (#189)
Review round 36: removeByName takes a when prefix, as removeLabelledObjects
does, and names the command it ran (docker rm, docker container inspect).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Sweep reports name their stage; a gone holder is not a failure; loaded daemon tested (#189)
Review round 37: removeLabelledObjects names the stage of each failed call and
says nothing of a holder gone since the listing (Docker 27.4's No such
container for it), still reporting any other failure; a test loads a fresh copy
of the module with DOCKER_HOST and DOCKER_CONTEXT set and shows the sweep keeps
them; unit tests cover both holder inspect answers.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Track the never-started unlabelled agent container by name; comment fixes (#189)
Review round 38: Docker 27.4 removes a network a created, never started
container still names, so that test's container is tracked for afterAll; the
docs say which holder reads stay quiet, that the sweep reads stderr for them,
and that a wrapper can stay on PATH for the rest of the file; the loaded-daemon
fake says what it answers.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Label agent-network's unnamed helper containers for afterAll; track the rogue endpoint (#189)
Review round 39: a helper run killed between create and start is never removed
by --rm, and is no holder once its vendor network is gone, so the curl, DNS and
concurrent-network helpers carry this file's run ID and afterAll sweeps it
(13-minute hook for two sweeps); agent-container's rogue endpoint is tracked by
name; the holder fake says the removals' stdout is not read.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Track the peer, stand-in proxy and foreign keeper by name; holder test asserts the quiet sweep on the daemon (#189)
Review round 40: three label-less or foreign containers made with a 60 s client
could land after their test's finally, and once their network is gone none is
a holder, so each is tracked by name for afterAll; the holder test checks the
daemon's own answer for a gone container and that the sweep reports no failure
for it; the holder fake says what it leaves out; the unit file unstubs env
after each test; agent-network removes its records before the sweeps.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Track the rogue-volume container before its create (#189)
Review round 41: should the create land after its client is killed, afterAll
removes the container by name before the label-less volume it mounts.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Read the holder test's sweep warnings before restoring the spy (#189)
Review round 42: mockRestore clears the recorded calls, so the check that the
sweep says nothing of a gone holder read an empty list and could not fail; the
calls are copied first, and the test also checks the spy saw the sweep's own
lines.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Storage release after a pass fails the test again; mark the invented fake answer (#189)
Review round 43: in the two tests whose cleanup now warns instead of throwing,
a release that fails after the test's own checks passed fails the test, as on
main, while a failure above still stays the one reported; the second holder
fake case says its answer is invented.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* removeByName: tested on unreadable output, quiet on a network gone before its removal (#189)
Review round 44: the fake gives an inspect answer that is not JSON (reported,
nothing removed, never thrown) and a network gone between inspect and removal,
which Docker 27.4 answers 'network <ID> not found' and removeByName now treats as
gone; the keeper comment says afterAll also removes it by name; a comment line
is rewrapped.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Restore two failures main's cleanups had; report an inspect answer with no ID and name (#189)
Review round 45: the foreign-name supervisor test fails again when, after its
checks pass, the container's removal fails; the unsettled-allocation test checks
after its sweep that nothing of the allocation is left, as main's listing did;
removeByName reports a parsed answer without an ID and a name, and its doc lists
what it stays quiet about; comment blocks rewrapped.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Comment fixes: what main's check was; what removeByName reads (#189)
Review round 46.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Test that the real docker is found once at load and that shims refuse without one (#189)
Review round 47: a unit test loads the fixture with docker on PATH, then puts
another first, and checks REAL_DOCKER keeps the first; loaded with no docker,
requireRealDocker refuses. A docker found through a relative PATH entry is
resolved to an absolute path. The never-started agent container's comment gives
the real reason it is tracked.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Test the load-time docker as the default and a relative PATH entry; client limit; messages (#189)
Review round 48: the finds-docker test loads the fixture through a relative
PATH entry, then puts another docker first and calls both removals with no
docker given, checking only the docker found at load ran; the network listing
in the killed-create test gets its 60 s client limit back; the supervisor's
removal message handles a docker that could not start; the fake says what it
answers.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Every Docker client call the branch adds or moves in a test has a time limit (#189)
Review round 49: synchronous calls cannot be stopped by a Vitest timer, so each
one the branch added, moved or rewrote (removals, inspects, the foreign creates
and the ack-script run) takes CLIENT_LIMIT, 60 s with SIGKILL, as main's docker()
helper did; the supervisor's removal message names a kill by signal.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Track the ack-script container by name; time limits on the moved and attached calls (#189)
Review round 50: agent-supervisor's label-less ack-script container is tracked
by name before its create and removed by afterAll; runner-workspace's docker
helper, which now runs calls this branch moved out of a try, takes CLIENT_LIMIT;
the seccomp probe and agent-network's attached helper runs are killed with
SIGKILL at their limit, as an attached run forwards SIGTERM; the killed-create
test's listing reports its own failure.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Name a failed foreign-keeper removal after a pass (#189)
Review round 51: as on main, a docker rm of the foreign keeper that fails after
the test's checks pass fails the test with Docker's own error, before the
storage release's.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Workflow limits for the longer teardown; full test of the loaded daemon; keeper warning (#189)
Review round 52: the Live probes job limit rises to 90 minutes, as the teardown
hooks it covers now allow 24 (vitest-config pins it); the Agent isolation
comment says its 45 minutes cover ordinary runs; the loaded-daemon test answers
one network with a holder and one named container, so every kind of call is
checked; a failed foreign-keeper removal is warned of when the body failed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Live probes limit counts agent-planning's probe and teardown; clearer missing-record failures (#189)
Review round 53: the comment counted four probes, before #193 added
agent-planning's; with its 11-minute probe and 2-minute teardown the limits
total 90 minutes plus setup, so the job limit rises to 100 (pinned in
vitest-config); the refused-network and refused-proxy tests say so when their
shim recorded nothing.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Sweep quiet on a network gone since its listing; full loaded-daemon test; hook budget (#189)
Review round 54: the sweep treats Docker 27.4's 'network <ID> not found' on its
network removal as gone, as removeByName does, with a test that still reports
any other failure; the loaded-daemon test now lists a container, a network and
a volume, each with a holder, and checks every command line; the after-sweep
check's budget covers its three listings; the Agent isolation comment names the
shared sweep.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Holder test checks its gone-holder shim fired; header and workflow comments (#189)
Review round 55: the holder test's shim leaves a marker, and the test checks it
before trusting the quiet sweep; the unit file's header says the sweep reads a
network removal's stderr too; the Agent isolation comment names everything its
45 minutes cover.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Rewrap two comment blocks (#189)
Review round 56.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* The loaded-daemon fake gives the volume its own holder (#189)
Review round 57: the stateless fake listed the network's holder again for the
volume, after the sweep had removed it, which Docker would not; the volume now
has its own holder, and the test checks its removal.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Track the supervisor's foreign-name containers for afterAll; stage in unreadable-line reports (#189)
Review round 58: the two foreign-name containers are tracked by name for
afterAll too, should a create land after their finish-time removal; the sweep's
report of a line that is not JSON names its stage.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Failure messages name the docker command; record checks first (#189)
Review round 59: the killed-create listing and the supervisor's after-pass
removal name the command that failed, as main's helper did; the refused-network
and refused-proxy tests check their shim's record before the error, so a shim
that no longer matches is reported as itself.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Exact command in the listing's failure; holder test checks every sweep line (#189)
Review round 60: the killed-create listing's failure message is built from the
arguments it ran; the holder test requires the gone-holder inspect's exit 1, and
accepts only the sweep's own removal lines, including the holders line, so any
failure or unreadable answer fails it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Report sweep lines of the wrong shape; exact commands in removeByName's reports (#189)
Review round 61: the sweep reports a network listing line that is not a network
and a holder line that is not an ID and networks, as removeByName reports an
answer that is not an ID and a name, with tests; removeByName's failure reports
name the exact command and ID.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Gone checks need Docker's missing answer; sweep checks listed IDs and names; full commands (#189)
Review round 62: objectExists counts only Docker 27.4's missing answer as gone
and throws on any other failure, so a killed inspect no longer passes a removal
check (the export, follow-up and holder tests; runner-workspace's volume check
wants 'no such volume'); the sweep names whole commands in its reports, reports
and skips listed lines that are not a container ID or a volume name, and reports
a holder line with no space once; agent-network's records removal cannot stop
the sweeps; the keeper test's finally sweep says finally.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* agent-network's survival checks use objectExists (#189)
Review round 63: a killed or failed inspect in the finally no longer reads as
the foreign object being removed; Docker's missing answer counts as gone, and
any other failure is rethrown, naming the command, after the body's own
checks.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Every ID passed on as an argument has a checked shape (#189)
Review round 64: network IDs from the listing, holder IDs and removeByName's
inspected IDs must be full IDs, or are reported and skipped, so none reads as
an option; an inspect line with no space is reported instead of parsed twice;
fake cases for each.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* removeByName refuses a name that could read as an option; fake notes (#189)
Review round 65: removeByName checks the name it passes on (a volume's against
Docker's allowed shape, others for a leading dash) and reports a refusal, with
fake cases; the volume-name shape needs two characters, as Docker 27.4 does;
agent-network's two rewritten shims say which answers are Docker's and which
are invented.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Test objectExists; gone cases reach their inspect; per-record errors in afterAll (#189)
Review round 66: a unit test loads the fixture with a stand-in docker and
checks objectExists is true, false only on each kind's missing answer, and
throws naming the command on a killed call or an unknown context, at the
loaded daemon; removeByName's gone cases assert their inspect ran; the holder
fake's missing answer names the full ID; agent-network's afterAll reports a
record it cannot read and goes on.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Gone checks in the touched tests use objectExists; fake and comment fixes (#189)
Review round 67: the keeper-replaced, foreign-name and unlabelled-agent checks
use objectExists, and the holder test calls it directly; the PR says checks in
untouched tests keep main's form; the objectExists fake prints the unknown
context's quotes as Docker does and says its path is shortened; the
supervisor's tracked containers are described as lacking the runner label.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Every gone check in a changed test uses objectExists (#189)
Review round 68: the by-ID removal and start tests, the rogue-endpoint test,
the recovery test's exists helper and agent-network's late-landing check use
objectExists; removeByName's refusal says the name could read as an option;
the objectExists fake marks its stdout as invented.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* The proxy-start test's gone check uses objectExists; assert the raced removal ran (#189)
Review round 69: the last gone check in a changed test uses objectExists; the
gone-network sweep test checks its removal ran before trusting the silence; the
stand-in shim's note says where stderr goes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Shape checks before the gone checks; objectExists refuses an option-like ref (#189)
Review round 70: the late-landing network and proxy-start tests check the value
their shim recorded before inspecting it, as the record tests do, so a shim that
recorded something else is reported as itself; objectExists refuses an empty
or dash-led ref, naming it; the proxy-start test's removal takes CLIENT_LIMIT.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Trim the listing's stderr in its failure message (#189)
Review round 71.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Pin every docker call's time limit; volume refusal reason; guarded record reads (#189)
Review round 72: a unit test loads the fixture with spawnSync observed and
checks every removal call is given 30 s and SIGKILL, and objectExists 60 s and
SIGKILL, so the budgets built on them cannot lose their limit unseen;
removeByName says a refused volume name is not one Docker allows; agent-network's
finally blocks report a record they cannot read instead of throwing over the
body's failure; the PR says what every changed gone check requires.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Time-limit test runs all thirteen calls; holder search and no-space lines tested (#189)
Review round 73: the time-limit test answers so both removals make every call
(13), and checks each; a holder search line that is not a container ID is
reported and skipped, with a test; removeByName reports an inspect line with
no space as no ID and name; the holder read's no-space line is tested.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Test the fixture's remaining guards; exact reasons in refusals and reports (#189)
Review round 74: tests cover a docker that cannot start (both functions report
and never throw), Docker's missing text with another exit status in
objectExists, an empty name in removeByName, and a holder line that is not JSON,
reported once; refusals of an empty value say so; an inspected ID that is not a
full ID is reported as that; the two fakes that answer removals say their
stdout is not read.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
1 parent 79deeec commit 0ffd195
10 files changed
Lines changed: 1181 additions & 227 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
12 | | - | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
13 | 15 | | |
14 | 16 | | |
15 | 17 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
16 | | - | |
17 | | - | |
18 | | - | |
19 | | - | |
20 | | - | |
21 | | - | |
22 | | - | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
23 | 24 | | |
24 | 25 | | |
25 | 26 | | |
| |||
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
51 | 51 | | |
52 | 52 | | |
53 | 53 | | |
54 | | - | |
55 | | - | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
56 | 57 | | |
57 | 58 | | |
58 | 59 | | |
| |||
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
8 | | - | |
| 8 | + | |
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
| |||
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
33 | 38 | | |
34 | 39 | | |
35 | 40 | | |
| |||
70 | 75 | | |
71 | 76 | | |
72 | 77 | | |
| 78 | + | |
73 | 79 | | |
74 | 80 | | |
75 | 81 | | |
| |||
79 | 85 | | |
80 | 86 | | |
81 | 87 | | |
| 88 | + | |
| 89 | + | |
82 | 90 | | |
83 | 91 | | |
84 | | - | |
| 92 | + | |
85 | 93 | | |
86 | 94 | | |
87 | 95 | | |
| |||
330 | 338 | | |
331 | 339 | | |
332 | 340 | | |
333 | | - | |
| 341 | + | |
334 | 342 | | |
335 | 343 | | |
336 | 344 | | |
| |||
385 | 393 | | |
386 | 394 | | |
387 | 395 | | |
388 | | - | |
389 | | - | |
| 396 | + | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
| 400 | + | |
390 | 401 | | |
| 402 | + | |
| 403 | + | |
| 404 | + | |
391 | 405 | | |
392 | 406 | | |
393 | 407 | | |
394 | 408 | | |
395 | 409 | | |
396 | 410 | | |
397 | | - | |
| 411 | + | |
398 | 412 | | |
399 | 413 | | |
| 414 | + | |
400 | 415 | | |
401 | | - | |
| 416 | + | |
| 417 | + | |
| 418 | + | |
| 419 | + | |
402 | 420 | | |
403 | 421 | | |
404 | 422 | | |
| |||
436 | 454 | | |
437 | 455 | | |
438 | 456 | | |
439 | | - | |
440 | | - | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
441 | 461 | | |
| 462 | + | |
| 463 | + | |
442 | 464 | | |
443 | 465 | | |
444 | 466 | | |
| |||
641 | 663 | | |
642 | 664 | | |
643 | 665 | | |
644 | | - | |
645 | | - | |
646 | | - | |
647 | | - | |
| 666 | + | |
| 667 | + | |
| 668 | + | |
648 | 669 | | |
| 670 | + | |
| 671 | + | |
| 672 | + | |
| 673 | + | |
| 674 | + | |
649 | 675 | | |
650 | 676 | | |
651 | 677 | | |
| |||
0 commit comments