8000 fix: say the finalize-install egress item plainly by gominimal-aw-bot[bot] · Pull Request #2178 · gominimal/minimal · GitHub
[go: up one dir, main page]

Skip to content

fix: say the finalize-install egress item plainly - #2178

Closed
gominimal-aw-bot[bot] wants to merge 9 commits into
mainfrom
inbox-patch/reword-finalize-install-egress-item-42ad5ac310acb568
Closed

gominimal-aw-bot[bot] wants to merge 9 commits into
mainfrom
inbox-patch/reword-finalize-install-egress-item-42ad5ac310acb568

Conversation

@gominimal-aw-bot
@gominimal-aw-bot gominimal-aw-bot Bot commented Oct 12, 2026 •
Copy link
Copy Markdown
Contributor

Routing-Key: inbox-route/I_kwDOSUhdos8AAAABWiMVSw

min finalize-install on Linux renders its egress-enforcement item — and one
KVM-item cause — in internal design vocabulary a reader cannot act on:
"classifier", "host-address boxes", "run unenforced", "egress verdict",
"placement unit", "runs unplaced", "delegation", "socket table lookup",
"did not read". Reword the item's label, its three today: lines, its
this step: line and its eight cannot-do causes in plain language that names
the CLI words (--network host_ip with --deny-all-egress), and update the
six pinned unit-test assertions that match them. Wording only: no behaviour,
flag, JSON key, item id or exit code changes; one file. A doc comment in
crates/minimald/src/session_host/tests.rs also says "runs unplaced" but is
outside this change's footprint and left alone.

Verification

  • cargo fmt --all --check --manifest-path target/Cargo.toml — clean
  • cargo clippy --workspace --all-targets --locked --manifest-path target/Cargo.toml -- -D warnings — clean
  • cargo test --locked --manifest-path target/Cargo.toml -p minimal finalize_install — 31 passed, 0 failed
  • cargo test --locked --manifest-path target/Cargo.toml -p minimal — 425 passed, 1 failed: legacy_network_spellings_parse_with_hint, pre-existing (fails on the pristine checkout too, unrelated to these strings)
  • git grep -F for each retired fragment (per-box egress limits for host-address boxes, runs a stale step, runs unplaced in this file, replace their delegation, socket table lookup, socket path did not resolve, user name did not read, installs the classifier's cgroup tree, host-address boxes run unenforced) — no hits; each new string present at its site

Summary by CodeRabbit

  • Documentation

    • Clarified network-mode and egress-rule behavior, including when rules are enforced and how host filtering affects them.
    • Updated guidance for DNS setup, package checks, port sharing, address allocation, and session recovery.
  • User-facing messages

    • Improved warnings and error messages across session activation, networking, and DNS setup to explain what happened and provide clearer next steps.

gominimal-aw-bot Bot and others added 9 commits October 12, 2026 02:55
* docs(minimal): reword activate network and egress flag help

Replace jargon-heavy help on seven network and egress flags of
min session activate (network, dynamic-ingress, dynamic-range,
allow-subnets, allow-dns-hosts, deny-all-egress, credentialed-
upstream) with plain-language wording: name the commands and
modes a person types, say what each stance does, and drop
internal ids and crate paths from user-facing help. Match the
one affected --network row in docs/reference/cli-min.md.

Co-Authored-By: Copilot <223556219+Copilot@users.noreply.github.com>

* docs(minimal): state which network mode enforces the egress flags

The reworded `--allow-subnets` help said the egress flags work with
`host_ip`. They are accepted there, and only `own_ip` enforces the rule
flags: a host that decides per box refuses the create, and any other
host runs the box with the rules unenforced. Say that in the help and in
the matching reference row.

State the per-list rule where the flags are read: once any egress flag
is given, an allow list that is not given allows nothing. Reword
`--allow-protocols` and `--deny-subnets` in the same voice as the other
egress flags, restore the host_ip clause on `--deny-all-egress`, and
name the host, not the daemon, as the one that opts out.

* docs(minimal): say a hostname-only egress rule reaches no address directly

---------

Co-authored-by: gominimal-aw-bot[bot] <281738952+gominimal-aw-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: minimal-foundry[bot] <327719912+minimal-foundry[bot]@users.noreply.github.com>
* chore(minvmd): reword refusal messages in plain language

The box and socket control refusals leaned on internal vocabulary
(box rows, asks, gvproxy, provider directories). Reword the
user-facing strings so a person operating a VM can tell what went
wrong and what to do next, without changing behavior, exit codes,
or how the client classifies each refusal.

Wording-only change: no control flow, classification, or error-kind
moves. Test assertions that pinned the old strings are updated to
pin the new ones.

* fix(minvmd): make three reworded refusals say what the code checks

The exhaustion counts cover addresses a shutting-down box still holds,
not only ones inside the reuse wait. A withdrawal can land with no box
to remove. The switch-socket wait proves a failed connect, not a
missing socket. The capacity classifier's comment no longer claims a
prefix the control socket stopped adding.

* fix(minvmd): name the connection kind in the cap refusal again

The cap refusal says which of the four capped connection kinds is
full, in plain words, and each test pins its own kind. A refused
address allocation keeps a short plain prefix, so the reply reads
whole whatever the answerer's reason says. The state-directory
refusals name the fix, the exhaustion count handles the singular, and
the port prompt refusal drops the thread.

* fix(minvmd): name the resting rule only when an address is resting

An exhausted run with every address live said "0 were released but
cannot be reused yet", a rule that did not apply. The clause is now
written only when an address is resting, and the zero and plural forms
are tested.

Also: an unknown connection kind is echoed in the cap refusal instead
of reading as a control connection, the network helper refusals name
gvproxy, and the state directory refusal names the VM host daemon.

---------

Co-authored-by: gominimal-aw-bot[bot] <281738952+gominimal-aw-bot[bot]@users.noreply.github.com>
…2175)

* fix(cli,tui): reword cleanup and status warnings in plain language

The activate cleanup, port-collision, package-check, cache and
dashboard status messages leaned on RPC names and internal
jargon (AbortSession, DestroySession, deny-all, NoNet, warming
the host cache). Users could not tell what went wrong or what to
do next.

Say what happened and what to do instead: name the session that
could not be cancelled or removed and point at the command that
removes it; say the box does not get the port rather than
first-come on the shared address; say package names were not
checked rather than the package check was skipped; say packages
are not downloaded now rather than not warming the host cache;
and the dashboard notes now say what the box cannot do and how to
create it differently. Two tests pinning the old wording are
updated to the new strings.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(tui): give the deny-all note a command that runs as written

The status line named `min session activate --allow-subnets` with no
operand, which clap refuses, and without `--network own_ip`, which makes
a host-address box instead of the own-address one the note is about.

* fix(cli,tui): keep the shared network notes and finish the cleanup warnings

Restore the dashboard's deny-all and no-network notes so they match the
sentences `min session activate` and `min session policy` print. Reword
the destroy timeout warning like its siblings, name `min session destroy`
in the cancel warnings, and point the package-check warning at the daemon
log.

---------

Co-authored-by: gominimal-aw-bot[bot] <281738952+gominimal-aw-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…2173)

* fix(minimald): reword network refusals and errors in plain language

Replace internal jargon in the session daemon's user-facing refusal
and error strings: host_ip egress refusals now say what the machine
can and cannot do, the stale DNS carve-out refusal names the
observable symptom and remedy without 'carve-out' or 'zone answerer',
and task/sandbox network errors no longer say 'PTask', 'tap', or
'row on the VM host'.

Every test needle and e2e grep that pinned the old wording is
updated to the new strings; behavior is unchanged.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs(minimald): match the unenforceable-refusal doc comment to its reworded remedy

* fix(minimald): name the minimal.toml remedy and the VM host daemon in reworded refusals

The host_ip refusal names the egress-section form of deny-all beside the flag
again, since the refused rules can come from minimal.toml. The task refusal
says "the VM host daemon". A stale-rules refusal with no recorded address
says the rules do not allow DNS at any address. The doc comments match the
words they describe.

* fix(minimald): name the session argument in the task refusal remedy

A bare `min session destroy` fails: the command needs a session or `--all`. The refusal a task
gets when its network addresses cannot be confirmed now shows `min session destroy <session>`,
the form the attach refusals use, and the test pins it.

---------

Co-authored-by: gominimal-aw-bot[bot] <281738952+gominimal-aw-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…nstall --show (#2166) (#2174)

(cherry picked from commit 4ac474e)

Co-authored-by: gominimal-aw-bot[bot] <281738952+gominimal-aw-bot[bot]@users.noreply.github.com>
…ain language (#2172)

* chore(minimald): reword attach and port-request failures plainly

Replace jargon in the session daemon's user-facing errors with plain
language: attach/spawn failures no longer say 'channel', 'host-side
network registration', or 'pending-ask queue'; runtime port-publish
refusals name the concrete fact that decided them (missing
--dynamic-range, address not registered on the host machine, box not
running) instead of internal nouns like 'report door', 'row', and
'stance'. Typed Display arms, the io::Error sites that wrap them, and
every pinned test assertion are updated together; behaviour is
unchanged.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(minimald): keep the next step in the not-running and not-connected port refusals

The reworded refusals dropped "start the box and try again", leaving a
caller with the verdict and no way forward. Keep the plain wording and
restore the remedy.

* fix(minimald): name the session in the destroy step and stop claiming a failed launch never started

`min session destroy` needs a session or --all, so the two refusals that
point at it now show the argument. A launch whose record write fails has
already spawned its sandbox, so the refusal says starting failed rather
than that the session was not started.

* fix(minimald): name the VM host daemon and the port prompt in the reworded refusals

The reworded attach and port-publish failures called the VM host daemon
"the host machine" and "this machine", and a dynamic-ingress ask a
"request". They now use the product's own names for both, so the
daemon's text and the text it embeds from the VM host daemon read as one
sentence. Port-publish refusals speak of "this box"; attach refusals
keep "this session".

The port-report arms that the same `min net expose` prints are reworded
to match, and the launch-record failure no longer names egress
enforcement, which was wrong for the host-row binding write that returns
the same variant.

Tests pin the refused port report's lead and the session argument of the
destroy step.

---------

Co-authored-by: gominimal-aw-bot[bot] <281738952+gominimal-aw-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The classifier item of min finalize-install --show rendered in design
vocabulary a reader cannot act on: "classifier", "host-address
boxes", "run unenforced", "egress verdict", "placement unit",
"runs unplaced", "delegation", "socket table lookup", "did not
read". Reword its label, its three today lines, its this-step line,
its eight cannot-do causes, and the matching KVM-item cause in plain
language that names the CLI words (--network host_ip with
--deny-all-egress), and update the six pinned unit-test assertions.
Wording only: no behaviour, flag, JSON key, item id or exit code
changes.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@gominimal-aw-bot
gominimal-aw-bot Bot requested a review from a team as a code owner October 12, 2026 02:55
@gominimal-aw-bot gominimal-aw-bot Bot added the agent:fix Agentic fix PR eligible for review iteration; min-aw's worker-iterate gates on it. label Oct 12, 2026
@coderabbitai
coderabbitai Bot commented Oct 12, 2026 •
Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Essentials
  • Run ID: 56d50f19-3004-4874-9df1-dde25e72498a

📥 Commits

Reviewing files that changed from the base of the PR and between 1e32c2b and 9920ade.


📒 Files selected for processing (28)
  • crates/minimal-tui/src/app.rs
  • crates/minimal-tui/src/rpc.rs
  • crates/minimal/src/cli.rs
  • crates/minimal/src/cmd/finalize_install.rs
  • crates/minimal/src/cmd/mod.rs
  • crates/minimal/src/cmd/project.rs
  • crates/minimal/src/resolver.rs
  • crates/minimald/src/env.rs
  • crates/minimald/src/exec.rs
  • crates/minimald/src/net/classifier.rs
  • crates/minimald/src/net/listeners.rs
  • crates/minimald/src/net/policy.rs
  • crates/minimald/src/net/provider.rs
  • crates/minimald/src/rpc.rs
  • crates/minimald/src/session.rs
  • crates/minimald/src/session/tests.rs
  • crates/minimald/src/session_host/tests.rs
  • crates/minvmd/src/box_registry.rs
  • crates/minvmd/src/cmd/answerer.rs
  • crates/minvmd/src/control.rs
  • crates/minvmd/src/net.rs
  • crates/minvmd/src/net/answerer.rs
  • crates/minvmd/src/sock.rs
  • docs/internal/release-pipeline.md
  • docs/reference/cli-min.md
  • scripts/install_test.sh
  • scripts/session-e2e.sh
  • scripts/stage-release.sh

Included review availability: This review used your included allowance. 3 included reviews remain after this review. Your included PR review attempts over the past 7 days set your current allowance at 5 reviews per hour.



📝 Walkthrough

Walkthrough

This change revises user-facing messages and documentation across the CLI, dashboard, installation advisories, and daemons. It also changes resolver missing-name facts to a vector and presents multiple facts as a list. Related tests and script assertions are updated.

Changes

Diagnostics and user-facing wording

Layer / File(s) Summary
DNS installation plan and advisory
crates/minimal/src/cmd/finalize_install.rs, crates/minimal/src/resolver.rs, docs/internal/release-pipeline.md, scripts/install_test.sh, scripts/stage-release.sh, scripts/session-e2e.sh
Installation labels and resolver advisories describe Minimal’s DNS service and platform-specific loopback range setup. Missing-name facts can be stored and rendered as separate summary lines while remaining joined in JSON.
DNS answering and address allocation
crates/minvmd/src/box_registry.rs, crates/minvmd/src/cmd/answerer.rs, crates/minvmd/src/net/answerer.rs
Messages describe address use, quarantine, DNS answering, port conflicts, release and cancel replies, and related recovery commands. Tests cover revised wording and quarantine counts.
Egress rules and port exposure
crates/minimal/src/cli.rs, crates/minimald/src/net/*, crates/minimald/src/rpc.rs, crates/minimald/src/session_host/tests.rs, docs/reference/cli-min.md, scripts/session-e2e.sh
Documentation and refusal messages describe egress behavior by network mode, DNS carve-out conditions, and requirements for runtime port opening. Related expectations are updated.
Session and VM-host diagnostics
crates/minimald/src/env.rs, crates/minimald/src/exec.rs, crates/minimald/src/net/listeners.rs, crates/minimald/src/net/provider.rs, crates/minimald/src/session.rs, crates/minimald/src/session/tests.rs, crates/minimald/src/session_host/tests.rs, crates/minvmd/src/control.rs, crates/minvmd/src/net.rs, crates/minvmd/src/sock.rs
Errors identify session, sandbox, and VM-host conditions with revised attach, port-prompt, and recovery wording. Tests expect the updated messages.
CLI warnings and package notices
crates/minimal-tui/src/*, crates/minimal/src/cmd/mod.rs, crates/minimal/src/cmd/project.rs
Warnings describe cleanup recovery commands, shared-port outcomes, skipped package checks, and when packages will be downloaded.

Priority: ⬇️ Low

Estimated code review effort: 3 (Moderate) | ~25 minutes

Change: Other

Suggested reviewers: norrietaylor


Merge Risk: ⚪ Minimal · up to 9920a

The wording changes are mergeable after normal checks; no material issue remains identified.

Pre-merge checks | Passed 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check Passed The title clearly and concisely describes the primary change: clarifying the finalize-install egress item wording.
Description check Passed The description explains the scope, intent, affected wording, testing performed, and known unrelated test failure. It uses a Verification section instead of the template's Testing heading and omits th…
Docstring Coverage Passed Docstring coverage is 88.57% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 105 functions across 24 files. (4 skipped: …
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.

✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR


🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR

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

Warning

Some tools did not complete. Review the errors below.

🔧 Vale (3.22.0)

{
"Line": 0,
"Path": "",
"Text": "E100 [loadStyles] Runtime error\n\nstyle 'ste' does not exist on StylesPath\n\nExecution stopped with code 1.",
"Code": "E100",
"Span": 0
}



A rabbit checks the names at night,
And sets each looping path just right.
The box gets words that point the way,
While ports and packages have their say.
Then hops away, content and bright.

Comment @coderabbitai help to get the list of available commands.

@norrietaylor
Copy link
Copy Markdown
Member

Superseded by #2179, which carries the one real commit (9920ade) on top of release/0.7.0. This branch replays eight release-branch commits on top of main and cannot land on either branch.

@gominimal-aw-bot gominimal-aw-bot Bot added the agent:resolve Consent gate: pr-conflict-resolver may rewrite this branch label Oct 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agent:fix Agentic fix PR eligible for review iteration; min-aw's worker-iterate gates on it. agent:resolve Consent gate: pr-conflict-resolver may rewrite this branch

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

0