Research / Agents and LLMs

P59 · full · draft

A System May Evolve Behaviour, Never the Rules Governing Its Authority: The Admission Kernel as a Capability, and Honest Rollback of Evolved Layers

partial full Agents and LLMs

State of the work. Controller, kernel capability, layer-state registry and promotion barrier ship on main as a first slice with synthetic differential corpora; stage adapters, a computed authority diff and lifecycle wiring of rollback are designed, not written.

This is a draft, not peer reviewed. Repository references link to revl at commit 45bec431f.

Planned to be combined with P60 (Self-Extending Runtime: A Component Proposes a Component, the Embedded Compiler Decides, Failed Health Reverts Residue-Free), P61 (Promotion No Measurement Can Buy: Shadow Routing, an Authority Barrier and Verified Canary for Models and Components) into a single paper.

Pitch

A self-evolving system's central safety rule, "it may change its behaviour but not the rules governing its authority", can be made structural: enumerate the admission kernel as capability tokens, refuse any candidate whose effective authority meets them, and put the authority check in control flow ahead of every measurement.

Abstract

Self-improving agent systems usually state their safety boundary as a policy: a list of files the loop must not edit, or a weight that makes an authority regression expensive. Both fail in the same way. The loop's proposal channel is the mechanism for proposing changes to rules, so a policy the loop can edit is not a boundary, and a weight is one edit from being tuned away. We describe a governed self-evolution lifecycle implemented in the revl language and compiler. The invariant is checked three ways, and the first has a known hole for host code. First, the admission kernel (the admit decider, attestation, taint lattice, retention discipline, the gate crate and the formal development) is enumerated once as seven capability tokens, and the compiler's attenuation product refuses any component whose effective authority is not disjoint from them, including an undeclared reach, which is read as unbounded rather than empty. Second, a controller walks four preconditions (trigger, propose, admit, authority) and returns on the first unmet one before any measured result (shadow, canary, observe) is read, so a perfect canary cannot buy a widened capability. Third, a layer-state registry classes the state of seven evolvable layers as revertible, compensatable or neither, and a rollback report separates what was restored from what was compensated and what was not. On main, a differential corpus shows 8 programs admitted without the kernel check and refused with it, with one control admitted in both. We state what is not yet built: stage results are supplied rather than produced, and termination is bounded per proposal rather than proved.

Problem and claim

Existing self-improvement work (a Godel-machine style self-rewrite, or an agent that edits its own scaffold) treats the safety boundary as something the system is told. If the thing being improved can propose any change to the repository, then "do not touch the admission rules" is a rule that a later generation can propose a change to. The design note for the kernel capability says this directly (docs/design/545-kernel-boundary-capability.md:20-34). A file-diff check is a necessary and cheap defence, but its own design note states that it "cannot refuse a candidate that changes kernel behaviour through a path that touches no enumerated file" (docs/design/545-kernel-boundary-capability.md:36-58).

A second weakness is ordering. A promotion rule that reads canary numbers and an authority diff in the same scope can weigh one against the other. Static properties such as capability reach and taint edges are exactly the ones a 1 percent canary does not exercise, so the canary is the wrong evidence for them (docs/design/537-evolution-controller.md:129-150).

A third weakness is the word "rollback". Reverting a component restores its effects, but not an accumulated routing table, trust score or tuned threshold. A system that reports "rolled back" after reverting a layer that learned state has made a false statement.

Claim: the invariant is enforceable by (a) a capability enumeration folded by the same disjointness predicate the compiler already uses for parallel emissions, (b) a barrier expressed as a return statement rather than a weight, and (c) a rollback report whose vocabulary cannot say "rolled back" for accumulated state. The claim is about enforcement structure, not about the completeness of the kernel list.

Contributions

  1. The kernel as a capability set: KERNEL_CAPS has seven tokens (admission, attest, taint, retention, gate, census, formal), each citing the guarantee it defends and the tree paths it stands for (src/revl/kernel_boundary.py:139). A component whose effective set meets them is refused by name, folded with cap_order.disjoint rather than a new algebra (docs/design/545-kernel-boundary-capability.md:109-125).
  2. Retention as a kernel authority: a retention deadline is a kernel token, and an untrusted author may not declare a retention policy at all (src/revl/admit_profile.py:368, docs/design/545-kernel-boundary-capability.md:172-207).
  3. A seven-stage lifecycle with a barrier in control flow: four preconditions, three measurements, one logged verdict with three outcomes (tools/evolution_controller.py:171-177, :882), with the file-level authority diff measured from git rather than accepted from the candidate (tools/evolution_controller.py:676). The axis-level diff is still declared by the caller.
  4. A shared promotion-barrier rule with a tree sweep that found two promotion paths nobody had registered (src/revl/promotion_barrier.py:1-60).
  5. A layer-state registry whose aggregate class is the weakest part, in which an undeclared part resolves below neither, and a four-outcome rollback report (restored, compensated, uncompensated, untouched) (src/revl/layer_state.py:197, :324, :667).
  6. A differential non-vacuity method: each check is run against a corpus with the check neutralised and live, with a control that must be admitted on both sides.

Evidence on main

Claimpath:line or testStatusNote
Kernel enumerated as seven capability tokens with guarantee and pathssrc/revl/kernel_boundary.py:139, paths at :107shippedKERNEL_PATHS has ten entries; seven caps
Refusal folded with disjointness, fails toward refusing, unnameable * is disjoint from nothingsrc/revl/kernel_boundary.py:269, src/revl/lower.py:18007, docs/design/545-kernel-boundary-capability.md:109-170shippedScope switch undeclared_reaches_kernel is a required keyword
Untrusted author may not declare retentionsrc/revl/admit_profile.py:368shipped
Differential corpus: 8 admitted before, 8 refused after, 1 control admitted on bothtests/test_kernel_boundary_544.py (29 test functions); numbers in docs/design/545-kernel-boundary-capability.md:209-237shippedNot run here; counts are the design note's
Undeclared emission reach arm is livedocs/design/545-kernel-boundary-capability.md:243-287 (issue #2105), docs/design/561-undeclared-emission-boundary.mdshippedThe note keeps the older residual text beside the update
Controller: four preconditions, three measured stages, returns before measurements readtools/evolution_controller.py:171-177, :882-935; tests/test_evolution_controller.py (45 test functions; the design note says 77 tests counting parameters)shipped (slice 1)The v2.0 roadmap entry reads "PARTIAL, SLICE 1 LANDED" (docs/v2.0-roadmap.md:1978)
Authority diff is measured from git; declared diff that understates is DIFF_DISAGREES; unreadable tree cannot promotetools/evolution_controller.py:676-700, docs/design/537-evolution-controller.md section 7partialFile-level diff from git, DIFF_DISAGREES and DIFF_UNVERIFIED are on main. Axis-level diff (capability, taint, budget, realm, retention) is still caller-declared (roadmap entry marked "Open")
Control comparison: an any-green rule promotes the widened tree, the controller does notdocs/design/537-evolution-controller.md:356-384shipped
Shared barrier rule and sweep over promotion pathssrc/revl/promotion_barrier.py, tests/test_promotion_barrier_543.py (25 test functions)shippedRegistry holds four paths per the module docstring
Layer-state registry, ceilings, weakest-part aggregate, four-outcome reportsrc/revl/layer_state.py:197,324,602,667, tests/test_layer_state_546.py (48 test functions)partialSlice 1 only; untouched is not checked and tested is a boolean the author writes (docs/v2.0-roadmap.md:2035)
Nine plans admitted by the effects-only rule and refused by the registry, across seven distinct linksdocs/design/547-evolvable-layer-state.md:327-335; effects_only_admits in tests/test_layer_state_546.pyshipped (test-encoded baseline)Doc count. The "prior rule" is re-encoded in the test file; no shipped predecessor exists to compare against
Seven things the loop may not do (grant capability, disable taint, widen secret access, remove approval, change rollback semantics, replace the kernel, alter "committed") each mapped to a refusing mechanismroadmap text (docs/v2.0-roadmap.md:1978-1982)designedNo code under tools/ or src/revl/ enumerates these seven as a set. Only some have a mechanism (grant refusal, taint, kernel)
Terminationroadmap text: "termination is bounded per proposal, not proved"partialController carries attempt and budget

Numbers that exist

Paper outline

  1. Introduction: the invariant, why a policy is not a boundary, claim and contributions.
  2. Background: revl admission, attenuation product, guarantee codes G8/G9/G-RETAIN.
  3. The lifecycle and the barrier: seven stages, the three ways to write the barrier and why two are wrong.
  4. The kernel as a capability: enumeration, disjointness fold, failure direction, retention case, scope switch.
  5. Honest rollback: layer classes, ceilings, weakest-part aggregate, four outcomes.
  6. Non-vacuity as method: neutralised-check differentials and controls.
  7. Evaluation (to be run): proposal corpus, red team, rollback accounting.
  8. Limits and related work.

Threats to validity and limits

Fact-check

Claims in this draft were checked against revl main at commit 45bec431f: 19 checked, 10 corrected.

Cite this draft

@misc{revlp59,
  author       = {Thomas Moussajee},
  title        = {A System May Evolve Behaviour, Never the Rules Governing Its Authority: The Admission Kernel as a Capability, and Honest Rollback of Evolved Layers},
  year         = {2026},
  howpublished = {\url{https://inso1337.github.io/revl/research/P59.html}},
  note         = {Research draft, not peer reviewed. Written against revl commit 45bec431f. Licensed CC BY 4.0.}
}

Text licensed CC BY 4.0, author Thomas Moussajee.

← All research drafts