8000 T19 — Take the network mode and egress keys in their canonical shape by minimal-foundry[bot] · Pull Request #3106 · gominimal/minimal · GitHub
[go: up one dir, main page]

Skip to content

T19 — Take the network mode and egress keys in their canonical shape - #3106

Open
minimal-foundry[bot] wants to merge 7 commits into
mainfrom
agent/2414-take-the-network-mode-and-egress-keys-in-their-c
Open

minimal-foundry[bot] wants to merge 7 commits into
mainfrom
agent/2414-take-the-network-mode-and-egress-keys-in-their-c

Conversation

@minimal-foundry
Copy link
Copy Markdown
Contributor

T19 — Take the network mode and egress keys in their canonical shape

slice: S4
kind: task
covers: BOX-079, BOX-080, BOX-157
size: L
est: 280 code, 300 tests
executor: agent
difficulty: routine
model: standard
diagnostics: one hint per legacy spelling
observability: none: expansion emits only hints
layers:
- network:
- crates/mfile/src/network.rs (new): modes, spellings, flat keys
- crates/mfile/src/lib.rs: mod line
test: cargo nextest run -p mfile network_mode_legacy_spelling_hint_and_canonical_value
test: cargo nextest run -p mfile mode_none_with_egress_exit3
test: cargo nextest run -p mfile flat_egress_keys_hint_and_canonical_nested_keys
- flag:
- crates/minimal/src/cli.rs: shared hint
test: cargo nextest run -p minimal network_flag_and_table_share_one_hint
- wire:
- crates/minimald-rpc/src/lib.rs: sections pass unchanged
- crates/minimald-rpc/src/tests.rs: tests
test: cargo nextest run -p minimald-rpc network_bep_secrets_passed_unchanged
produces: none
consumes:
- crates/mfile/src/expand.rs
proof: An old network spelling hints and stores the canonical value.
depends on:
- blocked by #2410

Proof

An entry that writes [network] mode = "no-net", "host-net" or "own-ip" expands, and mfile::network::canonicalize returns one hint that names the current value. The expanded spec and its bytes then carry none, host_ip or own_ip, never the legacy spelling. The flat egress_allow_dns, egress_allow_subnets and egress_deny_subnets keys get one hint each and are stored as egress.allow_dns_hosts, egress.allow_subnets and egress.deny_subnets. mode = "none" with any egress key fails with exit code 3. min --network prints the same hint line as the minimal.toml table.

Notes from the agent: Nothing calls expand::expand outside mfile yet. So canonicalize is a public function that the caller runs on Expansion::spec after expand, and the caller prints the hints it returns. The task names expand.rs as consumes, so expand.rs is not changed. The mode-none error and the shape errors use a new NetworkError type in network.rs (exit_code() returns 3), because error.rs is not in the layers. A later task can fold it into mfile::Error. Printed text changed: the --network legacy hint is now 'note: network mode still works for one release. The current spelling is : --network , or mode = "" under [network] in minimal.toml.' The existing test legacy_network_spellings_parse_with_hint in crates/minimal/src/tests.rs checks only that the hint names both spellings, and it still passes. The new minimal test is in a #[cfg(test)] module in cli.rs, so tests.rs is not changed. The minimald-rpc lib.rs change is a doc comment only, because the request already carries the spec JSON whole. The grace-release exit 3 for legacy spellings (the BOX-050 child) is not in this task.

Tests

line exit tail
cargo nextest run -p mfile network_mode_legacy_spelling_hint_and_canonical_value 0 Applying loadouts: default Running task runtime-implement-test-0 in box runtime-implement-test-0-1... Compiling args v0.0.1 (/workbench/crates/args) Compiling ot v0.0.1 (/workbench/crates/ot) Compiling paths v0.0.1 (/workbench/crates/paths) Compiling client-config v0.0.1 (/workbench/crat
cargo nextest run -p mfile mode_none_with_egress_exit3 0 Applying loadouts: default Running task runtime-implement-test-1 in box runtime-implement-test-1-1... Finished 'test' profile [unoptimized] target(s) in 0.46s ──────────── Nextest run ID 85bc855f-a572-4345-9dec-143fd099c47d with nextest profile: default Starting 1 test across 1 binary (112
cargo nextest run -p mfile flat_egress_keys_hint_and_canonical_nested_keys 0 Applying loadouts: default Running task runtime-implement-test-2 in box runtime-implement-test-2-1... Finished 'test' profile [unoptimized] target(s) in 0.49s ──────────── Nextest run ID ecd7757d-f9e6-4938-9d5f-bdfdd2ac6f67 with nextest profile: default Starting 1 test across 1 binary (112
cargo nextest run -p minimal network_flag_and_table_share_one_hint 0 Applying loadouts: default Running task runtime-implement-test-3 in box runtime-implement-test-3-1... Compiling paths v0.0.1 (/workbench/crates/paths) Compiling args v0.0.1 (/workbench/crates/args) Compiling ot v0.0.1 (/workbench/crates/ot) Compiling client-config v0.0.1 (/workbench/crat
cargo nextest run -p minimald-rpc network_bep_secrets_passed_unchanged 0 Applying loadouts: default Running task runtime-implement-test-4 in box runtime-implement-test-4-1... Compiling args v0.0.1 (/workbench/crates/args) Compiling common v0.0.1 (/workbench/crates/common) Compiling boxes v0.0.1 (/workbench/crates/boxes) Compiling minimald-rpc v0.0.1 (/workben

Verify

min task run agent-verify exited 100 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.

eserved_range
        PASS [   0.028s] ( 653/1142) minimal resolver::tests::range_step_custody_failure_resurfaces_the_advisory
        PASS [   0.027s] ( 654/1142) minimal resolver::tests::range_step_custody_follows_the_program_the_plist_names
        PASS [   0.015s] ( 655/1142) minimal resolver::tests::range_step_custody_is_root_owned
        PASS [   0.016s] ( 656/1142) minimal resolver::tests::range_step_custody_walks_every_path_component
        PASS [   0.021s] ( 657/1142) minimal resolver::tests::resolver_file_hook_parses_nameserver_and_port
        PASS [   0.019s] ( 658/1142) minimal resolver::tests::resolver_file_hook_states_its_gaps
        PASS [   0.019s] ( 659/1142) minimal resolver::tests::routing_domain_hook_finds_the_carrying_link_and_its_port
        PASS [   0.300s] ( 660/1142) minimal resolver::tests::privileged_copy_refuses_a_source_swapped_after_render
        PASS [   0.014s] ( 661/1142) minimal resolver::tests::routing_domain_hook_states_its_gaps
        PASS [   0.035s] ( 662/1142) minimal resolver::tests::session_advisory_agrees_with_the_hook_it_detected
        PASS [   0.031s] ( 663/1142) minimal resolver::tests::session_advisory_without_a_port_stays_quiet
        PASS [   0.022s] ( 664/1142) minimal resolver::tests::session_start_points_at_finalize_install_without_the_advisory
        PASS [   0.065s] ( 665/1142) minimal resolver::tests::the_app_bundle_layout_matches_packaging
        PASS [   0.032s] ( 666/1142) minimal resolver::tests::the_bundle_record_mirrors_the_probe
        FAIL [   0.124s] ( 667/1142) minimal resolver::tests::the_answerer_facts_ride_beside_a_down_proxy_sibling
  stdout ───

    running 1 test
    test resolver::tests::the_answerer_facts_ride_beside_a_down_proxy_sibling ... FAILED

    failures:

    failures:
        resolver::tests::the_answerer_facts_ride_beside_a_down_proxy_sibling

    test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 788 filtered out; finished in 0.10s

  stderr ───

    thread 'resolver::tests::the_answerer_facts_ride_beside_a_down_proxy_sibling' (3748) panicked at crates/minimal/src/resolver.rs:7666:9:
    the liveness proof still ran at the holder's port
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

  Cancelling due to test failure: 3 tests still running
        PASS [   0.560s] ( 668/1142) minimal resolver::tests::privileged_copy_refuses_a_user_writable_ancestor
        PASS [   1.892s] ( 669/1142) minimal resolver::tests::finalize_install_undo_succeeds_on_a_clean_host
        PASS [   0.645s] ( 670/1142) minimal resolver::tests::the_lists_two_queries_run_under_one_deadline
────────────
     Summary [  15.097s] 670/1142 tests run: 669 passed, 1 failed, 1 skipped
        FAIL [   0.124s] ( 667/1142) minimal resolver::tests::the_answerer_facts_ride_beside_a_down_proxy_sibling
warning: 472/1142 tests were not run due to test failure (run with --no-fail-fast to run all tests, or run with --max-fail)
error: test run failed

Closes #2414

Rewrite legacy [network] mode spellings and flat egress keys to their
current form, with one hint each, and refuse mode none with egress
(BOX-079, BOX-080, BOX-157).
The --network flag now prints the hint that [network] mode prints for
the same legacy spelling (BOX-079).
The create request carries [network] egress, ingress, bep and [secrets]
to the daemon key for key (BOX-080).
@coderabbitai
coderabbitai Bot commented Nov 6, 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: 0e10121c-0969-4c69-a595-12b33b97e4d6

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 6, 2026 •
Copy link
Copy Markdown
Contributor Author

Reviewed: 1 finding, none blocking at aac3341fc28d.

Address the comments on the diff.

Clobber: none seen.

@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 — advisory review

Verdict COMMENT — 1 finding, 1 inline.

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

Comment on lines +132 to +136
pub fn canonicalize(spec: &mut toml::Table) -> Result<Vec<String>, NetworkError> {
let mut hints = Vec::new();
let Some(toml::Value::Table(network)) = spec.get_mut("network") else {
return Ok(hints);
};
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.

MEDIUM · correctness · confidence 0.70 · in canonicalize

Nothing outside tests calls canonicalize. A real minimal.toml with mode = "no-net" or a flat egress_allow_* key still reaches the daemon in legacy form with no hint, and mode = "none" with egress is not refused. The PR proof says an old spelling hints and stores the canonical value. Call it after expand on the create path and print the hints.

What the reviewer checked

rg 'network::canonicalize' finds only crates/minimal/src/cli.rs test; the diff does not touch expand.rs or any create path.

Hand this to an agent
Act on a code-review finding.

File:       crates/mfile/src/network.rs
Lines:      132-136
Category:   correctness
Severity:   medium (reviewer confidence 0.70)

Finding:
Nothing outside tests calls `canonicalize`. A real `minimal.toml` with `mode = "no-net"` or a flat `egress_allow_*` key still reaches the daemon in legacy form with no hint, and `mode = "none"` with egress is not refused. The PR proof says an old spelling hints and stores the canonical value. Call it after `expand` on the create path and print the hints.

First verify this against the code yourself. It is model output and
may be wrong. If it is wrong, or the tradeoff was deliberate, say so
and change nothing.

👍 useful · 👎 noise — react to tell the reviewer. Replying works too, and says more.

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.

Disputed — not addressed: On this branch mfile::expand::expand has no caller outside tests, so no create path exists to call canonicalize after it. Wiring expansion into box creation needs files outside this task's layers (expand.rs is consumed, not changed). canonicalize is the step that path will call. Its hints and the exit-3 refusal are proved by the mfile tests.

@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 · 2 conditions · the full ruling

The mode rewrite, the flat egress keys and the mode = "none" refusal conform to the Box Spec. The ingress check does not. canonicalize refuses a list network.ingress, but architecture.md line 892, box.toml line 83 and example-minimal.toml line 105 write ingress as a list of tables. The design's own example therefore fails with exit 3. C1 fixes the check and the two test fixtures. C2 adds issues for the two residuals that the PR notes describe: the caller that prints the table hints, and the fold of NetworkError into mfile::Error.

Ruled at 5a90544 against gominimal/arch@7a86ec7bb3c0 by claude-opus-5-5.

Comment thread crates/mfile/src/network.rs Outdated
hints.extend(flat_egress_hint(flat));
}

for section in ["egress", "ingress", "bep"] {
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

C1 · This loop refuses ingress when it is not a table. architecture.md line 892 and box.toml line 83 write ingress = [ { proto = "tcp", port = 8080 } ], a list of tables. Check ingress as a list, and refuse a table with expected: "a list". Keep the table check for egress and bep.

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.

Addressed in aac3341fc28d: canonicalize now requires network.ingress to be a list and refuses a table with expected "a list". egress and bep still require a table. crates/mfile/src/spec.rs confirms that box.toml writes ingress as a [{proto, port}] list.

Comment thread crates/mfile/src/network.rs Outdated
egress_deny_subnets = [\"10.1.0.0/16\"]\n\
[sessions.dev.network.egress]\n\
allow_dns_hosts = [\"b.example\", \"a.example\"]\n\
[sessions.dev.network.ingress]\n\
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

C1 · This fixture writes ingress as a table with ports. The design does not use that shape. Write ingress = [{ proto = "tcp", port = 8080 }] under [sessions.dev.network], and add a case where a table ingress exits 3 with network.ingress.

Copy link 8BD0
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Addressed in aac3341fc28d: The fixture now writes ingress = [{ proto = "tcp", port = 8080 }] under [sessions.dev.network]. A new case shows that a table ingress exits 3 with WrongShape naming network.ingress.

Comment thread crates/minimald-rpc/src/tests.rs Outdated
"allow_subnets": ["10.0.0.0/8"],
"deny_subnets": ["10.1.0.0/16"],
},
"ingress": {"ports": ["8080:80/tcp"]},
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

C1 · Use the Box Spec shape here: "ingress": [{"proto": "tcp", "port": 8080}]. The test then proves the pass-through for the shape that box.toml line 83 writes.

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.

Addressed in aac3341fc28d: The pass-through test now sends "ingress": [{"proto": "tcp", "port": 8080}], the box.toml shape.

///
/// A [`NetworkError`] for a mode that is not a mode, a value of the wrong
/// shape, or `mode = "none"` with an egress key.
pub fn canonicalize(spec: &mut toml::Table) -> Result<Vec<String>, NetworkError> {
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

C2 · No caller prints the hints that this function returns, because nothing outside mfile calls expand::expand. Add a residual with a linked issue to the PR body for the caller that prints each hint and exits 3 on a NetworkError.

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.

Addressed in aac3341fc28d: No code change. The caller that prints each hint and exits 3 on a NetworkError is in crates/minimal, outside this task's layers. I recorded it as a residual in this round's notes for the PR body. The linked issue needs a person to file it.

@minimal-foundry
Copy link
Copy Markdown
Contributor Author

Round 1 of 10 on the runtime's review findings: the coder changed nothing. Revise round 1. No code change this round. The one thread is invalid: mfile::expand::expand itself has no caller outside tests, so no create path exists yet to call canonicalize after expand. Wiring one needs files outside this task's layers (expand.rs is a consumes, and the create path in minimal or minimald is not named). That belongs to the task that wires expansion into box creation. I did not re-run the minimal and minimald-rpc test lines because nothing changed since the round that passed them.

Review threads the coder judged:

  • 👎 invalid — crates/mfile/src/network.rs:136: On this branch mfile::expand::expand has no caller outside tests, so no create path exists to call canonicalize after it. Wiring expansion into box creation needs files outside this task's layers (expand.rs is consumed, not changed). canonicalize is the step that path will call. Its hints and the ex

The e2e checks for 'note: --network <legacy>'. box.toml writes ingress as a list of tables, so a table ingress now exits 3.
@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 — advisory review

Verdict COMMENT — 1 finding, 1 inline.

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

Comment on lines +133 to +134
pub fn canonicalize(spec: &mut toml::Table) -> Result<Vec<String>, NetworkError> {
let mut hints = Vec::new();
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.

LOW · correctness · confidence 0.55 · in canonicalize

canonicalize has no caller outside tests. A real [network] mode = "no-net" entry is not rewritten, and no hint prints for it. The PR proof says an old spelling hints and stores the canonical value. The new mode = none with egress refusal also never runs. Call canonicalize after expand in the production path, or state that a later task wires it.

What the reviewer checked

rg 'canonicalize(&mut' finds only network.rs:240 (test helper) and cli.rs:1405 (test).

Hand this to an agent
Act on a code-review finding.

File:       crates/mfile/src/network.rs
Lines:      133-134
Category:   correctness
Severity:   low (reviewer confidence 0.55)

Finding:
`canonicalize` has no caller outside tests. A real `[network] mode = "no-net"` entry is not rewritten, and no hint prints for it. The PR proof says an old spelling hints and stores the canonical value. The new `mode = none` with egress refusal also never runs. Call `canonicalize` after `expand` in the production path, or state that a later task wires it.

First verify this against the code yourself. It is model output and
may be wrong. If it is wrong, or the tradeoff was deliberate, say so
and change nothing.

👍 useful · 👎 noise — react to tell the reviewer. Replying works too, and says more.

@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 change now conforms to the Box Spec [network] block. canonicalize takes ingress as a list, as architecture.md line 892 writes it, and refuses a table with exit 3. The legacy mode hint starts with note: --network <legacy> again, and the e2e pins match it. The modes, the flat egress keys and the mode = "none" refusal agree with lines 889 and 916–919. Before a client calls expand, make sure that the same caller also runs canonicalize.

Ruled at aac3341 against gominimal/arch@7a86ec7bb3c0 by claude-opus-5-5.

@minimal-foundry
Copy link
Copy Markdown
Contributor Author

Round 2 of 10 on a failed check suite, pushed as aac3341fc28d.

line exit tail
cargo nextest run -p mfile network_mode_legacy_spelling_hint_and_canonical_value 0 Applying loadouts: default Running task runtime-implement-test-0 in box runtime-implement-test-0-1... Compiling args v0.0.1 (/workbench/crates/args) Compiling ot v0.0.1 (/workbench/crates/ot) Compiling paths v0.0.1 (/workbench/crates/paths) Compiling client-config v0.0.1 (/workbench/crat
cargo nextest run -p mfile mode_none_with_egress_exit3 0 Applying loadouts: default Running task runtime-implement-test-1 in box runtime-implement-test-1-1... Finished 'test' profile [unoptimized] target(s) in 0.33s ──────────── Nextest run ID 7fb46699-dcce-43d7-b6c5-d52b9eeb30c6 with nextest profile: default Starting 1 test across 1 binary (112
cargo nextest run -p mfile flat_egress_keys_hint_and_canonical_nested_keys 0 Applying loadouts: default Running task runtime-implement-test-2 in box runtime-implement-test-2-1... Finished 'test' profile [unoptimized] target(s) in 0.32s ──────────── Nextest run ID 523593a0-fa0f-47a5-984b-d03af2b01e26 with nextest profile: default Starting 1 test across 1 binary (112
cargo nextest run -p minimal network_flag_and_table_share_one_hint 0 Applying loadouts: default Running task runtime-implement-test-3 in box runtime-implement-test-3-1... Compiling paths v0.0.1 (/workbench/crates/paths) Compiling args v0.0.1 (/workbench/crates/args) Compiling ot v0.0.1 (/workbench/crates/ot) Compiling client-config v0.0.1 (/workbench/crat
cargo nextest run -p minimald-rpc network_bep_secrets_passed_unchanged 0 Applying loadouts: default Running task runtime-implement-test-4 in box runtime-implement-test-4-1... Compiling args v0.0.1 (/workbench/crates/args) Compiling common v0.0.1 (/workbench/crates/common) Compiling boxes v0.0.1 (/workbench/crates/boxes) Compiling minimald-rpc v0.0.1 (/workben

Verify min task run agent-verify exited 100 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.

faces_the_advisory
        PASS [   0.018s] ( 657/1146) minimal resolver::tests::range_program_applies_exactly_the_reserved_range
        PASS [   0.012s] ( 658/1146) minimal resolver::tests::range_step_custody_failure_resurfaces_the_advisory
        PASS [   0.015s] ( 659/1146) minimal resolver::tests::range_step_custody_follows_the_program_the_plist_names
        PASS [   0.011s] ( 660/1146) minimal resolver::tests::range_step_custody_is_root_owned
        PASS [   0.013s] ( 661/1146) minimal resolver::tests::range_step_custody_walks_every_path_component
        PASS [   0.015s] ( 662/1146) minimal resolver::tests::resolver_file_hook_parses_nameserver_and_port
        PASS [   0.013s] ( 663/1146) minimal resolver::tests::resolver_file_hook_states_its_gaps
        PASS [   0.019s] ( 664/1146) minimal resolver::tests::routing_domain_hook_finds_the_carrying_link_and_its_port
        PASS [   0.015s] ( 665/1146) minimal resolver::tests::routing_domain_hook_states_its_gaps
        PASS [   0.020s] ( 666/1146) minimal resolver::tests::session_advisory_agrees_with_the_hook_it_detected
        PASS [   0.022s] ( 667/1146) minimal resolver::tests::session_advisory_without_a_port_stays_quiet
        PASS [   0.027s] ( 668/1146) minimal resolver::tests::session_start_points_at_finalize_install_without_the_advisory
        PASS [   0.014s] ( 669/1146) minimal resolver::tests::the_app_bundle_layout_matches_packaging
        PASS [   0.012s] ( 670/1146) minimal resolver::tests::the_bundle_record_mirrors_the_probe
        FAIL [   0.070s] ( 671/1146) minimal resolver::tests::the_answerer_facts_ride_beside_a_down_proxy_sibling
  stdout ───

    running 1 test
    test resolver::tests::the_answerer_facts_ride_beside_a_down_proxy_sibling ... FAILED

    failures:

    failures:
        resolver::tests::the_answerer_facts_ride_beside_a_down_proxy_sibling

    test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 792 filtered out; finished in 0.06s

  stderr ───

    thread 'resolver::tests::the_answerer_facts_ride_beside_a_down_proxy_sibling' (6897) panicked at crates/minimal/src/resolver.rs:7689:9:
    the liveness proof still ran at the holder's port
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

  Cancelling due to test failure: 3 tests still running
        PASS [   0.321s] ( 672/1146) minimal resolver::tests::privileged_copy_refuses_a_user_writable_ancestor
        PASS [   1.172s] ( 673/1146) minimal resolver::tests::finalize_install_undo_succeeds_on_a_clean_host
        PASS [   0.631s] ( 674/1146) minimal resolver::tests::the_lists_two_queries_run_under_one_deadline
────────────
     Summary [  12.539s] 674/1146 tests run: 673 passed, 1 failed, 1 skipped
        FAIL [   0.070s] ( 671/1146) minimal resolver::tests::the_answerer_facts_ride_beside_a_down_proxy_sibling
warning: 472/1146 tests were not run due to test failure (run with --no-fail-fast to run all tests, or run with --max-fail)
error: test run failed

Review threads the coder judged:

  • 👍 valid — crates/mfile/src/network.rs: canonicalize now requires network.ingress to be a list and refuses a table with expected "a list". egress and bep still require a table. crates/mfile/src/spec.rs confirms that box.toml writes ingress as a [{proto, port}] list.
  • 👍 valid — crates/mfile/src/network.rs: The fixture now writes ingress = [{ proto = "tcp", port = 8080 }] under [sessions.dev.network]. A new case shows that a table ingress exits 3 with WrongShape naming network.ingress.
  • 👍 valid — crates/minimald-rpc/src/tests.rs: The pass-through test now sends "ingress": [{"proto": "tcp", "port": 8080}], the box.toml shape.
  • 👍 valid — crates/mfile/src/network.rs:133: No code change. The caller that prints each hint and exits 3 on a NetworkError is in crates/minimal, outside this task's layers. I recorded it as a residual in this round's notes for the PR body. The linked issue needs a person to file it.

A legacy network spelling, as the --network flag or as mode under [network] in minimal.toml, prints one hint that names the current spelling. The expanded spec stores only the current value. The flag hint again starts with 'note: --network ' and names '--network ', which is the text the session e2e checks for.

Notes from the agent: Failed check native-daemon-e2e: the shared hint from round 1 started with 'note: network mode no-net'. scripts/session-e2e.sh (NET-037) matches 'note: --network no-net' ... '--network none'. The hint now reads: 'note: --network and mode = "" still work for one release. The current spelling is --network , or mode = "" under [network] in minimal.toml.' I did not run the e2e on this box. I checked the new text against the script's case patterns by reading them. ci-linux-native-success is the lane aggregator, so it failed because the e2e failed. I also ran legacy_network_spellings_parse_with_hint in crates/minimal/src/tests.rs, which pins the flag's stderr, and it passed. Residual for the PR body (from review thread C2): no caller outside mfile calls expand::expand and network::canonicalize yet. A follow-up task must wire the create path in crates/minimal to print each hint and to exit 3 on a NetworkError. That file is outside this task's layers. I cannot open a linked issue, because I have no credential. A person must file the issue.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

T19 — Take the network mode and egress keys in their canonical shape

0 participants

0