Skip to main content

Engineering Argument Language (EAL/3)

EAL/3 records engineering claims, their evidence requirements, reasoning methods, assumptions and objections in reusable source files. A Python host binds declared tools to a separate TOML configuration, collects observations, assesses claims and stores the result. Later sessions and different models can find the same source and reuse compatible observations until they expire.

The Python distribution is engineering-argument-language 3.2.3 and requires Python 3.11 or later; application code imports eal. The supported source language is EAL/3, with newline-terminated fields and typed flows. Stored tool results use EAL/observation-record/1; model-facing summaries use EAL/assessment-packet/2.

Author a bounded argument

Fields end at newlines. Context defaults remove repeated metadata; role-labelled support lists preserve reference types:

language "EAL/3"
environment lab {
  require site == "bench"
}
tool probe {
  version "1"
}
context environment lab, tool probe, max_age 60 {
  evidence reading {
    kind test
    require passed == true
  }
  claim measured {
    statement "The synthetic probe satisfies the declared acceptance condition."
  }
}
reasoning authored {
  method "structured/1"
  rationale "The accepted probe supports this bounded claim."
}
pattern measured_route(c: claim, r: reasoning, e: evidence) = [evidence e] via r => c
apply check = measured_route(c=measured, r=authored, e=reading)
rank reading 700 reviewed "synthetic-review/probe"

For a dependent claim, use [premises measured] via authored => followup. This builds nested derivations through claims, including pattern instances. Argument blocks can contain local declarations. Compound patterns can call nested patterns and recurse over a decreasing typed list. Modules, source imports and pure expressions support larger cases; see scoped composition. See the language reference for required fields, scope inheritance and reviewed ASPIC+ directives.

Install for use

Create a virtual environment, then install a built or downloaded wheel:

python3 -m venv .venv
. .venv/bin/activate
python -m pip install ./engineering_argument_language-3.2.3-py3-none-any.whl
eal --help

After the maintainer creates the v3.2.3 release tag, a pinned source installation is also available:

python -m pip install \
  'engineering-argument-language @ git+https://github.com/emmett08/earl.git@v3.2.3'

PyPI installation becomes available when that version is published: python -m pip install 'engineering-argument-language==3.2.3'. See packaging and releases for artefact verification, supported Python imports and publication setup. Command collectors and custom reasoning methods require a POSIX host; the release workflow is configured to check distribution installation on Linux and macOS.

Original EARL software is available under the Unlicense, permitting commercial and non-commercial use, modification and redistribution. Dependencies and any third-party material retain their own terms; see licence scope.

Develop and check

From a source checkout:

python3 -m venv .venv
. .venv/bin/activate
python -m pip install -e '.[dev]'
make check

The generated ANTLR parser is included. make check-generated verifies it against the grammar; regeneration requires Java. make build creates a wheel and source distribution; installing .[release] adds the tools used by make check-distribution to check both through fresh installations outside the checkout. GitHub workflows run only when manually dispatched.

Select an MCP transport

One FastMCP 4 server exposes the same typed operations over stdio or Streamable HTTP. Stdio is the default. From a source checkout, the maintained example supplies a server configuration:

eal-mcp --config examples/api-load-test/mcp.toml --transport stdio
eal-mcp --config examples/api-load-test/mcp.toml --transport http

Each command launches one process with its selected transport. HTTP defaults to http://127.0.0.1:8000/mcp; eal-host --url http://127.0.0.1:8000/mcp connects to an existing HTTP service. Host configuration resolves CLI options before EAL_MCP_* environment variables, TOML values and defaults. HTTP validates Host and Origin headers before MCP handling. Non-loopback binds and additional non-loopback trusted hosts/origins require a bearer token supplied through a named environment variable. An endpoint exposes one operator workspace or a fixed set of registered entries. Shared local launches coordinate database initialisation and retain acquisition exclusion until owned collector processes have stopped. See MCP and tools for configuration, authentication and model-host usage, and MCP architecture for SOLID responsibilities and execution limits.

Assess a known claim

Register a developer-authored EAL file once, with its default context and the claims the application will use:

eal --workspace . --registry tools.toml register arguments/readiness.eal \
  --entry-id readiness --claim service_ready --context '{"cluster":"staging"}'
eal --workspace . --registry tools.toml find 'service ready'
eal --workspace . --registry tools.toml assess-known readiness --claim service_ready
eal --workspace . --registry tools.toml model-context readiness --claim service_ready \
  --question 'Is the service ready?'

The host reads the current registered source, plans all declared support and objection routes, reuses each compatible fresh observation from the persistent store and calls tools only for missing or expired evidence. It evaluates the declared reasoning methods again at the assessment time. The result includes the checked claim status, a bounded packet, collection and assessment IDs, and counts of reused and newly collected observations. eal history readiness locates prior runs; eal explain ASSESSMENT_ID retrieves the full stored trace for a developer.

The Python API composes the same path:

from eal.knowledge import EALKnowledgeBase, ModelContextAdapter

kb = EALKnowledgeBase(".", "tools.toml")
kb.register("arguments/readiness.eal", entry_id="readiness",
            context={"cluster": "staging"}, claims=["service_ready"])
checked = ModelContextAdapter(kb).prepare(
    "Is the service ready?", "readiness", "service_ready")
messages = checked["messages"]     # Supply to any text-only or tool-capable model.
status = checked["assessment"]["status"]  # Host result, independent of model prose.

The application selects the exact entry and claim. A model needs no EAL parser, tool access or native reasoning mode: the host performs those steps and supplies a bounded packet. For MCP clients, the launcher selects registered entries with repeated eal-mcp --known-entry ENTRY_ID options. That server exposes catalogue search and one-call assessment for those entries. eal-host --known-entry ENTRY_ID accepts one strict JSON operation from a text-only client. The lower-level CLI and MCP source operations remain available for explicit validation, planning, collection and reasoning.

Evidence and time

An authored evidence declaration names a tool, its input, context scope, acceptance predicates and max_age. The actual observation is the tool's JSON output, persisted separately with its original observation time and acquisition identity. assumption.valid_from and valid_until control when an assumption applies to an argument; evidence.max_age controls whether a stored observation is fresh. An expired assumption cannot be made applicable by running the tool again. A source edit creates a new revision; an observation can still be reused when its evidence ID, request, tool binding, environment, context and age remain compatible.

The trusted TOML file binds tool names and versions to commands or JSON files. Tools may query external systems, authenticate or run tests. Command bindings can select inherited environment variables with inherit_env; the host keeps credentials and full outputs out of model packets. MCP and tools defines the request, output, limits and execution identity.

Reasoning and example

method "name/version" inside a reasoning declaration selects an installed method with its own typed input and output requirements. Built-in methods include structured, deductive, inductive, abductive, causal, counterfactual, analogical and temporal reasoning. The host checks their finite contracts, evidence predicates, premise dependencies, assumptions and targeted objections. supported means support under the authored scope and observations; it does not certify an omitted real-world premise. See reasoning modes and the argument service design.

The API load-test example uses synthetic request measurements to exercise the CLI and MCP with a custom typed method. Run make example for its deterministic assessment. The optional ASPIC+ method and EAL-to-ASPIC+ compiler provide a separate bounded formal argument view.

The multi-environment example applies one argument pattern to staging and production, preserving separate observations and reusing compatible records across sessions. The ASPIC+ keyword example exercises every reviewed argumentation directive and the implemented formal theory vocabulary, with reproducible browser snapshots and checks for all three attack types.

The developer and model handover experiment supplies paired allocation, fresh-session model commands, project handover, independent answer scoring, time budgets and analysis that retains failed and missing sessions. Its synthetic fixture verifies the harness; comparative claims require independent cases and live developer and model runs. The automated nano-model pilot provides a separate bounded run across reasoning and native-tool configurations.

Documentation

Document Scope
Argument service Registered workflow, tools, reuse and model packets
Language EAL/3 syntax and evidence versus observation
Argument model Support, objections and propagation
Reasoning modes Built-in method contracts and extensions
MCP and tools Host adapters, persistence and operation schemas
MCP architecture Shared operations, configuration, transports and acquisition coordination
ASPIC+ method Optional formal method and compiler
Integration contract Python, CLI, MCP and record interfaces
Packaging and releases Installation, public Python imports, licensing and manual publication
EAL/3 experiment methodology Practical thresholds, pilot-informed allocation and cumulative fresh-session evaluation
Experiment workflow and inputs One wrapper for free checks, automatic collection segments, annotation hand-off, analysis and evaluation planning
Handover experiment New-session developer and model comparison protocol

Correctness of an authored question and its tool's real-world measurements remains the developer's responsibility. Collector-call reduction is tested; improvements in model accuracy, latency and cost need paired trials across model sizes and sessions.

Metadata

Release files for engineering-argument-language 3.2.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for engineering-argument-language 3.2.3
File Size Uploaded Provenance Actions
engineering_argument_language-3.2.3.tar.gz 760.2 kB With provenance Details for engineering_argument_language-3.2.3.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for engineering-argument-language 3.2.3
File Interpreter ABI Platform Actions
engineering_argument_language-3.2.3-py3-none-any.whl Python 3 none any Details for engineering_argument_language-3.2.3-py3-none-any.whl

Total release size: 973.5 kB

Release files / engineering_argument_language-3.2.3.tar.gz

Download URL engineering_argument_language-3.2.3.tar.gz
Size 760.2 kB
Tags Source
SHA-256 checksum
How to use checksums
d272721144af361f9f0f7837f9ab1024ea1b3e1b9ab8f733a18b600881513b6b
BLAKE2b-256 checksum
How to use checksums
badefb4f1942c38e906c9223b018a75ec3b4be0456de498c566790a997d29440
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / engineering_argument_language-3.2.3-py3-none-any.whl

Download URL engineering_argument_language-3.2.3-py3-none-any.whl
Size 213.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7a76d64308d04145c3bc00687147b7708432b33513e800469ca50a3d0126ad5d
BLAKE2b-256 checksum
How to use checksums
27ba387a3f21e3d17186555042988a1a907e62d819baef0996a54731ea4598e2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Security for engineering-argument-language 3.2.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for engineering_argument_language-3.2.3.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

3.2.3 This release

2 release files Full provenance

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