Skip to main content

Bulla

Portable, recomputable receipts for consequential agent actions.

Bulla creates portable, recomputable receipts for consequential agent actions. Each receipt records what happened, who authorized it, what bounds applied, what evidence is carried, what a relying party decided, and where challenge or remedy goes. Verification reports what is proven and what remains unresolved; it does not turn a signed record into worldly truth.

A bulla was the clay envelope sealed around a record so it could survive the absence of the parties who made it. Bulla applies that discipline to agent actions: the action may finish in milliseconds, but its authority, evidence, limits, and challenge path remain available to the next system or institution.

  • Glyph is the open ActionReceipt format and verification contract.
  • Bulla is the Apache-2.0 Python reference implementation.
  • Res Agentica is the research program behind the experimental semantic and institutional profiles.

Core installation has no heavy numerical or model dependency. It requires Python 3.10+ and PyYAML.

Create and verify one receipt

python -m pip install bulla

bulla receipt create \
  --type demo.write \
  --subject path=/tmp/example.txt \
  --principal did:web:example.invalid:agent \
  --policy policy://demo-v1 \
  --scope path=/tmp/example.txt \
  --evidence diff=sha256:1111:self_asserted \
  --forum-endpoint https://example.invalid/challenge \
  --forum-root fixture:independently-pinned-root \
  --out receipt.json

bulla receipt verify receipt.json --format json

The verifier reports independent dimensions rather than collapsing them into a misleading Boolean:

integrity            VERIFIED
authenticity         UNVERIFIED
authority            UNAUTHENTICATED
scope                 NOT_APPLICABLE
grounding             SELF_ASSERTED
recourse              NAMED
reachability          UNVERIFIED
reliance_decision     NOT_COMPUTED

This output is pinned by a checked CLI fixture. The exact values depend on the receipt. An unsigned example can have verified hash integrity while authenticity and authority remain unverified. A named forum can be present while its operational reachability remains unverified. Those distinctions are the point.

The same stable boundary is available from Python:

from bulla.action_receipt import build_action_receipt, verify_receipt
from bulla.envelope import Authority, Bounds, Forum, Recourse, RecourseEnvelope, Remedy

receipt = build_action_receipt(
    action={"type": "demo.write", "subject": {"path": "/tmp/example.txt"}},
    diagnostic_ref={"status": "deferred"},
    envelope=RecourseEnvelope(
        authority=Authority(
            principal="did:web:example.invalid:agent",
            policy="policy://demo-v1",
        ),
        bounds=Bounds(scope="path=/tmp/example.txt"),
        recourse=Recourse(
            challenge_window="P30D",
            forum=Forum(
                log_endpoint="https://example.invalid/challenge",
                trusted_root_ref="fixture:independently-pinned-root",
            ),
            remedies=(Remedy(
                rung="recompute",
                verifier="bulla receipt verify",
                anchor="hashes.content",
            ),),
        ),
    ),
    evidence_refs=({
        "name": "diff",
        "hash": "sha256:1111",
        "grounding": "self_asserted",
    },),
    timestamp="2026-07-20T00:00:00Z",
)

result = verify_receipt(receipt.to_dict())
assert result.ok
assert result.authority_authentic == "unauthenticated"
assert result.effective_grounding == "self_asserted"

The final assertions are deliberate: recomputable integrity did not upgrade an unsigned authority envelope or self-asserted evidence into stronger claims.

The implementation-independent checker needs no Bulla import:

python spec/vectors/independent_check.py

It recomputes the frozen ActionReceipt vectors from the normative specification and fails closed on structural tampering.

What 0.44.1 contains

Surface Maturity Availability What it establishes
ActionReceipt v0.2 Stable and normative PyPI 0.44.1 Canonical action records, four hash preimages, evidence references, and recourse envelopes
ActionReceipt v0.3 authority binding Opt-in released draft PyPI 0.44.1 The content signer signed the exact authority, bounds, and recourse envelope
Delegation and bounds conformance Opt-in released draft PyPI 0.44.1 Separate chain, principal, policy, scope, time, revocation, and action-bounds dimensions
Reliance receipts Released implementation PyPI 0.44.1 A relying party records and recomputes its selected reliance policy and decision
Release coverage Released implementation PyPI 0.44.1 Published-package actions missing contemporaneous receipts relative to the PyPI anchor
Routed inference Experimental profile Source and fixtures Retention of declared bindings through one router and one provider; no live-provider claim
Semantic invention and finality Experimental research PyPI 0.44.1 under bulla.experimental Checked finite predicates, partial safe regions, typed abstention, and staged finality under declared closure
Claim Flow and precedent Experimental research Claim Flow v0.4 in PyPI 0.44.1; Generalization v0.5 source only Typed appraisal, forum, precedent, applicability, and settlement transitions; no external legal-validity claim
Golden qualification Experimental methods Finite checker core in PyPI 0.44.1; benchmark packets source/research Typed abstention, mutation, portability, and custody methods; no external results
Independent witness plurality Blocked Not available Local checkpoint mechanics exist; independently operated witnesses do not

The canonical, generated status table is What Exists Today. It distinguishes released code, released drafts, experimental mechanisms, research results, and external gaps.

The answerability flow

record  ->  verify  ->  rely  ->  retain  ->  challenge
  1. Record. Capture the action, authority, bounds, evidence, and recourse.
  2. Verify. Recompute the canonical hashes and every supported verification dimension from pinned inputs.
  3. Rely. Apply an explicit reliance policy and receipt the relying party's own decision.
  4. Retain. Bind the record to an independently obtained root or other declared persistence mechanism when occurrence coverage matters.
  5. Challenge. Preserve the forum, window, and remedy ladder needed to contest or correct the action.

Bulla's security foundation as four separate requirements is deliberate: authenticity, inclusion under a root obtained independently of the issuer, independently persistent witnessing where occurrence coverage is required, and an executable recourse path. A deployment must report which requirements it actually establishes; one does not stand in for another.

The format is intentionally open. A second implementation can produce or verify the same receipt without importing this package.

What verification does not prove

A valid receipt is evidence about a record and the checks actually performed. It does not by itself prove:

  • that the described event occurred in the world;
  • that carried evidence is truthful or complete;
  • that an authority policy is legally or institutionally sufficient;
  • that every relevant action received a receipt;
  • that a named forum or remedy is operationally reachable;
  • that a local registry is independently witnessed;
  • that an experimental finite model is complete in an open world.

Callers should read the named dimensions or use an authored reliance policy. ReceiptVerification and the other multidimensional verdict objects reject Boolean coercion so if verify_receipt(...): cannot silently accept an ambiguous result.

Documentation

Legacy composition diagnostics

Bulla still includes its original tool-composition diagnostics, convention packs, bridges, translators, MCP scanner, and witness-geometry utilities. Their coherence fee is retained as a model-relative disclosure/omission measure: it counts convention dimensions hidden from a declared observable seam. Current execution-derived evidence does not support treating it as a mismatch, runtime-failure, or safety oracle, and the default enforcement path does not do so.

Legacy theorem and run provenance can make a scoped disclosure recommendation recomputable; it does not turn that recommendation into a safety proof or an execution-failure prediction.

See Legacy composition diagnostics and Falsifications for the surviving scope and the claims that were withdrawn. SEAM remains part of the program's research lineage; it is not the product's current trust root.

Research frontier

The repository also carries experimental profiles for semantic invention, partial RELY/REFUSE envelopes, Semantic Finality, correct abstention, typed Claim Flow, and reason-bearing precedent. They reuse ordinary ActionReceipts but are not stable package APIs and have only internal, model-relative evidence unless their status page says otherwise.

The research-program ledger currently records 56 Aristotle-verified theorems with no sorry across its named formal abstractions. That is theorem-checking provenance, not independent validation or a proof of the Python implementation; the PyPI package does not vendor Lean.

The public research records are:

License and security

Bulla is licensed under the Apache License 2.0. Report vulnerabilities privately through GitHub Security Advisories or by following the security policy.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bulla-0.44.1.tar.gz (4.9 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bulla-0.44.1-py3-none-any.whl (720.5 kB view details)

Uploaded Python 3

File details

Details for the file bulla-0.44.1.tar.gz.

File metadata

  • Download URL: bulla-0.44.1.tar.gz
  • Upload date:
  • Size: 4.9 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for bulla-0.44.1.tar.gz
Algorithm Hash digest
SHA256 0fa4debb1a575f22cd5f3a547c2a89305919aaffe01f47863c7fd63ca87ef139
MD5 8c6c36f3ba6a0193e0c948b4ff828512
BLAKE2b-256 472df7404ddd049a85c866b1c4826e965c1cb4325cd0a3c887c665490cb6a9cf

See more details on using hashes here.

Provenance

The following attestation bundles were made for bulla-0.44.1.tar.gz:

Publisher: publish.yml on jkomkov/bulla

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file bulla-0.44.1-py3-none-any.whl.

File metadata

  • Download URL: bulla-0.44.1-py3-none-any.whl
  • Upload date:
  • Size: 720.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for bulla-0.44.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8195b4f7e710591a062efab9f294b05c71d48f312151da942268f6be669d0ef3
MD5 db1af64d9ce416181941618bf987975f
BLAKE2b-256 dd42b4cac408fb0539ba83dece5a54e5cdeec6de56059177bcee32493794ef42

See more details on using hashes here.

Provenance

The following attestation bundles were made for bulla-0.44.1-py3-none-any.whl:

Publisher: publish.yml on jkomkov/bulla

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.48.0

2 files

0.47.1

2 files

0.46.0

2 files

0.45.1

2 files

0.44.4

2 files

This release

0.44.1 This release

2 files

0.44.0

2 files

0.43.0

2 files

0.42.0

2 files

0.41.0

2 files

0.40.0

2 files

0.37.0

2 files

0.36.0

2 files

0.35.0

2 files

0.34.0

2 files

0.33.0

2 files

0.32.0

2 files

0.24.0

2 files

0.23.0

2 files

0.22.0

2 files

0.21.0

2 files

0.20.0

2 files

0.19.0

2 files

0.18.0

2 files

0.17.0

2 files

0.16.0

2 files

0.15.0

2 files

0.8.0

2 files

0.7.1

2 files

0.7.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page