Skip to content

feat(runtime): refuse an egress policy the host tier cannot enforce - #1143

Merged
trunk-io[bot] merged 1 commit into
compass-service-owner/rig-3512-egress-configuredfrom
compass-service-owner/rig-3512-egress-unenforced
Sep 13, 2026
Merged

feat(runtime): refuse an egress policy the host tier cannot enforce#1143
trunk-io[bot] merged 1 commit into
compass-service-owner/rig-3512-egress-configuredfrom
compass-service-owner/rig-3512-egress-unenforced

Conversation

@rigel-mintaka

@rigel-mintaka rigel-mintaka commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

This PR is part of a stack containing 10 PRs:

  1. main
  2. feat(runtime): add the host-process WorkloadRuntime backend (RIG-3512) #1120
  3. feat(runner): derive the agent uid from the Runner's euid on the host backend (RIG-3512) #1125
  4. feat(runner): deliver the agent socket and config by path on the host backend (RIG-3512) #1135
  5. feat(runtime): distinguish a configured egress policy from an unset one #1142
  6. "feat(runtime): refuse an egress policy the host tier cannot enforce" (this PR)
  7. feat(runner): carry no egress policy on a backend that cannot enforce one #1145
  8. feat(runner): report the runtime tier and egress posture per session #1148
  9. feat(cli): show the runtime tier and egress posture per session #1153
  10. feat(ui): mark each agent's runtime tier and egress posture #1154
  11. feat(runner): declare the runtime tier and egress posture at enrollment #1156

A host child shares the host's network namespace, so the nftables arm the
container tiers run has no boundary to attach to. The host backend now reports
that through an egressUnenforcer marker, and provision refuses any configured
policy instead of dropping it silently — a caller must never believe egress was
constrained when nothing constrained it.

The marker is deliberately separate from inGuestEgressArmer: that one means
someone armed the firewall, this one that nobody did and nobody can.
AgentRuntime.EgressPosture reports which, so a session surface can show an
uncontained launch as uncontained.

The refusal keys on the policy's presence, not a non-empty allowlist: an empty
allowlist is pure default-deny, the strictest posture, so keying on length
would reject a looser policy and silently discard the tightest one.

@linear-code

linear-code Bot commented Sep 12, 2026

Copy link
Copy Markdown

RIG-3512

@rigel-mintaka
rigel-mintaka added this pull request to stack #1126 September 12, 2026 04:10
@github-actions

github-actions Bot commented Sep 12, 2026

Copy link
Copy Markdown

Compass engineering docs preview: https://compass-service-owner-rig-35-tzgh.compass-eng-docs.pages.dev

Deployed from compass-service-owner/rig-3512-egress-unenforced at df90e31.

A host child shares the host's network namespace, so the nftables arm the
container tiers run has no boundary to attach to. The host backend now reports
that through an egressUnenforcer marker, and provision refuses any configured
policy instead of dropping it silently — a caller must never believe egress was
constrained when nothing constrained it.

The marker is deliberately separate from inGuestEgressArmer: that one means
someone armed the firewall, this one that nobody did and nobody can.
AgentRuntime.EgressPosture reports which, so a session surface can show an
uncontained launch as uncontained.

The refusal keys on the policy's presence, not a non-empty allowlist: an empty
allowlist is pure default-deny, the strictest posture, so keying on length
would reject a looser policy and silently discard the tightest one.
@rigel-mintaka
rigel-mintaka force-pushed the compass-service-owner/rig-3512-egress-unenforced branch from 483066d to df90e31 Compare September 12, 2026 19:37
@trunk-io
trunk-io Bot merged commit ef908d5 into main Sep 13, 2026
16 of 26 checks passed
@trunk-io
trunk-io Bot deleted the compass-service-owner/rig-3512-egress-unenforced branch September 13, 2026 00:29
@trunk-io

trunk-io Bot commented Sep 13, 2026

Copy link
Copy Markdown

This pull request was merged into main as part of stacked PR 1156.

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.

2 participants