Skip to content

Releases: mrSpringpeace/easa-erules

v0.2.1 — agent output contract, provenance, MCP server

Choose a tag to compare

@mrSpringpeace mrSpringpeace released this 10 Aug 11:59

First release since 0.1.2, covering everything in 0.2.0 and 0.2.1. If you are
upgrading, the JSON shape changed — see Breaking below.

pip install --upgrade easa-erules
pip install "easa-erules[mcp]"   # optional MCP server

Breaking

Machine-readable output is now wrapped in a versioned envelope. extract
results moved under rule, refs under refs, fetch under fetch:

{
  "schema_version": "1.0",
  "status": "ok",
  "source": {"regulation_id": "cs-vla", "amendment": "Amendment 1", "sha256": ""},
  "warnings": [],
  "rule": { "…": "" }
}

Commands exit with a status-specific code: ok/no_match 0, not_cached 3,
index_missing 4, fetch_failed 5, source_drift 6, parse_error 7,
error 1. no_match and not_cached are deliberately distinct — an agent
reading an empty result as "this requirement does not exist" is the most common
way an agent pipeline goes quietly wrong.

Real EASA publications are no longer committed to the repository; tests fetch
them from pinned hashes. The ASTM adapter stub was removed — those standards
are paywalled, so the extension point promised something that was never coming.

Fixed

  • query crashed on CS-VLA. Five sections titled GENERAL collided on node
    id and violated the search index's unique constraint. This is the command the
    README's own quick start runs, so 0.1.2 fails on its headline example.
  • Parenthesised designations broke links. AMC VLA 613(c) produced
    ![](assets/amc-vla-613(c).png), which truncates at the first (.
  • --json was not reliably parseablerich soft-wrapped long values, so
    piping into jq could fail.
  • The resolver silently substituted the wrong format. Where no XML existed
    it handed back a PDF labelled as the XML export; cs-p and cs-etso then
    failed several layers down. Both are now marked PDF-only and say so.
  • Repeated ERulesIds were treated as corruption. An AMC or GM covering
    several rules is printed once under each of them with the same id — Part-21
    has 25 such items across 67 occurrences. Identical repeats are now recorded;
    only genuinely conflicting ids are errors.
  • The FAA adapter never resolved references and miscounted topics.

Added

  • Provenance in every output — regulation, issue, amendment, sha256,
    retrieval time, download URL, in JSON, Markdown frontmatter, metadata.yaml
    and conversion-report.json. Where issue or amendment cannot be established
    the field reads unknown and a warning says so; it is never a silent
    null.
  • Cross-references detected in running text. Official EAR packages rarely
    mark citations up as elements, so the reference graph was near-empty on real
    documents. Handles designations Word split across runs, and sub-paragraph
    citations resolve to their parent rule.
  • MCP servereasa-erules-mcp (optional [mcp] extra) exposing
    list_regulations, regulation_info, extract_rule, query_regulation,
    rule_references, fetch_regulation. Same envelopes as the CLI.
  • Experimental FAA branch — 14 CFR via the public eCFR API, six catalogued
    parts, mapped onto the same AST so extract/query/refs work unchanged.
    Tables are flattened and images skipped, but both are reported rather than
    dropped silently (32 tables and 88 images on 14 CFR 25).
  • Scope guardrail in all four skill adapters: this is an EASA source and is
    not a substitute for the FAA certification basis.
  • Catalog health workflow resolving, downloading and parsing all 18 entries
    weekly, reporting drift as an artifact without failing the build. Currently
    18/18, including CS-25 at 966 topics and Part-21 at 1279.
  • NOTICE bounding the MIT grant to the software — regulatory text is not
    re-licensed. EASA content is reproduced with acknowledgement per
    EASA's copyright policy.

Notes

Unofficial toolkit, not endorsed by EASA or the FAA. Always verify critical
interpretations against the official publication.

Full detail in CHANGELOG.md.

v0.1.2

Choose a tag to compare

@mrSpringpeace mrSpringpeace released this 09 Aug 09:33

easa-erules v0.1.2

Packaging fix release (installable wheel/sdist for PyPI and CI).

Install

pip install easa-erules
# or until PyPI Trusted Publishing is configured:
pip install "git+https://github.com/mrSpringpeace/easa-erules.git@v0.1.2"

Changes since 0.1.1

  • Require setuptools ≥ 77 (SPDX license / license-files)
  • Fix CI editable install and publish build failure from dual license-files config
  • Same features as 0.1.1 (designation quality, export metadata, docs, adapters)

Notes

  • License: MIT (code only)
  • Python: ≥ 3.11
  • Unofficial tool — verify against official EASA publications

See CHANGELOG.md and docs/PUBLISHING.md.

v0.1.1

Choose a tag to compare

@mrSpringpeace mrSpringpeace released this 09 Aug 09:32

easa-erules v0.1.1

First public packaging release of the EASA Easy Access Rules toolkit.

Install

pip install easa-erules
# until PyPI publish completes, use:
# pip install "git+https://github.com/mrSpringpeace/easa-erules.git@v0.1.1"

Highlights

  • Deterministic fetch → parse (Flat OPC / Word SDT) → AST → Markdown / JSON / HTML
  • Designation quality on real EAR packages (CS-VLA.1, AMC1 CS-23.2000, …)
  • Rich metadata from official erules-export customXml
  • FTS5 query, extract, refs, validate
  • Agent cookbook + full manual
  • CI + optional live CS-25 smoke

Notes

  • License: MIT (code only; does not re-license EASA regulatory text)
  • Python: ≥ 3.11
  • Disclaimer: Unofficial tool — verify critical use against official EASA publications

Full changelog: CHANGELOG.md