8000 T67 — Restart an until_stopped box from its stored spec, under the same id and name by minimal-foundry[bot] · Pull Request #3228 · gominimal/minimal · GitHub
[go: up one dir, main page]

Skip to content

T67 — Restart an until_stopped box from its stored spec, under the same id and name - #3228

Merged
agent-137 merged 6 commits into
mainfrom
agent/3225-restart-an-until-stopped-box-from-its-stored-spe
Nov 10, 2026
Merged

agent-137 merged 6 commits into
mainfrom
agent/3225-restart-an-until-stopped-box-from-its-stored-spe

Conversation

@minimal-foundry
Copy link
Copy Markdown
Contributor

T67 — Restart an until_stopped box from its stored spec, under the same id and name

slice: S0
kind: task
covers: BOX-176, BOX-177, BOX-178
size: M
est: 170 code, 250 tests
executor: agent
difficulty: needs care
model: strongest
diagnostics: daemon log names the box and the refusal or the outcome; the reply carries a typed RestartRefusal
observability: box.restart span with box_id, was_running, refusal kind and outcome; exited, exec_exited and started events as BOX-178 states
layers:
- rpc:
- crates/minimald-rpc/src/lib.rs: RestartBox RPC, RestartBoxRequest, typed RestartRefusal reply
- daemon:
- crates/minimald/src/rpc.rs: serve_restart_box, registered under RestartBox::NAME
- crates/minimald/src/box_manager.rs: restart_box resolves the 8000 box and hands the restart to its actor
- crates/minimald/src/box_actor.rs: restart: lifetime, name, spec and volume checks before any stop; stop as BOX-013; start from stored spec; start-failure leaves stopped
- crates/minimald/src/box_actor/host.rs: start through launch_host with no attach; resume's hooks only
- crates/minimald/src/box_actor/tests.rs: tests
test: cargo nextest run -p minimald restart_until_stopped_box_from_stored_spec_same_id_and_name
test: cargo nextest run -p minimald restart_refuses_box_not_until_stopped_keeps_state
test: cargo nextest run -p minimald restart_takes_resume_refusals_before_it_stops_anything
test: cargo nextest run -p minimald restart_start_failure_leaves_box_stopped_with_its_stop_recorded
test: cargo nextest run -p minimald restart_runs_only_resume_hooks
test: cargo nextest run -p minimald restart_records_exited_then_started_only
produces:
- crates/minimald-rpc/src/lib.rs
consumes: none
proof: An until_stopped box restarts from its stored spec under the same id and name. Every other box, and every refused restart, is left as it was.
depends on:

Proof

A RestartBox RPC now restarts a box whose spec sets lifetime = "until_stopped". A running box is stopped and started again from the spec stored at its creation. A stopped box is started again. In both cases the box keeps its id, its name and its files. Every other box is refused with a typed RestartRefusal (exit 2) and stays as it was. A refusal for the name (exit 2) or for the stored spec (exit 3) also comes before anything stops, so a running box keeps running. A start that fails leaves the box stopped, with only the stop's exited event recorded.

Notes from the agent: Outside the layers: crates/minimald/src/box_actor/kind.rs got one line, the name of the new BoxMessage::RestartBox variant. Its match is exhaustive, so the crate does not compile without it.

cargo-nextest is not installed on this box. I ran each test: line as cargo test -p minimald --lib <same test name>. All six passed. I also ran the 35 existing resume tests, because the resume name check, the stored-spec check and the hostname marking moved into shared helpers (check_start_name, checked_stored_spec, mark_name_running). They pass, and the resume refusal texts are unchanged. clippy -p minimald -p minimald-rpc --all-targets is clean.

Design: the actor runs the restart in its message loop, as it runs a stop. The order is lifetime, then name, then stored spec, then an upload in flight, then volumes. The volume check is a no-op, as in resume. RestartRefusalKind has an upload kind that the spec does not name. A running box is stopped through the existing stop_box (graceful, STOP_GRACE), which records exited, and the exec bridges record exec_exited. Then restart_launch (host.rs) starts the box through launch_host with no attach, and the restart writes a started event. No other daemon path writes started yet (BOX-040 is not covered by this task). A host left from a hooks_on_resume on_activate run is kept for a shell box and replaced for an argv box. When a restart leaves the box st…[truncated]

Tests

line exit tail
cargo nextest run -p minimald restart_until_stopped_box_from_stored_spec_same_id_and_name 101 warning: unknown fields in [defaults] section of minimal.toml: session,task help: do you need to update to a newer version of minimal? Applying loadouts: default Running task runtime-implement-test-0 in box runtime-implement-test-0-1... error: no such command: 'nextest' help: a command with a simil
cargo nextest run -p minimald restart_refuses_box_not_until_stopped_keeps_state 101 warning: unknown fields in [defaults] section of minimal.toml: session,task help: do you need to update to a newer version of minimal? Applying loadouts: default Running task runtime-implement-test-1 in box runtime-implement-test-1-1... error: no such command: 'nextest' help: a command with a simil
cargo nextest run -p minimald restart_takes_resume_refusals_before_it_stops_anything 101 warning: unknown fields in [defaults] section of minimal.toml: session,task help: do you need to update to a newer version of minimal? Applying loadouts: default Running task runtime-implement-test-2 in box runtime-implement-test-2-1... error: no such command: 'nextest' help: a command with a simil
cargo nextest run -p minimald restart_start_failure_leaves_box_stopped_with_its_stop_recorded 101 warning: unknown fields in [defaults] section of minimal.toml: task,session help: do you need to update to a newer version of minimal? Applying loadouts: default Running task runtime-implement-test-3 in box runtime-implement-test-3-1... error: no such command: 'nextest' help: a command with a simil
cargo nextest run -p minimald restart_runs_only_resume_hooks 101 warning: unknown fields in [defaults] section of minimal.toml: session,task help: do you need to update to a newer version of minimal? Applying loadouts: default Running task runtime-implement-test-4 in box runtime-implement-test-4-1... error: no such command: 'nextest' help: a command with a simil
cargo nextest run -p minimald restart_records_exited_then_started_only 101 warning: unknown fields in [defaults] section of minimal.toml: task,session help: do you need to update to a newer version of minimal? Applying loadouts: default Running task runtime-implement-test-5 in box runtime-implement-test-5-1... error: no such command: 'nextest' help: a command with a simil

Verify

min task run agent-verify exited 101 under rustc 1.99.0, which the repository does not pin (1.99.1 in rust-toolchain.toml); the PR is not a draft on that alone — CI, which honours the pin, is the gate.

the sandbox ran rustc (1.99.0), the repository pins 1.99.1 in rust-toolchain.toml; a failure here may be the newer toolchain's, not this change's
warning: unknown fields in [defaults] section of minimal.toml: session,task
help: do you need to update to a newer version of minimal?
Applying loadouts: default
Running task runtime-implement-verify in box runtime-implement-verify-1...
    Checking args v0.0.1 (/workbench/crates/args)
    Checking paths v0.0.1 (/workbench/crates/paths)
    Checking ot v0.0.1 (/workbench/crates/ot)
    Checking client-config v0.0.1 (/workbench/crates/client-config)
   Compiling version v0.8.0 (/workbench/crates/version)
   Compiling stdlib v0.0.22 (/workbench/crates/stdlib)
    Checking common v0.0.1 (/workbench/crates/common)
    Checking diagnostics v0.0.1 (/workbench/crates/diagnostics)
    Checking bep v0.0.1 (/workbench/crates/bep)
    Checking mlog v0.0.1 (/workbench/crates/mlog)
    Checking async-dialog v0.0.1 (/workbench/crates/async-dialog)
    Checking switch v0.0.1 (/workbench/crates/switch)
    Checking boxes v0.0.1 (/workbench/crates/boxes)
    Checking sandbox v0.0.1 (/workbench/crates/sandbox)
    Checking mfile v0.0.1 (/workbench/crates/mfile)
    Checking minimald-rpc v0.0.1 (/workbench/crates/minimald-rpc)
    Checking decode v0.0.1 (/workbench/crates/decode)
    Checking checkouts v0.0.1 (/workbench/crates/checkouts)
    Checking graph v0.0.1 (/workbench/crates/graph)
    Checking lcache v0.0.1 (/workbench/crates/lcache)
    Checking rcache v0.0.1 (/workbench/crates/rcache)
    Checking op v0.0.1 (/workbench/crates/op)
    Checking check v0.0.1 (/workbench/crates/check)
    Checking orchestrator v0.0.1 (/workbench/crates/orchestrator)
    Checking mctx v0.0.1 (/workbench/crates/mctx)
    Checking minimald v0.8.0 (/workbench/crates/minimald)
    Finished `dev` profile [unoptimized] target(s) in 1m 37s
error: no such command: `nextest`

help: a command with a similar name exists: `test`

help: view all installed commands with `cargo --list`
help: find a package to install `nextest` with `cargo search cargo-nextest`

Base

The base branch moved while the coder worked and was merged in before the tests ran. These files changed on BOTH sides since the branch point — read them first, because a rewrite from a stale reading can undo a merge without a conflict:

  • crates/minimald/src/box_actor/tests.rs
  • crates/minimald/src/box_manager.rs

Out of scope

These files are outside the task's layers:, so this PR is a draft:

  • crates/minimald/src/box_actor/kind.rs

Closes #3225

Add the RestartBox RPC with a typed RestartRefusal reply. The box's
actor checks the lifetime, the name, the stored spec and the volumes
before it stops anything, stops a running box as a stop does, and starts
it again from its stored spec with no client attached, under the same id
and name. A start that fails leaves the box stopped. The restart records
the stop's exited event and a started event, and runs only the hooks a
resume runs (BOX-176, BOX-177, BOX-178).
Cover BOX-176, BOX-177 and BOX-178: a restart from the stored spec under
the same id and name, its refusals before any stop, a failed start that
leaves the box stopped, the hooks it runs, and the events it records.
@coderabbitai
coderabbitai Bot commented Nov 10, 2026 •
Copy link
Copy Markdown
Contributor

Important

Review skipped

Bot user detected.

To trigger a single review, invoke the @coderabbitai review command.

Run configuration

  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 6a00bc64-4f98-4657-b7dd-8ef5651bf88e

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

@minimal-foundry
minimal-foundry Bot commented Nov 10, 2026 •
Copy link
Copy Markdown
Contributor Author

Approved: every review thread resolved at bd2fc9981750.

@agent-137 resolved the last thread, which releases the approval this review had withheld.

Nothing to do.

@minimal-foundry minimal-foundry Bot left a comment
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

minimal-review — approved

Verdict APPROVE — No findings.

Panel: 3 of 3 personas ran (correctness, security, supply-chain).

@minimal-foundry minimal-foundry Bot added the review:approved minimal-review approved the current head label Nov 10, 2026
@minimal-arch minimal-arch Bot left a comment
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

arch-review: CONDITIONS · 1 condition · the full ruling

The restart can report success for a service whose entrypoint did not start. In restart_launch(), an argv box that holds a host-side row keeps the on_activate shell and returns Ok(()). The restart then answers Restarted and writes started. Line 471 of the design says a restart starts the box's processes again. min task run refuses this state with EntrypointBehindHookShell (#3042). Make the change in C1, so the restart takes its start-failure branch and leaves the box stopped. The rest of the change conforms.

Ruled at 282fabd against gominimal/arch@15b603e6afb8 by claude-opus-5-5.

Comment thread crates/minimald/src/box_actor/host.rs Resolved
Comment thread crates/minimald/src/box_actor.rs Resolved
@agent-137
Copy link
Copy Markdown
Member

/revise Arch condition C1 on head 282fabd (arch_rulings 1096), quoted in full from the arch-review check run below. Apply it exactly, with the test it names. Change nothing else.

  • C1: crates/minimald/src/box_actor/host.rs restart_launch(): when the slot holds a live HostOrigin::Hooks host, holds_host_row is true and self.starts_argv().await is true, return Err(AttachError::SpawnFailed(std::io::Error::other(EntrypointBehindHookShell))), as ensure_host() does at host.rs line 1680. Do not return Ok(()) there. Keep the Ok(()) keep-branch only for a box that does not start an argv. restart_named() then takes its existing start-failure branch: the box stays stopped, its exited event stays, and no started event is written. Add a test in crates/minimald/src/box_actor/tests.rs: an argv until_stopped box with hooks_on_resume = true and box_addresses set restarts. Assert RestartError::Failed, the record stopped, and no Started event after the stop's Exited.

The residual the ruling names is filed as #3231: such a box cannot restart until #3042 lands. Do not work on #3042 here.

An argv box that holds a host-side row and keeps its hook-launched shell
never starts its entrypoint. The restart now fails as ensure_host does,
so the box stays stopped and no started event is written.
@minimal-foundry minimal-foundry Bot left a comment
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

APPROVE withheld: 2 unresolved threads — minimal-arch[bot] crates/minimald/src/box_actor/host.rs, minimal-arch[bot] crates/minimald/src/box_actor.rs:2000.

minimal-review — advisory review

Verdict COMMENT — No findings.

Panel: 2 of 3 personas ran (correctness, security); did not complete: supply-chain.

@minimal-foundry minimal-foundry Bot removed the review:approved minimal-review approved the current head label Nov 10, 2026
@minimal-arch minimal-arch Bot left a comment
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

arch-review: PASS_WITH_CONDITIONS · 1 condition · the full ruling

The restart conforms to the design. It refuses on lifetime first, runs the resume checks before any stop, and starts the box again under the same record (architecture.md line 471). The new fix fails a restart when an argv box's entrypoint sits behind its hook shell. That keeps the started event honest. This refusal is a known gap, but only a test comment names its issue, #3231. Make the change in C1: name #3231 and its flip condition at the refusal in restart_launch().

Ruled at d312de8 against gominimal/arch@15b603e6afb8 by claude-opus-5-5.

Comment thread crates/minimald/src/box_actor/host.rs Resolved
@minimal-foundry
Copy link
Copy Markdown
Contributor Author

Round 1 of 10 on a /revise note, pushed as d312de8640c2.

line exit tail
cargo nextest run -p minimald restart_until_stopped_box_from_stored_spec_same_id_and_name 101 warning: unknown fields in [defaults] section of minimal.toml: task,session help: do you need to update to a newer version of minimal? Applying loadouts: default Running task runtime-implement-test-0 in box runtime-implement-test-0-1... error: no such command: 'nextest' help: a command with a simil
cargo nextest run -p minimald restart_refuses_box_not_until_stopped_keeps_state 101 warning: unknown fields in [defaults] section of minimal.toml: session,task help: do you need to update to a newer version of minimal? Applying loadouts: default Running task runtime-implement-test-1 in box runtime-implement-test-1-1... error: no such command: 'nextest' help: a command with a simil
cargo nextest run -p minimald restart_takes_resume_refusals_before_it_stops_anything 101 warning: unknown fields in [defaults] section of minimal.toml: task,session help: do you need to update to a newer version of minimal? Applying loadouts: default Running task runtime-implement-test-2 in box runtime-implement-test-2-1... error: no such command: 'nextest' help: a command with a simil
cargo nextest run -p minimald restart_start_failure_leaves_box_stopped_with_its_stop_recorded 101 warning: unknown fields in [defaults] section of minimal.toml: session,task help: do you need to update to a newer version of minimal? Applying loadouts: default Running task runtime-implement-test-3 in box runtime-implement-test-3-1... error: no such command: 'nextest' help: a command with a simil
cargo nextest run -p minimald restart_runs_only_resume_hooks 101 warning: unknown fields in [defaults] section of minimal.toml: task,session help: do you need to update to a newer version of minimal? Applying loadouts: default Running task runtime-implement-test-4 in box runtime-implement-test-4-1... error: no such command: 'nextest' help: a command with a simil
cargo nextest run -p minimald restart_records_exited_then_started_only 101 warning: unknown fields in [defaults] section of minimal.toml: session,task help: do you need to update to a newer version of minimal? Applying loadouts: default Running task runtime-implement-test-5 in box runtime-implement-test-5-1... error: no such command: 'nextest' help: a command with a simil

Verify min task run agent-verify exited 101 under rustc 1.99.0, which the repository does not pin (1.99.1 in rust-toolchain.toml); the PR is not a draft on that alone — CI, which honours the pin, is the gate.

the sandbox ran rustc (1.99.0), the repository pins 1.99.1 in rust-toolchain.toml; a failure here may be the newer toolchain's, not this change's
warning: unknown fields in [defaults] section of minimal.toml: session,task
help: do you need to update to a newer version of minimal?
Applying loadouts: default
Running task runtime-implement-verify in box runtime-implement-verify-1...
    Checking args v0.0.1 (/workbench/crates/args)
    Checking paths v0.0.1 (/workbench/crates/paths)
    Checking ot v0.0.1 (/workbench/crates/ot)
    Checking client-config v0.0.1 (/workbench/crates/client-config)
   Compiling version v0.8.0 (/workbench/crates/version)
   Compiling stdlib v0.0.22 (/workbench/crates/stdlib)
    Checking common v0.0.1 (/workbench/crates/common)
    Checking diagnostics v0.0.1 (/workbench/crates/diagnostics)
    Checking boxes v0.0.1 (/workbench/crates/boxes)
    Checking sandbox v0.0.1 (/workbench/crates/sandbox)
    Checking bep v0.0.1 (/workbench/crates/bep)
    Checking mlog v0.0.1 (/workbench/crates/mlog)
    Checking async-dialog v0.0.1 (/workbench/crates/async-dialog)
    Checking switch v0.0.1 (/workbench/crates/switch)
    Checking mfile v0.0.1 (/workbench/crates/mfile)
    Checking minimald-rpc v0.0.1 (/workbench/crates/minimald-rpc)
    Checking decode v0.0.1 (/workbench/crates/decode)
    Checking checkouts v0.0.1 (/workbench/crates/checkouts)
    Checking graph v0.0.1 (/workbench/crates/graph)
    Checking lcache v0.0.1 (/workbench/crates/lcache)
    Checking rcache v0.0.1 (/workbench/crates/rcache)
    Checking op v0.0
8BD0
.1 (/workbench/crates/op)
    Checking orchestrator v0.0.1 (/workbench/crates/orchestrator)
    Checking check v0.0.1 (/workbench/crates/check)
    Checking mctx v0.0.1 (/workbench/crates/mctx)
    Checking minimald v0.8.0 (/workbench/crates/minimald)
    Finished `dev` profile [unoptimized] target(s) in 1m 12s
error: no such command: `nextest`

help: a command with a similar name exists: `test`

help: view all installed commands with `cargo --list`
help: find a package to install `nextest` with `cargo search cargo-nextest`

Outside the task's layers::

  • crates/minimald/src/box_actor/kind.rs

Converted to a draft: something above needs a person before review.

Review threads the coder judged:

  • 👍 valid — crates/minimald/src/box_actor/host.rs: restart_launch() now returns SpawnFailed(EntrypointBehindHookShell) when holds_host_row and starts_argv() are both true. Ok(()) is kept only for a box that starts no argv. The new test restart_argv_box_behind_hook_shell_with_host_row_fails_stopped pins this.
  • 👍 valid — crates/minimald/src/box_actor.rs:2000: The C1 path now fails in restart_launch() before this line. The box stays stopped and no started event is written. The new test asserts the stop added only the Exited event.

An until_stopped box restarts from its stored spec under the same id and name. Every other box, and every refused restart, is left as it was. An argv box that holds a host-side row and sets hooks_on_resume now fails its restart: it stays stopped with its exited event, and no started event follows.

Notes from the agent: C1 applied in restart_launch(). When a live Hooks host is in the slot, holds_host_row and starts_argv() are both true, the function now returns Err(AttachError::SpawnFailed(EntrypointBehindHookShell)), as ensure_host() does. The Ok(()) keep-branch now applies only to a box that does not start an argv. restart_named() takes its existing start-failure branch. New test: restart_argv_box_behind_hook_shell_with_host_row_fails_stopped. cargo-nextest is not installed here, so I did not run the test: lines as written. I ran the same tests with cargo test -p minimald --lib. The residual case is #3231, and I did no work on #3042.

@minimal-foundry
minimal-foundry Bot marked this pull request as draft November 10, 2026 04:12
@minimal-foundry minimal-foundry Bot added the needs-human An agent handed off; a human must act, then clear this label. Set by defer and handoffs. label Nov 10, 2026
@minimal-foundry
Copy link
Copy Markdown
Contributor Author

The runtime will not revise this pull request again on its own: the diff is +1490/-118 (1608 lines), past 3x the plan's estimate of 420 lines (est: 170 code, 250 tests, as #3225 reads now), at round 1 (the last trigger was a /revise note). A person decides now. Remove needs-human from this pull request to let /revise <note> or the automatic rounds resume, or finish #3225 by hand.

@agent-137 agent-137 removed the needs-human An agent handed off; a human must act, then clear this label. Set by defer and handoffs. label Nov 10, 2026
@agent-137
Copy link
Copy Markdown
Member

/revise Arch condition C1 on head d312de8 (arch_rulings 1101), quoted in full from the arch-review check run below. Apply it exactly. It changes only a comment. Change nothing else. The owner lifted the size cap for this round.

The refusal in restart_launch fails closed for an argv box that holds a
host-side row. Name the tracking issue (#3231) and the condition that
lifts it (#3042) at the refusal itself.
@minimal-foundry
Copy link
Copy Markdown
Contributor Author

Round 1 of 10 on a /revise note, pushed as bd2fc9981750.

line exit tail
cargo nextest run -p minimald restart_until_stopped_box_from_stored_spec_same_id_and_name 101 warning: unknown fields in [defaults] section of minimal.toml: task,session help: do you need to update to a newer version of minimal? Applying loadouts: default Running task runtime-implement-test-0 in box runtime-implement-test-0-1... error: no such command: 'nextest' help: a command with a simil
cargo nextest run -p minimald restart_refuses_box_not_until_stopped_keeps_state 101 warning: unknown fields in [defaults] section of minimal.toml: task,session help: do you need to update to a newer version of minimal? Applying loadouts: default Running task runtime-implement-test-1 in box runtime-implement-test-1-1... error: no such command: 'nextest' help: a command with a simil
cargo nextest run -p minimald restart_takes_resume_refusals_before_it_stops_anything 101 warning: unknown fields in [defaults] section of minimal.toml: session,task help: do you need to update to a newer version of minimal? Applying loadouts: default Running task runtime-implement-test-2 in box runtime-implement-test-2-1... error: no such command: 'nextest' help: a command with a simil
cargo nextest run -p minimald restart_start_failure_leaves_box_stopped_with_its_stop_recorded 101 warning: unknown fields in [defaults] section of minimal.toml: task,session help: do you need to update to a newer version of minimal? Applying loadouts: default Running task runtime-implement-test-3 in box runtime-implement-test-3-1... error: no such command: 'nextest' help: a command with a simil
cargo nextest run -p minimald restart_runs_only_resume_hooks 101 warning: unknown fields in [defaults] section of minimal.toml: session,task help: do you need to update to a newer version of minimal? Applying loadouts: default Running task runtime-implement-test-4 in box runtime-implement-test-4-1... error: no such command: 'nextest' help: a command with a simil
cargo nextest run -p minimald restart_records_exited_then_started_only 101 warning: unknown fields in [defaults] section of minimal.toml: session,task help: do you need to update to a newer version of minimal? Applying loadouts: default Running task runtime-implement-test-5 in box runtime-implement-test-5-1... error: no such command: 'nextest' help: a command with a simil

Verify min task run agent-verify exited 101 under rustc 1.99.0, which the repository does not pin (1.99.1 in rust-toolchain.toml); the PR is not a draft on that alone — CI, which honours the pin, is the gate.

ench/crates/decode)
    Checking checkouts v0.0.1 (/workbench/crates/checkouts)
    Checking poly1305 v0.9.1
    Checking blowfish v0.10.0
    Checking opentelemetry-appender-tracing v0.33.1
    Checking blake2 v0.11.0-rc.6
    Checking getrandom v0.2.17
    Checking tagptr v0.2.0
    Checking compression-core v0.4.33
    Checking moka v0.12.16
    Checking compression-codecs v0.4.45
    Checking ring v0.17.14
    Checking argon2 v0.6.0-rc.8
    Checking mlog v0.0.1 (/workbench/crates/mlog)
    Checking ssh-cipher v0.3.0
    Checking bcrypt-pbkdf v0.11.0
    Checking ed25519-dalek v3.0.0
    Checking generic-array v0.14.7
    Checking sha3 v0.11.0
    Checking p521 v0.14.0
    Checking p384 v0.14.0
    Checking yasna v0.6.0
    Checking pem v4.0.0
    Checking module-lattice v0.2.3
    Checking kem v0.3.0
    Checking graph v0.0.1 (/workbench/crates/graph)
    Checking object v0.40.0
    Checking hashbrown v0.14.5
    Checking constcat v0.6.1
    Checking sponge-cursor v0.1.0
    Checking dashmap v6.2.1
    Checking sha3 v0.12.0
    Checking ml-kem v0.3.2
    Checking rcgen v0.14.10
    Checking ssh-key v0.7.0-rc.11
    Checking generic-array v1.4.4
    Checking async-compression v0.4.50
    Checking russh-cryptovec v0.62.0
    Checking vsock v0.5.4
    Checking vte v0.15.0
    Checking async-tar v0.6.1
    Checking num-bigint v0.5.1
    Checking russh-util v0.52.0
    Checking serde_bytes v0.11.19
    Checking hex-literal v1.1.0
    Checking diagnostics v0.0.1 (/workbench/crates/diagnostics)
    Checking russh v0.65.0
    Checking russh-sftp v2.4.0
    Checking vt100 v0.16.2 (https://github.com/gominimal/vt100-rust.git?rev=9b8cce5a6798daf061948259ebcb073bb1ea54a6#9b8cce5a)
    Checking tokio-vsock v0.7.2
    Checking bep v0.0.1 (/workbench/crates/bep)
    Checking minimald-rpc v0.0.1 (/workbench/crates/minimald-rpc)
    Checking clap_complete v4.6.11
    Checking lcache v0.0.1 (/workbench/crates/lcache)
    Checking async-dialog v0.0.1 (/workbench/crates/async-dialog)
    Checking sysinfo v0.39.6
    Checking wait-timeout v0.2.1
    Checking bit-vec v0.10.1
    Checking switch v0.0.1 (/workbench/crates/switch)
    Checking quick-error v1.2.3
    Checking bit-set v0.11.1
    Checking rcache v0.0.1 (/workbench/crates/rcache)
    Checking rusty-fork v0.3.1
    Checking rand_xorshift v0.5.0
    Checking core_detect v1.0.0
    Checking unarray v0.1.4
    Checking serial_test v4.0.1
    Checking proptest v1.12.0
    Checking op v0.0.1 (/workbench/crates/op)
    Checking check v0.0.1 (/workbench/crates/check)
    Checking orchestrator v0.0.1 (/workbench/crates/orchestrator)
    Checking mctx v0.0.1 (/workbench/crates/mctx)
    Checking minimald v0.8.0 (/workbench/crates/minimald)
    Finished `dev` profile [unoptimized] target(s) in 1m 41s
error: no such command: `nextest`

help: a command with a similar name exists: `test`

help: view all installed commands with `cargo --list`
help: find a package to install `nextest` with `cargo search cargo-nextest`

Outside the task's layers::

  • crates/minimald/src/box_actor/kind.rs

Converted to a draft: something above needs a person before review.

Review threads the coder judged:

An until_stopped box restarts from its stored spec under the same id and name. Every other box, and every refused restart, is left as it was. This round adds only a comment: the hook-shell refusal in restart_launch now names its known gap, issue #3231, and the condition that lifts it (#3042).

Notes from the agent: Revise round 1: comment-only change for arch condition C1 in crates/minimald/src/box_actor/host.rs. No code changed. cargo-nextest is not installed here, so each test: line exited 101 before it ran any test. I ran cargo test -p minimald --lib restart_ in its place: exit 0, and all six named tests passed.

@minimal-foundry minimal-foundry Bot added the needs-human An agent handed off; a human must act, then clear this label. Set by defer and handoffs. label Nov 10, 2026
@minimal-foundry
Copy link
Copy Markdown
Contributor Author

The runtime will not revise this pull request again on its own: the diff is +1494/-118 (1612 lines), past 3x the plan's estimate of 420 lines (est: 170 code, 250 tests, as #3225 reads now), at round 1 (the last trigger was a /revise note). A person decides now. Remove needs-human from this pull request to let /revise <note> or the automatic rounds resume, or finish #3225 by hand.

@agent-137 agent-137 removed the needs-human An agent handed off; a human must act, then clear this label. Set by defer and handoffs. label Nov 10, 2026
@agent-137
agent-137 marked this pull request as ready for review November 10, 2026 05:56
@minimal-arch minimal-arch Bot left a comment
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

arch-review: PASS · the full ruling

The compare adds only the interim note at the hook-shell refusal in restart_launch. The note names #3231 and the flip condition #3042, and the refusal fails closed. The restart follows lifetime = "until_stopped" and keeps the same record, as architecture.md lines 338 and 471 require. The hook-shell gap stays open as a filed residual on #3231.

Ruled at bd2fc99 against gominimal/arch@15b603e6afb8 by claude-opus-5-5.

@minimal-foundry minimal-foundry Bot left a comment
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

minimal-review — approval withheld

Verdict COMMENT — APPROVE withheld: 3 unresolved threads — minimal-arch[bot] crates/minimald/src/box_actor/host.rs, minimal-arch[bot] crates/minimald/src/box_actor.rs:2000, minimal-arch[bot] crates/minimald/src/box_actor/host.rs:1791. No findings.

Panel: 3 of 3 personas ran (correctness, security, supply-chain).

@minimal-foundry minimal-foundry Bot left a comment
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

minimal-review — approved

Verdict APPROVE — every review thread is resolved; @agent-137 closed the last one. The review of bd2fc9981750 withheld this approval on the threads open then. Posted as a comment: the App cannot approve its own pull request; the check and the label carry it.

@minimal-foundry minimal-foundry Bot added the review:approved minimal-review approved the current head label Nov 10, 2026
@mitodrummer mitodrummer left a comment
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved.

@agent-137
agent-137 added this pull request to the merge queue Nov 10, 2026
Merged via the queue into main with commit d503b25 Nov 10, 2026
46 of 48 checks passed
@agent-137
agent-137 deleted the agent/3225-restart-an-until-stopped-box-from-its-stored-spe branch November 10, 2026 08:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

review:approved minimal-review approved the current head

Projects

None yet

Development

Successfully merging this pull request may close these issues.

T67 — Restart an until_stopped box from its stored spec, under the same id and name

2 participants

0