Development state as of 0.3.0. This is a working log, not documentation — for how to use the tool see the README and the manual.
| Area | Status | Notes |
|---|---|---|
| Package reader (Flat OPC + ZIP/DOCX) | Done | OPC .rels paths, relative media targets |
| EASA parser → Regulation AST | Done | Fixtures (erules:topic) and real EAR Word SDT topics/headings |
| Deterministic IDs + normalize | Done | Stable, collision-free ids; whitespace/heading/list/ref passes |
| Markdown / JSON / HTML export | Done | Split-by-rule MD; frontmatter; HTML document |
Registry + fetch + cache |
Done | YAML catalogs; landing-page resolver; sha256 metadata |
| Multi-version inventory + integrity | Done | Exact slugs, remote freshness/deep verify, safe deletion |
extract / query / refs |
Done | Agent-oriented JSON; FTS5 index with invalidation |
| Outline / rule context / assets | Done | Breadcrumbs, neighbours, AMC/GM map, safe fragments |
| Search schema v2 | Done | Per-amendment DB, filters, facets, exact total, subtree scope |
| Parse memory LRU | Done | Thread-safe, bounded to 3 document versions, explicit invalidation |
| Validation + conversion report | Done | Topic count vs source; assets; duplicates; unresolved refs |
| Golden + unit tests | Done | Fixtures + frozen goldens |
| Complex tables (colspan/rowspan) | Improved | HTML path emits merge attrs; nested tables; header-row fix |
| Designation quality on real docs | Done | Export source-title + first-line extract |
| Real-doc metadata | Done | erules-export customXml by sdt-id; core props; unique ERulesIds |
| Vector/embeddings search | Out of scope | FTS5 only, by design |
| Area | Status | Notes |
|---|---|---|
Output contract (schema_version, status, source) |
Done | schema 1.1; see MANUAL §3.5 |
| Exit codes per status | Done | Adds integrity_error 8 for proven local byte/hash mismatch |
| Provenance in every output | Done | Amendment/issue fail-fast to unknown + warning, never silent null |
| Cross-references detected in plain text | Done | Official EAR marks few refs up as elements |
| MCP server | Done | easa-erules-mcp, optional [mcp] extra |
| LLM skills (thin adapters) | Done | skills/{generic,codex,claude-code,opencode}/, incl. FAA scope guardrail |
| Agent cookbook + manual | Done | examples/agent-cookbook.md, docs/MANUAL.md |
| Area | Status | Notes |
|---|---|---|
| EASA catalog | 12 entries, all verified | 10 convert; cs-p and cs-etso are PDF-only and flagged as such |
| FAA catalog | 6 entries, experimental | far-21/23/25/27/43/91 via the public eCFR API |
| FAA adapter | Experimental | Fetch, parse, search, refs. Tables flattened and images skipped — both reported, never silent. Output shape may change. |
| ASTM | Out of scope | Paywalled, cannot be redistributed — adapter removed |
| Area | Status | Notes |
|---|---|---|
| Offline suite | Green | pytest passes with no network and no samples present |
| Real-document smokes | Pinned fetch | Publications no longer committed; fetch_samples.py reproduces them by sha256 |
| CI | Done | ruff + pytest matrix, adapter smoke, pinned real-sample smoke |
| Catalog health | Done, deep | Weekly resolve + download + parse of all 18 entries; reports drift as an artifact |
| Live smoke | Done | Manual / weekly cs-vla + cs-25 fetch |
- FAA tables and images — flattened / skipped, and reported as such (32 tables and 88 images on 14 CFR 25). Modelling them properly is only worth doing if the FAA branch is promoted out of experimental. Advisory Circulars have no structured public API at all.
- Table edge cases — exotic nested layouts may still need field fixes.
- Large packages — CS-25 and larger are catalogued but excluded from the default smoke matrix on runtime grounds.
- Catalog verification (2026-08-10) — all 18 entries checked end to end for
the first time. Found and fixed: the resolver silently substituted a PDF when
no XML existed (
cs-p,cs-etso), and the health check reported those as green because it never verified the format. Repeated ERulesIds onpart-21anduas-rulesturned out to be how EASA publishes multi-rule AMC/GM, not a parser defect, and are now recorded rather than failed. Narrowing the catalog proved unnecessary — it needed verifying, not shrinking. - Package naming (2026-08-10) — kept as
easa-erules. EASA remains the maintained branch and the name is what people searching for Easy Access Rules will find; the FAA branch is labelled experimental instead. Revisit only if FAA is ever promoted to production, while adoption is still low. - Redistribution of EASA text (2026-08-10) — EASA's copyright policy
authorises reproduction with acknowledgement, and the "Official Publication"
clause is a disclaimer, not a copyright carve-out. History is not being
rewritten; the MIT scope is bounded by the root
NOTICE. Publications stay out of the repository on engineering grounds. See LEGAL-REVIEW.md.