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 serverBreaking
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
querycrashed on CS-VLA. Five sections titledGENERALcollided 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
.png), which truncates at the first(. --jsonwas not reliably parseable —richsoft-wrapped long values, so
piping intojqcould fail.- The resolver silently substituted the wrong format. Where no XML existed
it handed back a PDF labelled as the XML export;cs-pandcs-etsothen
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
andconversion-report.json. Where issue or amendment cannot be established
the field readsunknownand 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 server —
easa-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 soextract/query/refswork 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. NOTICEbounding 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.