All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Types of changes:
Added: for new features.Improved: for improvements to existing functionality.Deprecated: for soon-to-be removed features.Removed: for now removed features.Fixed: for any bug fixes.Dependencies: for updates to external libraries or packages.
- Fixed
pyqasm validatewrapping its diagnostics at the console width, which split a file path longer than the width across lines mid-token and left it neither copyable nor clickable. The error console now usessoft_wrap, keeping one diagnostic per line. - Fixed an indirect cycle between gate definitions exhausting the Python stack:
gate a q { b q; }withgate b q { a q; }raised a bareRecursionErrornaming nothing, while the direct case was already reported cleanly. The guard compared the body's gate name against one name, so it saw only a cycle of length one. It now tests membership of the whole expansion chain, and names the path:Recursive definitions not allowed for gate 'a' (a -> b -> a). A gate reached twice down separate paths is a diamond, not a cycle, and still expands. (#369) - Fixed a nested external custom gate counting the depth of the decomposition it skipped, the shape the #352 fix did not reach:
unroll(external_gates=["outer"])on a gate whose body calls another custom gate emitted one statement but reporteddepth() == 13. The suppression flag was assigned and cleared without save-restore, so the inner gate clobbered the outer gate's state in both directions. It is now saved and restored, and the depth is recorded once, from the outermost external gate. (#367)
- Switched PyPI publishing from a long-lived
PYPI_API_TOKENrepository secret to trusted publishing. The publish job now mints a short-lived OIDC credential scoped to that one workflow, and the action attaches PEP 740 attestations recording the repository, workflow and commit SHA behind each uploaded file. Attestations apply to releases published after this merges, not retroactively. (#411) - Fixed the pre-release build stamping a version that
pyqasm.__version__and the package metadata spelled differently.pre_build.shwrote1.1.0-a.0intopyproject.toml, setuptools normalized that to1.1.0a0for the metadata, and_version.pykept the raw string, sopip show pyqasmandpyqasm.__version__disagreed andtest_sdist.shfailed its version check. The stamped version is now normalized to PEP 440 before it is written. (#414) - Fixed the pre-release workflow publishing its source distribution under the released version instead of the pre-release one.
build_sdist.shrangit reset --hardandgit clean -xdf, which discarded thepyproject.tomlversion that the preceding step had just stamped, so a run that built1.1.0a0wheels built a1.1.0sdist and PyPI rejected it as a duplicate.pre_build.shalready resets the tree, so the second reset is gone. It also no longer destroys uncommitted work when the script is run locally. (#413) - Added a
SECURITY.mdwith a private vulnerability disclosure path. There was no documented way to report one, leaving a public issue or a guessed email address as the only options. Reports now go through this repository's GitHub security advisory form. (#383)
Archive of changelog entries from previous releases: