# Release Notes

<a id="release-v1-11-1"></a>

## 1.11.1 (Unreleased)

### Bug fixes

* You know there will be some…

<a id="release-v1-11-0"></a>

## 1.11.0 (2026-08-03)

### Modernize tooling and packaging

* **Switched from pre-commit to prek** as the hook runner, and added several new
  hooks: `detect-secrets`, `typos`, `actionlint`, `markdownlint-cli2`, and
  `taplo-format`, among others. [#442](https://github.com/catalyst-cooperative/ferc-xbrl-extractor/pull/442)
* **Simplified packaging**: removed `MANIFEST.in` and the vestigial
  `[tool.setuptools]` configuration left over from before the switch to
  hatchling. [#442](https://github.com/catalyst-cooperative/ferc-xbrl-extractor/pull/442)
* **Migrated documentation hosting from Read the Docs to GitHub Pages**, see
  [https://docs.catalyst.coop/ferc-xbrl-extractor](https://docs.catalyst.coop/ferc-xbrl-extractor).
  [#442](https://github.com/catalyst-cooperative/ferc-xbrl-extractor/pull/442)
* **Switched the documentation theme from furo to pydata-sphinx-theme**, matching
  the look and feel of our other documentation sites, including shared social
  links in the footer. [#442](https://github.com/catalyst-cooperative/ferc-xbrl-extractor/pull/442)
* **Added \`\`llms.txt\`\` and per-page Markdown alternates** (via `sphinx-llm`) to
  make the documentation more easily consumable by LLM agents. [#442](https://github.com/catalyst-cooperative/ferc-xbrl-extractor/pull/442)
* **Wired up CodeCov coverage reporting** with a repo-specific `.codecov.yml`.
  [#442](https://github.com/catalyst-cooperative/ferc-xbrl-extractor/pull/442)
* **Grouped Dependabot PRs** for both Python and GitHub Actions dependencies to
  reduce bot PR noise. [#442](https://github.com/catalyst-cooperative/ferc-xbrl-extractor/pull/442)
* Simplified the bot auto-merge workflow, and added a guard to the release
  workflow that verifies a release tag points at the current head of `main`
  before building. [#442](https://github.com/catalyst-cooperative/ferc-xbrl-extractor/pull/442)
* Switched release notifications from Slack to Zulip. [#434](https://github.com/catalyst-cooperative/ferc-xbrl-extractor/pull/434)
* Routine dependency and GitHub Actions version bumps.

### Add static type checking with pyrefly

* **Type checking is now enforced** using [pyrefly](https://pyrefly.org) as a
  blocking check in both pre-commit and CI, along with a 95% type annotation coverage
  floor across `src/` – `hatch run types:coverage-report` prints a human-readable,
  per-module breakdown of that metric. The goal is to catch bugs, make future changes
  safer, and help support IDEs and LLMs in parsing the codebase. The package now also
  ships a `py.typed` marker indicating consumers can rely on inline types. [#447](https://github.com/catalyst-cooperative/ferc-xbrl-extractor/pull/447)
  [#443](https://github.com/catalyst-cooperative/ferc-xbrl-extractor/issues/443)

### Bug fixes

Adding type checking (see above) surfaced several bugs.

* **Fixed a long-standing crash in \`\`get_instances()\`\`’s directory and bare-file
  input modes**, and removed the bare-file mode, which can’t be fixed. Both had
  always crashed with a confusing `TypeError`: they never supplied the
  `InstanceBuilder` constructor with a filing’s publication time and taxonomy
  version, which are otherwise derived from an `rssfeed` metadata file FERC’s
  archiving process bundles into zip archives alongside the filings. The
  **directory mode now works**, reading that same `rssfeed` file
  from disk instead of from inside a zip – useful for local debugging, where
  it’s convenient to edit filings directly rather than repackaging them into a
  zip after every change. The **bare single-file mode is removed**: a lone
  filing has no room for an accompanying `rssfeed` file, so there’s no way to
  determine its publication time or taxonomy version. Both input types now
  raise a clear `ValueError` on invalid input instead of crashing. [#444](https://github.com/catalyst-cooperative/ferc-xbrl-extractor/pull/444)
* **Fixed a crash in \`\`run_main()\`\`** that occurred whenever `--duckdb-path`
  wasn’t passed on the CLI – including via the simplest example command in
  the README. `--duckdb-path` now defaults to the sqlite path with a
  `.duckdb` suffix instead. [#444](https://github.com/catalyst-cooperative/ferc-xbrl-extractor/pull/444)
* **Fixed a taxonomy-loading retry loop** that could have raised a confusing
  `UnboundLocalError` instead of a clear error if ever called with
  `max_retries < 1`. [#447](https://github.com/catalyst-cooperative/ferc-xbrl-extractor/pull/447)

### Test suite cleanup

* **Removed the long-dead \`\`XBRLType.get_pandas_type()\`\` method.** It was
  introduced alongside a pandas-DataFrame-based extraction path that was
  replaced by the current frictionless-datapackage-based path two weeks
  later; the cleanup commit at the time removed every caller but missed the
  method itself, leaving it with no callers in this package, `pudl`, or
  `pudl-archiver` since 2022. [#444](https://github.com/catalyst-cooperative/ferc-xbrl-extractor/pull/444)
* **Reordered integration tests so the three slowest run first.** Under
  pytest-xdist’s default scheduler, tests are dispatched to workers in
  collection order; a slow test dispatched late tends to run alone after
  every other worker has emptied its queue, stretching total wall-clock
  time. A new `pytest_collection_modifyitems` hook in `tests/conftest.py`
  sorts `test_concurrent_taxonomy_load` and the two slowest
  `console_scripts_test.py` cases to the front of collection so they run
  in parallel with the rest of the suite instead of at the tail. [#444](https://github.com/catalyst-cooperative/ferc-xbrl-extractor/pull/444)

<a id="release-v1-10-0"></a>

## 1.10.0 (2026-05-13)

* Stopped generating a resource or table in the output datapackage for XBRL instant or
  duration tables that are entirely null. [#428](https://github.com/catalyst-cooperative/ferc-xbrl-extractor/pull/428)

<a id="release-v1-9-0"></a>

## 1.9.0 (2026-05-07)

* **Added support for writing extracted XBRL data directly to Parquet files**, in
  addition to the existing SQLite and DuckDB outputs. [#427](https://github.com/catalyst-cooperative/ferc-xbrl-extractor/pull/427)
* Routine dependency and GitHub Actions version bumps.

<a id="release-v1-8-0"></a>

## 1.8.0 (2025-12-28)

### Modernize build and packaging

* **Migrated from tox to Hatch** for environment and task management, providing faster
  dependency resolution and a more modern Python packaging experience.
* **Adopted uv** as the package installer.
* **Modernized build system** from setuptools to hatchling with hatch-vcs for version
  management from git tags.
* **Reorganized CI workflows** into parallel jobs for testing, linting, and
  documentation building, improving CI speed and clarity.
* Added support for **Python 3.14**.
* **Consolidated development documentation** from separate CONTRIBUTING.md into
  README.rst
* Updated README with instructions for using Hatch and uv.
* Updated ReadTheDocs configuration to use uv and Hatch.
* **Loosened dependency version constraints** Removed upper bounds where
  appropriate to reduce dependency conflicts for downstream users.
* **Added build attestations** for supply chain security using GitHub’s attestation
  action.
* **Adopted OIDC trusted publishing** to PyPI, eliminating the need for API tokens.
* Removed twine dependency (Hatch validates packages during build).
* Split pytest workflow into separate test, lint, and docs-build jobs for better
  parallelization.

See PR [#405](https://github.com/catalyst-cooperative/ferc-xbrl-extractor/pull/405).

<a id="release-v1-7-3"></a>

## 1.7.3 (2025-12-03)

* **Revert to treating dates as strings**, deferring cleaning until downstream
  processing. [#396](https://github.com/catalyst-cooperative/ferc-xbrl-extractor/pull/396)

<a id="release-v1-7-2"></a>

## 1.7.2 (2025-11-26)

* **Fix datetime type for publication date** to ensure proper handling across database
  backends. [#392](https://github.com/catalyst-cooperative/ferc-xbrl-extractor/pull/392)

<a id="release-v1-7-1"></a>

## 1.7.1 (2025-11-19)

* Improve dtype handling for DuckDB and SQLite outputs. [#388](https://github.com/catalyst-cooperative/ferc-xbrl-extractor/pull/388)
* Add integration test to verify DuckDB and SQLite tables are identical.

<a id="release-v1-7-0"></a>

## 1.7.0 (2025-11-16)

### Support Output to DuckDB

* **Add DuckDB output support** alongside existing SQLite output. [#368](https://github.com/catalyst-cooperative/ferc-xbrl-extractor/pull/368)
* **Pin arelle version** to avoid pillow v12.0 compatibility issues. [#382](https://github.com/catalyst-cooperative/ferc-xbrl-extractor/pull/382)

<a id="release-v1-6-0"></a>

## 1.6.0 (2025-04-28)

* **Make table name pattern more robust** to handle edge cases in XBRL taxonomy parsing.
  [#320](https://github.com/catalyst-cooperative/ferc-xbrl-extractor/pull/320)

<a id="release-v1-5-2"></a>

## 1.5.2 (2025-04-12)

* **Add Python 3.13 support**. [#318](https://github.com/catalyst-cooperative/ferc-xbrl-extractor/pull/318)

<a id="release-v1-5-1"></a>

## 1.5.1 (2024-07-17)

### Multi-Taxonomy Support

* **Fix datapackage generation from multiple taxonomies**. [#242](https://github.com/catalyst-cooperative/ferc-xbrl-extractor/pull/242)
* Improve datapackage formatting.
* Fix examples in README with updated sample filings.
* Improve docstrings and comments throughout the codebase.

<a id="release-v1-5-0"></a>

## 1.5.0 (2024-07-02)

* Minor dependency updates and maintenance release.

<a id="release-v1-4-0"></a>

## 1.4.0 (2024-04-14)

* **Update to Frictionless v5** and ensure all tests pass with the new version.
  [#213](https://github.com/catalyst-cooperative/ferc-xbrl-extractor/pull/213)

<a id="release-v1-3-3"></a>

## 1.3.3 (2024-03-26)

* **Add retry logic for taxonomy reading** to improve reliability with network issues.
  [#205](https://github.com/catalyst-cooperative/ferc-xbrl-extractor/pull/205)

<a id="release-v1-3-2"></a>

## 1.3.2 (2024-01-20)

* **Add support for pandas 2.2**.
* Cache dimension snakecase operations for better performance.

<a id="release-v1-3-1"></a>

## 1.3.1 (2023-11-29)

* Fix warning suppression by using ‘ignore’ instead of ‘once’.

<a id="release-v1-3-0"></a>

## 1.3.0 (2023-11-28)

* **Update to Pydantic v2** and migrate from Black to Ruff formatting. [#169](https://github.com/catalyst-cooperative/ferc-xbrl-extractor/pull/169)
* Add Zenodo DOI badge to README.

<a id="release-v1-2-1"></a>

## 1.2.1 (2023-10-18)

* Add Python 3.12 support.

<a id="release-v1-2-0"></a>

## 1.2.0 (2023-10-12)

* Instead of combining multiple filings from one year, we track publication
  time of each filing and keep all filings. This allows downstream users to
  deduplicate facts from multiple filings.

<a id="release-v1-1-0"></a>

## 1.1.0 (2023-09-22)

* Fix high memory usage in v1.0.

<a id="release-v1-0-1"></a>

## 1.0.1 (2023-09-13)

* Minor patch for Pydantic 2.0 compatibility.

<a id="release-v1-0-0"></a>

## 1.0.0 (2023-09-07)

* Match facts that are missing some dimensions to their corresponding fact tables - see
  [this issue](https://github.com/catalyst-cooperative/pudl/issues/2755).
* Multiple filings from one entity in a year are now combined as if later ones are
  updates to earlier ones instead of duplicated.
* Separate taxonomy archives from data archives, since data refers to taxonomies from a
  specific year.
* Update to Pandas 2.0 and loosen dependency pins on `arelle` (now “>=2.3,<3”)

<a id="release-v0-7-0"></a>

## 0.7.0 (2022-12-9)

### Group taxonomy metadata by table

* Change taxonomy metadata extraction to group by table name

<a id="release-v0-6-0"></a>

## 0.6.0 (2022-12-8)

### Use official Arelle package

* Change Arelle dependency to point to official PyPI package
* Explicitly reset locale to avoid error caused by Arelle

<a id="release-v0-5-0"></a>

## 0.5.0 (2022-11-23)

### Fix bug causing some records to be excluded

* Use sorted tuple keys when looking up facts during parsing

<a id="release-v0-4-0"></a>

## 0.4.0 (2022-10-6)

### Parse archived taxonomies

* Add support for parsing taxonomies from a local zipfile

<a id="release-v0-3-0"></a>

## 0.3.0 (2022-08-27)

### Enable publication of raw SQLite databases to Datasette

* Add support for specifying a subset of tables for extraction
* Add options for specifying output path for datapackage descriptors
* Fix docs generation, as well as various other CI improvements

<a id="release-v0-2-0"></a>

## 0.2.0 (2022-07-28)

### Support All Forms

* Tested with FERC forms 1, 2, 6, 60, 714
* Adds options for selecting taxonomies from CLI

<a id="release-v0-1-0"></a>

## 0.1.0 (2022-06-28)

### Initial Release

* The FERC XBRL extractor supports extracting data from XBRL filings to
  produce a SQLite database
* It provides a CLI that takes a link to a taxonomy and a set of filings
  and can produce a database containing the extracted data.
* FERC form 1 is the only form that is officially tested and supported
