Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 11 additions & 8 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,17 @@ classifiers = [
"Topic :: Software Development :: Libraries"
]
dependencies = [
# 0.11.4 is the floor because it is the first release whose SerializedSymbolTable
# has a JSON transport form (to_json_str/from_json_str), which is how a caller
# gets a table across a process boundary and into the v1 Session's
# `resolved_symtab`. Do not drop below 0.11.2: the EXPR/WRAP_ACTIONS model
# surface this package imports (FormatString.whole_field_expression,
# evaluate_let_bindings, CancelationMethodDeferred, SymbolTable.expr_host_rules,
# `let` on StepTemplate/StepScript) does not exist before then.
"openjd-model >= 0.11.4,< 0.12",
# 0.11.6 is the floor: it is the first release that accepts an environment
# defining only `onExit`, a template this package is expected to enter and
# exit. Earlier floors, still load-bearing: 0.11.4 is where

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 onExit-only rationale does not appear to be a constraint this package can enforce, which makes this floor bump stricter than it needs to be.

The other floors named in this comment are genuine import-level requirements — evaluate_let_bindings, CancelationMethodDeferred, SerializedSymbolTable.from_json_str and friends are imported directly, so on an older model the package fails at import or attribute access. That is what a dependency floor is for.

openjd-model 0.11.6 is different in kind: 5b9c661 relaxes a validator on the ordinary-action path, and grepping src/ turns up no template decode or validation call at all (no parse_model, no decode_*_template, no model_validate) — the package receives already-constructed model objects from its caller. So whether an onExit-only environment is accepted is decided by whichever openjd-model performed the decode, in the caller's process. Raising this package's floor does not make that template decodable for anyone whose caller resolves an older model, and this package's own handling already tolerates the shape regardless of model version — _runner_env_script.py:189 treats a missing onEnter as a no-op success, and _session.py:967-974 skips the wrap lookup when onEnter is None.

The practical cost is that every consumer must now resolve openjd-model >= 0.11.6, and the < 0.12 ceiling means there is exactly one acceptable version. Given the release is being cut as 0.12.0 anyway, that is a narrow window to hand downstream resolvers for a reason that is not load-bearing here. Keeping the floor at 0.11.4 and noting 0.11.6 as the version a caller needs to decode such templates would achieve the same thing without the constraint.

# SerializedSymbolTable gained its JSON transport form
# (to_json_str/from_json_str), which is how a caller gets a table across a
# process boundary and into the v1 Session's `resolved_symtab`; and the
# EXPR/WRAP_ACTIONS model surface this package imports
# (FormatString.whole_field_expression, evaluate_let_bindings,
# CancelationMethodDeferred, SymbolTable.expr_host_rules, `let` on
# StepTemplate/StepScript) does not exist before 0.11.2.
"openjd-model >= 0.11.6,< 0.12",

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 BREAKING CHANGE: footer will version the release correctly but will describe the wrong change in the CHANGELOG.

.semantic_release/CHANGELOG.md.j2 renders the breaking-changes section from commit.commit.summary only:

{% for commit in release["elements"]["breaking"] %}
* {{ commit.commit.summary[commit.commit.summary.find(": ")+1:].strip() }} (...)

It never reads commit.breaking_descriptions or the commit body, so the footer text — the part that actually explains that extra_let_bindings was removed from Session.enter_environment / exit_environment / run_task — is dropped. With squash_merge_commit_title = PR_TITLE, the summary is this PR title, so the 0.12.0 entry will read:

BREAKING CHANGES

  • raise the openjd-model floor to 0.11.6

A consumer upgrading from 0.11.0 sees a dependency floor bump listed as the breaking change, with no mention of the removed parameter that will actually break their code. The version number is right; the migration signal is missing.

Worth considering either putting the API removal in the commit summary rather than the dependency bump, or extending the template to emit commit.breaking_descriptions so footers are not silently discarded.

"pywin32 >= 307; platform_system == 'Windows'",
"psutil >= 5.9,< 7.3; platform_system == 'Windows'",
]
Expand Down
Loading