8000 T3 — Names through the shipped proxy, end to end by minimal-foundry[bot] · Pull Request #1704 · gominimal/minimal · GitHub
[go: up one dir, main page]

Skip to content

T3 — Names through the shipped proxy, end to end - #1704

Merged
norrietaylor merged 10 commits into
mainfrom
agent/1627-names-through-the-shipped-proxy-end-to-end
Sep 25, 2026
Merged

norrietaylor merged 10 commits into
mainfrom
agent/1627-names-through-the-shipped-proxy-end-to-end

Conversation

@minimal-foundry
Copy link
Copy Markdown
Contributor

T3 — Names through the shipped proxy, end to end

slice: S0
kind: integration
covers: none
size: M
est: 120 code, 100 tests
executor: agent
difficulty: routine
model: standard
diagnostics: the bundle's daemon log tail shows the routed and refused requests of the run in order
observability: the case prints each request, its status and the daemon log line it produced
layers:
- e2e:
- scripts/session-e2e.sh: wraps each proof block in a function behind a top-level case on its first argument, running every block in today's order when no argument is given, and adds the case min_internal_names_through_proxy
test: ./scripts/session-e2e.sh min_internal_names_through_proxy
produces: none
consumes: none
proof: <name>.min.internal and host.min.internal routed through the hostname proxy that already ships, own-address sessions on the VM host included, with every refusal logged (NET-001 to NET-004).
depends on:
- blocked by #1611
- blocked by #1612

Proof

scripts/session-e2e.sh now has a min_internal_names_through_proxy case — standalone as scripts/session-e2e.sh min_internal_names_through_proxy, and last in the no-argument lane — that drives the shipped :7654 hostname proxy from inside a real box: a live box's two-label name routes to it, an own-address box's published port routes to its lease on switch lanes, every refusal comes back logged (the 400, the 403 for an unpublished port, both 502s, each with its daemon record), the deprecated three-label form and the deprecated literal route and leave their deprecation notices, and host.min.internal reaches the host's loopback from host- and own-address boxes. Every request is printed with its status and the daemon log line it produced, in order, so the transcript and the min bug bundle's log tail read as the same narrative.

Notes from the agent: This box cannot run the full case, and the case is built to say so rather than lie: it is itself a minimal session (the agent sandbox), so (a) nested session sandboxes die at spawn — hakoniwa's /etc remount EPERMs inside a box, every min session exec fails with 'the session program has exited' — and (b) the ambient daemon hosting this session owns 127.0.0.1:7654 (EGRESS_PROXY_PORT is a fixed constant, not configurable), so this run's daemon can never own the proxy port. The case therefore has two host-capability gates, keyed on observed fact per the suite's own switch-gate precedent: a spawn gate that keeps only the hostname-registration assert (daemon-side, needs no box) and a listener gate keyed on the daemon's own 'session hostnames will not route' warning that keeps only host.min.internal (needs no listener). Both were verified live here: the registration assert passed and the spawn gate took its skip path with the real blocker printed; the 7654 conflict was confirmed live too (an ambient daemon outside the session's PID namespace holds the port and answers with the shipped proxy's exact 502/400 responses).…[truncated]

Tests

line exit tail
./scripts/session-e2e.sh min_internal_names_through_proxy 0 ::group::min.internal names through the hostname proxy (NET-001..NET-004) daemon log: {"fields":{"action":"registered","hostname":"e2e-proxy.min.internal","ip":"127.0.0.1","message":"registered PTask hostname","session_id":"01a0d7ff-ac88-7784-9885-122d60a7ed12","session_name":"e2e-proxy"},"level":"I

Verify

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

Base

The base branch moved while the coder worked; it was merged in before the tests ran.

Closes #1627

Add the min_internal_names_through_proxy case to scripts/session-e2e.sh,
driving the :7654 egress proxy the way a client does: from inside a real
box, through the proxy, at an HTTP responder in another box. NET-001
routes a live box's name and an own-address box's published port, and
asserts every refusal is logged (400/403/502, each with its record);
NET-002 routes the deprecated three-label form and asserts its notice;
NET-003 lands host.min.internal on the host's loopback from host- and
own-address boxes; NET-004 routes the deprecated literal on switch lanes
and asserts the egress relay's notice.

Each request prints its status and the daemon log line it produced, in
order, so the transcript and the min bug bundle's log tail read as the
same narrative. A routed request leaves no record at any level, and the
case says so where that is true.

Two host capability gates degrade by observed fact rather than by host
detection, the own-IP proof's switch gate being the precedent: a host
that is itself a sandbox cannot run a session program, and a host that
already runs a minimald owns :7654 forever (EGRESS_PROXY_PORT is a fixed
constant). The first keeps the hostname-registration assert, which is
daemon-side; the second keeps host.min.internal, which needs no
listener. CI's native lane has neither conflict and runs everything.

The proof blocks become functions behind a dispatch on the script's
first argument, so a single case runs standalone; no argument still runs
every proof in today's order.
session-e2e.sh invokes `min` by name and trusts PATH to hold this repo's
CLI — true in CI, which exports target/debug, but not on a host that is
itself a minimal session box: there the in-sandbox `min` helper
(crates/mctx/src/min_helper.sh) shadows the real CLI, answers only
add/task/search/check, and prints its usage for every other subcommand,
so the min_internal_names_through_proxy case died at its first
`min session activate` with a bare 'Usage: min <subcommand>' that named
no real cause.

Keep the PATH `min` when it takes --version (the helper has none), else
fall back to a build of this checkout — its own target dir, then the
environment's CARGO_TARGET_DIR — and put the winning dir ON PATH,
because the CLI autospawns `minimald` by name and the pair must come
from one build. Fail with the reason and the fix when none is found.
@coderabbitai
coderabbitai Bot commented Sep 25, 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: 986e0b33-5b7f-4a32-b4c6-401985b9df87

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

Reviewed: 1 finding, none blocking at 0524fe538c35.

Address the comments on the diff.

Clobber: none: git log on scripts/session-e2e.sh shows the base was merged in and the head is a series of fix commits on this PR (round-2 review, NET-003 pin gating, min-resolution gate); nothing reverted.

@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
@norrietaylor
Copy link
Copy Markdown
Member

Babysitter review of 40bd677 against the T3 plan block on #1627 (NET-001..004). The one layer intent is met in all three parts: every proof block is a function, the top-level case dispatches on the first argument and runs today's order with none, and min_internal_names_through_proxy exists. shellcheck and bash -n are clean, every daemon-log string the case greps for exists in the product. Verdict: REVISE.

High — the native lane failure is this PR's, and deterministic. All earlier proofs and most of the new case passed on the native lane: NET-001 routed 200, NET-002 routed with its notice, the three refusals logged, NET-003 returned HOST_LOOPBACK_OK. The failing check is scripts/session-e2e.sh:1884, which greps curl -v output for Connected to host.min.internal; the box's curl 8.22 prints Established connection to host.min.internal (127.0.0.1 port 18081), so a name that did resolve to loopback is reported as "curl never connected" at :1887. Use -w '%{remote_ip}' instead of parsing verbose text.

High — the test line can pass without asserting anything. The "exit 0" in the status comment came from the skip path on the coder's host. :1945-1963 returns 0 when min session exec fails, including on VM lanes where it prints "lane-level fault" and still passes; :1977-1995 returns 0 when 127.0.0.1:7654 is owned by another daemon. Either regression (exec broken, proxy port lost) would turn this case green. Under CI and on VM lanes both gates must fail; the skip is only defensible for a developer host.

Medium

  • The plan's observability line ("each request, its status and the daemon log line it produced") is met only nominally: the routed-request "log line" is whatever the daemon log gained since the request began, which in CI was unrelated minimald::server SSH-handshake warnings. Filter to minimald::net:: targets. The proxy logs no line for a request it routes, so the diagnostics half cannot be met from the script alone; note that as a product gap in the PR body rather than papering over it.
  • The VM-only half of the proof (own-address routing, the 403 for an unpublished port) runs only with MINVMD_GVPROXY_BIN set (:2119), and the NET-004 daemon-log check at :2187-2200 can never run there because those lanes cannot read the daemon log. The KVM and macOS lanes are the proof; watch them.

Low

  • for _ in 1 2 3 4 5 … [ "$_" = 5 ] (:1977-1983) never matches because bash rebinds $_ after every command; use a named variable. Only cost is one extra sleep.
  • The header claims each proof is self-contained, but session_exec, guest_egress and sandbox read $sid from proof_lifecycle and die under set -u when run alone; the header's case list also omits the new case.
  • The "drive the repo's own min" block at :209-244 picks which min runs for every lane, release smokes included. It works around the coder's own sandbox; harmless on CI but a separate change.

No files outside the layers. Round 1 is running on the failed suite; the /revise for the rest follows when it lands.

The native CI lane failed the new min_internal_names_through_proxy proof at
its NET-003 resolution check: the proof grepped curl's verbose trace for a
`Connected to host (ip) port N` line, a shape the curl every box ships
(upstream pins 8.22) no longer prints — it says `Established connection to
host (ip port N) from local port M` instead — so the grep came back empty
and a request that had just succeeded (200, the host's marker) was read as
a resolution failure.

Ask curl directly instead: `%{remote_ip}` is the address of the connection
it made, and write-out spelling has been stable for a decade — the proof
already leans on `%{http_code}` for every status. The assertion becomes an
exact match on 127.0.0.1, and the error now prints what it got instead of
assuming nothing was there.
@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
@minimal-foundry
Copy link
Copy Markdown
Contributor Author

Round 1 of 10 on a failed check suite, pushed as 58acaf74948e.

line exit tail
./scripts/session-e2e.sh min_internal_names_through_proxy 0 ::group::min.internal names through the hostname proxy (NET-001..NET-004) daemon log: {"fields":{"action":"registered","hostname":"e2e-proxy.min.internal","ip":"127.0.0.1","message":"registered PTask hostname","session_id":"01a0d829-12e4-7229-9ef7-e48af2c5b3f5","session_name":"e2e-proxy"},"level":"I

Verify min task run agent-verify passed.

The min_internal_names_through_proxy case now completes the native CI lane: .min.internal and host.min.internal route through the shipped hostname proxy with every refusal logged (NET-001 to NET-004), each request printed with its status and the daemon log line it produced. The lane's only failure — the NET-003 resolution check grepping a 'Connected to host (ip)' line from curl's -v trace, wording the curl every box ships (8.22) no longer prints — now reads the address from curl's %{remote_ip} write-out instead.

Notes from the agent: Root cause of the failed checks (native-daemon-e2e, and its aggregator ci-linux-native-success): the proof's proxy_assert_host_by_name grepped curl's verbose trace for 'Connected to host.min.internal' to recover the resolved address. The pinned upstream pkgs repo ships curl 8.22.0, which prints 'Established connection to host (ip port N) from local port M' — no 'Connected to' line at all — so the grep came back empty and a request that had just succeeded (200 + HOST_LOOPBACK_OK, the annotation is the check run's) was read as a resolution failure. Verified locally with curl 8.22.0: the old grep matches nothing, and -w '%{remote_ip}' returns 127.0.0.1 for a hosts-file-resolved name; the proof already leans on -w '%{http_code}' for every status, so the write-out is the established stable surface. Everything the run reached before that assertion passed on CI (routing, both deprecation/refusal records, the ghost-name and dead-port refusals, the 400), and nothing assertable follows it on the native lane (the own-address half is MINVMD_GVPROXY_BIN-gated, skipped there), so this one probe was the last native-lane failure. What this box could not run: the case's in-box half — this host is itself a session box and cannot nest sandboxes, so the case degrades at its exec gate here; the daemon-side assertions were reproduced in a network namespace (routing, all four refusals, every log record pattern and their poll windows pass on…[truncated]

@norrietaylor
Copy link
Copy Markdown
Member

/revise Round 1 (c49ecbb) fixed the curl parse and the native lane is green. The rest of the review stands at 58acaf7, plus the bot's Medium.

  1. High: the test line can pass without asserting anything. scripts/session-e2e.sh:1969 returns 0 when min session exec fails, printing "lane-level fault" and still passing; :2001 returns 0 when 127.0.0.1:7654 is owned by another daemon. Either regression (exec broken, proxy port lost) turns this case green. Under CI, and whenever E2E_VM is set, both gates must fail. Keep the skip only for a developer host with neither variable set, and print it as a skip, not a pass.
  2. Medium: the routed-request log line. The "daemon log line it produced" is whatever the log gained since the request began; on CI that was unrelated minimald::server SSH-handshake warnings. Filter to minimald::net:: targets. The proxy logs nothing for a request it routes, so state that gap in the PR body rather than presenting the tail as evidence.
  3. Medium (minimal-review, :65): the self-contained claim is false. session_exec, guest_egress and sandbox read $sid from proof_lifecycle and die under set -u when run alone. Either make each of them activate its own session, or drop the claim from the header and make the case refuse those three names without lifecycle first. Add the new case to the header's list.
  4. Low: for _ in 1 2 3 4 5 … [ "$_" = 5 ] (:1983-1989) never matches because bash rebinds $_ after every command; use a named counter.
  5. Low: the "drive the repo's own min" block (:209-244) selects which min runs for every lane, release smokes included. Scope it to the case where MINIMAL_E2E_MIN is unset and the repo binary exists, or move it to a separate change.

The NET-004 hook_log_readable branch inside the own-address block (:2187-2198) is unreachable in CI because every lane with MINVMD_GVPROXY_BIN runs with E2E_VM=1; delete the branch or state in its comment that it serves developer runs only.

Both capability gates degraded to a skip on every lane, so an exec that
never worked or a proxy port this run's daemon never owned still printed
green. They now fail wherever the assertions are the lane's business -
under CI, and on every VM-backed target - and only a developer host with
neither variable set may skip, as a warning annotation, never folded into
a passing transcript.

The per-request log window is filtered to minimald::net::, so a routed
request reports the gap (the proxy logs refusals and deprecation notices,
not the requests it serves) instead of quoting whatever SSH-handshake
warning landed in the same second.

The proofs that share lifecycle's session (session_exec, guest_egress,
sandbox) mint an equivalent one when they run alone, so every case the
dispatch accepts really is runnable by itself, as the header claimed.
The min-resolution block honours MINIMAL_E2E_MIN so a release smoke can
pin the build it smokes, the bind-retry loop uses a named counter ($_
rebinds after every command, so the old test never matched), and the
NET-004 log branch is marked developer-only, since every lane with a
switch runs with E2E_VM=1.
The "standalone case: ..." line printed inside lifecycle's own group too,
where the proof doing the minting is lifecycle itself. Say what it does
instead, which is true wherever the helper runs.
@minimal-foundry
Copy link
Copy Markdown
Contributor Author

Round 2 of 10 on a /revise note, pushed as 27b093507319.

line exit tail
./scripts/session-e2e.sh min_internal_names_through_proxy 0 ::group::min.internal names through the hostname proxy (NET-001..NET-004) daemon log: {"fields":{"action":"registered","hostname":"e2e-proxy.min.internal","ip":"127.0.0.1","message":"registered PTask hostname","session_id":"01a0d853-3933-7539-818f-e52fc3e6b96d","session_name":"e2e-proxy"},"level":"I

Verify min task run agent-verify passed.

Review threads the coder judged:

  • 👍 valid — scripts/session-e2e.sh: session_exec, guest_egress and sandbox now mint the session they need via proof_shared_session when run alone, so all ten cases run standalone; the header no longer claims every proof activates its own sessions.

The min_internal_names_through_proxy case drives <name>.min.internal and host.min.internal through the hostname proxy that already ships, printing every request with its HTTP status and its own minimald::net:: log record — and saying outright, where the proxy deliberately logs nothing, that a routed request leaves no record — with every refusal and deprecation notice (NET-001 to NET-004) asserted against that record; both capability gates now fail the lane under CI and on every VM-backed target instead of printing a green skip, and every case name the dispatch accepts — session_exec, guest_egress and sandbox included — runs standalone, minting its own session when nothing ran before it.

Notes from the agent: Round-2 findings, all six addressed in scripts/session-e2e.sh, the one layer file: (1) both capability gates now fail wherever the assertions are the lane's business — CI set, or E2E_VM set — and only a developer host with neither may skip, as a ::warning:: that names what was asserted and says the gate would fail on CI; (2) the per-request log window is filtered to "target":"minimald::net::", checked against a real daemon log from this host's run: the minimald::server bind/SSH records the reviewer saw are dropped, a real minimald::net::dns registration record is kept. PR body, per the review: the proxy logs every refusal and both deprecation notices but nothing for a request it routes — the case prints that gap rather than presenting the log tail as evidence of routing, so the routed halves are proved by the statuses and the marker bodies. (3) session_exec/guest_egress/sandbox now mint their own session via proof_shared_session when run alone; the header's claim is reworded to match, and it already listed the new case. (4) the bind-retry loop uses a named counter. (5) the min-resolution block honours MINIMAL_E2E_MIN so a release smoke can pin the build it smokes and skip the repo-binary fallback; .github/ is frozen and out of this t…[truncated]

@norrietaylor
Copy link
Copy Markdown
Member

Babysitter verification of round 2 (fc9a6ea, 27b0935) against the /revise note: all six items done, by diff and a local bash -n plus shellcheck.

  1. Both capability gates now fail under CI or E2E_VM (proxy_gate_can_skip), and the developer-host skip prints as a ::warning::, not a passing transcript.
  2. The per-request log window is filtered to minimald::net:: targets, and the transcript says where the proxy logs nothing.
  3. proof_shared_session mints the shared session for session_exec, guest_egress and sandbox when they run alone; the header claim is corrected and the case list complete. minimal-review's Medium thread resolved.
  4. Named proxy_bind_try counter.
  5. MINIMAL_E2E_MIN names a specific min and skips the repo-binary fallback, so a release smoke drives its own artifact.
  6. The unreachable NET-004 branch is documented as developer-only.

Merge follows build-linux, e2e and minimal-review on 27b0935.

@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 — 2 findings, 2 inline.

Comment thread scripts/session-e2e.sh Resolved
Comment thread scripts/session-e2e.sh Resolved
The MINIMAL_E2E_MIN gate's error message promised a min "with its
matching 'minimald' beside it" but only checked -x and the basename, so
a lone `min` passed and the run died later, confusingly, at the first
activate's autospawn. The PATH branch had the same gap: it kept any real
`min` without checking that the daemon it spawns by name was reachable.

The daemon is not always minimald: macOS is always VM-backed (no native
minimald builds there) and every Linux VM lane passes --provider
local-minvmd, so the gate now derives the daemon this run will spawn —
minimald native, minvmd VM-backed (Darwin or the provider flag, never
E2E_VM, which marks teardown, not the backend) — and holds every branch
to it: MINIMAL_E2E_MIN must carry the sibling beside it, the PATH `min`
is kept only when the daemon is findable on PATH (exactly how autospawn
resolves it), and one gate after all three branches fails naming the
missing half instead of letting the run die at autospawn.
proxy_assert_host_by_name asserted 127.0.0.1 whenever the daemon log
was readable (native), which is right only for the host-address box:
its /etc/hosts is pinned by the HostNet plan. The same function serves
the own-address box, whose lease is a switch address on EVERY host —
native included, a developer host driving a switch by hand — so the
switch zone answers the name, never /etc/hosts, and that run tripped
the 127.0.0.1 assertion spuriously. CI never saw it because the
own-address half runs only on VM lanes, where the log is guest-side
and the check was skipped.

The assertion is now gated on the box's address mode (a third argument,
host or own), not on the lane: the host-address box keeps its pinned
127.0.0.1 natively, and the own-address box keeps printing what it
resolved without asserting the literal — as every VM lane already did.
@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
@minimal-foundry
Copy link
Copy Markdown
Contributor Author

Round 3 of 10 on the runtime's review findings, pushed as 0524fe538c35.

line exit tail
./scripts/session-e2e.sh min_internal_names_through_proxy 1 Applying loadouts: default Running task runtime-implement-test-0 in session task-runtime-implement-test-0-d974... ::error::no usable 'min' CLI on this host: the 'min' on PATH is not the repo CLI (it takes no --version; on a session box it is the in-sandbox helper, which has no 'session' subcommands)

Verify min task run agent-verify passed.

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

Review threads the coder judged:

  • 👍 valid — PRRT_kwDOPdfcxM6l-4G1: The gate now checks the pair its message promises, in every branch: MINIMAL_E2E_MIN must carry a sibling daemon beside it, the PATH min is kept only when the daemon it will spawn is findable on PATH (autospawn's own bare-name lookup), and a final gate fails up front naming the missing half. One ad (not posted on the thread: not an open thread on the pull request)
  • 👍 valid — PRRT_kwDOPdfcxM6l-4G7: The 127.0.0.1 assertion is now gated on the box being host-address (a new third argument, host|own), not on the lane not being a VM: host-address boxes keep the native /etc/hosts pin asserted, and the own-address box — a switch box on every host, native included — prints the switch-alias answer with (not posted on the thread: not an open thread on the pull request)

At this branch the proxy case still proves <name>.min.internal and host.min.internal route through the shipped hostname proxy on every lane — own-address sessions on the VM host included — with every refusal logged, and it no longer fails spuriously on the one host shape the review named (a native host driving a switch: the own-address box's NET-003 answer is the switch alias, printed, not asserted against 127.0.0.1), while the e2e's min-resolution gate now actually verifies the daemon pair its error message always promised — per lane, refusing a lone min up front instead of dying at the first activate's autospawn. The case itself needs the CI lanes to run; this session-box host cannot (no usable min, nested mount namespaces denied), so the changed logic is instead exercised here by two verbatim-extracted stub harnesses (19 scenarios, all green, including the pre-fix code failing the reviewer's exact case).

Notes from the agent: The one test: line exits 1 in any sandbox shaped like this one — a session box whose PATH min is the in-sandbox helper, with no repo build and unshare -m denied (EPERM), so no session sandbox and no in-box probe can run; that exit is the min-resolution gate doing its job, not a regression, and the runner's fresh sandbox will see the same one. Evidence for the changed logic on this box comes from two harnesses that EXTRACT the changed blocks verbatim out of the file (never retyped) and drive them with stub binaries; the harness scripts lived in a temp scratch dir and were deleted, so nothing outside the named layer was touched. On thread 4G1 the literal proposed shape (a sibling minimald beside min in both branches) could not be implemented as written: on macOS and every Linux VM lane the daemon min autospawns by bare name is minvmd (macOS has no native minimald at all), and the justfile deliberately puts the Linux minvmd in target//debug, a different dir on PATH than min — so the gate derives t…[truncated]

@minimal-foundry
minimal-foundry Bot marked this pull request as draft September 25, 2026 12:26
@norrietaylor
norrietaylor marked this pull request as ready for review September 25, 2026 12:27
@norrietaylor
Copy link
Copy Markdown
Member

Babysitter verification of round 3 (9fdf9fa, 0524fe5): both minimal-review findings fixed. The min-resolution gate now checks the daemon the run will autospawn (minimald native, minvmd on macOS or with --provider local-minvmd) in every branch and fails at startup naming both halves; the 127.0.0.1 pin is gated on the box's address mode, so an own-address box on a native host no longer trips it. bash -n and shellcheck clean.

The draft came from the coder's sandbox, where the test line found no built min (the in-sandbox helper on PATH takes no --version), not from the script: native-daemon-e2e, e2e and ci-macos all pass at 0524fe5. Taken out of draft for the bot review at this head; the new Low on the 403 log check is resolved as developer-only coverage, same as the NET-004 note. Merge follows minimal-review.

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

Babysitter approval: T3 verified against the plan block through three rounds, all lanes green at 0524fe5, minimal-review concluded on this head (one Low, resolved), CodeRabbit passed.

@norrietaylor
norrietaylor merged commit 6f57509 into main Sep 25, 2026
33 checks passed
@norrietaylor
norrietaylor deleted the agent/1627-names-through-the-shipped-proxy-end-to-end branch September 25, 2026 12:37
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.

T3 — Names through the shipped proxy, end to end

1 participant

0