Skip to content

Release 1.0.5: pin wirelog to v0.54.0 to fix #180 - #184

Merged
justinjoy merged 1 commit into
mainfrom
release/1.0.5-wirelog-0.54.0
Aug 11, 2026
Merged

Release 1.0.5: pin wirelog to v0.54.0 to fix #180#184
justinjoy merged 1 commit into
mainfrom
release/1.0.5-wirelog-0.54.0

Conversation

@justinjoy

Copy link
Copy Markdown
Contributor

Description

Moves the bundled and validated wirelog ref from v0.53.0 to v0.54.0 at peeled SHA 9f80877c82564cb92ea45bd6fffc2d681b0e13de, and bumps PyreWire to 1.0.5.

v0.54.0 is 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 in docs/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 appended wirelog_str_fn_t member 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_errortest_insert_arity_mismatch_raises. wirelog#1038 checks the insert width against the .decl on 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_behaviortest_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 for examples/05-crc32-checksum.

Related Issue

Fixes #180

Type of Change

  • Bug fix (non-breaking change that fixes an issue)
  • New feature (non-breaking change that adds functionality)
  • Breaking change (would cause existing functionality to change)
  • Documentation update

Testing

wirelog v0.54.0 was built from source locally and the suite run against both engine versions, since the 0.52.0 floor keeps older runtimes in scope:

Run Result
Full suite @ wirelog 0.54.0 (the new pin) 596 passed, 2 skipped
Full suite @ wirelog 0.53.0 (still admitted by the floor) 593 passed, 5 skipped
black / isort / flake8 / mypy pass

The issue's own reproduction, plus the 5-atom case from the triage comment:

case wirelog 0.53.0 wirelog 0.54.0
4 body atoms (10, 1, 0) (10, 1, 7)
5 body atoms (10, 1, 3, 0) (10, 1, 7, 3)

test_optimize_preserves_head_bindings_with_four_body_atoms is 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_mypy was 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 8353bf9 returns v0.54.0 and nothing else, and the peeled tag SHA was confirmed against the GitHub API.

Checklist

  • My code follows the project's code style (black, isort, flake8, mypy)
  • I have added tests for my changes
  • black . passes
  • isort . passes
  • flake8 . passes
  • mypy . passes
  • I have updated documentation if needed
  • All tests pass (pytest --cov=pyrewire)

Notes

Two things worth flagging for anyone taking this bump:

  1. Join-heavy programs will get slower. wirelog#955 removes an under-derivation the previous speed depended on, so correct answers cost more than the wrong ones did. Upstream measured DOOP W=1 at ~94 s before and ~1,414 s after.
  2. Source installs are not fixed by this alone. The floor still admits 0.52.0, so a source install resolving an older system libwirelog still 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, and wirelog_io_ctx_col_type report the physical row stride rather than the declared column count. The two differ only for a relation declaring an inline compound column, and PyreWire passes all three through unchanged, so its own contract is unaffected.

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.
@justinjoy
justinjoy merged commit b53db58 into main Aug 11, 2026
17 checks passed
@justinjoy
justinjoy deleted the release/1.0.5-wirelog-0.54.0 branch August 11, 2026 15:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

optimize() corrupts head bindings for rules with four or more body atoms

1 participant