RAGBAZRAGBAZ
navigate
home pricing products docs konsonans ai governance
work in progress · non-normative design draft · not legal advice · live status & breakdown ↗
status legend · 🟢 complete · 🔵 near finish · 🟡 in progress · ⚪ planned
RAGBAZ · KONSONANS

— ad conformitatem legis de intelligentia artificiali —

Konsonans AI GovernanceFormal governance specification

A formal account of the Konsonans AI Governance platform: a membrane-typed policy DSL compiled to capability-sandboxed WASM components, an append-only tamper-evident audit spine, human-in-the-loop oversight, and a small live orchestration — arranged as numbered propositions for conformity with the EU AI Act.

Instrument
governance specification v0.2
Regulation
EU 2024/1689 (AI Act)
Applies from
2026-08-02
author · RAGBAZ — Tobias Abenius
substrate · glither.* (roux/tangle) · wasm32-wasip2 · pharo 12 · postgresql 16
status · design draft, non-normative · risk-class · high (annex III)
Konsonans AI Governancepreface
0

Preface — what may be governed at all

The Act asks an operator to make the conduct of a high-risk AI system traceable, overseen, and demonstrable. This document holds that these are not procedures bolted onto a system but structural properties of how the system is built.

whereof one can compile, thereof one can attest

0.1

The book treats a single thesis: a compliance obligation is best discharged by an architecture in which the obligation cannot structurally be violated, rather than one in which it is merely promised and later inspected.

0.2

Its form is propositional: cardinal propositions 17 carry the argument; decimal propositions elaborate so that each claim has an address and each mechanism a place.

0.3

Each cardinal closes with the product feature it justifies — its why and its what — so the document reads simultaneously as philosophy of the design and as a product specification.

0.31

The seven cardinals: 1 the world under the Act · 2 the membrane & the DSL · 3 the tamper-evident spine · 4 human oversight · 5 the small orchestration · 6 composition & attestation · 7 the limit — fail-closed.

central claim

What can be said about an agent's conduct can be said in a derived contract; what cannot be said there — an authority not granted, a guarantee not satisfiable — is not stalled at runtime but refused at compile time.

1 · The world under the Actproposition 1
1

The world of an agent is everything that is the case — and the Act asks for its record

An AI agent's world is the totality of its actions, not of its intentions. Governance is the discipline of which actions may cross into effect, in what state, and on whose record.

art. 9 · risk management — art. 12 · logging

1.1

The world is the totality of agent actions, not of agent code. A model's weights are opaque; its actions are discrete, typed, and namable — and therefore governable.

1.11

An action is an artifact attempting to cross a boundary: approveLoan:, denyClaim:, placeOrder:. Each is a candidate fact about the world.

1.12

To govern is to interpose a membrane between the action and its effect, and to decide each crossing: admit, refuse, or suspend pending a human.

1.2

The Annex III categories — credit, recruitment, medical, law-enforcement, critical infrastructure, education — fix which worlds are high-risk. Risk classification (art. 9) is the prior act of naming the world.

1.21

Classification is itself a typed object: a risk-profile with a level on the lattice minimal < limited < high < unacceptable and the required measures it implies.

1.3

That a thing happened must be recordable independently of the agent that did it (art. 12). The record is not a log file the agent writes; it is a witness the agent cannot edit.

feature — risk classifier & action capturesub-component · roux / orchestrator
feature 1.A

Risk classifier

why
Art. 9 requires a documented risk-management system; obligations differ by Annex III category.
what
A typed risk-profile derived per agent session, fixing the SLA, oversight, and logging measures the rest of the platform enforces.
feature 1.B

Action capture

why
Art. 12 logging must be agent-independent and tamper-evident from the first byte.
what
A transport-agnostic capture point (unix socket · TCP · HTTP) that intercepts every action before effect and hands it to the membrane.
2 · The membrane & the DSLproposition 2
2

A policy is a contract over a membrane — and the contract is derived, not declared

Rules are written in Glither, a membrane/ligand DSL. The compiler derives the component's WIT world from the rules, so the published contract is the compiled one. Authority not named in a rule does not exist for that component.

glither.governance · roux / tangle · wasm32-wasip2

2.1

A rule selects actions by their properties and disposes of them into a terminal state or a suspended one. The selectors are the boundary; the disposition is the verdict.

2.11

A ligand is a property a rule needs but does not itself possess — a risk level, an approval flag, a PII verdict. A ligand required but not produced is an unsatisfiable guard.

2.12

The keystone. An unsatisfiable guard becomes a WIT import with no provider; the component fails to link. An incoherent policy is a compile error, never a silent runtime gap.

// glither.governance — a high-value action must hold for a human
rule human_review_high_value_loan =
  action | agent_class == "LoanApprovalAgent"
         | action.name == "approveLoan:"
         | action.arguments[1] > 25000
         | not action.has_human_approval        // ⟨ligand · attested · audited⟩
  => hold into human_review                   // suspended: Pending<{allowed, blocked}>
       on    reviewer.approved   into allowed
       on    reviewer.denied     into blocked (reason = human_denied)
       after 15m                 into blocked (reason = sla_exceeded)
       // art. 14 §4 — the safe default on timeout is refusal
2.2

The same grammar (roux) hosts many dialects. A dialect is a vocabulary plus host bindings — never a new compiler. glither.governance for the Act; glither.hft for pre-trade risk; glither.mail for mailguard.

2.21

Because dialects share lattices, an unlawful information down-flow across a rule is the same type error in each — Denning's lattice, enforced once.

2.3

From one typed IR the compiler emits two artifacts: a production Rust component and an auditable Gleam oracle. They must agree byte-for-byte on every conformance case; divergence is a compiler bug.

2.31

The Gleam oracle is the document's quiet hero for the Act: a small, readable, independently-runnable reference a notified body can audit without trusting the build toolchain.

2.4

The compiled component has authority only through its WIT imports. No sockets, no filesystem, no clock unless a host binding grants it. The capability sandbox is the product, not a setting.

feature — the governance dialectsub-component · tangle · glither-wit · glither-host
feature 2.A

Rules-as-DSL

why
Policy must be legible to compliance officers and provably equal to what executes.
what
A declarative .glith ruleset; the WIT contract and minimum capability set are derived, so the published policy is the running one.
feature 2.B

Differential oracle

why
Art. 11 technical documentation is stronger when a reference implementation is auditable.
what
A Gleam rendering of the same IR, run in CI, asserting equality with the production component on every fixture.
3 · The tamper-evident spineproposition 3
3

The record is append-only, hash-chained, and witnessed by independent replicas

An event is never mutated, only appended; each entry hashes its predecessor; and a synchronous replica — ideally third-party — holds an independent copy whose divergence is itself the evidence of tampering.

art. 12 · logging — art. 72 · post-market monitoring

3.1

State changes are events, never updates. The store enforces this: UPDATE and DELETE are refused at the database rule level, not merely by convention.

3.11

Each entry carries previous_hash and a signature = SHA-256(id ‖ time ‖ action ‖ previous_hash). The chain makes any insertion, deletion, or reordering detectable from the hashes alone.

3.2

One copy can be rewritten by whoever holds it. Therefore the record streams — synchronously — to a second host whose only role is to re-verify the chain as rows arrive.

3.21

With synchronous_commit = remote_apply the agent's action is not acknowledged until a replica has the event. The tamper window — the gap in which a compromised primary could rewrite-then-ship — is closed.

3.22

Two replicas give a majority: where primary and replicas disagree, the diverging node is identified, not merely the fact of divergence.

3.3

The strongest replica is one the operator does not control: an independent auditor node that signs a daily manifest over the chain's first and last hash. Leak-freeness toward it is structural — see proposition 6 (Dana).

why this, and not a backup

A backup proves what you had; a witnessed chain proves what you cannot have changed. The Act asks for the second.

feature — audit spine & divergence detectorsub-component · postgresql · replica nodes
feature 3.A

Append-only event store

why
Art. 12 demands non-repudiable logs retained ≥ 6 months.
what
INSERT-only PostgreSQL with rule-level immutability, SHA-256 hash chain, and a WORM cold archive.
feature 3.B

Divergence detector

why
Art. 72 post-market monitoring needs continuous integrity assurance, not periodic audit.
what
Synchronous logical replication to ≥ 2 nodes; a detector that raises a tamper alert and names the divergent node.
4 · Human oversightproposition 4
4

A high-stakes crossing suspends until a person decides — and silence means refusal

Human oversight is not a notification after the fact. It is a suspended state in the membrane: the action waits, a reviewer decides with a recorded rationale, and an expired deadline resolves to blocked, never to allowed.

art. 14 · human oversight — art. 14 §4 · safe default

4.1

The suspended disposition hold into human_review is a real state with a liveness obligation: it carries a deadline, and its only lawful settlements are allowed or blocked.

4.11

The reviewer acts on a typed surface, not a chat message: the action, its arguments, its risk flags, the offending policy, and the audit entry's hash with its chain status.

4.12

A decision is itself an event: {reviewer, decision, rationale, decided_at} — appended to the chain. Oversight is auditable as conduct in its own right.

4.2

Art. 14 §4, structurally. When the SLA expires the rule's after arm fires into blocked. The system defaults to the safe state by construction; an absent human cannot become a tacit approval.

4.21

The SLA is a function of risk: tighter for high, looser for limited. The deadline is data, not policy buried in code.

4.3

The reviewer works inside a live Smalltalk image (proposition 5): the queue, the inspector, and the decision controls are one running object graph, observable and modifiable while live.

feature — human-in-the-loop gatewaysub-component · oversight · approval widget
feature 4.A

Oversight gateway

why
Art. 14 requires effective human oversight of high-risk decisions before effect.
what
A blocking approval gate with a per-risk SLA and a safe-default timeout to refusal.
feature 4.B

Approval widget

why
A reviewer needs full context and an enforced rationale for an accountable decision.
what
A live queue showing action, args, risk flags, policy, and chain status; rationale required before approve/deny.
5 · The small orchestrationproposition 5
5

The conductor is small, live, and inspectable — a witness one can hand to an auditor

Orchestration is a Pharo Smalltalk image: an event bus, a session registry, transport proxies, and the reviewer IDE — held as one running object graph that can be frozen and inspected at the moment of a disputed decision.

pharo 12 · spec2 · event-sourced projections

5.1

The orchestrator does little and shows everything. It routes captured actions to the membrane, suspends for oversight, appends to the spine, and projects live documents — and no more.

5.11

Agents connect over the transport that fits them: a unix socket for a co-located model, tcp+mTLS for a container, HTTP/SSE for a remote function. One wire protocol (JSON-RPC 2.0) underneath.

5.2

Live documents are projections of the event stream. A compliance dashboard is not generated nightly; it advances as events arrive, by subscription, not by polling.

5.21

The image is the witness. A regulator can be handed a snapshot of the exact runtime state at the moment in question and inspect every object and replay every decision with no tooling beyond Pharo.

5.3

The heavy, sandboxed work lives in WASM; the live, inspectable work lives in the image. The split is deliberate: provable isolation where authority matters, live malleability where humans look.

feature — orchestrator & governance IDEsub-component · pharo image · spec2 presenters
feature 5.A

Live orchestrator

why
Post-market monitoring (art. 72) is easier when state is observable live, not reconstructed.
what
An event bus + session registry + transport proxies in one inspectable image; minimal authority, maximal visibility.
feature 5.B

Governance IDE

why
Operators need to author policy, watch the stream, and decide approvals in one place.
what
A Spec2 app: syntax-highlighted policy editor, live monitor, approval queue, and compliance report.
6 · Composition & attestationproposition 6
6

The whole deployment is a typed graph, signed, and provably one-way where it must be

Components compose into a membrane graph via glither.world; an unsatisfiable wiring is a compose-time failure. Edges to a witness are Dana: one-way by construction, with a signed no_retrograde vow a third party can check.

glither.world · wac compose · dana / no_retrograde

6.1

The deployment is not a diagram; it is a typed object. glither.world selects components and guards each Pour → Pier wiring against the same discipline the inner rules use.

6.11

The keystone lifts to the graph: an edge whose types do not satisfy makes the composition fail. An unsound deployment does not start.

6.2

A Dana membrane imports but exports nothing that carries data back to the donor — a passive uniport, no retrograde channel, no side-channel. The audit replica is exactly this.

6.21

The vow is checkable, not asserted: a Dana world declares no donor-facing export, so the absence of a back-channel is visible in the signed contract the component compiles against.

6.3

The signed graph attestation records, per edge, the negotiated guarantee and flags every Dana edge — so a third party can verify the whole deployment's information-flow shape from signed artifacts alone.

// glither.world — audit store pours one-way into independent replicas
rule audit_to_replicas =
  edge | donor.dialect == glither.audit_store
       | pier in replica_nodes
       | pier.attested.no_retrograde            // ⟨Dana vow · audited⟩
  => link pour to pier into linked
feature — graph composition & Dana attestationsub-component · glither.world · cosign
feature 6.A

Membrane-graph compose

why
A deployment's soundness should be a build property, not an operational hope.
what
A glither.world ruleset lowered to a wac composition; unsatisfiable wiring is refused at compose time.
feature 6.B

Dana attestation

why
An independent witness is only credible if its one-wayness is provable to a third party.
what
A signed no_retrograde predicate over the component's WIT world and hash; verifiable from artifacts alone.
7 · The limitproposition 7
7

Whereof one cannot prove compliance, thereof one must fail closed

The platform's final commitment is negative and absolute: where a guarantee cannot be satisfied, an authority cannot be granted, or a witness cannot be reached, the system does not proceed degraded — it refuses.

default-deny · fail-closed · the keystone, everywhere

7.1

A missing host binding is a link failure, not a silent degraded mode. A missing required ligand is a typed, audited guard-fail, never an exception that leaks.

7.11

An expired oversight deadline resolves to refusal (4.2). An unsatisfiable wiring fails the compose (6.11). An unverifiable Dana vow rejects the edge (6.21).

7.2

These are one principle in many places: the unsafe path is made unrepresentable or unreachable, so that compliance is the only state the system can occupy.

7.21

This is why the document is a specification and not a checklist: a checklist enumerates what one must remember to do; an architecture fixes what one cannot fail to do.

the seventh proposition

What can be governed has been said in the contract. Of the rest — the unsatisfiable, the ungranted, the unwitnessed — the system must be silent, and silence here is refusal.

appendix A — EU AI Act crosswalkarticle → proposition → mechanism
ArticleProp.RequirementMechanism
Art. 91.2 · 1.21Risk-management systemRiskClassifier; typed risk-profile on the level lattice
Art. 102.1Data governance / minimisationglither.governance PII guard rule; argument scrubbing
Art. 112.3 · 2.31Technical documentationDerived WIT contract; auditable Gleam oracle; compliance report
Art. 12 §13.1 · 3.11Logging of eventsAppend-only event store; SHA-256 hash chain
Art. 12 §23.11Retention ≥ 6 monthsPostgreSQL + WORM cold archive
Art. 131.3 · 4.11Transparency to deployersTyped audit entries; reviewer surface; query interface
Art. 144.1 · 4.11Human oversightOversight gateway; hold into human_review; approval widget
Art. 14 §44.2Safe default on inactionafter SLA → into blocked in every hold rule
Art. 476.3Declaration of conformitySigned graph attestation; per-edge guarantee record
Art. 723.2 · 5.2Post-market monitoringDivergence detector; live event-sourced dashboard
Appendix B · the partssub-components
B

The parts and what each is for

A reading of the platform as a parts list — each sub-component named with the substrate it is built on and the proposition it serves.

rouxrust crate · shared core · 🟢 complete
The grammar engine, typed IR, and lattice checker shared by every Glither dialect. Adding a dialect is a vocabulary module here — never a new compiler. Serves 2.2.
tanglerust crate · compiler CLI · 🟢 complete
check · snapshot · wit · build · oci · conform. Turns a .glith ruleset into a signed, digest-pinned WASM component. Serves 2.1–2.4.
glither-witrust crate · contract derivation · 🔵 near finish
Derives the WIT world from the IR — imports = capabilities, exports = verdicts — and computes the attestation hash. The published contract is provably the compiled one. Serves 2.12.
codegen-rust / -gleamrust crates · dual emit · 🟢 complete
One IR, two artifacts: the production wasm32 component and the auditable differential oracle. Serves 2.3 · 2.31.
glither-hostrust · wasmtime embedder · 🟡 in progress
Instantiates a component per crossing, binds its imports to the governance subsystem, calls dispose, collects the receipt, drops the instance. The binding set is the only authority. Serves 2.4 · 7.1.
agent-proxyrust · mcp ingress · 🔵 near finish
The production ingress sidecar: a Model-Context-Protocol gateway routing every agent tool-call through the policy gate (allow / hold / deny), with identity + RBAC at entry and audit egress to syslog. Serves 5 · 4.
governance-nodewasm · oci artifact · 🟡 in progress
The compiled glither.governance membrane: audit, policy, oversight, document. Published to registry.ragbaz.cc, cosign-signed. Serves 2 · 4.
governance-replicawasm · dana world · 🟡 in progress
A witness component: imports only, no retrograde export. Re-verifies the chain and signs daily manifests (Ed25519 today; PKCS#11 / HSM planned). Serves 3.3 · 6.2.
audit spinepostgresql 16 · 🟢 complete
INSERT-only event store with rule-level immutability, hash chain, logical replication, and the compliance-metrics view. Serves 3.1–3.2.
orchestrator + IDEpharo 12 · spec2 · ⚪ planned (optional)
An optional live research and oversight console. Production ingress and HITL run on the Rust agent-proxy (MCP) path; the Pharo image is a study and inspection surface, not load-bearing. Serves 5 · 4.3.
glither.worldmeta-dialect · wac compose · ⚪ planned
Wires the components into a signed membrane graph; refuses unsound wiring at compose time. Serves 6.
colophon · set in Intel One Mono, Noto Sans, and Noto Serif on the RAGBAZ warm solarized-dark palette. proposition structure after Wittgenstein's Tractatus Logico-Philosophicus (1921).
status · design draft, non-normative · not legal advice · compliance core in active implementation (live status ↗) · a conformity argument to be ratified with a notified body.
substrate · glither.* (roux/tangle/glither-wit/glither-host) · wasm32-wasip2 · rust agent-proxy (mcp) · postgresql 16 · pharo 12 (optional) · cosign
author · RAGBAZ — Tobias Abenius · regulation · EU 2024/1689 · applies from 2026-08-02