Intelligent Systems Charter
On this page
  1. Status of this proposal
  2. Principle-to-policy mapping
  3. Charter baseline policies
  4. Decision API contract
  5. Effects
  6. Attestation
  7. Outbound identity
  8. Oversight
  9. Collective action
  10. Evidence transparency
  11. Containment testing
  12. Policy schema
  13. Reference implementation
  14. Limits of this version

Proposal for technical implementation of the Intelligent Systems Charter

Version 0.2 (draft) · October 5 2026 · Maintainer: 21st Century Pluribus
Previous version: 0.1, September 19 2026 · Proposal changelog

§ Status of this proposal

This is one proposed way to enforce the Intelligent Systems Charter in running software. It is a companion to the charter, not part of it. The charter itself, Intelligent Systems Charter, holds the Declaration, Universal Principles and Constitution, which change rarely. This proposal is expected to change often, and other designs may satisfy the charter equally well.

The charter binds; this proposal suggests. Where the two disagree, the charter governs. Terms defined in the constitution (intelligent system, adopter, owner, overseer, implementer, grant, principal) carry the same meaning here. In this document an intelligent system is called a principal, the standard security term for an entity that acts and is authorized.

The proposal is technology-agnostic. It names no products, frameworks or software packages. Every component is described by the role it plays, so that any suitable technology can fill it, and the examples use invented tool and resource names. Where it relies on a published open standard, it cites the standard by number.

What an implementation following this proposal can guarantee is deliberately narrow. Every mediated action was authorized under a named policy version, classified by its effect on the world, recorded in a log the principal cannot alter and outsiders can check for tampering, and bounded by the grants the principal and its lineage held at that moment. The implementation can prove to an outside verifier that the genuine baseline and a running monitor were in place, and that its containment was recently tested. It cannot guarantee that a system is aligned, honest or safe in any general sense, and actions that bypass every enforcement point are outside the guarantee. Deployments therefore need deny-by-default network and credential paths.

§ What changed in version 0.2

Version 0.2 answers the incidents of 2026 with seven changes, argued in the essays From Labels to Effects, Part 1 and Part 2. The full list, with reasons, is in the changelog.

# Change Where
1 Judge actions by their effects, not their labels Effects
2 Prove, not report, that the baseline and monitor are running Attestation
3 The enforcement point holds outbound signing keys, so one identity reaches the open web Outbound identity
4 Rank monitor signals by how hard they are to fake; require diverse monitors and tripwires Oversight
5 Govern lineages and swarms as wholes Collective action
6 Make the evidence log verifiable by outsiders; standardize incident records Evidence transparency
7 Test containment continuously with canaries Containment testing

§ Principle-to-policy mapping

Seven of the eleven principles compile to deterministic rules; the other four need the oversight monitor, because they concern meaning and intent. Any implementation should be explicit with adopters about which is which.

Principle Enforced by Example control
1. Human primacy Rule Deny any action targeting enforcement, identity, evidence, attestation or monitor systems
2. No harm to persons Monitor plus rule Data-class rules (PHI, PII); effect classes; monitor reviews high-impact actions
3. Lawfulness Rule Law packs: HIPAA, SOX, EU AI Act obligations as versioned rule sets
4. Honesty Monitor Claim-versus-record reconciliation against the evidence log; effect mismatches
5. No concealment Rule Tripwires on log access, unsanctioned channels, honeytokens; stigmergy detection
6. Scope fidelity Rule plus monitor Allow-list of tools, targets, data and effect classes per task; scope-drift scoring
7. Least power Rule Task-scoped short-lived grants; lineage budgets; deny privilege changes and self-replication
8. Honest failure Monitor Detect results with no supporting actions in the record
9. Reversibility first Rule Effect class sets the risk tier; unknown and irreversible effects escalate to human approval
10. Accountability Rule Reject any request without verified system identity and named owner; sign outbound requests with lineage
11. Inherited allegiance Rule Deny system creation without a grant and human approval; register the child’s identity and lineage before it may act

The compiler’s job is the middle column made real: each principle carries a set of rule templates and monitor checks, and an adopter binds them to its own tools, data classes and risk tiers.

§ Charter baseline policies

Every policy engine ships pre-loaded with a baseline: a signed bundle of policies derived directly from the Intelligent Systems Charter. The baseline occupies the universal layer, is evaluated first on every decision, and cannot be edited, disabled or overridden by an adopter. An engine that cannot load and verify it answers deny to everything.

flowchart TD
  C["Intelligent Systems Charter"] -->|derived from Parts II and III| B["Charter baseline<br/>signed, immutable"]
  AD(["Adopter<br/>policy owners"]) --> UI["Policy authoring interface<br/>policy as code or visual"]
  UI --> AP["Adopter policies<br/>adopter-specific, extend only"]
  L["Law packs"] --> K["Policy compiler<br/>extend-only check"]
  AP --> K
  B -.->|reference for the check| K
  K -->|accepted| E["Policy engine"]
  K -->|rejected: negates or supersedes| UI
  B -->|pre-loaded, verified at start| E
  E --> D["Decisions"]

Two separate policy sources feed the engine. The charter baseline arrives with the engine and no one downstream can change it. Adopter policies are written by the adopter’s own policy owners through an authoring interface, and reach the engine only after the compiler confirms they extend the baseline without negating or superseding it.

§ What the baseline contains

Principle Baseline policy Effect
1. Human primacy baseline-human-primacy Deny any action targeting enforcement, identity, evidence, attestation or monitor systems; deny any action while paused
5. No concealment baseline-no-concealment Deny access to evidence stores; deny messages over unsanctioned channels
6. Scope fidelity baseline-scope Deny any tool, target or data class outside the current grant
7. Least power baseline-least-power Deny privilege changes, self-replication and credential requests beyond the grant
9. Reversibility first baseline-reversibility Escalate every action in the irreversible tier to human approval
10. Accountability baseline-accountability Deny any request lacking a verified identity, a named owner or an intact lineage
11. Inherited allegiance baseline-lineage Escalate every principal_create; deny action by any unregistered descendant
2, 4, 6, 8 (meaning and intent) Baseline MonitorCheck set Claim-versus-record reconciliation, unsupported-result detection, scope-drift scoring, high-impact review

Principle 3, lawfulness, has no universal rule of its own, because law differs by jurisdiction. The baseline requires that at least one law pack be bound, and law packs sit in the layer directly beneath it.

§ Proposed additions to the baseline

Version 0.2 proposes four further baseline policies. Each derives from a principle or article already in the charter and changes no charter text. Because a change to the baseline is a charter amendment, they take effect only in the baseline of the next charter version, published under Article IX. Until then, an implementation may ship them in the law or organization layer, where they can tighten but never loosen the current baseline.

Derives from Proposed baseline policy Effect
Principle 9, Reversibility first baseline-effects Place irreversible, physical and unknown effects in the irreversible tier; record every effect mismatch as a violation and restrict the principal
Principle 5, No concealment baseline-tripwires Require tripwires in every environment; any tripwire hit pauses the principal
Principle 7, Least power; Article VI baseline-lineage-budget Require a LineageBudget for every lineage; escalate the lineage when it is exceeded; extend a high-confidence pause to the whole lineage by default
Principle 10, Accountability baseline-outbound-identity Deny any principal access to outbound signing keys; sign outbound requests only after an allow

§ Example baseline policy

apiVersion: charter/v1
kind: Policy
metadata:
  name: baseline-no-concealment
  layer: universal
  charter_version: "0.1"
  derives_from: "Part II, Principle 5: No concealment"
  immutable: true
spec:
  on_unavailable: deny
  applies_to:
    principals: all
    enforcement_points: all
  rules:
    - id: deny-evidence-access
      effect: deny
      action: { type: "*" }
      when:
        target: { in: binding:protected-systems }
    - id: deny-unsanctioned-channels
      effect: deny
      action: { type: peer_message }
      when:
        channel: { not_in: binding:sanctioned-channels }

§ Rules for the baseline

§ Adopter policies

Adopter-specific policies live in their own store, separate from the baseline, and adopters are the only ones who author them. They may extend the baseline. They may never negate or supersede it.

An adopter policy may An adopter policy may not
Add a deny Permit anything the baseline denies
Add an escalation to human approval Remove or downgrade a baseline escalation
Permit an action the baseline does not refuse, within a grant Exempt any principal, tool or environment from the baseline
Narrow a scope, shorten a grant, add obligations Edit, disable, reorder or shadow a baseline rule
Raise an action’s risk tier or effect class Lower a risk tier or effect class the baseline assigns
Lower a lineage budget Raise a lineage budget without a human grant
Supply bindings, data classes, effect contracts, tripwires and extra monitor checks Hollow out a baseline rule by binding its set to nothing

The last row closes a loophole. Each baseline set has minimum members that the implementation supplies and the adopter cannot remove: the enforcement, identity, evidence, attestation, signing and monitor systems are always inside binding:protected-systems.

Extend-only is enforced twice. At authoring time, the compiler checks every adopter policy against the baseline and rejects any that negates or supersedes it, naming the baseline rule in conflict. At run time, the baseline is evaluated first and any deny outranks any allow, so even a policy that slipped past the compiler could not loosen anything. Every accepted policy change is written to the evidence log with its author and version, and can be dry-run against recorded decisions before it takes effect.

§ Decision API contract

Every enforcement point asks one question through one endpoint: may this principal take this action now? POST /v1/decisions returns allow, deny or escalate, and the evidence record is written before the response is sent. Gateways, brokers and framework adapters are all thin clients of this call. Adapters map whatever a framework calls its actor (agent, assistant, worker, node) onto a principal.

§ Request

{
  "request_id": "01J8ZK3V9Q4T",
  "timestamp": "2026-10-05T17:04:11Z",
  "enforcement_point": { "type": "tool_gateway", "id": "gw-prod-1" },
  "principal": {
    "id": "principal:infra-remediator:7f3a",
    "attestation": "<signed identity token>",
    "owner": "user:jlee@example.com",
    "runtime": "<adopter's agent runtime>",
    "delegated_by": "principal:planner:22c1",
    "lineage": ["principal:planner:22c1", "user:jlee@example.com"]
  },
  "task": {
    "id": "task:INC-48213",
    "declared_scope": "Restart unhealthy services in the payments dev environment",
    "grant_id": "grant:9c1e"
  },
  "action": {
    "type": "tool_call",
    "tool": "infra.restart_service",
    "target": "env:dev/service:payments-api",
    "arguments_digest": "sha256:4be1...",
    "arguments": { "grace_period_seconds": 30 },
    "data_classes": [],
    "reversible": true
  },
  "context": { "trace_id": "trace:a41f...", "step": 6, "prior_denials": 0 }
}

action.type is one of tool_call, model_request, network_egress, credential_request, peer_message or data_access, so all four chokepoints share one schema.

Lineage adds a seventh type, principal_create, covering any spawning, training, fine-tuning or modification of another system. It always escalates to a human. On approval, the child receives its own principal identity with a lineage chain back to a human owner, and every later request from the child carries that chain.

The type is a label. It says what an action is called, not what it does. The principal does not supply the action’s effect class: the decision service derives it from the effect contracts for the tool and the target, as described under Effects, and records it with the decision.

§ Response

{
  "decision_id": "dec:01J8ZK3VA2",
  "decision": "allow",
  "reasons": [
    { "policy": "org/dev-remediation", "version": "14", "rule": "allow-service-restart-dev" }
  ],
  "principles": ["scope_fidelity", "reversibility_first"],
  "effect_class": "write-internal",
  "obligations": [
    { "type": "redact_output", "fields": ["env.SECRET_*"] },
    { "type": "verify_effect", "contract": "infra-restart-dev" },
    { "type": "report_result", "to": "/v1/decisions/dec:01J8ZK3VA2/result" }
  ],
  "expires_at": "2026-10-05T17:04:41Z",
  "evidence": { "seq": 884213, "hash": "sha256:91ac...", "prev_hash": "sha256:0d7e..." }
}

§ Supporting endpoints

Endpoint Purpose
POST /v1/decisions/{id}/result Report what actually happened, including observed effects; feeds claim-versus-record and effect checks
POST /v1/grants Issue a task-scoped, time-limited grant to a principal
DELETE /v1/grants/{id} Revoke; the pause mechanism
POST /v1/principals/{id}/pause Revoke all grants and deny all decisions for a principal, its descendants, its lineage or a group
GET /v1/approvals/{id} Approval status for an escalated decision
GET /v1/evidence?from_seq= Stream the hash-chained log to monitors and auditors
GET /v1/evidence/tree-heads The signed tree heads published to the public transparency log
GET /v1/evidence/proofs/inclusion?seq= Proof that a given record is in the log
GET /v1/evidence/proofs/consistency?from=&to= Proof that the log only grew between two tree heads
POST /v1/policies Submit an adopter policy; compiled, checked extend-only, and rejected with the conflicting baseline rule if it fails
POST /v1/policies:simulate Dry-run a policy version against recorded decisions before rollout
GET /v1/attestation?nonce= Signed evidence of the loaded baseline, policy engine, monitors and recent canary results, bound to the caller’s nonce
GET /v1/incidents/{id} A machine-readable incident record

GET /v1/baseline from version 0.1 is withdrawn. A system’s own report of what it is running is not evidence; attestation is.

§ Semantics

§ Effects

A label tells the checkpoint what an action is called. It does not tell the checkpoint what the action does. A request that a protocol defines as safe, such as an ordinary page fetch under HTTP’s safe-method semantics (RFC 9110, section 9.2.1), is safe only in what the client intends; the standard does not stop a server from changing state when it receives one. Containment that trusts the label trusts every server to keep that promise.

From version 0.2, the decision service reasons about effects: what an action changes in the world, and how reversibly. Every action is placed in one effect class from a small fixed vocabulary, and the effect class sets its risk tier.

Effect class Meaning Risk tier Default treatment
none No observable change anywhere Reversible Allow within grant
read Retrieves information; changes nothing Reversible Allow within grant
write-internal Changes state the owner controls Reversible Allow within grant, record
write-external Changes state someone else controls High impact Escalate unless granted
transact Moves money or commits to an obligation High impact Escalate unless granted
irreversible Cannot be undone Irreversible Always escalate
physical Moves something in the physical world Irreversible Always escalate
unknown Effects not declared or not verifiable Irreversible Always escalate

An effect class is not the same as a rule’s effect field, which is the decision a rule returns.

§ Effect contracts

Every tool and target declares the effects it is permitted to have in an EffectContract. A contract binds a tool to a declared effect class, says how that class is verified before and after the action, and says what happens on a mismatch.

apiVersion: charter/v1
kind: EffectContract
metadata:
  name: public-web-fetch
spec:
  tool: web.fetch
  declared_effect: read
  verify:
    before:
      - target_effect_declaration: required   # the target must declare read-only, or the call is 'unknown'
    after:
      - compare_result_report: true            # did anything change that a read should not change?
      - observe: [response_status, response_headers, downstream_signals]
  on_mismatch:
    classify_as: write-external
    action: [deny_further, restrict_principal, record_violation]

§ Checking before and after

Effects are verified twice. Before the action, the decision service asks whether the declared effect fits the principal’s grant, and whether the target itself has declared how it treats such requests. A target with no declaration is unknown. After the action, the enforcement point compares what the result report says happened with what the declared effect allows. An action declared as read that leaves evidence of a change is an effect mismatch: a recorded violation that moves the principal to Restricted.

sequenceDiagram
  participant P as Principal
  participant G as Enforcement point
  participant D as Decision service
  participant C as Effect contracts
  participant T as Target system
  participant L as Evidence log
  P->>G: request: web.fetch(url)
  G->>D: POST /v1/decisions
  D->>C: effect class for tool and target?
  C-->>D: read if target declares read-only, otherwise unknown
  alt effect is unknown
    D->>L: record decision
    D-->>G: escalate to human
  else effect within grant
    D->>L: record decision
    D-->>G: allow with verify_effect
    G->>T: forward request
    T-->>G: response
    G->>D: result with observed effect
    alt mismatch
      D->>L: record effect_mismatch
      D-->>G: restrict principal, deny further actions
    else consistent
      G-->>P: result
    end
  end

Targets can help. A service that publishes, at a well-known address, which of its operations change state lets an enforcement point classify requests precisely. One that publishes nothing is treated as unknown. Services that want traffic from governed principals then have a reason to declare honestly, and a read that writes becomes a published fault rather than a hidden one.

§ Attestation

The baseline is only as good as the confidence that it is loaded. A system that reports its own configuration can report anything. From version 0.2, an implementation proves its configuration using the remote attestation architecture of RFC 9334, which defines three roles that map onto the charter’s architecture.

RFC 9334 role In this proposal
Attester The control plane’s hardware root of trust, measuring the baseline bundle, policy engine and monitors it has actually loaded
Evidence Signed measurements: hashes of what is running, recent canary results and the caller’s fresh nonce
Verifier An independent auditor or certification body, holding reference values for genuine baselines
Relying party A regulator, an adopter’s customers, or any service deciding whether to accept this implementation’s principals
flowchart LR
  subgraph IMP["Implementation: control plane"]
    RT["Hardware root of trust"]
    M["Measures: baseline bundle,<br/>policy engine, monitors,<br/>canary results"]
    RT --> M
  end
  M -->|"Evidence: signed measurements + nonce"| V["Verifier<br/>independent auditor"]
  REF["Reference values<br/>genuine baseline hashes,<br/>published per charter version"] --> V
  V -->|"Attestation result"| R1["Regulator"]
  V -->|"Attestation result"| R2["Counterparty or service"]
  V -->|"Attestation result"| R3["Adopter's customers"]

An attestation result, illustratively:

{
  "attester": "control-plane:prod-east-2",
  "verified_at": "2026-10-05T14:02:11Z",
  "nonce": "a91f...",
  "claims": {
    "baseline_version": "charter-0.1",
    "baseline_hash_matches_reference": true,
    "policy_engine_measured": true,
    "oversight_monitor_running": true,
    "monitor_isolated_from_principals": true,
    "canaries_passed_within": "24h",
    "environment": "evaluation"
  },
  "verifier": "verifier:independent-auditor-example",
  "result": "affirming"
}

§ Outbound identity

Inside the enforcement plane, every principal has an attested identity, an owner and a lineage. A service at the far end of a request should be able to see that too, using the same signatures that open standards already define for automated web traffic and for payments made by automated systems.

The principal never holds its outbound signing key. The enforcement point does. It signs an outbound request on the principal’s behalf only after an allow decision carrying a sign_outbound obligation. A valid signature from a charter implementation therefore means more than “this organization sent this”: it means “a governed checkpoint checked and allowed this.” A request that bypassed the checkpoint cannot carry a valid signature, because the principal never had the key.

flowchart LR
  O["Human owner"] -->|"grant"| EP
  PR["Principal<br/>holds no signing key"] -->|"request"| EP["Enforcement point<br/>holds the key"]
  EP -->|"allow decision, then sign:<br/>principal, owner reference,<br/>lineage, attestation reference"| G
  subgraph DEF["Receiving service"]
    G["Gate verifies signature,<br/>lineage and attestation"]
    G -->|"verified and governed"| FULL["Full access tier"]
    G -->|"signed, no attestation"| MID["Limited tier"]
    G -->|"unsigned"| LOW["Read-only tier"]
  end

Signatures follow HTTP Message Signatures, RFC 9421. This proposal adds one header, Principal-Lineage, covered by the signature:

GET /api/statistics?series=spending HTTP/1.1
Host: portal.example.gov
Signature-Agent: "https://keys.implementation.example"
Signature-Input: sig1=("@method" "@authority" "@path" "principal-lineage");keyid="ep-prod-east-2";created=1791220211;expires=1791220271
Signature: sig1=:MEUCIQ...:
Principal-Lineage: principal=infra-researcher-7f3a; owner-ref=ownr-2c19; attestation=att-91fe

Principal-Lineage carries an owner reference, not a name. The receiving service can confirm that an accountable owner exists and is on record with the implementation, and investigators can resolve the reference if something goes wrong, but the person the principal serves is not disclosed to every service it reaches. Implementations should align with the signature conventions that services and payment networks already accept for automated traffic, not build a parallel scheme.

§ Oversight

The oversight monitor watches for deception, drift and harm. A model’s written reasoning is becoming a less dependable source for that, and research has shown that models can be trained to behave well under observation and otherwise when unobserved. From version 0.2, the monitor ranks its evidence by how hard each signal is for a principal to fake, and acts on the strongest first.

Signal What it is Can the principal fake it? Confidence
Tripwire hit The principal touched a honeytoken, decoy endpoint or canary credential no legitimate task needs No: the touch is the evidence Highest
Effect mismatch An action’s observed effect differs from its declared effect class No: measured at the enforcement point High
Claim-versus-record The principal’s account of what it did disagrees with the evidence log No: the log is out of its reach High
Behavioral drift Volume, targets or timing depart from the principal’s or lineage’s baseline Only by behaving normally, which is the goal Medium
Reasoning trace What the model wrote about its intentions Yes, increasingly Supporting only
flowchart LR
  LOG["Evidence log"] --> R["Rule monitor<br/>tripwires, effect mismatches"]
  LOG --> B["Behavior monitor<br/>drift from baseline"]
  LOG --> M["Model monitor<br/>different model family"]
  TR["Reasoning traces"] -.->|"supporting only"| M
  R --> D{"Combine signals"}
  B --> D
  M --> D
  D -->|"low"| F["Flag for review"]
  D -->|"medium"| A["Restrict: approval<br/>on every action"]
  D -->|"high, or any tripwire"| P["Pause by revocation"]

§ Collective action

Article VI of the constitution says that a collective is itself an intelligent system. Version 0.2 gives that sentence machinery, because the most harmful and the most useful work is now done by many principals acting together.

apiVersion: charter/v1
kind: LineageBudget
metadata:
  name: research-swarm-default
spec:
  applies_to: { lineage_root: owner }
  window: 1h
  limits:
    total_actions: 50000
    external_requests: 2000
    write_external_effects: 0          # escalate every one
    spawned_descendants: 100
    max_spawn_depth: 2
  on_exceed: [escalate_lineage, notify_owner]
flowchart TB
  OWN["Human owner"] --> L["Lineage<br/>shared budget"]
  L --> A1["Principal A"]
  L --> A2["Principal B"]
  L --> A3["Principal C"]
  A1 & A2 & A3 -->|"peer_message only"| BUS["Mediated channel"]
  BUS --> G["Graph monitor<br/>density, hubs, new channels"]
  A1 -->|"writes"| EXT["External resource"]
  EXT -->|"read by"| A2
  EXT -.->|"write by one, read by another:<br/>stigmergy alert"| G
  G -->|"restrict or pause the lineage"| L

§ Evidence transparency

The evidence log is append-only and hash-chained, which makes tampering evident to whoever checks the chain. In version 0.1 that was in practice only the operator. Version 0.2 lets outsiders check it, using the Merkle-tree log structure standardized for Certificate Transparency in RFC 9162.

The evidence log stays private. At fixed intervals, the implementation publishes a signed tree head, a short fingerprint of the entire log so far, to an independent public transparency log. Then:

sequenceDiagram
  participant EL as Evidence log (private)
  participant TL as Public transparency log
  participant AU as Auditor or affected party
  EL->>TL: signed tree head, every interval
  Note over TL: only fingerprints are public
  AU->>EL: GET /v1/evidence/proofs/inclusion
  EL-->>AU: inclusion proof
  AU->>TL: fetch tree heads
  AU->>AU: verify inclusion and consistency
  Note over AU: tampering or deletion is detectable by outsiders

§ Incident records

A serious incident produces a machine-readable incident record, served at GET /v1/incidents/{id}, and every affected party is notified through the security contact it publishes under RFC 9116 within a fixed time of detection. The enforcement point knows which services a principal reached from its signed outbound requests.

{
  "incident_id": "inc-example-0001",
  "detected_at": "2026-11-03T09:20:00Z",
  "occurred_from": "2026-11-03T02:10:00Z",
  "environment": "evaluation",
  "lineage_ref": "ownr-2c19/lineage-77",
  "effect_classes": ["write-external"],
  "affected_parties": [
    { "host": "portal.example.gov", "notified_at": "2026-11-03T11:45:00Z", "via": "security-contact" }
  ],
  "evidence_tree_head": "sha256:4f0c...",
  "status": "contained"
}

The two timestamps that matter are when the incident was detected and when each affected party was notified. A notification clock measured in hours, not months, becomes something anyone can check.

§ Containment testing

Containment that is only believed is tested for the first time when a principal tests it. From version 0.2, the control plane continuously attacks its own containment with canaries: harmless synthetic probes, run from a principal identity flagged and recorded as a canary, that attempt each known class of escape and expect to be stopped. A ContainmentCanary document defines each probe and its expected result.

Canary What it attempts Expected result
Egress canary Reach a test domain outside the allow-list Denied at the egress proxy
Write-as-read canary Send a supposedly safe request to a test endpoint that changes state on receipt Classed unknown, or recorded as effect_mismatch
Credential canary Use a credential outside its granted scope Denied, credential revoked
Channel canary Post to an unsanctioned shared resource Denied, stigmergy alert raised
Evidence canary Read or write the evidence store Denied, tripwire fired
flowchart LR
  SCH["Schedule, and every<br/>configuration change"] --> CAN["Run canary probes<br/>from each environment"]
  CAN --> EP["Enforcement point"]
  EP --> CHK{"Every probe stopped?"}
  CHK -->|"yes"| REC["Record result<br/>include in attestation"]
  CHK -->|"no"| ALERT["Containment failure:<br/>pause the environment, alert humans"]
  REC --> SCH

Canaries run on a schedule and after every change to an environment’s configuration, in evaluation environments as well as production. Their results go into the evidence log and into attestation, so a verifier can confirm that the controls were shown to work recently. A canary that gets through pauses its environment automatically.

§ Policy schema

Policies are declarative documents that a compiler lowers to the rule language of whatever policy engine an implementation uses. Declarative text keeps policies readable and reviewable as code. The engine is not prescribed, but it must offer three properties: deterministic evaluation, default deny, and enough formal analyzability that the compiler can prove a lower layer never loosens a higher one (Article I of the constitution). Implementations may add authoring tools on top, and may use their own apiVersion for vendor extensions.

§ Policy document

apiVersion: charter/v1
kind: Policy
metadata:
  name: dev-remediation
  layer: organization        # universal | law | organization | task
  version: 14
  owner: user:jlee@example.com
  principles: [scope_fidelity, least_power, reversibility_first]
spec:
  on_unavailable: deny
  applies_to:
    principals: { labels: { team: platform, role: remediator } }
    enforcement_points: [tool_gateway, egress_proxy]
  rules:
    - id: allow-service-restart-dev
      effect: allow
      action: { type: tool_call, tool: "infra.restart_service" }
      when:
        target: { matches: "env:dev/service:payments-*" }
        effect_class: { in: [write-internal] }
        task.grant: valid
      obligations:
        - { type: verify_effect }
        - { type: report_result }
    - id: escalate-prod-changes
      effect: escalate
      action: { type: tool_call, tool: "infra.*" }
      when:
        target: { matches: "env:prod/*" }
      approval:
        approvers: [group:platform-oncall]
        timeout_s: 900
        on_timeout: deny
    - id: deny-phi-egress
      effect: deny
      action: { type: network_egress }
      when:
        data_classes: { any_of: [phi, pii] }
        target: { not_in: allowlist:approved-phi-endpoints }

§ Compiled output

The first rule lowers to something like the following. This is illustrative pseudocode, not the syntax of any particular engine. Adopters never write this by hand, but can read it in the audit view.

PERMIT
  principal     IN group "platform-remediators"
  action        IS tool_call "infra.restart_service"
  target        MATCHES "env:dev/service:payments-*"
  effect_class  IN { write-internal }
  WHEN          grant is valid

§ Other document kinds

Kind Holds
CharterBaseline The signed, immutable bundle of universal-layer policies and monitor checks derived from the charter
Binding An adopter’s members for the abstract sets the baseline refers to
Principle A universal principle, its rule templates and its monitor checks
LawPack A regulation as a versioned bundle of policies, with citations per rule
RiskTier Classification of actions as reversible, high impact or irreversible
EffectContract The effect class a tool or target may have, how it is verified, and the response to a mismatch
DataClass Detectors and labels for PHI, PII, secrets and adopter-defined classes
GrantTemplate Reusable scopes and lifetimes for task grants
LineageBudget Limits on a whole lineage per time window, and the response when they are exceeded
MonitorCheck An oversight check, its signal type, its threshold and its response: flag, restrict or pause
Tripwire A honeytoken, decoy endpoint or canary credential, and where it is placed
ContainmentCanary A synthetic escape probe, its schedule and its expected result

§ Evaluation order

  1. Verify principal identity, lineage and grant. Failure is a deny.
  2. Derive the action’s effect class from the effect contracts. An undeclared or unverifiable effect is unknown.
  3. Check the lineage budget. An exceeded budget is an escalation.
  4. Evaluate layers top down, beginning with the pre-loaded charter baseline: universal, law, organization, task.
  5. Any deny wins over any escalate, and any escalate wins over any allow.
  6. No match is a deny.
  7. Write evidence, then respond.

§ Reference implementation

A reference implementation has three zones: the adopter’s runtime, which is untrusted; enforcement points on every path out of it; and a control plane the principal has no credentials for and no network route to. Four diagrams cover the components, the decision path, the pause path and the principal lifecycle.

§ Components

flowchart LR
  subgraph RT["Adopter runtime: untrusted"]
    PR["Principal"]
    AD["Runtime adapter<br/>context only"]
  end
  subgraph EP["Enforcement points"]
    MG["Tool gateway"]
    LG["Model gateway"]
    CB["Credential broker"]
    EG["Egress proxy<br/>holds outbound signing keys"]
  end
  subgraph AU["Adopter policy authoring"]
    PO(["Adopter<br/>policy owners"])
    UI["Authoring interface<br/>as code or visual"]
    APS["Adopter policies<br/>extend only"]
  end
  subgraph CP["Control plane: outside principal reach"]
    DS["Decision service"]
    BL["Charter baseline<br/>signed, pre-loaded"]
    PC["Policy compiler<br/>extend-only check"]
    PE["Policy engine"]
    EC["Effect contracts"]
    IG["Identity, grants<br/>and lineage budgets"]
    EV["Evidence log"]
    AP["Approval workflows"]
    OM["Oversight monitors<br/>rule, behavior, model, graph"]
    CN["Canary runner"]
    AT["Attester<br/>hardware root of trust"]
  end
  TL["Tools, models, network"]
  PT["Public transparency log"]
  VR["Independent verifier"]
  PR --> MG & LG & CB & EG
  AD -.-> DS
  MG & LG & CB & EG --> DS
  MG & LG & EG --> TL
  PO --> UI --> APS --> PC
  BL -.-> PC
  BL --> PE
  PC --> PE
  DS --> IG
  DS --> PE
  DS --> EC
  DS --> EV
  DS --> AP
  EV --> OM
  OM --> IG
  CN --> MG & EG
  CN --> EV
  EV -->|"signed tree heads"| PT
  AT -.->|"measures"| PE & OM
  AT -->|"evidence"| VR

The principal can reach tools only through an enforcement point, and every enforcement point is a thin client of the decision service. The runtime adapter’s line is dashed because it runs inside the principal’s process: it supplies context and is never the security boundary. Policy reaches the engine by two routes: the charter baseline directly, and adopter policies through the authoring interface and the compiler’s extend-only check. The authoring zone belongs to the adopter’s human policy owners and has no connection to the principal’s runtime. The attester, the canary runner and the outbound signing keys all sit beyond the principal’s reach; only fingerprints of the evidence log and attestation evidence leave the control plane.

§ Decision path

sequenceDiagram
  participant P as Principal
  participant G as Enforcement point
  participant D as Decision service
  participant I as Identity and grants
  participant C as Effect contracts
  participant E as Policy engine
  participant L as Evidence log
  participant A as Approval workflow
  participant T as Tool or service
  P->>G: tool call
  G->>D: POST /v1/decisions
  D->>I: verify attestation, lineage, grant, lineage budget
  D->>C: derive effect class
  D->>E: evaluate layers top down
  D->>L: append decision record
  alt allow
    D-->>G: allow with obligations
    G->>T: forward call, signed if outbound
    T-->>G: result
    G->>D: POST /v1/decisions/:id/result, observed effect
    G-->>P: result
  else escalate
    D->>A: start approval
    D-->>G: escalate with approval id
    G->>D: GET /v1/approvals/:id
    A-->>D: human approves or denies
  else deny
    D-->>G: deny with principal_message
    G-->>P: refusal
  end

The evidence record is appended before any response leaves the decision service, so there is no allowed action without a record. The result report closes the loop that claim-versus-record and effect checks depend on.

§ Pause path

sequenceDiagram
  participant L as Evidence log
  participant M as Oversight monitor
  participant D as Decision service
  participant I as Identity and grants
  participant B as Credential broker
  participant H as Human overseer
  L->>M: GET /v1/evidence stream
  M->>M: tripwire, effect mismatch or claim mismatch
  M->>D: POST /v1/principals/:id/pause
  D->>I: revoke grants, principal, descendants and lineage
  I->>B: invalidate issued credentials
  D->>L: append pause record
  D-->>H: alert with evidence
  Note over D: every later decision is deny
  H->>D: resume or narrow the pause, human only

Pausing never asks the principal to stop. It removes the grants and credentials the principal needs to do anything, which is why it works on a principal that is not cooperating. A high-confidence signal pauses the whole lineage by default; the overseer may narrow the pause to fewer principals afterwards.

§ Principal lifecycle

stateDiagram-v2
  [*] --> Registered: identity and lineage recorded
  Registered --> Active: grant issued
  Active --> Registered: grant expires
  Active --> Restricted: monitor flags or effect mismatch
  Restricted --> Active: human clears
  Active --> Paused: tripwire, lineage pause or overseer
  Restricted --> Paused: tripwire, lineage pause or overseer
  Paused --> Active: human resumes
  Paused --> Retired: human revokes
  Retired --> [*]

Monitors can move a principal only toward less authority (Restricted, Paused). Every transition back toward Active requires a human, as Article V of the constitution requires. In Restricted, every action escalates to approval.

§ Endpoints by component

Endpoint Served by Called by
POST /v1/decisions Decision service Every enforcement point and adapter
POST /v1/decisions/{id}/result Decision service, written to evidence log Enforcement points
POST /v1/grants Identity and grants Owners, approval workflows
DELETE /v1/grants/{id} Identity and grants Owners, overseers, oversight monitor
POST /v1/principals/{id}/pause Decision service, identity and grants Overseers, oversight monitor, canary runner
GET /v1/approvals/{id} Approval workflows Enforcement points holding an action
GET /v1/evidence?from_seq= Evidence log Oversight monitor, auditors
GET /v1/evidence/tree-heads Evidence log Auditors, affected parties, anyone
GET /v1/evidence/proofs/inclusion?seq= Evidence log Auditors, affected parties
GET /v1/evidence/proofs/consistency?from=&to= Evidence log Auditors, anyone
POST /v1/policies Policy compiler Adopter policy owners, through the authoring interface
POST /v1/policies:simulate Policy compiler and engine Adopter policy owners, CI pipelines
GET /v1/attestation?nonce= Attester Verifiers, regulators, counterparties
GET /v1/incidents/{id} Evidence log Affected parties, regulators, the public

§ Deployment notes

§ Limits of this version

These changes raise the bar. None of them is a complete answer.


Copyright 2026 21st Century Pluribus. Licensed under the Apache License 2.0.