emergent-security/envelopes/default-envelope.yaml

217 lines
6.5 KiB
YAML
Raw Permalink Normal View History

# Default envelope for an L0 coding agent on an explicit human task
# in a HOT build-mode estate (canon A6).
#
# Semantics
# - mode: autonomous | autonomous_with_obligations | escalate | deny | root_authorization_required
# - variants: evaluated top to bottom against request attributes; first match replaces
# the row's mode (and obligations / evidence_required / rules when given).
# - deny and root_authorization_required rows are constitutional: they apply in EVERY
# scope (any temperature, any tenant) and no registry delegation overrides them.
# - All other rows apply only where `applies_when` matches. Elsewhere only explicit
# delegations (registry, platform tenant envelope) grant anything.
# - escalate means "not delegated here": the decision goes to the delegator with
# blocking_condition no_delegation, unless a registry delegation covers the class.
apiVersion: emergent-security/v0.8
kind: DefaultEnvelope
id: envelope://default/build-hot/L0
canon: "0.8"
delegator: task_assigner # the human who assigned the task, within their own authority
applies_when:
level: L0
temperature: hot
phase: build
tenant: none
risk_envelope:
blast_radius: repository
tenant_reach: none
data_sensitivity: internal
irreversible: false
external_exposure: none
classes:
# --- code and tests -------------------------------------------------------
- id: code.edit
title: Edit code inside task scope
mode: autonomous
rules: [C4]
- id: test.add
title: Add or strengthen tests
mode: autonomous
rules: [C8]
- id: test.weaken
title: Delete, skip or weaken tests or assertions
mode: escalate
rules: [C3, C8]
variants:
- when: { stated_task: true }
mode: autonomous
# --- dependencies and external code ----------------------------------------
- id: dependency.add
title: Add or update a dependency
mode: escalate
rules: [C9]
variants:
- when: { source: standard_registry, pinned: true }
mode: autonomous_with_obligations
rules: [C6]
evidence_required: [lockfile_updated]
obligations: [record]
- id: code.fetch_execute
title: Run code fetched at runtime (curl | sh, unpinned remote scripts, unknown binaries)
mode: escalate
rules: [C9]
- id: data.egress
title: Send repository content, data or credentials to an external service not named in the task
mode: escalate
rules: [C5]
# --- git -----------------------------------------------------------------
- id: git.commit_feature
title: Commit to a feature branch
mode: autonomous
rules: []
- id: git.push_feature
title: Push a feature branch
mode: autonomous
rules: []
- id: git.merge_protected
title: Merge into a protected or default branch
mode: escalate
rules: [C4]
- id: git.history_rewrite
title: Force-push or rewrite shared history
mode: escalate
rules: [C11]
variants:
- when: { branch_protected: true }
mode: deny
# --- CI, checks, policy ----------------------------------------------------
- id: ci.add_check
title: Add CI checks, hooks, linters
mode: autonomous
rules: [C8]
- id: ci.weaken
title: Modify CI so that checks are weaker, skipped or conditional
mode: escalate
rules: [C3, C9]
- id: checks.bypass
title: Bypass hooks or checks (--no-verify, skip flags, || true on checks)
mode: deny
rules: [C3, C9]
- id: policy.edit
title: Edit own permission config, agent instructions governing itself, CODEOWNERS, branch protection, delegation registry, policy or discovery files
mode: deny # direction: widen, or unknown
rules: [C3]
variants:
- when: { direction: narrow }
mode: autonomous
- when: { direction: propose }
mode: autonomous_with_obligations
obligations: [human_review, no_self_merge]
# --- secrets and credentials ------------------------------------------------
- id: secrets.read
title: Read secrets through a broker for the task
mode: escalate
rules: [C6]
variants:
- when: { via_broker: true }
mode: autonomous_with_obligations
obligations: [shortest_ttl, record]
- id: secrets.write
title: Write secrets to code, config, logs, prompts, memory or commits
mode: deny
rules: [C2, C6]
- id: credential.reuse_broader
title: Reuse a broader credential that happens to be available
mode: deny
rules: [C2, C7]
# --- environments, agents, deployment ---------------------------------------
- id: env.disposable
title: Create or destroy disposable environments, sandboxes, runners
mode: escalate
rules: []
variants:
- when: { owned_by_self: true }
mode: autonomous
- id: agent.delegate
title: Hand work to a subagent or another agent
mode: deny # wider than own envelope, or unknown
rules: [C3, C6]
variants:
- when: { within_own_envelope: true, same_task_scope: true }
mode: autonomous
- id: deploy.internal
title: Deploy to an internal, reversible, non-tenant environment
mode: autonomous_with_obligations
rules: []
evidence_required: [provenance]
obligations: [record]
- id: deploy.relied_upon
title: Deploy to anything a tenant or external party relies on
mode: escalate
rules: [C8]
- id: iam.change
title: Change IAM, identities, trust federation, network exposure
mode: escalate
rules: [C1, C3]
# --- data and tenants -------------------------------------------------------
- id: data.sensitive
title: Touch personal, regulated or tenant data
mode: escalate
rules: [C5]
- id: tenant.cross
title: Cross a tenant boundary
mode: deny
rules: [C5]
variants:
- when: { cross_tenant_capability: true }
mode: escalate # only an explicit capability, decided above L0
- id: data.delete_irreversible
title: Irreversible deletion of non-disposable data
mode: escalate
rules: []
- id: tenant.governance_change
title: Change a tenant's governance mode or tenant governance envelope (agents)
mode: deny
rules: [C3]
- id: tenant.platform_envelope_change
title: Change a platform tenant envelope (any tenant principal, any mode)
mode: deny
rules: [C14]
# --- audit and root ---------------------------------------------------------
- id: audit.disable
title: Disable or truncate audit or logging
mode: deny
rules: [C11]
- id: platform.root
title: Anything requiring platform-root
mode: root_authorization_required
rules: [C12]