You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Release v2026.11.7. A user notices two changes: variable-time integer parameters are typed ecc.alias.Public (PR #474), so code mypy checks wraps those arguments as Public(x), and dsa.anti_exfil_host_verify answers False for a high s (PR #473). The rest moves nothing a user sees: secret checks left to the bindings (PR #472), vendored pins (PR #469), the coverage floor (PR #471), tooling, CONTRIBUTING.md and RELEASING.md.
This PR sets the version, re-locks (only the project's own version line moves) and adds the release's sections of RELEASE_NOTES.md and CHANGELOG.md, written from the squash subjects since v2026.11.6. RELEASE_NOTES.md names each parameter api_gaps.py reports.
api_gaps.py at btclib-org/.github 5be4b0f (the commit release.yml pins), against v2026.11.6
exit 1: 19 lines, each Parameter types are incompatible from int, Integer or a Sequence of them to Public, all named in RELEASE_NOTES.md
What neither tool compares, read by hand since v2026.11.6
the @overload signatures of dsa and ssasign and sign_ are unchanged; src holds no property setter; the cycle adds or removes no class and changes no package __init__.py
deps-latest
not dispatched for this release. Its last run is on the previous cycle's main715dbde (run 42126989678, success). Its drift is left to Dependabot, as RELEASING.md says; no uv lock --upgrade here
TestPyPI rehearsal
due: the cycle moved test.yml, which release.yml calls (setup-uv 10.3.3, PR #460), the [tool.uv.build-backend]source-exclude patterns (PR #471), and the locked build backend, uv-build 0.13.6 (PR #461). api_gaps.py has findings, and RELEASING.md as of add95e2 says: "A release with any public-API finding is rehearsed from the release pull request's branch, after its notes are written". So it runs from this branch. Not yet run
Release v2026.11.7: variable-time integer parameters are typed
ecc.alias.Public, which mypy users must wrap, and
dsa.anti_exfil_host_verify answers False for a high s. api_gaps.py
against v2026.11.6 names the parameter type changes, and
RELEASE_NOTES.md names each; griffe exits 0. Read by hand since
v2026.11.6, for what neither tool compares: the @overload signatures
are unchanged, src holds no property setter, and the cycle adds or
removes no class and no package re-export.
This sets the version and adds the release's sections of
RELEASE_NOTES.md and CHANGELOG.md, written from the squash subjects
since v2026.11.6.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Ferdinando Ametrano <ferdinando@ametrano.net>
No actionable comments were generated in the recent review.
Summary
Summary by CodeRabbit
API Changes
Variable-time integer parameters now require public-value typing. When type-checking, wrap integer arguments as public values; convert byte strings or text to integers first. Sequence arguments follow the same requirement.
Behavior Changes
Anti-exfiltration host verification now rejects signatures with high s values. Standard signature verification continues to accept both signature forms.
Structurally invalid inputs to anti-exfiltration host verification raise an exception rather than returning False.
Documentation
Updated release and contribution guidance.
This release-preparation change adds v2026.11.7 entries to the changelog and release notes. It also changes the project version in pyproject.toml to 2026.11.7.
Changes: v2026.11.7 Release
Layer / File(s)
Summary
Release notes and version RELEASE_NOTES.md, CHANGELOG.md, pyproject.toml
The release notes describe public integer typing and anti-exfil verification behavior. The changelog records related test, coverage, tooling, and contributor-guidance updates. The project version changes to 2026.11.7.
Architecture concerns
No architecture-level concerns identified.
Review details
Systems and components
observed — CHANGELOG.md (service) was modified; 1 changed file maps to changed impact.
observed — pyproject.toml (service) was modified; 1 changed file maps to changed impact.
observed — RELEASE_NOTES.md (service) was modified; 1 changed file maps to changed impact.
Before / after behavior
observed — Modified behavior in CHANGELOG.md: Adds the v2026.11.7 release entry describing ecc.alias.Public as NewType("Public", int) and caller annotation with Public(x).
observed — Modified behavior in CHANGELOG.md: Adds a changelog entry stating that dsa.anti_exfil_host_verify refuses high-s signatures and that vendored draft anti-exfil BIP vectors run for dsa and ssa on both arms.
observed — Modified behavior in CHANGELOG.md: Adds a changelog entry stating that curves.add, sec_point.mult_pub_key, and ecies.derive_keys perform no Python secret check where the bindings’ calls handle it.
observed — Modified behavior in CHANGELOG.md: Adds a changelog entry pinning BIP459 vectors to bitcoin/bips commit f3d16688 and describing ssa and ssa_halfagg tests for errors that cancel during aggregation.
Pre-merge checks: 4
Check name
Status
Explanation
Title check
The title identifies the release version. The supplied context identifies no issue that requires a title citation. (github.com)
Description check
The description covers the version update and release documentation.
Linked Issues check
Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check
Check skipped because no linked issues were found for this pull request.
Finishing Touches
Generate unit tests (beta)
Commit to this branch
Create a new PR
Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
This review exceeded your plan’s limits and used usage-based reviews—free during trial, billed after paid activation unless disabled. Manage usage-based reviews.
Not checked: griffe check ecc -s . -s src -a v2026.11.6 and api_gaps.py against v2026.11.6 were not run, since there is no interpreter here. I compared the parameter list in RELEASE_NOTES.md against the public _var signatures in src with a grep, and they agree. That grep is not a run of either tool. I also could not compare the CHANGELOG.md section against git log v2026.11.6..HEAD --format=%s: the checkout is shallow and has no tag.
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
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.
Release v2026.11.7. A user notices two changes: variable-time integer parameters are typed
ecc.alias.Public(PR #474), so code mypy checks wraps those arguments asPublic(x), anddsa.anti_exfil_host_verifyanswersFalsefor a high s (PR #473). The rest moves nothing a user sees: secret checks left to the bindings (PR #472), vendored pins (PR #469), the coverage floor (PR #471), tooling, CONTRIBUTING.md and RELEASING.md.This PR sets the version, re-locks (only the project's own version line moves) and adds the release's sections of
RELEASE_NOTES.mdandCHANGELOG.md, written from the squash subjects since v2026.11.6.RELEASE_NOTES.mdnames each parameterapi_gaps.pyreports.Evidence
griffe check ecc -s . -s src -a v2026.11.6, griffe 2.2.0api_gaps.pyat btclib-org/.github 5be4b0f (the commitrelease.ymlpins), against v2026.11.6Parameter types are incompatiblefromint,Integeror aSequenceof them toPublic, all named inRELEASE_NOTES.md@overloadsignatures ofdsaandssasignandsign_are unchanged;srcholds no property setter; the cycle adds or removes no class and changes no package__init__.pydeps-latestmain715dbde (run 42126989678, success). Its drift is left to Dependabot, as RELEASING.md says; nouv lock --upgradeheretest.yml, whichrelease.ymlcalls (setup-uv 10.3.3, PR #460), the[tool.uv.build-backend]source-excludepatterns (PR #471), and the locked build backend, uv-build 0.13.6 (PR #461).api_gaps.pyhas findings, and RELEASING.md as of add95e2 says: "A release with any public-API finding is rehearsed from the release pull request's branch, after its notes are written". So it runs from this branch. Not yet run-n -W0, with the unresolved-link grep 0 andcheck_included_links.py0c1786962edc1exits 1The open PR #477 (CONTRIBUTING.md only) is not in this release, and does not touch the release path.
🤖 Generated with Claude Code