Release 1.0.5: pin wirelog to v0.54.0 to fix #180 - #184
Merged
Conversation
Move the bundled and validated wirelog ref from v0.53.0 to v0.54.0 at peeled SHA 9f80877c82564cb92ea45bd6fffc2d681b0e13de and bump PyreWire to 1.0.5. v0.54.0 is the first release carrying wirelog#955, which fixes the optimize() head-binding corruption reported in #180: an SIP-inserted semijoin widened the reported output layout by the right relation's arity, shifting every column resolved above it until the out-of-range lookup fell back to column 0. Four body atoms is the threshold because with three there is nothing resolved above the semijoin. Nothing in PyreWire was wrong; optimize() is a faithful passthrough. Keep the runtime minimum at 0.52.0. The public C header change is additive - one appended wirelog_str_fn_t member and documentation - and the SONAME is unchanged, so no PyreWire code stops supporting 0.52.0. The three tests covering behavior only 0.54.0 provides are skipped on older runtimes rather than raising the floor. Two tests pinned engine behavior that v0.54.0 corrects, and both now assert the fixed behavior: - test_insert_arity_mismatch_raises: wirelog#1038 checks the insert width against the .decl on the first insert, so a row wider than the declaration is an error instead of a silent truncation. - test_crc32_checksum_example_partitions_frames_by_stored_checksum: crc32_ethernet() now agrees with the stored CRCs. Expectations are wirelog's own golden output for examples/05-crc32-checksum.
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.
Description
Moves the bundled and validated wirelog ref from
v0.53.0tov0.54.0at peeled SHA9f80877c82564cb92ea45bd6fffc2d681b0e13de, and bumps PyreWire to 1.0.5.v0.54.0is the first release carrying wirelog#955, the upstream fix for #180. An SIP-inserted semijoin widened the reported output layout by the right relation's arity, shifting every column resolved above it until the out-of-range lookup fell back to column 0. Four body atoms is the threshold because with three there is nothing resolved above the semijoin. Nothing in PyreWire was wrong —optimize()is a faithful passthrough — so the bundled-ref bump is the whole fix.The runtime floor stays at
0.52.0. Per the rule indocs/versioning.md, it moves only when new PyreWire code stops supporting older wirelog builds. wirelog 0.54.0's public C header change is additive (one appendedwirelog_str_fn_tmember plus documentation) and the SONAME is unchanged, so nothing here drops 0.52.0. The three tests covering behavior only 0.54.0 provides are skipped on older runtimes instead.Two tests that pinned engine behavior v0.54.0 corrects
Running the full suite against 0.54.0 surfaced two failures. Both were tests asserting the old, buggy engine behavior, and both now assert the fixed behavior:
test_insert_arity_mismatch_does_not_immediately_error→test_insert_arity_mismatch_raises. wirelog#1038 checks the insert width against the.declon the first insert as well as later ones, so a row wider than the declaration is an error rather than a silent truncation.test_crc32_checksum_example_reports_current_main_head_behavior→test_crc32_checksum_example_partitions_frames_by_stored_checksum. The old name conceded it was pinning a bug.crc32_ethernet()now agrees with the stored CRCs; the new expectations are wirelog's own golden output forexamples/05-crc32-checksum.Related Issue
Fixes #180
Type of Change
Testing
wirelog
v0.54.0was built from source locally and the suite run against both engine versions, since the0.52.0floor keeps older runtimes in scope:The issue's own reproduction, plus the 5-atom case from the triage comment:
(10, 1, 0)✗(10, 1, 7)✓(10, 1, 3, 0)✗(10, 1, 7, 3)✓test_optimize_preserves_head_bindings_with_four_body_atomsis the guard: it compares the optimized result against the unoptimized one rather than merely asserting evaluation succeeded, because the corruption is silent — row count and arity stayed correct and only the values were wrong.tests/test_pep561_packaging.py::test_installed_wheel_is_recognized_as_typed_by_mypywas deselected in both runs. It fails identically on the 0.53.0 baseline because the temporary venv has no mypy installed; it is a pre-existing environment failure, unrelated to this change.Pin provenance:
git tag --contains 8353bf9returnsv0.54.0and nothing else, and the peeled tag SHA was confirmed against the GitHub API.Checklist
black .passesisort .passesflake8 .passesmypy .passespytest --cov=pyrewire)Notes
Two things worth flagging for anyone taking this bump:
libwirelogstill reproduces optimize() corrupts head bindings for rules with four or more body atoms #180. Only wheel users get the fix automatically. Both points are recorded in the CHANGELOG.wirelog 0.54.0 also makes
wirelog_program_get_facts,wirelog_io_ctx_num_cols, andwirelog_io_ctx_col_typereport the physical row stride rather than the declared column count. The two differ only for a relation declaring aninlinecompound column, and PyreWire passes all three through unchanged, so its own contract is unaffected.