Skip to content

test(nix): no-write-encoders check, goip_write docs (FP-8c) - #299

Merged
randomizedcoder merged 6 commits into
sec/fp8b-goip-write-tagfrom
sec/fp8c-no-write-checks
Nov 14, 2026
Merged

randomizedcoder merged 6 commits into
sec/fp8b-goip-write-tagfrom
sec/fp8c-no-write-checks

Conversation

@randomizedcoder

@randomizedcoder randomizedcoder commented Nov 12, 2026 •

Copy link
Copy Markdown
Owner

Stacked on #298 (FP-8b), which is on #297 (FP-8a).

  • checks.no-write-encoders proves the daemons carry no netlink write path. Each proof has a positive control:
    • go list -deps of xtcp2 and go-link-monitor, using each binary's own build tags, names no write file of internal/goip, pkg/xtcpnl or pkg/nlparity. With goip_write added, it does.
    • go tool nm on xtcp2-debug and go-link-monitor finds no Build*WriteRequest, BuildSetNsidRequest, Encode*InfoData or goip write arm. Tagged goip does have BuildWriteRequest.
    • no_exec: no package in either daemon's deps imports os/exec. One exception is listed: minio-go's credentials provider in the s3parquet destination. xtcp2 only constructs NewStaticV4, so that provider is never reached.
  • The negative run was manual: I removed the tag from BuildWriteRequest and referenced it from goip.Show. Both daemons failed both the files proof and the symbols proof.
  • Docs:
    • docs/build-flavors.md gets a "goip write verbs" section and a build-tag table row.
    • docs/netlink/README.md notes the write path builds only into goip and goip-parity.
    • The cmd/goip package comment no longer says goip is read-only.
  • CHANGELOG Breaking: /ip and the daemons carry no netlink write verbs.
  • /ip returning 400 for /i/l/s (and /ip/link/set) untagged is already covered by the goiphttp tests.
  • Passed: no-write-encoders, nix-fmt, deadnix, statix.
  • nix flake check on this tip: six reds, all also red on main (built at 9949ee6), none from FP-8: capability-check-no-caps/-names-sys-admin (since FP-3 a missing listener token exits 64 before the capability check), nlcap-batch/nlcap-ws/nlcap-ws-check (flake8 E501), vm-check-runner (t-env row). Recorded as TODOs in the docs: security-hardening program — ConfigService.Set advisory and phased hardening plan #291 plan doc.

🤖 Generated with Claude Code

randomizedcoder and others added 2 commits November 12, 2026 12:27
checks.no-write-encoders proves goip_write stays out of xtcp2 and
go-link-monitor, each proof with a positive control:

- files: go list -deps with each binary's own tags names no write file
  of internal/goip, pkg/xtcpnl or pkg/nlparity; with goip_write it does.
- symbols: go tool nm on xtcp2-debug and go-link-monitor finds no write
  builder, Encode*InfoData or goip write arm; goip has BuildWriteRequest.
- no_exec: no package in either daemon's deps imports os/exec, bar
  minio-go's credentials provider (s3parquet), which is listed.

A manual negative run (BuildWriteRequest untagged and referenced from
goip.Show) fails both the files and the symbols proofs for both daemons.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
- docs/build-flavors.md: a "goip write verbs" section (who carries the
  tag, what /ip does without it, the check, how to test the write path)
  and a row in the build-tag table.
- docs/netlink/README.md: the parity harness notes the write path is
  goip/goip-parity only.
- cmd/goip: the package comment said goip was read-only; it now says
  writes are dry runs behind goip_write.
- CHANGELOG Breaking: /ip and the daemons carry no netlink write verbs.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
randomizedcoder and others added 4 commits November 13, 2026 21:18
A `treatment` build embeds internal/goip/actuate, which encodes routes and
rules. It may compile xtcpnl_{route,rule}_write.go and xtcpnl_write_request.go
and link BuildWriteRequest/BuildRouteWriteRequest/BuildRuleWriteRequest;
everything else of the write set still fails. The exemption list must all be
present under the tag, or it is stale.

- Adds xtcp2-min (no treatment tag, stripped) to the files and no_exec proofs.
- go-link-monitor (untagged) stays fully strict.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@randomizedcoder
randomizedcoder merged commit 3f43e56 into sec/fp8b-goip-write-tag Nov 14, 2026
randomizedcoder added a commit that referenced this pull request Nov 14, 2026
sec(FP-8): land goip_write tag and no-write-encoders check on main (#298, #299)
@randomizedcoder
randomizedcoder deleted the sec/fp8c-no-write-checks branch November 14, 2026 07:34
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.

1 participant