The key
The signature leaves; the key never does
An agent's session has no key to lose, copy or misuse. Its jj calls warden-ssh-program as the signing program; the program asks warden on its Unix socket, and warden answers with a signature or with a refusal that names its condition.
One key, one principal
warden holds one key per (project, author identity), created the first time it is asked for. A key never signs for two principals.
Readable by warden alone
The keys are readable only by warden's own service identity: the file backend refuses any other. Nothing warden hands a session is a key.
No person's key
warden holds no person's key and no key of signatio's authority. It never signs a core, an acceptance or any person's act.
Before every signature
Each commit is checked against the core it claims
warden signs only inside a core the owner signed and signatio attested. A commit is signed when all of this holds; otherwise it is refused, and the refusal says which condition failed.
- A head warden cannot vouch for reads unknown, never current.
- A parent warden cannot place is refused: a foreign commit above the session's never rides under the agent's signature.
- Each signed commit leaves one signed, chained event under its commit id, which iter reads back.
Why the parent rule: an agent that rebases onto a main which moved after the core was signed presents a parent warden never saw. warden does not widen its own reach; the owner does, with a child core on the new base that supersedes its parent, and the lineage carries the author's earlier signed work into it.
Principles
A signature withheld, never one given
No agent holds a key
An agent's commit is signed only by warden, with warden's key for that (project, author identity).
Unknown never signs
An unknown head, session, pair or window is a refusal that names its condition, never a signature.
The owner widens the reach
warden never accepts a parent it cannot place. A new base comes as a child core the owner signs and signatio attests.
Absence refuses
When warden is absent, every party that needs it stops. Its silence is never read as current, and no key is copied elsewhere to keep work moving.
What it wrote outlives it
Events are signed and chained, and exported to a governance repo, where they are verified with warden's public keys and without warden.
One interface, by uid
Every party calls warden on a uid-checked Unix socket through warden-proto, frozen by its version.
From core to signature
The owner signs the core; warden signs inside it
The owner works with the warden CLI; an agent's session never calls it. Each step below is one of its commands, except the signature itself, which jj asks for.
Compose
warden composeruns every party's check and writesroot.jsonandsections.jsonfor the owner to sign.Sign and store
The owner signs the root with their own key, outside warden.
warden storetakes the root, the sections and the owner's signature.Attest
warden attestattaches signatio's attestation of the root for one project. Until it is attached, the core signs nothing.Sign a commit
The agent's jj calls
warden-ssh-program. warden runs the checks against the core and signs with the key for that (project, author identity), or refuses.Export
warden exportwrites the chain to warden's export directory, a checkout of the governance repo.Verify, without warden
warden verify-exportchecks an export offline: the core's root under the owner's pin, its attestations under the authority's pin, then the chain, which must continue the state this reader saw before. It exits 0 verified, 1 refused, 4 when the chain was cut or rewritten.
Where it stands
Built, and refusing until the session is known
SignCommit
Refuses every request today, as it must: the session behind the signing program is wuwei's answer (pid → session), and until that answer exists the session is unknown.
Built and tested
The core store and its lineage, the parent rule, the chain, grants, time events, export and offline verification.
Not built
A service identity and owner-only install location for warden, and more than one host (mTLS, node attestation). One local daemon serves one host.
Boundaries
What warden is not
Not a judge
It does not judge paths or margins: iter does. It checks a commit against a core someone else decided.
Not a witness
It writes and exports the chain; custody's witness verifies it.
Not a key store for people
It holds no person's key, never signs a person's act and never writes a jj store.
ontoref Gov
One domain in three layers: how a project governed by ontoref governs itself.
What it is
Gov is ontoref's own domain. It holds the arrangement — what a project's boundary declares, its members, which artefacts a consumer inherits — and the exercise — what work is committed and how an act is delivered. Its name is the root of governance, governability and government, and elects none of them.
Why
A decision, a boundary or a delivery that lives only in someone's memory binds no one. In Gov each one is a declaration a project can be held to, and what holds it is a mechanism, not a good intention.
What for
A project reaches Gov by bond, never by imposition, and takes only the parts it needs. In signature governance each project carries one: the contract, the operations of work, the signature, the dossier, the agreement and the signing on an agent's behalf. Beside them, the capabilities any state of governance uses: the host boundary, deployment, the observed session and the opening by name.
How governance is layered
Protocol · base
ontoref's base: bonds and planes, content bound by digest, the unsigned work order, the check form, and mandatum's types. Every project is written in it; a project can bond without adopting any governance.
Management and governability · gov
The gov domain, in ontoref: how the constellation is organised, its management modes, and decisions held by validators.
Signature governance · foedus
The foedus domain, provided by the foedus project and operated by warden: the agreement, each party's annex and the tests that prove it. A project is here because it is a party to the agreement.
Isolation, provisioning, wuwei and openbyname are capabilities any state of governance uses — the agent's boundary, deployment, sessions, and running tasks locally — not governance: governance needs them, they do not need governance.
Each project chooses its governance mode
Governability (coherence) · ontoref alone
Coherence only: ontoref checks that the declarations hold together. No signature.
Auditable governance · signature
The person signs. It detects a departure; it does not prevent it.
Applied governance · signature + isolation
Signature and isolation together. It prevents.
Part of the same system
signature governance
Custody
A safeguarded project is held to a contract, one axis at a time. Custody states it; implementations hold it.
Its witness verifies the chain warden exports, without warden.
custody.ontoref.dev →
foedus
Many parties, one agreement: each holds its own part, and every condition is proved by a test that fails when it should.
The agreement warden is a party to: warden operates its signatures and events, and does not provide its domain.
foedus.ontoref.dev →
iter
An owner and an agent work in one store. gov decides what each class of change requires; iter carries it out.
Reads the head, the windows and the per-commit events warden signs.
iter.ontoref.dev →
Signatio
A signature grants a declared reach. Signatio produces that grant and checks it.
Attests the cores warden signs inside.
signatio.dev →
SpecDossier
SpecDossier keeps the terms of a Statement of Work, not its execution, and brings them to landing.
Reads its sections and time events from warden and appends its own.
specdossier.dev →
capabilities
Isolation
Owner and agent share the same trees. What the agent may not do, the host refuses.
isolation.ontoref.dev →
openbyname
openbyname lets a link on a web page open a file on your own machine, by name and safely: the link carries only names, and your machine's declarations decide what it may do.
openbyname.dev →
wuwei-observer
Agent sessions, observed without forced intervention.
Its answer from a pid to a session is what lets warden know who is asking.
wuwei.observer →
No agent holds a key.
The only service that signs on an agent's behalf, inside a core the owner signed, and verifiable without it.