All four platforms available
Reference · all four platforms availableDocs v1.0 · KernelPort v1 call names and shapes are stable

Concepts

Core concepts

The core concepts of elan1 fit on one page. An AI agent proposes a write intent; only elan1 Govern can turn it into an allow; any rung can return a typed refusal; a committed write is a governed action; and every outcome, allowed or refused, leaves a 16-field proof record written by the kernel.

Everything in elan1 follows from one rule about who may allow a write. This page sets out the model behind the API: what proposes, what allows, what is recorded, and what each layer may and may not do.

Docs v1.0Examples are illustrative specimens, not customer data

Docs menu

The one rule

A model may produce a write intent. It may never produce an allow.

A write intent is a typed proposal to change one record in a system of record: post this journal entry, change this credit limit. Agents, the elan1 Decide Router and people in the console can all produce one.

An allow is elan1 Govern’s decision that the write may happen. It is the end of a climb, not a single check, and only Govern produces one. No model sits on the allow path: a model may draft the change, Decide may propose the answer, and a runtime guard verdict may be an input, but none of them is the allow. If Decide and Govern disagree, Govern wins.

A refusal is a typed “no” from any rung. It is recorded like any other outcome and costs 40% of one governed action, because it still runs every check and writes a proof record. Refusals are information: they show how often agents propose writes your rules do not allow, and which rule said no.

Four layers, one write path

elan1 is one write path with four layers. Two propose, two assure, and only one allows.

The four layers, their verbs, meters and how each reaches Govern
LayerRoleOwns these verbsMeterHow it meets Govern
elan1 WorkProposes what should changechange · apply · undoCreditKernelPort. Mode A when hosted on ERPNext; Mode B as Attach.
elan1 DecideProposes the answeranswer · score · route · escalateDecisionKernelPort, Mode B. Writes go to Govern as intents.
elan1 GovernAllows, refuses, recordsallow · refuse · approve · seal · proveGoverned action; a refusal costs 40% of oneIs the door: KernelPort, the MCP server and the HTTP API.
elan1 RunCarries every call under contractcontract · conform · substitute · meterNode-yearfusion.*/v1 underneath; asks Govern for a gate check at substitution step 7.3.

Verbs belong to their owner. Only Govern allows, refuses, approves a write, seals or proves. Work never says a change was “approved by the agent”; Decide never approves a write and is never a second kernel; Run is never the subject of allow, refuse, gate, proof or seal. Wherever another surface shows a Govern decision, it carries one line: “Checked and recorded by elan1 Govern.”

Two seams. Nowhere else.

Layers meet in exactly two places, and CI fails the build if a third crossing appears. Neither seam is a convention; each is the only path that exists.

Seam 1 · into GovernKernelPort v1Six calls: define, assert, seal, verify, scope, refuse. Work and Decide reach Govern this way, and so do third-party agents, through the MCP server (34 tools) or the HTTP API. KernelPort reference.
Seam 2 · into Runfusion.*/v1Ten capability contracts, each with two licence-clean implementations. A call names its contract in the X-Fusion-Contract header, never a vendor. Run never depends on Govern. Contracts reference.

The separation has a practical consequence. Infrastructure underneath can be swapped — a model gateway, a vector store, a tracing backend — without touching the write path, because nothing above the seam knows which implementation is in service.

Write intents and outcomes

A write intent names the write type, the declaration it claims to fall under, the actor, the record it would change and its expected version, and the payload. Its identifier, write_id, becomes field F04 on the proof record whatever the outcome, and doubles as the idempotency key: replaying the same write_id returns the original outcome, never a second write.

textThe life of one write intentTEXT code: The life of one write intent
write intent            proposed by an agent, the Decide Router or a person
  │
  ▼  KernelPort · assert
Right Path              0b STOP → 1 IDENTITY → 2 WRITE DOOR → 3 PRE-GATES
                        → 4 evaluate() → 5 GUARDRAIL → 6 AUTONOMY
  │
  ├─ refused            typed code · proof record · meter 0.4 governed action
  ├─ escalated          obligation to a named approver · proof record
  │     └─ approved → continues at rung 7 · refused or expired → refusal
  ▼
7 ACT                   single writer · sandbox first · single-use credential, 10 minutes
8 PROOF                 16 fields · Seal v6 · chained by prev_digest
9 METERED               exactly one meter event: one governed action
Schematic. The rungs are fixed; field names are illustrative.

There are three outcomes — committed, refused and escalated (waiting on a named person) — and every one of them writes a proof record. A platform failure is a fourth case that is ours, not a rule, and is never billed. Handling the outcomes shows each response.

An undo changes the books too, so it is a write intent of its own: it takes the same path and leaves its own record. Nothing in elan1 edits history in place.

Declarations: rules as data

A declaration is a process’s rules in seven versioned blocks: what may change, under which gates, and who approves. The blocks are identity, shape, permissions, write_types, gates, proof_binding and channels. Declarations are written in Declaration Studio in elan1 Govern, or registered through define.

Every proof record names the declaration it was checked against (F06) and the version in force at the time (F07). Change the rules and the version moves; old records still point at the rules that applied to them. Registering or changing a declaration is itself a governed write under dual control. elan1 Decide’s Decision Packs compile to the same seven blocks, so there is one rule format across the layers.

A pack — ledger1 for MCA, invoice1 for GST, collect1 for RBI — is configuration of Govern for a rule set: declarations and gate parameters, never code and never a brand. Declarations reference.

The Right Path

The Right Path is the fixed route every consequential write takes, from rung 0b STOP to rung 9 METERED. Five plain steps map onto ten rungs, and any rung can refuse.

  1. Ask — 0b STOP, 1 IDENTITY, 2 WRITE DOOR. Writes are not stopped; the asker is identified; the write type exists at an explicit version.
  2. Check — 3 PRE-GATES, 4 evaluate(), 5 GUARDRAIL. Nine pre-gates run against your own data, six never skippable; versioned rules decide with no model; the blast radius is measured.
  3. Approve — 6 AUTONOMY. Above the actor’s autonomy ceiling, a named person who is not the asker decides.
  4. Act — 7 ACT. In Mode A, a single writer makes the change with a single-use credential that lasts 10 minutes, sandbox first. In Mode B, your system writes.
  5. Record — 8 PROOF, 9 METERED. A 16-field record, chained to the one before it, and exactly one meter event.

Rungs 3 to 8 cannot reach a model client; conformance test C1 checks the import graph on every build. The Right Path, rung by rung.

Approvals and autonomy

Every actor holds an autonomy level from A0 (observe) to A5 (act broad); there is no A6. A missing grant resolves to A0, never to a tenant default. At rung 6, the level the actor holds now is compared with what the write type needs. Below the ceiling the write continues; above it, Govern raises an obligation for a named approver.

Approvals are named and step-up. The approver is never the asker, and sees the change, the gate results and the policy version before deciding. If nobody answers before the approval expires, expiry is a refusal. Raising an actor’s autonomy level is itself a governed write, approved by two people. Earned autonomy uses a deterministic score, with no model involved. The level a write actually ran at is sealed into its record as F11.

The proof record

Every outcome — committed, refused or escalated — writes a proof record of exactly 16 fields under Seal v6. “No seventeenth field, ever.” The record is hashed with SHA-256 over a length-prefixed preimage, and the digest becomes the next record’s prev_digest (F03). Chains are per tenant and never cross tenants.

The record keeps a hash of the payload (F14), not the payload, so personal data stays out of evidence; and a hash of the vocabulary the write was expressed in (F15), so meanings cannot drift unnoticed. Evidence rows cannot be updated or deleted.

At L1 the chain is tamper-evident: change a past record and its digest no longer matches the one its successor carries. It is evident to you; it is not signed. All 16 fields and the recompute.

Modes and assurance levels

Two separate questions decide what elan1 may claim about a write.

Mode · who holds the credentialMode A · EnforcedIn-process; Govern holds the write credential. No write reaches the system of record without a gate decision and a proof record. The only place we say enforced.
Mode · who holds the credentialMode B · Attested advisoryOver MCP or HTTP; your system holds the credential. Every write intent is evaluated against your rules and recorded. It cannot stop a write.
Level · what the evidence provesL1 Guarded · L2 AttestedL1: tamper-evident to you. From L2: signed with Ed25519, anchored to two RFC 3161 authorities, and checkable offline with a free verifier. Both available.
Level · what the evidence provesL3 ProvenEvidence that survives the vendor. Reached on auditor acceptance: it begins when an outside auditor accepts an L2 bundle in writing. It has no date.

Levels are levels of a claim, not product tiers. Modes and assurance levels sets out what each combination lets you say.

Tenancy and residency

A tenant is the unit of isolation: every token, declaration and chain belongs to exactly one, and field F01 names it on every record. scope sets and reads what a caller may do: tenant, residency domain, write types and autonomy ceiling.

A residency domain is a region with its own database and, from L2, its own signing key. Today there is one: in, on AWS ap-south-1 (Mumbai) across three zones. A cross-domain query is not slow; it is impossible. New regions open only on a signed contract, never a forecast.

The meter

Each layer charges for one unit, never per seat and never per outcome: elan1 Work meters credits, elan1 Decide meters decisions, elan1 Govern meters governed actions and elan1 Run meters node-years. A credit in Work is a rendering of governed actions, never a separate count, so one change is never paid for twice.

A governed action is one consequential write that passed the Right Path and was committed. It produces exactly one meter event at rung 9. A refusal produces a meter event of 0.4 of a governed action, and a database check holds it there. A platform failure is never billed. Prices are on the pricing page, exclusive of GST.

Failure behaviour: fail toward a human

When anything is unclear or unavailable, elan1 stops and asks a person. Stopping allows is the safe direction: a delayed change costs time, while a wrong change committed to the books costs far more.

  • If elan1 Govern is unreachable, allows stop and changes wait for a person. elan1 Run tooling fails closed.
  • If the runtime fails, writes stop.
  • If nobody answers an approval before it expires, expiry is a refusal.
  • If a gate cannot reach the data it needs, it does not guess; the write is refused or held.
Callers should treat an unanswered request the same way: retry with the same write_id, and if elan1 stays unreachable, hand the change to a person rather than writing without a decision.

Concept map

Where each concept appears in the API and on the record.

Concepts, the KernelPort call that handles them, the proof-record fields that carry them, and where to read more
ConceptKernelPort callProof-record fieldsRead
Write intentassertF04 write_id · F05 write_typekernelport
DeclarationdefineF06 declaration_id · F07 declaration_versiondeclarations
Policy rulesassert (rung 4)F08 policy_versionright-path
Actor and autonomyscope · assert (rung 6)F09 actor_id · F10 actor_kind · F11 autonomy_levelright-path
Record changedassert (rung 7)F12 record_id · F13 record_versionright-path
Refusalrefuse · assertEvery field; the outcome is a refusalerrors-and-refusals
Proof and chainseal · verifyF01 tenant_id · F02 seq · F03 prev_digest · F16 recorded_atproof-record
Evidence hygienesealF14 payload_hash · F15 lexicon_hashproof-record

Every term on this page is defined in one sentence in the docs glossary.

// SEE IT

Watch one write take the Right Path.

A write intent climbs every rung, stops at a named approver, and ends in a record. The refusal branch writes a record too, metered at 0.4 of a governed action.