Milestone: repo standards and macOS support #6

Open
clawbot wants to merge 2 commits from next into main
Collaborator

Milestone branch next for merge into main. Everything on it passed an independent adversarial review and a green make check before being squash-merged.

On the branch

  • Repo standards adoption (#1): script/ entrypoints with the Makefile as thin shims, containerised lint and tests, CI workflow, vendored .golangci.yml, REPO_POLICIES.md, TODO.md; all lint findings fixed. Behavior unchanged.
  • macOS support and single-interface UI (#2): Linux with both bridge interfaces is unchanged; otherwise the default-route interface alone is monitored and the UI draws one pane. On macOS a running VPN tunnel (utun) is the primary pane next to the physical default-route interface, or the physical interface alone. Anything outside that matrix exits with an error.

What to know before merging or deploying

  • make lint, make test and make check now need a Docker daemon.
  • The personal copy/run rsync deploy targets were removed from the Makefile; make run runs the binary locally.
  • Not verified on a real mac (no mac in the fleet): live netstat -rn parsing, IP_BOUND_IF socket binding, and whether Mullvad leak protection lets bound traffic leave the physical interface. A first run on your mac is the test.
  • On macOS --ifaceA/--ifaceB are ignored (interfaces come from detection); --labelA/--labelB still apply.
  • The CI status shown here is red for every push in this repo because the Docker daemon on the mac-studio runner fails before checkout with "all predefined address pools have been fully subnetted" (out of container-network subnets; pruning unused networks there, or widening default-address-pools in its daemon config, clears it). The repo gate is make check, run by the reviewer on each head; nothing on this branch is unverified.

Waiting on the owner

  • Nothing blocks the merge. The Starlink status unit (#3) lands here next as it passes review; this body is kept current.

Model: fable-5-1

Milestone branch `next` for merge into `main`. Everything on it passed an independent adversarial review and a green `make check` before being squash-merged. **On the branch** - Repo standards adoption (https://git.eeqj.de/sneak/rtnetmon/issues/1): `script/` entrypoints with the Makefile as thin shims, containerised lint and tests, CI workflow, vendored `.golangci.yml`, `REPO_POLICIES.md`, `TODO.md`; all lint findings fixed. Behavior unchanged. - macOS support and single-interface UI (https://git.eeqj.de/sneak/rtnetmon/issues/2): Linux with both bridge interfaces is unchanged; otherwise the default-route interface alone is monitored and the UI draws one pane. On macOS a running VPN tunnel (`utun`) is the primary pane next to the physical default-route interface, or the physical interface alone. Anything outside that matrix exits with an error. **What to know before merging or deploying** - `make lint`, `make test` and `make check` now need a Docker daemon. - The personal copy/run rsync deploy targets were removed from the Makefile; `make run` runs the binary locally. - Not verified on a real mac (no mac in the fleet): live `netstat -rn` parsing, `IP_BOUND_IF` socket binding, and whether Mullvad leak protection lets bound traffic leave the physical interface. A first run on your mac is the test. - On macOS `--ifaceA`/`--ifaceB` are ignored (interfaces come from detection); `--labelA`/`--labelB` still apply. - The CI status shown here is red for every push in this repo because the Docker daemon on the `mac-studio` runner fails before checkout with "all predefined address pools have been fully subnetted" (out of container-network subnets; pruning unused networks there, or widening `default-address-pools` in its daemon config, clears it). The repo gate is `make check`, run by the reviewer on each head; nothing on this branch is unverified. **Waiting on the owner** - Nothing blocks the merge. The Starlink status unit (https://git.eeqj.de/sneak/rtnetmon/issues/3) lands here next as it passes review; this body is kept current. Model: fable-5-1
clawbot self-assigned this 2026-09-21 09:22:47 +02:00
clawbot added 1 commit 2026-09-21 09:22:48 +02:00
Standard scaffold: script/ entrypoints with the Makefile as thin shims, a Dockerfile whose lint and test phases gate the build, a Gitea CI workflow running script/cibuild, REPO_POLICIES.md, TODO.md, .editorconfig, .dockerignore, LICENSE, wider .gitignore. .golangci.yml is byte-identical to the canonical copy in the prompts repo.

211 lint findings fixed in code: package globals became functions/fields and a cobra command constructor, magic numbers became named constants, ctx is threaded into the probes, monitor loops split. Tests moved to external _test packages with export_test.go. Behavior unchanged.

Readers will trip over: make lint/test/check now need a Docker daemon; the personal rsync copy/run targets are gone and make run runs locally.
Disclosure: four //nolint:gosec remain on the fixed-argv ping/curl calls and the operator-chosen log file, as the reference repo annotates the same class.
Disclosure: module path left as-is.

Model: opus-4-8 (implementation); fable-5-1 (merge)
clawbot added the needs-checks label 2026-09-21 09:22:48 +02:00
clawbot added 1 commit 2026-09-21 15:02:01 +02:00
Linux runs exactly as before when both bridge interfaces exist. When they do
not, the lone default-route interface is monitored, and a single interface
draws a single UI pane instead of an empty second one.

macOS is newly supported: a running VPN tunnel (utun) is monitored as the
primary pane alongside the physical default-route interface, or the physical
interface alone when no VPN is up.

Detection lives in internal/netdetect: interface/route data types, pure
selection logic keyed on OS name, and route parsers, all unit-tested on Linux
for both platforms. Only the real route query and the per-platform TCP dial
binding are build-tagged. NewMonitor now takes a list of interfaces.

Not verified on a real mac: live netstat parsing, IP_BOUND_IF dialing, Mullvad leak protection.

Model: opus-4-8 (implementation); fable-5-1 (landing commit)
clawbot removed their assignment 2026-09-21 15:02:29 +02:00
sneak was assigned by clawbot 2026-09-21 15:02:29 +02:00
clawbot added merge-ready and removed needs-checks labels 2026-09-21 15:02:30 +02:00
Some required checks failed
check / check (push) Failing after 0s
You are not authorized to merge this pull request.
This pull request can be merged automatically.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin next:next
git checkout next
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: sneak/rtnetmon#6