docs(adr): neutral network egress tiers (strict/balanced/open) for all backends - #299
Conversation
Cross-reference: Bret's
|
Note, NOT working yet... Still fixing bugs. |
|
|
|
71e7011 to
045c70a
Compare
| - **msb** — `--net-rule allow@<host>` for each host in the merged allowlist | ||
| (deny-by-default is already msb's behavior when net-rules are present). |
There was a problem hiding this comment.
Probably worth leaving a pointer to msb's scoped configuration feature, since it looks like it will ship in the next version.
| something we vouch is safe for a prompt-injectable agent to reach. Even curated, | ||
| each entry (a registry, a model API, a source host) is a potential exfiltration | ||
| channel — `balanced` widens blast radius vs `strict`. Mitigated by: CODEOWNERS + | ||
| security-skill review on additions, the CI reputation check, keeping the list |
There was a problem hiding this comment.
I think the reputation check was removed, wasn't it?
…hybrid/v1 (#300) (#313) First implementation of the neutral-network-tiers epic (#303; design in ADR 0002 / PR #299). Adds a `tier` sibling to the existing `caps.network` block in schemas/kit-hybrid-v1.schema.json (draft-2020-12 enum): strict | balanced | open, schema default `balanced`. - ALL tiers are deny-by-default; the tier only sizes the baseline allowlist. strict = kit `allow` only; balanced = curated shared baseline ∪ kit `allow` (the default when unspecified, per the 2026-08-07 maintainer decision — backend- consistent with the sbx baseline + quickstart msb-balanced-egress default); open = unrestricted (testing only, never GFE). Effective allowlist = tier baseline ∪ kit allow ∪ per-sandbox additions. - Coexists with the existing `caps.network.allow` (unchanged). - validate-kits.py: schema enum already rejects bad values; added a kit-scoped field-level message for a clearer error. Default is DOCUMENTED, not mutated — consistent with the validator's existing non-mutating, validation-only posture. - INDEX/CATALOG generators don't read the network block, so nothing to update there. Tests: schema (absent-valid, all 3 tiers, coexists-with-allow, bad-value + wrong-type + typo-key rejected) + validator (valid/absent pass, bad-tier message). 322 tests pass; make validate green; ruff clean. Unblocks #301 (balanced baseline data file) + quickstart #294 (adapter mapping). Closes #300. AI-assisted (OpenCode); consensus-reviewed (3/3 on the tier design). Requires human review.
045c70a to
f87208e
Compare
…l backends Propose ADR 0002 (isolation): a backend-agnostic `network.tier` vocabulary (strict|balanced|open) extending the neutral hybrid/v1 kit spec, so sbx, msb, and future backends share ONE consistent egress surface. - Today: `caps.network.allow` (per-kit host allowlist) is already consumed by both backends, but there is no neutral policy *tier* — sbx has manual CLI tiers (deny-all/balanced/allow-all), msb is default-deny = kit hosts only. No shared "useful-but-safe" baseline. - Decision: add `network.tier`; all tiers preserve deny-by-default. `balanced` = deny-by-default + a curated, SHA-pinned, IN-REPO baseline allowlist (registries, AI APIs, common source hosts) unioned with per-kit allows; maintainer-owned, community-extended via PR gated by CODEOWNERS + security-skill review. - NO runtime threat-feed fetch (offline/deterministic); a reputation feed is a CI-time check on PROPOSED allowlist additions only. - Default: fail-safe `strict` when unspecified; shipped config explicitly sets `balanced` (users get the baseline, but as an explicit/auditable choice, and omission fails closed). Reconciles a 3/3 consensus that flagged the prompt-injection exfiltration risk of an implicit balanced default. Status: proposed (human review required). Implementation tracked in a follow-up epic. SC-7/SC-7(5)/AC-4/CM-7. AI-assisted (OpenCode); consensus-reviewed. Requires human review. Co-authored-by: OpenCode [claude_4_8_opus] <william.zujkowski@gsa.gov>
Reconcile ADR 0002's default posture with quickstart ADR-0018 (feat/msb-balanced-egress), which already ships msb balanced-egress default-on for sbx parity. A strict-by-omission neutral default would make the two backends inconsistent and remove the parity UX ADR-0018 delivers, so the maintainers set the default to balanced (deny-by-default + curated allowlist, not allow-all). strict and open stay explicitly selectable; GFE / high-assurance SHOULD pin strict. The 3/3 consensus preferred fail-safe strict over the prompt-injection exfil risk; that residual is now mitigated by the curated + CODEOWNERS-gated allowlist rather than by defaulting closed. Cross-reference ADR-0018 as the msb worked example this neutral tier generalizes. Co-authored-by: OpenCode Agent <william.zujkowski@gsa.gov>
f87208e to
11176b1
Compare
Summary
Proposes ADR 0002 (isolation): a backend-agnostic
network.tiervocabulary (strict|balanced|open) extending the neutralhybrid/v1kit spec, so sbx, msb, and future backends share one consistent egress surface. Design approved 3/3 by consensus + tradeoff panel.Why
caps.network.allow(per-kit host allowlist) is already consumed by both backends, but there's no neutral policy tier: sbx has manual CLI tiers, msb is default-deny = kit hosts only. No shared "useful-but-safe" baseline; thebalancedconvenience is sbx-only and manual.Decision (proposed)
network.tier=strict(deny-by-default, kit allows only) |balanced(deny-by-default + a curated baseline ∪ kit allows) |open(testing only). All tiers keep deny-by-default.balancedbaseline = a curated, SHA-pinned, in-repo data file; maintainer-owned, community-extended via PR gated by CODEOWNERS + security-skill review.balanced(maintainer decision, 2026-08-07) — backend-consistent with the sbx baseline the project recommends AND quickstart ADR-0018 (feat/msb-balanced-egress), which already ships msbbalanced-on by default.strictandopenstay explicitly selectable; GFE / high-assurance SHOULD pinstrict. The 3/3 consensus preferred a fail-safestrictdefault over the prompt-injection exfil risk; the maintainers reconsidered for backend consistency and mitigate the residual via the curated + CODEOWNERS-gated allowlist rather than defaulting closed.Governance note
What belongs on the federally-shipped
balancedallowlist is a human/CODEOWNERS + security-review decision — agents may propose entries (with the CI reputation signal) but never self-approve.Status
Proposed — requires human review. No code yet; implementation tracked in a follow-up epic (schema vocab + curated baseline data + adapter mapping for both backends + CI reputation check + docs).
AI-assisted (OpenCode); consensus-reviewed (3/3). Requires human review.