The dossier
A file in the project, found only where the project declares
What is SpecDossier's own is the dossier (ADR-001). A project declares where its dossiers live in .governance/dossiers.ncl, and SpecDossier finds them by that declaration and nowhere else (ADR-002). The format is schemas/dossier.ncl; the governed document is held by reference, and its content never enters the dossier:
- governs is one document of kind
'WorkOrder,'Adror'Biop, or a list of several, related only bypart_ofandafter. Nothing models priority (ADR-008). - closing is declared at opening: a signature
'Requiredor'None, at least one invited party aswho:hat, and an optional expiry that closes it'Blockedor'Done. - point answers a part (
anchor) of the bytes itread, by digest. Its disposition is'Incorporated,'Declinedwith a reason, or'Routedto somewhere; the contract refuses the last two without them. - agreed fixes the version by its sha256, names who answers for it, carries every point of its round and the digest of each pre-flight report it was agreed on. With several documents, the set is agreed by the digest of its manifest: one
<digest> <path>line per document, sorted by path.
A dossier's stage — opened, agreed, diverged — is derived from its files on each reading. A governed document that moves after its agreement reads diverged, naming both digests; restored, it reads agreed again.
Principles
It exposes; it does not act and does not judge
Exposes, never acts
It does not sign, implement nor present a work for execution, and it never decides what is valid. Every stage it shows is recomputed from the files, by the function a reader without the service uses.
No judgment on the content
What it establishes is mechanical identity: whether a file is still the agreed one by its digest, whether a signature verifies. A work whose content is to be questioned goes back to an agent working with the destination project.
Nothing is left behind
A point stays owed until the agreement disposes of it. A new revision expires the reading, never the debt, and specdossier agree is refused while any point is owed.
Responsibility is a person's
An agent may draft, supervise a round and return a document. A person opens a dossier, agrees its version and answers for it; the agreement is written in their copy (ADR-003).
No signer's key is held
Signatures are made on the signer's machine, out of band. The authority the project declares verifies and attests them (ADR-004). The only key the service holds is its own, for the commits and log entries it writes.
Identity is the authority's
Who someone is and which hats they hold is answered by signatio, verified against pinned keys. The service keeps no table of people; without an authority it answers only one operator on the loopback.
Evidence shown as produced
The pre-flight is a command the project declares, run in the person's copy at each round and bound to the revision's digest. Its rows are shown as written, unknown included; the only count made is of rows that declare blocks = true (ADR-007, ADR-009).
Dependencies point one way
It reads ontoref's SOW, ADR and biop, signatio's answers and openbyname's protocol as published, and imports none of their code. A copy of the repository builds and verifies alone; each dependency is optional.
One path of actions, many faces
Every action on a dossier is a verb of the CLI, or the core action that verb calls. The web handler calls that same action; no face is a second path.
A dossier, end to end
From opening to a landing in the signed log
Open
specdossier openwrites the dossier where.governance/dossiers.ncldeclares, on one governed document or several, with its closing terms and invited parties. The clock is never read: the day is an argument.Round
specdossier roundputs the document, as it is in the person's copy, before the service: its bytes, their digest, and each pre-flight report run there. The round is transient and the service's; it is not mirrored, and losing it loses no agreement. The service never reads the project for a round.Remark
Each invited party, a guest included, logs in with the authority the round names and raises points on the parts of the document, each bound to the digest it read and carrying their own Authorize decision. A guest reads exactly what was put before them.
Hand
specdossier handgives a supervising agent the document with every point on the part it answers. What the agent returns is put as a new revision; it agrees nothing.Agree
specdossier agreewrites into the dossier, in the person's copy, the digest of the version the round shows and every point dispositioned asN=incorporated,N=declined:<reason>orN=routed:<where>. It is refused naming each point still owed.Attest
When the closing asks for a signature,
specdossier attesttakes the signer's detached minisign signature over the agreed document — or over the set's manifest — to the round's authority, and prints the attestation once it verifies against the authority's pinned key.Land
specdossier landsends the agreed dossier. The service pushes it, the governed document byte for byte and the attestation to a branch under the prefix the project granted, never its main one, in one commit signed with its own key (ADR-005). Merging the branch is the project's decision.Verify
Every landing is an entry in a log only the service writes, each a commit signed with its key.
specdossier verify-logchecks a clone of it against anallowed_signersfile; a tampered entry fails to verify.
After the agreement, a dossier's reading adds the trail of each SOW it governs as ontoref reads it: the registry's row, agreed_in, the signatures and the receipt. No landed stage is derived by SpecDossier, and nothing agreed in another dossier is claimed (ADR-011).
Components
A CLI in the person's copy, a service that orders and gives access
specdossier
The CLI: open, round, remark, hand, agree, attest, land, apply, verify-log; and the readings dossier, view, card, stage, in Markdown, HTML or JSON.
specdossierd
The service: rounds, sessions, intents and link tickets in redb, the signed log of landings and redemptions, and the web face at /r/{id}. What each person owes is derived from the rounds on each request and never stored (ADR-013).
A reader
readonly = true mounts the reads and nothing else: the levels, their SOWs and views. No login, round, remark, intent or landing route exists on it (ADR-014). It may declare an authority to know who reads, and still mounts no act (ADR-018).
The shared face
The owner prepares an act on the web as an intent, single-use and expiring. openbyname carries their consent as a ticket the service issues and redeems once, and specdossier apply runs the act in their copy (ADR-006, ADR-012). Open and attest stay the CLI's.
Templates and languages
Every page is a minijinja template styled by UnoCSS with daisyUI and driven by htmx, embedded in the binary; no page loads anything from a CDN (ADR-015). The faces speak English and Spanish through Fluent catalogs; the work stays in its own language (ADR-016).
desk
The optional desktop app (Tauri), a second window on the installed CLI, never a second path to the service. It has no code yet.
Every change to the workspace is a SOW, signed and landed with its signed receipt. What must keep holding is a standing SOW paid at every commit: a pre-commit gate asks ontoref what live SOWs owe and refuses the commit when one is red (ADR-010).
Boundaries
What SpecDossier is not
Not a signer
Nothing in its normal build can produce a signature. Signing belongs to signatio and to the signer's machine; SpecDossier only verifies.
Not a judge
It does not run a work's checks, refute them, or rule on whether they are adequate. That is ontoref's, which evaluates and proposes a plan with its context and modes.
Not the record
What a dossier agreed lives in the project's files. The service keeps no register of projects, and nothing it stores becomes the record.
Not an executor
It keeps the terms, not the execution. What follows a landing — signing, implementing, merging — is the project's.
Not a scheduler
Priority is decided at a point, by who answers for it. SpecDossier does not model it; it records who resolved, when, and on what.
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.
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.
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.
iter.ontoref.dev →
Signatio
A signature grants a declared reach. Signatio produces that grant and checks it.
signatio.dev →
warden
No agent holds a key: warden signs for it, only inside a core the owner signed.
warden.ontoref.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.
wuwei.observer →
Agreed by its digest. Landed through the granted channel.
Every point dispositioned, every version fixed by its digest, every landing signed and verifiable offline by anyone with the service's public key.