Skip to main content

Neutral, open, implementation-independent boundary contract for the Actenon ecosystem.

Project description

actenon-protocol

The neutral, open, implementation-independent boundary contract for the Actenon ecosystem and compatible third-party implementations.

Protocol version: 1.0.0 (see VERSIONING.md) Canonicalisation profile: ACTENON-JCS-STRICT-1 (see canonicalisation/ACTENON-JCS-STRICT-1.md) Licence: Apache-2.0 (see LICENSE)


What this repository IS

actenon-protocol is the wire contract for consequential-action execution. It defines the artefacts that cross the trust boundary between an authority broker (such as actenon-permit) and a protected resource (verified by actenon-kernel or any compatible verifier).

It owns:

  • Protocol versioning
  • Identifier formats and prefixes
  • Execution modes (brokered, resource_owned)
  • Proof claim names
  • Refusal codes
  • Verification outcome codes
  • Execution outcome codes
  • Canonicalisation profile identifiers
  • ExecutionProof
  • ExecutionReceipt
  • ExecutionRefusal
  • Trusted issuer metadata
  • Evidence-linkage fields
  • Conformance test vectors
  • Generated Python types
  • Generated TypeScript types
  • OpenAPI-compatible schema components

What this repository is NOT

It is not a fifth commercial product. It is the boundary contract.

It does not own:

  • Policy evaluation
  • Approvals
  • Budgets
  • Tenant models
  • Credential storage
  • Provider adapters
  • Cloud persistence
  • Billing
  • The complete hosted AuthorisedExecutionIntent lifecycle
  • Action execution

Those concerns belong to actenon-permit, actenon-cloud, actenon-kernel's execution adapters, or the resource owner. The protocol repo defines what crosses the boundary; it does not define what happens on either side of it.


Trust boundary model

        ┌─────────────────────┐         ┌─────────────────────────┐
        │  Authority broker   │         │  Protected resource     │
        │  (e.g. Permit)      │         │  (resource-owned        │
        │                     │         │   verifier, e.g. Kernel)│
        │  Issues:            │         │                         │
        │   - authority       │         │  Verifies:              │
        │   - scoped grants   │         │   - ExecutionProof      │
        │  Produces:          │         │     (not the intent)    │
        │   - ExecutionProof  │ ───────▶│                         │
        │     (cryptographic  │  proof  │  Executes if valid;     │
        │      bound to one   │         │  refuses if not.        │
        │      exact action)  │         │                         │
        └─────────────────────┘         │  Emits:                 │
                                        │   - ExecutionReceipt    │
                                        │   - ExecutionRefusal    │
                                        └─────────────────────────┘

The boundary artefact is ExecutionProof. It is not the developer-facing AuthorisedExecutionIntent. The intent is the claim; the proof is what gets verified.


Execution modes

The protocol defines two execution modes. The mode is an explicit field on every receipt, refusal, and SDK result model. It is never inferred from deployment location.

Mode Semantics
brokered The deployment obtains or resolves a scoped provider credential, verifies the exact-action proof, and invokes the protected provider or action adapter. The broker holds the credential; the resource trusts the broker's verification.
resource_owned The protected resource independently receives a request and proof, verifies it using its own Kernel deployment or compatible verifier, and decides whether to execute. The resource does not trust any broker's assertion; it verifies the proof itself.

See protocol/03-execution-modes.md for the full semantics.


Refusal taxonomy

The protocol defines 20 canonical refusal codes, organised into a two-layer disclosure model:

  • Public-safe codes (disclosed_code) — always safe to return to untrusted callers.
  • Detailed codes (internal_code) — only emitted when the disclosure policy permits (trusted callers, internal logs).

See protocol/07-refusal.md and refusals/catalogue.v1.yaml.


Repository layout

actenon-protocol/
├── README.md                      ← you are here
├── LICENSE                        ← Apache-2.0
├── SECURITY.md
├── GOVERNANCE.md
├── VERSIONING.md
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── pyproject.toml                 ← Python types + conformance runner
├── package.json                   ← TypeScript types
├── Makefile
├── protocol/                      ← human-readable specifications (Markdown)
├── schemas/                       ← JSON Schemas (source of truth for wire format)
├── refusals/                      ← machine-readable refusal-code catalogue
├── identifiers/                   ← machine-readable identifier-prefix registry
├── canonicalisation/              ← ACTENON-JCS-STRICT-1 profile specification
├── conformance/                   ← test vectors + Python conformance suite
├── python/                        ← generation-ready Python types (pydantic)
├── typescript/                    ← generation-ready TypeScript types
└── openapi/                       ← OpenAPI 3.1 components

Quick start

Python (conformance runner + types)

python -m pip install -e ".[dev]"
python -m pytest conformance/python/ -v

TypeScript (types only)

cd typescript
bun install
bun run typecheck

Validate a fixture against the schemas

python -m actenon_protocol.validate schemas/execution_proof.v1.json \
    conformance/vectors/proof/valid/minimal_brokered.v1.json

Compatibility with existing Actenon repos

This protocol is designed to be wire-compatible with the existing actenon-kernel, actenon-permit, actenon-cloud, and actenon-scan repositories at the audited commits (see CHANGELOG.md for the audit baseline).

Specifically:

  • Canonicalisation profile: ACTENON-JCS-STRICT-1 is the canonical label. The legacy RFC8785-JCS label (used by historical proofs in Kernel) is accepted but deprecated. The doc-only label actenon-jcs-sha256-v1 (which no implementation accepts) is removed.
  • Refusal codes: The 16 existing FailureCode enum members in actenon-kernel/actenon/outcomes.py are preserved as aliases. The 20-code catalogue in this repo extends (does not replace) the existing taxonomy.
  • Identifier prefixes: Existing prefixes (grant_, act_, intent_, req_, ed25519-) are preserved. New prefixes (proof_, rcpt_, rful_, exec_, authz_) are added for artefacts that did not previously have a canonical prefix.

See CHANGELOG.md for the full compatibility matrix.


Governance

See GOVERNANCE.md. In summary:

  • The protocol is governed by a protocol maintainer team, not by any single implementation.
  • Breaking changes require a major version bump and a 90-day deprecation period.
  • Security fixes are backported to the previous major version for 60 days.

Reporting a vulnerability

See SECURITY.md. Do not open public issues for security vulnerabilities.


Licence

Apache-2.0. See LICENSE.

Project details


Download files

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

Source Distribution

actenon_protocol-1.1.0.tar.gz (36.7 kB view details)

Uploaded Source

Built Distribution

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

actenon_protocol-1.1.0-py3-none-any.whl (45.9 kB view details)

Uploaded Python 3

File details

Details for the file actenon_protocol-1.1.0.tar.gz.

File metadata

  • Download URL: actenon_protocol-1.1.0.tar.gz
  • Upload date:
  • Size: 36.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for actenon_protocol-1.1.0.tar.gz
Algorithm Hash digest
SHA256 94395185508a0cbb23ea375c7079c70ed40a12ee73111971360ef21d61802994
MD5 876c27914a596af409f767c45e8ea38a
BLAKE2b-256 835bc886710d55e03146f3b94ad9391ce9fd9d2daba0f6bd29b04d083d58dd05

See more details on using hashes here.

File details

Details for the file actenon_protocol-1.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for actenon_protocol-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ee6d1dbf8bd5c8a01a942d6e3e852d3d3e1f90aa6b83112631f0102d2643682c
MD5 6e20011aaf94a7cfc190d7e3f989bca2
BLAKE2b-256 75359bf7b40600fe725295125e6a554ec6bcd12fb1060b287feb7f19118a72f3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page