Skip to content

chore(release): 0.11.0 - #353

Closed
client-software-ci wants to merge 1 commit into
mainlinefrom
bump/0.11.0
Closed

chore(release): 0.11.0#353
client-software-ci wants to merge 1 commit into
mainlinefrom
bump/0.11.0

Conversation

@client-software-ci

@client-software-ci client-software-ci commented Aug 18, 2026

Copy link
Copy Markdown
Collaborator

0.11.0 (2026-08-18)

⚠ BREAKING CHANGES

Bug Fixes

Comment thread CHANGELOG.md Outdated

### Features
* shorten the session working directory name for Windows MAX_PATH (#348) ([`3252e69`](https://github.com/OpenJobDescription/openjd-sessions-for-python/commit/3252e693eec2cb31a0546f12e0e39f5778d9eb9d))
* shorten the session working directory name for Windows MAX_PATH ([`3252e69`](https://github.com/OpenJobDescription/openjd-sessions-for-python/commit/3252e693eec2cb31a0546f12e0e39f5778d9eb9d))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The same commit is listed twice under Features — both bullets point at 3252e69:

* shorten the session working directory name for Windows MAX_PATH (#348) ([`3252e69`]...)
* shorten the session working directory name for Windows MAX_PATH ([`3252e69`]...)

Cause: 3252e69 is a squash-merge whose body still contains the sub-commit bullet * feat!: shorten the session working directory name for Windows MAX_PATH. python-semantic-release parses the squashed body as an additional conventional-commit and emits an element for it, so one commit yields two features entries that the template in .semantic_release/CHANGELOG.md.j2 renders unconditionally.

This is cosmetic but it is what ships to PyPI/GitHub release notes. Worth either hand-deleting the duplicate line here or disabling squash-commit parsing ([tool.semantic_release.commit_parser_options] parse_squash_commits = false) so future releases do not repeat it.

Comment thread CHANGELOG.md Outdated
## 0.11.0 (2026-08-18)


### Features

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This release has no BREAKING CHANGES section, but it should. 3252e69 is feat!: and its message ends with an explicit BREAKING CHANGE: footer stating that the on-disk name of the session working directory is no longer prefixed with the session id, and that the embedded files subdirectory is named ef<random> rather than embedded_files<random>.

The version bump itself proves the breaking change was detected: with major_on_zero = false, 0.10.14 -> 0.11.0 is exactly the minor bump a breaking commit produces on a 0.x line. A plain feat/fix would have yielded 0.10.15, since minor_tags = [] and feat sits in patch_tags. So detection worked and only rendering was lost.

The cause looks like the guard in .semantic_release/CHANGELOG.md.j2, which tests "breaking" in release["elements"] before emitting the heading. That mapping is keyed by parsed commit type (features, bug fixes, ...); on python-semantic-release 10.6 (pinned in requirements-release.txt) there is no breaking key, so the branch never fires. Breaking descriptions hang off each commit (commit.breaking_descriptions) and have to be iterated over the release commits instead. That matches the surviving hand-era breaking sections further down this same file (0.10.0, 0.8.0, 0.7.0) and their absence from every recent release.

Impact: this is the first breaking release in a while, and the notes shipped to PyPI and the GitHub release silently drop the one thing a consumer most needs to read before upgrading, namely an on-disk layout change. Worth adding the section here by hand before merging, and fixing the template guard so future breaking releases are not dropped the same way.

Signed-off-by: client-software-ci <129794699+client-software-ci@users.noreply.github.com>
Comment thread CHANGELOG.md

### Bug Fixes

* resolve system commands from trusted dirs, not PATH (#349)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two of the three Bug Fixes entries point at the wrong PRs.

All three of these fixes landed in #351 (fix: resolve system commands from trusted dirs to prevent PATH injection, merged). Its commits are:

231c951 fix: use absolute paths for system commands to prevent PATH injection
d7b5b19 fix: resolve system commands from trusted dirs, not PATH
1839df4 test: pin the trusted-path resolver's security properties
68265a3 fix: address automated review findings on the trusted-path resolver
a144881 test: pin wrapper-before-symlink-farm ordering on NixOS
98e15fe docs: Reframe resolver comments around problem and solution
3fcbe09 fix: do not cache failed command lookups
fe9c014 test: Wrap a RANGE_EXPR parameter in string() before repr_sh
76faa23 test: Use posixpath.isabs for the POSIX trusted-directory entries

But #349 and #350 are unrelated PRs that are still open and were never part of this release:

So the changelog links readers of a security fix to a Dependabot PR. Suggest attributing all three lines to (#351), or dropping the PR refs on the two that have none of their own.

Comment thread CHANGELOG.md

* shorten the session working directory name for Windows MAX_PATH — session working dir is no longer prefixed with session ID; `embedded_files<random>` renamed to `ef<random>` (#348)

### Bug Fixes

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Bug Fixes list drops one fix: commit — the one that names the vulnerability.

There are four fix: commits in 0.10.14..HEAD, but only three bullets:

d3b978f fix: use absolute paths for system commands to prevent PATH injection   <-- not listed
419b434 fix: resolve system commands from trusted dirs, not PATH
3744653 fix: address automated review findings on the trusted-path resolver
3574ced fix: do not cache failed command lookups

fix is in patch_tags, so the generator in .semantic_release/CHANGELOG.md.j2 would have emitted all four.

The omission matters beyond bookkeeping: d3b978f is the only commit subject containing the words "PATH injection". As written, this release's notes describe the fix purely as an implementation detail ("resolve system commands from trusted dirs"), so a downstream consumer scanning changelogs to decide whether to pick up a release cannot tell that 0.11.0 closes a privilege-escalation issue (HackerOne 3942741, CWE-426 per the commit trailers).

Suggest either restoring the dropped bullet or rewording the first one to say what the fix prevents, e.g.:

* resolve system commands from trusted dirs, not PATH — prevents PATH injection
  into privileged helpers (`sudo`, `setsid`, `kill`, `pgrep`) (#351)

Comment thread CHANGELOG.md

### ⚠ BREAKING CHANGES

* shorten the session working directory name for Windows MAX_PATH — session working dir is no longer prefixed with session ID; `embedded_files<random>` renamed to `ef<random>` (#348)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The embedded_files<random>ef<random> half of this breaking change does not exist in the code.

At this head SHA, src/openjd/sessions/_session.py:2193 still reads prefix="embedded_files" in _create_files_directory — not prefix="ef".

grep -rn prefix="ef" src/ returns nothing, and git log -S prefix="ef" has no commits. #348's message describes the rename in both its body and its BREAKING CHANGE: trailer, but the diff only changed _create_working_directory (prefix=self._session_idprefix=""). The _create_files_directory prefix was never touched, so the trailer this bullet was derived from was already inaccurate when #348 merged.

The first clause of the bullet ("session working dir is no longer prefixed with session ID") is correct; only the rename clause is wrong.

Worth fixing before the release rather than after, because it inverts the cost of the error. A changelog that omits a breaking change lets consumers discover it at runtime; one that announces a rename that did not happen actively induces the break — a maintainer who updates a pattern from embedded_files[a-z0-9]{8} to ef[a-z0-9]{8} on the strength of these notes ends up with a matcher that fails against every real directory. Relatedly, the 12 characters of MAX_PATH headroom the notes credit to this rename were not actually recovered, which matters given the Windows MAX_PATH motivation for the whole change.

Two ways out: drop the rename clause from this bullet, or land the one-line prefix="ef" change in _create_files_directory so the notes become true. The latter keeps #348's stated MAX_PATH goal intact; it would also need the embedded_files reference in test/openjd/sessions_v0/test_session_let_bindings.py:712 updated.

Comment thread CHANGELOG.md
@@ -1,3 +1,15 @@
## 0.11.0 (2026-08-18)

### ⚠ BREAKING CHANGES

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This whole entry diverges from what the generator produces, which is the likely root cause of the two attribution problems in the sibling threads.

Two mechanical differences from .semantic_release/CHANGELOG.md.j2 and from all ten prior releases in this file:

  1. Heading text. The template emits ### BREAKING CHANGES; this says ### ⚠ BREAKING CHANGES. Every other occurrence in the file (lines 153, 212, 247, 260, 276, 283, 298, 346, 356) is the plain form, so the next generated release will regenerate the plain heading and the file will carry both spellings.

  2. Missing commit links. Every template bullet ends with ([`{{ commit.short_hash }}`](...commit url)), and every prior entry has them. None of the four bullets here do — they carry PR numbers instead, and those are the numbers that turned out to be wrong.

That pattern points at hand-authoring rather than semantic-release. Since PR numbers do not appear in any of these commit subjects, they had to be supplied by hand, and the #349/#350 references landed on two open Dependabot PRs. Regenerating with the configured tooling would fix the headings, restore the commit links, and drop the manual PR numbers in one step. The dropped d3b978f bullet would come back too, since fix is in patch_tags.

Not a blocker on its own, but the release-notes text is what downstream consumers read to decide whether to pick up a version, so consistency here is load-bearing. .github/scripts/get_latest_changelog.py is unaffected either way — it only keys off the ## h2 boundaries.

@seant-aws seant-aws closed this Aug 19, 2026
@seant-aws
seant-aws deleted the bump/0.11.0 branch August 19, 2026 17:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants