Repository navigation
Releases: RoboFinSystems/xbrlkit
Release list
Release v0.21.3
xbrlkit v0.21.3
Summary
Maintenance release that modernizes the supported Python matrix: xbrlkit now targets Python 3.12–3.14, with 3.12 as the new minimum supported version. No functional library changes are included.
Key Changes
- Python support updated to 3.12, 3.13, and 3.14 — CI now tests against the current and upcoming Python releases (#101).
- Minimum Python version raised to 3.12 —
requires-pythonand classifiers inpyproject.tomlupdated accordingly. - CI/release workflows aligned —
test.ymlandcreate-release.ymlbuild/test matrices updated to match the new supported versions. - Package metadata refreshed —
server.jsonupdated for the 0.21.3 release.
⚠️ Breaking Changes
- Python 3.11 and earlier are no longer supported. Installs on Python < 3.12 will be rejected by pip. Users on older interpreters should pin to
xbrlkit==0.21.2or upgrade their runtime to Python 3.12+.
Notable Technical Notes
- Dropping older interpreters allows the codebase to rely on 3.12+ language and typing features going forward.
- Adding Python 3.14 to the matrix provides early signal on forward compatibility before it becomes the default runtime in most environments.
Bug Fixes
- None — this is an infrastructure/maintenance release with no changes to library behavior or APIs.
📊 Release Statistics
- Commits: 3
- Files Changed: 4
- Lines Added: 14
- Lines Deleted: 11
- Previous Release: v0.21.2
🔗 Links
- Full Changelog: v0.21.2...v0.21.3
- All Releases: View all releases
🤖 Generated with Claude Code
Release v0.21.2
xbrlkit v0.21.2
Maintenance release. This is a CI/CD infrastructure update with no changes to library functionality — publishing now happens directly within the release workflow instead of via a separate release-branch push trigger. No action is required for users upgrading from v0.21.1.
Improvements
- Consolidated release pipeline — PyPI publishing is now embedded in the
create-releaseworkflow, eliminating the separatepublish.ymlworkflow and the release-branch push trigger that drove it (#100). - More reliable releases — removing the push-triggered handoff eliminates a race condition between tagging and publishing, so artifacts are built and published from the same verified commit as the release run.
- Tighter release traceability — a single workflow run now covers version bump, tag, build, publish, and release notes, making it easier to audit and re-run failures.
Technical Changes
- Deleted
.github/workflows/publish.yml; publish steps moved into.github/workflows/create-release.yml. - Updated internal automation docs (
.claude/commands/publish.md,.claude/commands/create-pr.md) to reflect the new single-workflow release process. - Version metadata synced across
pyproject.tomlandserver.json, withtests/test_server_json.pyupdated to keep manifest/version assertions in step.
Breaking Changes
None. publish.yml workflow or a push to a release branch to trigger publishing will need to be repointed at the create-release workflow.
Bug Fixes
No library-level bug fixes in this release.
📊 Release Statistics
- Commits: 3
- Files Changed: 7
- Lines Added: 191
- Lines Deleted: 174
- Previous Release: v0.21.1
🔗 Links
- Full Changelog: v0.21.1...v0.21.2
- All Releases: View all releases
🤖 Generated with Claude Code
Release v0.21.1
xbrlkit v0.21.1
A patch release that enhances TAVI serialization by automatically generating the draft's group tree from the source filing's section titles, improving structural fidelity when round-tripping filings. No breaking changes — existing serialization workflows continue to work unchanged.
Key Features & Improvements
- Automatic group tree generation (#99): The TAVI serializer now derives and writes a draft's group tree directly from the filing's section titles, so section hierarchy is preserved in the generated draft rather than being left empty or flat.
- Deserialization alignment:
xbrlkit/deserialize/tavi.pyupdated to correctly read back the newly emitted group tree structure, keeping serialize → deserialize round-trips lossless.
Technical Notes
- Changes are isolated to the TAVI serialize/deserialize modules (
xbrlkit/serialize/tavi.py,xbrlkit/deserialize/tavi.py); other formats and APIs are untouched. - Group tree nodes are built from section titles discovered on the filing, meaning output now depends on the presence and ordering of those titles — filings without section titles will produce a minimal/empty tree as before.
- Expanded test coverage in
tests/test_tavi.pyfor group tree construction and round-trip behavior. - Version metadata bumped in
pyproject.tomlandserver.json.
Breaking Changes
None.
Bug Fixes
- Drafts produced by the TAVI serializer no longer omit group/section structure that was present in the source filing.
Upgrade Notes
Drop-in upgrade from v0.21.0. If your tooling asserts on exact serialized draft output, expect additional group tree entries in the generated payload.
📊 Release Statistics
- Commits: 3
- Files Changed: 5
- Lines Added: 185
- Lines Deleted: 3
- Previous Release: v0.21.0
🔗 Links
- Full Changelog: v0.21.0...v0.21.1
- All Releases: View all releases
🤖 Generated with Claude Code
Release v0.21.0
xbrlkit v0.21.0
This release enhances TAVI serialization with fact location metadata, emitting the draft's fact location alongside a QName set describing where a fact sits in the broader document structure. Documentation also gains a working Python quickstart example.
Key Features & Improvements
- Fact location in TAVI output (#98) — The serializer now writes the draft's fact location, giving consumers a direct pointer to where each fact originates.
- QName context set — Each fact is accompanied by a set of QNames describing the surrounding structure it sits in, enabling richer downstream navigation and reconciliation.
- Round-trip support —
xbrlkit/deserialize/tavi.pywas updated in step with the serializer so the new fields survive a serialize → deserialize cycle. - Runnable README example (#97) — The Python snippet in the README is now a complete, executable example rather than an illustrative fragment.
Notable Technical Changes
xbrlkit/model.pyandxbrlkit/information_block.pyextended to carry and expose fact location and QName set data.- Test coverage expanded across
test_tavi.py,test_deserialize.py, andtest_information_block.pyto cover the new serialization fields. server.jsonandpyproject.tomlupdated for the 0.21.0 release.
Breaking Changes
xbrlkit versions.
Bug Fixes
No standalone bug fixes in this release; changes are feature and documentation focused.
Upgrading
Most users can upgrade in place. If you persist or compare TAVI artifacts, regenerate them after upgrading and review any schema or fixture assertions that assume the prior field set.
📊 Release Statistics
- Commits: 5
- Files Changed: 10
- Lines Added: 332
- Lines Deleted: 76
- Previous Release: v0.20.9
🔗 Links
- Full Changelog: v0.20.9...v0.21.0
- All Releases: View all releases
🤖 Generated with Claude Code
Release v0.20.9
xbrlkit v0.20.9
Summary
This release improves 8-K handling in the MCP serve layer, so filings are read alongside their EX-99 exhibits, and fixes table extraction so values stay aligned with their source columns.
Key Features & Improvements
- 8-K exhibit reading — An 8-K is now read together with its EX-99 exhibits, giving readers the press-release and financial-supplement content that typically carries the substance of the filing.
- Targeted exhibit routing — Readers are directed to a filing's exhibits only when those exhibits are actually read, reducing noise and unnecessary fetches in the serve surface.
- More accurate form detection — A document's form type is now resolved from its cover page rather than inferred from a citation, improving correctness for filings whose citations are ambiguous or incomplete.
Bug Fixes
- Fixed table parsing in
xbrlkit/text/tables.pyso values remain in their correct columns, preventing misaligned or shifted data in extracted tables. - Fixed form resolution that previously relied on citation metadata, which could mislabel documents.
- Fixed over-eager exhibit referral in 8-K responses.
Notable Technical Changes
- Updates across the serve stack (
server.py,session.py,tools.py,__init__.py) to support multi-document (filing + exhibit) reading sessions. xbrlkit/edgar/items.pyupdated for 8-K item/exhibit association.- Expanded test coverage in
test_serve.py,test_serve_surface.py, andtest_text_tables.py. - Serve
README.mdandserver.jsonrefreshed to reflect the updated tool behavior.
Breaking Changes
None. Behavior changes are limited to improved accuracy of 8-K reads and table column alignment; callers relying on previous (misaligned) table output may observe different—but corrected—results.
Merged via PR #96.
📊 Release Statistics
- Commits: 6
- Files Changed: 12
- Lines Added: 478
- Lines Deleted: 32
- Previous Release: v0.20.8
🔗 Links
- Full Changelog: v0.20.8...v0.20.9
- All Releases: View all releases
🤖 Generated with Claude Code
Release v0.20.8
xbrlkit v0.20.8
Summary
A focused patch release that fixes taxonomy package registration in the Arelle loader, ensuring a filing's packages are scoped to the load that requested them rather than leaking into the global Arelle environment.
Bug Fixes
- Per-load package registration (#95): Taxonomy packages discovered for a filing are now registered only for the duration of that load, then unwound. Previously, packages accumulated in the shared Arelle package manager across loads, which could cause one filing's entry points to resolve schema references for an unrelated filing — producing incorrect concept resolution, mismatched labels, or nondeterministic results depending on load order.
Technical Changes
xbrlkit/parse/arelle_load.py: package registration/reset is now bracketed around each load so the ArellePackageManagerstate is restored afterward, making repeated and concurrent-ish loads deterministic.- Expanded coverage in
tests/test_arelle_cache.pyfor registration scoping and cleanup behavior. - Documentation updated in
xbrlkit/parse/README.mdto describe the per-load package lifecycle.
Breaking Changes
None. The public API is unchanged.
Note: If your code relied (intentionally or not) on packages registered by a prior
arelle_loadcall remaining available for subsequent loads, you should now pass the required packages explicitly with each load.
Housekeeping
- Version bumps in
pyproject.tomlandserver.json.
📊 Release Statistics
- Commits: 3
- Files Changed: 5
- Lines Added: 112
- Lines Deleted: 6
- Previous Release: v0.20.7
🔗 Links
- Full Changelog: v0.20.7...v0.20.8
- All Releases: View all releases
🤖 Generated with Claude Code
Release v0.20.7
xbrlkit v0.20.7
Summary
A targeted bug-fix release that makes report package loading reliable in xbrlkit serve and keeps filings parseable when a national taxonomy host is unreachable. Loading failures are now reported clearly instead of silently producing an empty model.
Key Improvements
- Report package support in
serve— zipped report packages are now loaded correctly, including archives created on Windows that use backslash path separators. - Resilient taxonomy resolution — a filing whose national taxonomy host is offline or gone will still load, falling back rather than failing outright.
- Clearer diagnostics — load operations now name the specific taxonomy or schema reference that could not be resolved, both in logs and in tool output, so you can tell what a load went without.
- Fail loudly, not silently — an empty load inside a package is now refused instead of returning an empty model, and malformed/unreadable archives are caught and reported as errors.
- Documentation updated across the
parse,serve, andfilings_orgREADMEs to describe degraded-load behaviour and the new messaging.
Bug Fixes
- Fixed report packages failing to load in the MCP server session (#94).
- Fixed extraction of ZIP archives whose entries use backslash separators.
- Fixed filings failing to parse when a referenced national taxonomy host no longer resolves.
- Bad or corrupt archives no longer raise unhandled exceptions during load.
- Empty package loads no longer succeed quietly with no facts.
Notable Technical Changes
xbrlkit/parse/arelle_load.pyrecords and surfaces unresolved taxonomy references during Arelle model loading.xbrlkit/serve/session.py,server.py, andtools.pyupdated for package-aware loading and stricter error propagation.xbrlkit/filings_org/client.pyanddownload.pyadjusted for package download/unpack handling.- Test coverage expanded in
tests/test_serve.pyandtests/test_arelle_cache.py.
Breaking Changes
None. Behaviour changes are limited to loads that previously returned an empty model silently — these now raise a clear error, which may surface as a new failure in code that relied on the empty result.
📊 Release Statistics
- Commits: 7
- Files Changed: 13
- Lines Added: 567
- Lines Deleted: 32
- Previous Release: v0.20.6
🔗 Links
- Full Changelog: v0.20.6...v0.20.7
- All Releases: View all releases
🤖 Generated with Claude Code
Release v0.20.6
xbrlkit v0.20.6
A documentation-only maintenance release that clarifies configuration loading behavior and improves project discoverability. No functional or API changes — upgrading is safe and requires no action.
Improvements
- Clearer config documentation (#92): Comments in
xbrlkit/config.pynow explicitly document that the published configuration load resolves the holon first, making the resolution order easier to follow for contributors and integrators. - README: "Where it runs" (#93): Added a direct link to the RoboSystems repository, making it easier to find the runtime platform xbrlkit is deployed on.
Technical Notes
- Version metadata bumped to
0.20.6inpyproject.tomlandserver.json. - Changes are limited to comments, docs, and version metadata (12 insertions / 10 deletions across 4 files). No runtime logic, public API, or dependency changes.
Breaking Changes
None.
Bug Fixes
None — no functional defects were addressed in this release.
📊 Release Statistics
- Commits: 5
- Files Changed: 4
- Lines Added: 12
- Lines Deleted: 10
- Previous Release: v0.20.5
🔗 Links
- Full Changelog: v0.20.5...v0.20.6
- All Releases: View all releases
🤖 Generated with Claude Code
Release v0.20.5
xbrlkit v0.20.5
A maintenance release that improves how published filings are resolved when serving data, preferring a filing's published holon over the TAVI fallback. Also includes CI infrastructure hardening.
Key Improvements
- Published-holon-first resolution (#91):
xbrlkit/serve/session.pynow attempts to load a published filing's holon first, falling back to TAVI only when the holon is unavailable. This yields more accurate, publisher-authoritative data for served filings and reduces unnecessary fallback lookups. - Pinned CI runner image (#90): GitHub Actions workflows (
create-release,publish,test) now target a pinned hosted runner image instead of a floating label, making builds and releases reproducible and insulating the pipeline from upstream runner drift.
Breaking Changes
None. The serve session API is unchanged — only the internal resolution order differs. Consumers that relied on TAVI being the primary source may observe different (more authoritative) values for published filings.
Technical Notes
- Fallback behavior is preserved end-to-end: if no published holon exists, the previous TAVI path is used, so existing integrations continue to work.
tests/test_published.pyupdated to cover both the holon-first path and the TAVI fallback.- Documentation refreshed in
README.mdandxbrlkit/serve/README.mdto describe the new resolution order. - Version metadata bumped in
pyproject.tomlandserver.json.
Bug Fixes
- Resolves cases where a filing with a valid published holon was served from TAVI-derived data instead, producing inconsistent results.
Upgrade Notes
Drop-in upgrade from v0.20.4 — no code changes required.
📊 Release Statistics
- Commits: 5
- Files Changed: 9
- Lines Added: 56
- Lines Deleted: 43
- Previous Release: v0.20.4
🔗 Links
- Full Changelog: v0.20.4...v0.20.5
- All Releases: View all releases
🤖 Generated with Claude Code
Release v0.20.4
xbrlkit v0.20.4
A focused maintenance release that corrects how stacked entities are described during LPG serialization, ensuring entity metadata reflects the most recent filing. Also includes fixture and documentation cleanup around placeholder filers.
Bug Fixes
- Stacked entity descriptions now use the newest filing (#89) — When multiple filings are stacked for a single entity, the serialized entity node previously could inherit attributes from an arbitrary (often older) filing. Entity-level descriptive metadata is now consistently resolved from the newest filing in the stack, producing stable and accurate graph output.
Improvements
- Placeholder filers in fixtures and docs (#88) — Test fixtures and
xbrlkit/serialize/README.mdexamples now use placeholder filer identifiers instead of specific real-world registrants, making documentation examples clearer and fixtures easier to maintain.
Technical Notes
xbrlkit/serialize/lpg.py— Entity attribute resolution for stacked filings reworked to select by filing recency.xbrlkit/serve/session.py— Minor adjustments to align session-level entity handling with the updated serialization behavior.- Test coverage expanded across
test_lpg.py,test_serve.py, andtest_efts.pyto lock in newest-filing semantics. - Version metadata bumped in
pyproject.tomlandserver.json.
Breaking Changes
None. However, note that LPG output for entities with stacked filings may differ from v0.20.3 — downstream consumers that snapshot or diff serialized entity metadata should expect updated (corrected) values.
📊 Release Statistics
- Commits: 5
- Files Changed: 8
- Lines Added: 85
- Lines Deleted: 36
- Previous Release: v0.20.3
🔗 Links
- Full Changelog: v0.20.3...v0.20.4
- All Releases: View all releases
🤖 Generated with Claude Code