Fat binoc: bundle format packs, pause per-plugin publishing, add ABI canary (v0.2.0)#122
Merged
Conversation
Ship one fat `binoc` wheel that compiles the first-party format packs in-process, defer per-plugin PyPI publishing until the rule-family ABI graduates, and keep a real cdylib renderer loaded over the C ABI in CI as the anti-cheat canary. Grounded in the finding that natively-loaded plugins can only contribute renderers today, so separately-published rule packs are non-functional.
Both now ship in-process via the fat `binoc` wheel, so separate wheels are redundant and re-introduce the plugin-vs-core ABI compatibility matrix the fat wheel exists to avoid. Removes their jobs + tag triggers from publish.yml and drops them from `just release`. Crates and features remain for opt-in use.
… canary Compile the first-party format packs (Excel, Parquet, Avro, DBF, XML, Shapefile, binformats, stat-binary, row-reorder) into the `binoc` wheel, registered in-process through the shared `register_bundled_correspondence_rules` seam so `binoc.diff`/`extract` and the CLI are equally fat. Each pack is behind a default-on cargo feature aggregated by `bundled`, so a slim wheel remains available via `--no-default-features`. SQLite is excluded from the default set (its bundled rusqlite C build is paused). Adds the `binoc-abi-canary` crate: a real renderer exported via `export_plugin!` and built as a cdylib, whose test builds that cdylib and loads it over the C ABI (libloading) to prove description + render round-trip. This keeps the renderer ABI boundary compiler/linker-enforced even though format packs are linked in statically.
Set the binoc wheel version to 0.2.0 (`just set-version binoc 0.2.0`). The workspace uv.lock relock also syncs the stale binoc-stat-binary dev-dependency entry to its committed pyproject specifiers.
cab295f to
fabaf18
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This preps binoc for a 0.2.0 release, based on the recent major refactor.
As part of this, we are pausing active plugins for now and bundling the whole tree into the main
pip install binoc.This also adds a test that ensure the arms-length ABI plugin approach continues to work, whenever we're ready to move back to proper plugins.
The reason for this is the ABI is still in flux, and I don't want to ship a bunch of separate pypi packages that have to be in lockstep with the main package anyway.
See
docs/adr/2026-06-30-fat_binoc_distribution_and_abi_canary.mdfor the full rationale.