Skip to content

docs(adr): amend 0014 (eBPF BTF preflight) + 0040 (ContainNode apply-side scope confinement) - #331

Merged
thejefflarson merged 1 commit into
mainfrom
backlog-drain-ideas
Aug 8, 2026
Merged

docs(adr): amend 0014 (eBPF BTF preflight) + 0040 (ContainNode apply-side scope confinement)#331
thejefflarson merged 1 commit into
mainfrom
backlog-drain-ideas

Conversation

@thejefflarson

Copy link
Copy Markdown
Owner

Two /idea design passes on the pre-existing backlog, written down as ADR amendments + briefs.

ADR-0014 amendment — eBPF offset self-verification

Real CO-RE is blocked upstream (rustc emits no BTF field relocations; RFC 3966 pending); build-time codegen bakes the builder's kernel offsets (rejected). Durable guard: a load-time BTF preflight — verify each baked offset + the LOADING_MODULE enum against the node's live BTF before attach; on mismatch attach only struct-free probes, log expected-vs-actual, degrade (never crash-loop). Single source of truth in agent/common. Also corrects the false "CO-RE-relocated at load" claims in the Dockerfile/agent.yml/docs.

ADR-0040 addendum — ContainNode apply-side scope confinement

No in-product approve→apply path (ADR-0016/0031 — the human act stays out-of-band), so "the future apply call-site" is retired as a design location. The enforceScope confinement lives at the actuation boundary: shared full-set helper stays unfiltered (revert must lift every deny), apply accepts only a ScopedDenies newtype, contain_node_in_scope derives from the same scope match. Unblocks the deferred co-resident-deny scope-filter.

No code — docs only. Next: /work the two implementations + the two pre-existing backlog tickets.

🤖 Generated with Claude Code

https://claude.ai/code/session_01VtjoJttCvBY4dzCoE4f9vP

…ode apply-side scope confinement)

Two /idea design passes on the pre-existing backlog:

- ADR-0014 amendment: the agent's eBPF bindings bake hand-verified offsets (real
  CO-RE is blocked upstream — rustc emits no BTF field relocations; build-time codegen
  bakes the builder kernel, rejected). The durable guard is a load-time BTF preflight:
  the loader re-verifies every baked offset + the LOADING_MODULE enum against the node's
  live BTF before attach, attaches only struct-free probes on mismatch, logs
  expected-vs-actual, degrades (never crash-loops). Single source of truth in agent/common.
  Corrects the false "CO-RE-relocated at load" comments. docs/ideas/ebpf-offset-self-verification.md.

- ADR-0040 addendum: protector grows no in-product approve->apply path for node
  containment (ADR-0016 view-never-gates, ADR-0031 read-only MCP) — the human act stays
  out-of-band. The enforceScope confinement of the co-resident deny sweep lives at the
  actuation boundary: the shared full-set helper stays unfiltered (revert must lift every
  deny), while apply accepts only a ScopedDenies newtype and contain_node_in_scope derives
  from the same scope match. Unblocks the deferred scope-filter.
  docs/ideas/containnode-scope-confinement.md.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VtjoJttCvBY4dzCoE4f9vP
@thejefflarson
thejefflarson enabled auto-merge (squash) August 8, 2026 19:18
@thejefflarson
thejefflarson merged commit 762c0cd into main Aug 8, 2026
5 checks passed
@thejefflarson
thejefflarson deleted the backlog-drain-ideas branch August 8, 2026 19:26
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