8000 T11 — Choose a network posture on a stock install, end to end by minimal-foundry[bot] · Pull Request #1745 · gominimal/minimal · GitHub
[go: up one dir, main page]

Skip to content

T11 — Choose a network posture on a stock install, end to end - #1745

Merged
norrietaylor merged 3 commits into
mainfrom
agent/1644-choose-a-network-posture-on-a-stock-install-end
Sep 26, 2026
Merged

norrietaylor merged 3 commits into
mainfrom
agent/1644-choose-a-network-posture-on-a-stock-install-end

Conversation

@minimal-foundry
Copy link
Copy Markdown
Contributor

T11 — Choose a network posture on a stock install, end to end

slice: S2
kind: integration
covers: none
size: M
est: 60 code, 160 tests
executor: agent
difficulty: routine
model: standard
diagnostics: the bundle from the run carries the install log, the help output and the daemon log
observability: the case prints each step with the command and its exit status
layers:
- e2e:
- scripts/session-e2e.sh: adds the case network_posture_from_stock_install
test: ./scripts/session-e2e.sh network_posture_from_stock_install
produces: none
consumes: none
proof: --network and --ingress show in help and the reference with hints for the old spellings; from a fresh install --network own_ip --ingress 8080:8080 answers at 127.0.0.1:8080; a none box accepts attach and reaches nothing; the lanes prove a session reaches the network.
depends on:
- blocked by #1627
- blocked by #1614
- blocked by #1615
- blocked by #1633
- blocked by #1634

Proof

--network and --ingress show in min session activate --help and in docs/reference/cli-min.md, and the old hyphenated spellings still parse with a one-line hint naming the current spelling (proven on the installed pair from a real install.sh run). From that fresh install the case now proves the whole chooser: a none box accepts a real pty attach and reaches nothing (one interface, no default route, the host's own listener refused fast, the internet unreachable), the stock host_ip box completes an outbound request, and --network own_ip --ingress 8080:8080 answers on the host loopback while its box reaches out through the switch the installer shipped. The in-box halves assert on the CI native lane; on a host that cannot run boxes the case degrade-skips them by the observed fact and still asserts everything that needs no box.

Notes from the agent: Single-file change, the layer's only file. Environment on this box: boxes' exec relaunch dies (hakoniwa /etc bind-remount EPERM — mount inside unprivileged user namespaces is denied on this kernel entirely, verified with a direct bind-remount in a userns) and /dev/net/tun is absent, so the committed run here exercised the install/help/reference/hint halves and degraded at the exec gate (the proxy case's skip-on-dev-host, fail-on-CI convention) rather than asserting the in-box behavior; the own-IP half skipped on the tap gate and the bucket shipped no switch row, which the installer log was asserted to record. The in-box steps (none-box probes and pty attach, both outbound probes, the own-IP ingress answer) ride the landed proofs' patterns verbatim (session exec, socat responder, e2e-attach-pty with E2E_PTY_ANSWER=keep, the tolerant outbound shape) and were reviewed, not executed here; they run fully on the CI native lane, which runs the whole script with no argument as a user with userns mounts and has /dev/net/tun. bash -n and shellcheck -S warning are clean. The case is wired into all three dispatch …[truncated]

Tests

line exit tail
./scripts/session-e2e.sh network_posture_from_stock_install 0 own-IP half SKIPPED (no /dev/net/tun: an own-IP box cannot open its in-namespace tap; the help, hint, none-box and stock-posture halves still run) ::group::network posture from a stock install (help, hints, none box, own-ip, reach) step: sh scripts/install.sh (fresh HOME, mock bucket) → exit 0 insta

Verify

min task run agent-verify passed ([tasks.verify]).

Closes #1644

A new session e2e case, network_posture_from_stock_install: a real
install.sh run into a fresh HOME (the loopback-publish proof's mock
bucket, minus its system-package half) drives the installed pair
through every posture the command line can choose.

  - the chooser is findable: --network and --ingress in
    'min session activate --help' and in the CLI reference, and the
    hyphenated spellings still parse, each printing the one-line
    rename hint (no-net driven for real, host-net and own-ip at the
    parser); the current spellings print no hint
  - a none box accepts attach (a real pty attach) and reaches
    nothing: one interface (lo), no default route, the host's own
    listener refused fast, the internet unreachable
  - the stock posture (host_ip) completes an outbound request
  - from the fresh install, --network own_ip --ingress answers on
    the host loopback and that box reaches out through the switch
    the installer shipped (gated on /dev/net/tun, the one thing an
    own-IP box cannot do without)

Each step prints the command and its exit status; every failure
carries the install log, the help capture and the daemon log tail.
A host whose boxes cannot exec degrades by observed fact; on CI or a
VM lane a tripped exec gate fails.
@coderabbitai
coderabbitai Bot commented Sep 26, 2026 •
Copy link
Copy Markdown
Contributor

Important

Review skipped

Bot user detected.

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

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: dd354d87-4b6a-417a-902a-5e5463a2615b

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

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

@minimal-foundry
minimal-foundry Bot commented Sep 26, 2026 •
Copy link
Copy Markdown
Contributor Author

Approved: no findings at 45075201a6ab.

Nothing to do.

Clobber: none: git log -- scripts/session-e2e.sh shows the last substantive change is the previous PR's fresh-install proof; this PR does not revert it.

@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.

Comment thread scripts/session-e2e.sh Resolved
The workspace suite's shellcheck gate (crates/common/tests/shell_lint.rs
driving scripts/lint-shell.sh) red-flagged the new network-posture case:
six info-level findings, all about the HOME/MINIMAL_BIN/PATH swaps.

- SC2030/SC2031: each stock-install proof swaps HOME and PATH inside its
  own ( .. ) subshell on purpose — the lane's env must stay untouched —
  and shellcheck reads the later references as relying on a subshell
  change. Merge each pair of exports into one command, silence the code
  at both ends, and say why: the change dying with the subshell is the
  point, and the install's PATH read is meant to see the lane's PATH.
- SC2086: E2E_MINIMAL_ARGS must word-split, as the file already notes at
  every other mnl call site.
@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.

@minimal-foundry minimal-foundry Bot added the review:approved minimal-review approved the current head label Sep 26, 2026
@minimal-foundry
Copy link
Copy Markdown
Contributor Author

Round 1 of 10 on a failed check suite, pushed as 5ba75ca2a762.

line exit tail
./scripts/session-e2e.sh network_posture_from_stock_install 0 own-IP half SKIPPED (no /dev/net/tun: an own-IP box cannot open its in-namespace tap; the help, hint, none-box and stock-posture halves still run) ::group::network posture from a stock install (help, hints, none box, own-ip, reach) step: sh scripts/install.sh (fresh HOME, mock bucket) → exit 0 insta

Verify min task run agent-verify passed.

The red check is addressed at its cause: scripts/session-e2e.sh is shellcheck-clean again, so the ci-linux-native tests job (cargo nextest run --workspace, whose convention-discovered all_scripts_pass_shellcheck gate failed on the new case's six info-level findings) no longer fails on this branch, and the task's own test line — ./scripts/session-e2e.sh network_posture_from_stock_install — still passes, proving the network postures from a stock install end to end (chooser in help + reference + rename hints, none box isolated, own-IP published on the host loopback where the host can run boxes).

Notes from the agent: Revise round: the failed check was ci-linux-native-success via its tests job (the workspace suite). Cause found and fixed: the branch's only change, scripts/session-e2e.sh, failed the convention-discovered shellcheck gate (crates/common/tests/shell_lint.rs -> scripts/lint-shell.sh) with six info-level findings — SC2030/SC2031 on the deliberate subshell-local HOME/MINIMAL_BIN/PATH swaps (two of them pointing at the pre-existing loopback-publish proof, whose warnings the new case's later reads triggered) and SC2086 on the unquoted E2E_MINIMAL_ARGS in the pty attach. Fix follows the file's own convention: targeted '# shellcheck disable=' directives with reasons, and each proof's two exports merged into one command; runtime behavior unchanged. Evidence the shellcheck gate was the only tree-level cause: the base revision passes shellcheck, all 47 scripts now pass, and no other workspace test reads session-e2e.sh (the *_test.sh harnesses and install.sh/next-version.sh gates are untouched and pass). Local run degraded exactly as the case designs: no /dev/net/tun (own-IP half skipped with its note) and no session-sandbox exec on this box (the exec gate's exit-3 skip after the install/help/reference/hint halves asserted). CI corroboration at the branch head: the native-daemon-e2e job — the same script, whole lane — succeeded, so the full case inclu…[truncated]

@norrietaylor
norrietaylor enabled auto-merge (squash) September 26, 2026 20:43
@norrietaylor
Copy link
Copy Markdown
Member

/revise resolve conflicts

@minimal-foundry
Copy link
Copy Markdown
Contributor Author

Round 2 of 10 on a /revise note, pushed as 45075201a6ab.

Resolved conflicts in: scripts/session-e2e.sh

line exit tail
./scripts/session-e2e.sh network_posture_from_stock_install 0 own-IP half SKIPPED (no /dev/net/tun: an own-IP box cannot open its in-namespace tap; the help, hint, none-box and stock-posture halves still run) ::group::network posture from a stock install (help, hints, none box, own-ip, reach) step: sh scripts/install.sh (fresh HOME, mock bucket) → exit 0 insta

Verify min task run agent-verify passed.

On the branch, main's proxy_refuses_like_direct proof and this task's network_posture_from_stock_install proof both live in scripts/session-e2e.sh and both run by name or in the whole-lane order, with the usage text listing every case and the dispatch accepting both; the merged script shellchecks clean, and ./scripts/session-e2e.sh network_posture_from_stock_install still proves the stock-install posture end to end (exit 0).

Notes from the agent: Revise round 2, directive = 'resolve conflicts'. The merge of origin/main (a909897, the additive proxy-parity proof) conflicted with the branch only in the dispatch's usage text; resolved by keeping both sides' case lists (network_posture_from_stock_install from the branch, proxy_refuses_like_direct from main) on two wrapped echo lines, and completed the merge as 4507520 (chore(e2e), per docs/commit-conventions.md). main's change is purely additive (proof function, PAR_* seed teardown lines, two dispatch lines), so the auto-merged rest needed no hand resolution; bash -n and shellcheck pass, and the merged teardown carries both proofs' cleanup. The task's test line ran twice (once with output, once for exit): exit 0. On this host the proof's own gate skips the in-box halves (no /dev/net/tun, minimald cannot spawn a sandbox here) — the help/reference/hints halves that CAN run here all asserted green; on CI/VM lanes the script fails instead of skipping, so the box halves still get their lane evidence. Deferred: none. Next task should know: no other path touched, .github/ untouched.

@norrietaylor
norrietaylor merged commit 000dade into main Sep 26, 2026
33 checks passed
@norrietaylor
norrietaylor deleted the agent/1644-choose-a-network-posture-on-a-stock-install-end branch September 26, 2026 21:15
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.

T11 — Choose a network posture on a stock install, end to end

1 participant

< 2C36 /div>
0