Skip to content

feat!: Make WithScope a supertrait of ComposablePass#2921

Merged
aborgna-q merged 4 commits intomainfrom
ab/with_scope-supertrait
Mar 11, 2026
Merged

feat!: Make WithScope a supertrait of ComposablePass#2921
aborgna-q merged 4 commits intomainfrom
ab/with_scope-supertrait

Conversation

@aborgna-q
Copy link
Collaborator

Closes #2913

Moves the scope trait to be a supertrait of ComposablePass. This way the scope setting can be used without needing to fix the generic HugrMut parameter of ComposablePass, reducing headaches when doing so.

BREAKING CHANGE: WithScope is now a supertrait of ComposablePass

@aborgna-q aborgna-q requested a review from acl-cqc March 6, 2026 10:58
@aborgna-q aborgna-q requested a review from a team as a code owner March 6, 2026 10:58
@codecov
Copy link

codecov bot commented Mar 6, 2026

Codecov Report

❌ Patch coverage is 38.23529% with 21 lines in your changes missing coverage. Please review.
✅ Project coverage is 83.80%. Comparing base (01fa963) to head (0956293).
⚠️ Report is 2 commits behind head on main.

Files with missing lines Patch % Lines
hugr-passes/src/composable.rs 28.57% 10 Missing ⚠️
hugr-passes/src/redundant_order_edges.rs 0.00% 4 Missing ⚠️
hugr-passes/src/replace_types.rs 0.00% 4 Missing ⚠️
hugr-passes/src/inline_dfgs.rs 0.00% 1 Missing ⚠️
hugr-passes/src/monomorphize.rs 0.00% 1 Missing ⚠️
hugr-passes/src/normalize_cfgs.rs 0.00% 1 Missing ⚠️
Additional details and impacted files
@@           Coverage Diff           @@
##             main    #2921   +/-   ##
=======================================
  Coverage   83.80%   83.80%           
=======================================
  Files         267      267           
  Lines       53032    53034    +2     
  Branches    46971    46973    +2     
=======================================
+ Hits        44445    44447    +2     
  Misses       6317     6317           
  Partials     2270     2270           
Flag Coverage Δ
python 88.74% <ø> (ø)
rust 83.17% <38.23%> (+<0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Copy link
Contributor

@acl-cqc acl-cqc left a comment

Choose a reason for hiding this comment

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

  • We should wait for after #2836 for this, I'd make it part of the 26.0 milestone
  • If this goes in before #2871 then the easiest thing will be to provide a default impl of with_scope in the trait, then the pass-specific impl's (not provided in #2836) can be empty, and #2871 can remove the default when it provides the rest (and that should also be part of the 26.0 milestone)
  • If this goes in after #2871 then the TODO ones will go away anyway so that's all good but this will obviously need work.

So if the second, I think it might be better to put in a default impl? But happy to approve (with wait-to-merge + milestone) whether with default or the current TODOs

@aborgna-q aborgna-q added the S-breaking-change Status: Need a breaking change release to progress label Mar 6, 2026
@acl-cqc acl-cqc added this to the hugr-rs 0.26.0 milestone Mar 6, 2026
@aborgna-q aborgna-q force-pushed the ab/with_scope-supertrait branch from f02b0bb to 847f7cc Compare March 11, 2026 14:15
@aborgna-q aborgna-q changed the base branch from main to acl/pass-scope-breaking March 11, 2026 14:15
Base automatically changed from acl/pass-scope-breaking to main March 11, 2026 14:45
@aborgna-q aborgna-q force-pushed the ab/with_scope-supertrait branch from 847f7cc to 8348d0c Compare March 11, 2026 14:47
@aborgna-q aborgna-q requested a review from acl-cqc March 11, 2026 14:48
@aborgna-q
Copy link
Collaborator Author

@hugrbot
Copy link
Collaborator

hugrbot commented Mar 11, 2026

This PR contains breaking changes to the public Rust API.

cargo-semver-checks summary
    Building hugr v0.25.7 (current)
     Built [  34.642s] (current)
   Parsing hugr v0.25.7 (current)
    Parsed [   0.004s] (current)
  Building hugr v0.25.7 (baseline)
     Built [  35.329s] (baseline)
   Parsing hugr v0.25.7 (baseline)
    Parsed [   0.004s] (baseline)
  Checking hugr v0.25.7 -> v0.25.7 (assume minor change)
   Checked [   0.013s] 196 checks: 196 pass, 56 skip
   Summary no semver update required
  Finished [  71.431s] hugr
  Building hugr-cli v0.25.7 (current)
     Built [  28.696s] (current)
   Parsing hugr-cli v0.25.7 (current)
    Parsed [   0.006s] (current)
  Building hugr-cli v0.25.7 (baseline)
     Built [  28.715s] (baseline)
   Parsing hugr-cli v0.25.7 (baseline)
    Parsed [   0.006s] (baseline)
  Checking hugr-cli v0.25.7 -> v0.25.7 (assume minor change)
   Checked [   0.016s] 196 checks: 196 pass, 56 skip
   Summary no semver update required
  Finished [  58.612s] hugr-cli
  Building hugr-core v0.25.7 (current)
     Built [  24.971s] (current)
   Parsing hugr-core v0.25.7 (current)
    Parsed [   0.078s] (current)
  Building hugr-core v0.25.7 (baseline)
     Built [  25.065s] (baseline)
   Parsing hugr-core v0.25.7 (baseline)
    Parsed [   0.074s] (baseline)
  Checking hugr-core v0.25.7 -> v0.25.7 (assume minor change)
   Checked [   0.236s] 196 checks: 196 pass, 56 skip
   Summary no semver update required
  Finished [  51.693s] hugr-core
  Building hugr-llvm v0.25.7 (current)
     Built [  30.155s] (current)
   Parsing hugr-llvm v0.25.7 (current)
    Parsed [   0.012s] (current)
  Building hugr-llvm v0.25.7 (baseline)
     Built [  29.870s] (baseline)
   Parsing hugr-llvm v0.25.7 (baseline)
    Parsed [   0.012s] (baseline)
  Checking hugr-llvm v0.25.7 -> v0.25.7 (assume minor change)
   Checked [   0.044s] 196 checks: 196 pass, 56 skip
   Summary no semver update required
  Finished [  61.196s] hugr-llvm
  Building hugr-model v0.25.7 (current)
     Built [  11.052s] (current)
   Parsing hugr-model v0.25.7 (current)
    Parsed [   0.017s] (current)
  Building hugr-model v0.25.7 (baseline)
     Built [  11.102s] (baseline)
   Parsing hugr-model v0.25.7 (baseline)
    Parsed [   0.016s] (baseline)
  Checking hugr-model v0.25.7 -> v0.25.7 (assume minor change)
   Checked [   0.033s] 196 checks: 196 pass, 56 skip
   Summary no semver update required
  Finished [  22.752s] hugr-model
  Building hugr-passes v0.25.7 (current)
     Built [  28.155s] (current)
   Parsing hugr-passes v0.25.7 (current)
    Parsed [   0.026s] (current)
  Building hugr-passes v0.25.7 (baseline)
     Built [  28.166s] (baseline)
   Parsing hugr-passes v0.25.7 (baseline)
    Parsed [   0.024s] (baseline)
  Checking hugr-passes v0.25.7 -> v0.25.7 (assume minor change)
   Checked [   0.043s] 196 checks: 194 pass, 2 fail, 0 warn, 56 skip

--- failure trait_added_supertrait: non-sealed trait added new supertraits ---

Description:
A non-sealed trait added one or more supertraits, which breaks downstream implementations of the trait
      ref: https://doc.rust-lang.org/cargo/reference/semver.html#generic-bounds-tighten
     impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.47.0/src/lints/trait_added_supertrait.ron

Failed in:
trait hugr_passes::composable::ComposablePass gained WithScope in file /home/runner/work/hugr/hugr/PR_BRANCH/hugr-passes/src/composable.rs:25
trait hugr_passes::ComposablePass gained WithScope in file /home/runner/work/hugr/hugr/PR_BRANCH/hugr-passes/src/composable.rs:25

--- failure trait_method_missing: pub trait method removed or renamed ---

Description:
A trait method is no longer callable, and may have been renamed or removed entirely.
      ref: https://doc.rust-lang.org/cargo/reference/semver.html#trait-item-signature
     impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.47.0/src/lints/trait_method_missing.ron

Failed in:
method with_scope_internal of trait ComposablePass, previously in file /home/runner/work/hugr/hugr/BASELINE_BRANCH/hugr-passes/src/composable.rs:40
method with_scope_internal of trait ComposablePass, previously in file /home/runner/work/hugr/hugr/BASELINE_BRANCH/hugr-passes/src/composable.rs:40

   Summary semver requires new major version: 2 major and 0 minor checks failed
  Finished [  57.342s] hugr-passes
  Building hugr-persistent v0.4.7 (current)
     Built [  22.766s] (current)
   Parsing hugr-persistent v0.4.7 (current)
    Parsed [   0.008s] (current)
  Building hugr-persistent v0.4.7 (baseline)
     Built [  22.528s] (baseline)
   Parsing hugr-persistent v0.4.7 (baseline)
    Parsed [   0.007s] (baseline)
  Checking hugr-persistent v0.4.7 -> v0.4.7 (assume minor change)
   Checked [   0.013s] 196 checks: 196 pass, 56 skip
   Summary no semver update required
  Finished [  46.793s] hugr-persistent

///
/// See [`PassScope`] for more details.
#[must_use]
fn default_scoped(scope: PassScope) -> Self
Copy link
Contributor

@acl-cqc acl-cqc Mar 11, 2026

Choose a reason for hiding this comment

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

Not sure about default_scoped - it is a bit ambiguous, it sounds like "with the default scope" whereas this is "default, with specified scope".

default_with_scope? Ideal, but hardly any shorter.
default_with?

Or perhaps something really short and mnemonic, I mean so that you'd have to look it up but at least it might stick in your mind?


impl WithScope for ConstantFoldPass {
fn with_scope(self, _scope: impl Into<PassScope>) -> Self {
// TODO: Set the scope configuration
Copy link
Contributor

@acl-cqc acl-cqc Mar 11, 2026

Choose a reason for hiding this comment

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

This needs merging, with_scope_internal is still defined above

Copy link
Contributor

@acl-cqc acl-cqc left a comment

Choose a reason for hiding this comment

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

Thanks @aborgna-q, huge improvement :-), there's one missed with_scope_internal you need to fix (and update the corresponding with_scope)...and I'm not sure about the default_scoped. Maybe we should just drop it....

@aborgna-q aborgna-q added this pull request to the merge queue Mar 11, 2026
Merged via the queue into main with commit f947622 Mar 11, 2026
29 of 30 checks passed
@aborgna-q aborgna-q deleted the ab/with_scope-supertrait branch March 11, 2026 15:40
@hugrbot hugrbot mentioned this pull request Mar 11, 2026
github-merge-queue bot pushed a commit that referenced this pull request Mar 16, 2026
## 🤖 New release

* `hugr-model`: 0.25.7 -> 0.26.0 (✓ API compatible changes)
* `hugr-core`: 0.25.7 -> 0.26.0 (⚠ API breaking changes)
* `hugr-llvm`: 0.25.7 -> 0.26.0 (✓ API compatible changes)
* `hugr-persistent`: 0.4.7 -> 0.5.0 (✓ API compatible changes)
* `hugr`: 0.25.7 -> 0.26.0 (✓ API compatible changes)
* `hugr-passes`: 0.25.7 -> 0.26.0 (⚠ API breaking changes)
* `hugr-cli`: 0.25.7 -> 0.26.0 (✓ API compatible changes)

### ⚠ `hugr-core` breaking changes

```text
--- failure enum_struct_variant_field_added: pub enum struct variant field added ---

Description:
An enum's exhaustive struct variant has a new field, which has to be included when constructing or matching on this variant.
        ref: https://doc.rust-lang.org/reference/attributes/type_system.html#the-non_exhaustive-attribute
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/enum_struct_variant_field_added.ron

Failed in:
  field pkg of variant LowerFunc::FixedHugr in /tmp/.tmpGqHhMb/hugr/hugr-core/src/extension/op_def.rs:312

--- failure enum_struct_variant_field_missing: pub enum struct variant's field removed or renamed ---

Description:
A publicly-visible enum has a struct variant whose field is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/enum_struct_variant_field_missing.ron

Failed in:
  field hugr of variant LowerFunc::FixedHugr, previously in file /tmp/.tmpqeiszk/hugr-core/src/extension/op_def.rs:303

--- failure enum_variant_missing: pub enum variant removed or renamed ---

Description:
A publicly-visible enum has at least one variant that is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/enum_variant_missing.ron

Failed in:
  variant BuildError::HugrInsertionError, previously in file /tmp/.tmpqeiszk/hugr-core/src/builder.rs:186
  variant EnvelopeFormat::ModelText, previously in file /tmp/.tmpqeiszk/hugr-core/src/envelope/header.rs:60
  variant EnvelopeFormat::ModelTextWithExtensions, previously in file /tmp/.tmpqeiszk/hugr-core/src/envelope/header.rs:70
  variant Value::Function, previously in file /tmp/.tmpqeiszk/hugr-core/src/ops/constant.rs:169
  variant Value::Function, previously in file /tmp/.tmpqeiszk/hugr-core/src/ops/constant.rs:169

--- failure function_missing: pub fn removed or renamed ---

Description:
A publicly-visible function cannot be imported by its prior path. A `pub use` may have been removed, or the function itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/function_missing.ron

Failed in:
  function hugr_core::envelope::read_described_envelope, previously in file /tmp/.tmpqeiszk/hugr-core/src/envelope.rs:98

--- failure inherent_method_missing: pub method removed or renamed ---

Description:
A publicly-visible method or associated fn is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/inherent_method_missing.ron

Failed in:
  Value::function, previously in file /tmp/.tmpqeiszk/hugr-core/src/ops/constant.rs:380
  Value::function, previously in file /tmp/.tmpqeiszk/hugr-core/src/ops/constant.rs:380
```

### ⚠ `hugr-passes` breaking changes

```text
--- failure derive_trait_impl_removed: built-in derived trait no longer implemented ---

Description:
A public type has stopped deriving one or more traits. This can break downstream code that depends on those types implementing those traits.
        ref: https://doc.rust-lang.org/reference/attributes/derive.html#derive
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/derive_trait_impl_removed.ron

Failed in:
  type RedundantOrderEdgesPass no longer derives Copy, in /tmp/.tmpGqHhMb/hugr/hugr-passes/src/redundant_order_edges.rs:26

--- failure enum_missing: pub enum removed or renamed ---

Description:
A publicly-visible enum cannot be imported by its prior path. A `pub use` may have been removed, or the enum itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/enum_missing.ron

Failed in:
  enum hugr_passes::untuple::UntupleRecursive, previously in file /tmp/.tmpqeiszk/hugr-passes/src/untuple.rs:23

--- failure function_missing: pub fn removed or renamed ---

Description:
A publicly-visible function cannot be imported by its prior path. A `pub use` may have been removed, or the function itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/function_missing.ron

Failed in:
  function hugr_passes::remove_dead_funcs, previously in file /tmp/.tmpqeiszk/hugr-passes/src/dead_funcs.rs:179
  function hugr_passes::const_fold::constant_fold_pass, previously in file /tmp/.tmpqeiszk/hugr-passes/src/const_fold.rs:224
  function hugr_passes::non_local::nonlocal_edges, previously in file /tmp/.tmpqeiszk/hugr-passes/src/non_local.rs:39
  function hugr_passes::nonlocal_edges, previously in file /tmp/.tmpqeiszk/hugr-passes/src/non_local.rs:39
  function hugr_passes::monomorphize, previously in file /tmp/.tmpqeiszk/hugr-passes/src/monomorphize.rs:36

--- failure inherent_method_missing: pub method removed or renamed ---

Description:
A publicly-visible method or associated fn is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/inherent_method_missing.ron

Failed in:
  UntuplePass::new, previously in file /tmp/.tmpqeiszk/hugr-passes/src/untuple.rs:102
  UntuplePass::set_parent, previously in file /tmp/.tmpqeiszk/hugr-passes/src/untuple.rs:114
  UntuplePass::recursive, previously in file /tmp/.tmpqeiszk/hugr-passes/src/untuple.rs:136
  UntuplePass::find_rewrites, previously in file /tmp/.tmpqeiszk/hugr-passes/src/untuple.rs:151
  UntuplePass::new, previously in file /tmp/.tmpqeiszk/hugr-passes/src/untuple.rs:102
  UntuplePass::set_parent, previously in file /tmp/.tmpqeiszk/hugr-passes/src/untuple.rs:114
  UntuplePass::recursive, previously in file /tmp/.tmpqeiszk/hugr-passes/src/untuple.rs:136
  UntuplePass::find_rewrites, previously in file /tmp/.tmpqeiszk/hugr-passes/src/untuple.rs:151
  RedundantOrderEdgesPass::new, previously in file /tmp/.tmpqeiszk/hugr-passes/src/redundant_order_edges.rs:39
  RedundantOrderEdgesPass::recursive, previously in file /tmp/.tmpqeiszk/hugr-passes/src/redundant_order_edges.rs:44
  RemoveDeadFuncsPass::with_module_entry_points, previously in file /tmp/.tmpqeiszk/hugr-passes/src/dead_funcs.rs:75
  NormalizeCFGPass::cfgs, previously in file /tmp/.tmpqeiszk/hugr-passes/src/normalize_cfgs.rs:121
  ValueHandle::new_const_hugr, previously in file /tmp/.tmpqeiszk/hugr-passes/src/const_fold/value_handle.rs:95

--- failure trait_added_supertrait: non-sealed trait added new supertraits ---

Description:
A non-sealed trait added one or more supertraits, which breaks downstream implementations of the trait
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#generic-bounds-tighten
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/trait_added_supertrait.ron

Failed in:
  trait hugr_passes::composable::ComposablePass gained WithScope in file /tmp/.tmpGqHhMb/hugr/hugr-passes/src/composable.rs:25
  trait hugr_passes::ComposablePass gained WithScope in file /tmp/.tmpGqHhMb/hugr/hugr-passes/src/composable.rs:25

--- failure trait_method_missing: pub trait method removed or renamed ---

Description:
A trait method is no longer callable, and may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#major-any-change-to-trait-item-signatures
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/trait_method_missing.ron

Failed in:
  method value_from_const_hugr of trait ConstLoader, previously in file /tmp/.tmpqeiszk/hugr-passes/src/dataflow.rs:73
  method with_scope_internal of trait ComposablePass, previously in file /tmp/.tmpqeiszk/hugr-passes/src/composable.rs:45
  method with_scope_internal of trait ComposablePass, previously in file /tmp/.tmpqeiszk/hugr-passes/src/composable.rs:45

--- failure type_allows_fewer_generic_type_params: type now allows fewer generic type parameters ---

Description:
A type now allows fewer generic type parameters than it used to. Uses of this type that supplied all previously-supported generic types will be broken.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#trait-new-parameter-no-default
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/type_allows_fewer_generic_type_params.ron

Failed in:
  Struct NormalizeCFGPass allows 1 -> 0 generic types in /tmp/.tmpGqHhMb/hugr/hugr-passes/src/normalize_cfgs.rs:101

--- failure unit_struct_changed_kind: unit struct changed kind ---

Description:
A public unit struct has been changed to a normal (curly-braces) struct, which cannot be constructed using the same struct literal syntax.
        ref: rust-lang/cargo#10871
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/unit_struct_changed_kind.ron

Failed in:
  struct MonomorphizePass in /tmp/.tmpGqHhMb/hugr/hugr-passes/src/monomorphize.rs:178
  struct InlineDFGsPass in /tmp/.tmpGqHhMb/hugr/hugr-passes/src/inline_dfgs.rs:17
  struct LocalizeEdges in /tmp/.tmpGqHhMb/hugr/hugr-passes/src/non_local.rs:23
```

<details><summary><i><b>Changelog</b></i></summary><p>

## `hugr-model`

<blockquote>

##
[0.26.0](hugr-model-v0.25.7...hugr-model-v0.26.0)
- 2026-03-16

### Testing

- Replace model text snapshots with roundtrip tests
([#2933](#2933))
- Add missing width arg in model-call example
([#2945](#2945))
</blockquote>

## `hugr-core`

<blockquote>

##
[0.26.0](hugr-core-v0.25.7...hugr-core-v0.26.0)
- 2026-03-16

### Bug Fixes

- Keep declared used_extensions in envelope description
([#2932](#2932))

### Documentation

- Move `spec/schema` and `spec/std_extensions` to `resources/`
([#2897](#2897))

### Miscellaneous Tasks

- [**breaking**] Fix new clippy warning on rust 1.94
([#2912](#2912))

### New Features

- [**breaking**] Rename ModelText envelope format to SExpression
([#2927](#2927))
- [**breaking**] Fix lower_funcs with custom extensions failing to load
([#2925](#2925))
- [**breaking**] TypeRow: add impl From array of Type, remove From<Type>
([#2784](#2784))
- Deprecate HugrView::as_petgraph
([#2944](#2944))

### Refactor

- [**breaking**] Remove deprecated Value::Function
([#2928](#2928))
- [**breaking**] Remove deprecated definitions
([#2930](#2930))

### Testing

- Fix type_row intos in doctests
([#2941](#2941))
- Add missing width arg in model-call example
([#2945](#2945))
</blockquote>

## `hugr-llvm`

<blockquote>

##
[0.26.0](hugr-llvm-v0.25.7...hugr-llvm-v0.26.0)
- 2026-03-16

### New Features

- *(llvm)* [**breaking**] Upgrade to LLVM 21
([#2901](#2901))
- Include private HUGR functions in the local symbol table
([#2831](#2831))
- [**breaking**] TypeRow: add impl From array of Type, remove From<Type>
([#2784](#2784))

### Refactor

- [**breaking**] Remove deprecated Value::Function
([#2928](#2928))
- [**breaking**] Remove deprecated stack_array codegen
([#2929](#2929))
</blockquote>

## `hugr-persistent`

<blockquote>

##
[0.5.0](hugr-persistent-v0.4.7...hugr-persistent-v0.5.0)
- 2026-03-16

### New Features

- *(llvm)* [**breaking**] Upgrade to LLVM 21
([#2901](#2901))
- [**breaking**] TypeRow: add impl From array of Type, remove From<Type>
([#2784](#2784))
</blockquote>

## `hugr`

<blockquote>

##
[0.26.0](hugr-v0.25.7...hugr-v0.26.0)
- 2026-03-16

### Bug Fixes

- Keep declared used_extensions in envelope description
([#2932](#2932))

### Documentation

- Move `spec/schema` and `spec/std_extensions` to `resources/`
([#2897](#2897))

### Miscellaneous Tasks

- [**breaking**] Fix new clippy warning on rust 1.94
([#2912](#2912))

### New Features

- [**breaking**] Update remainder of passes to use PassScope, drop
default with_scope
([#2871](#2871))
- [**breaking**] Make `WithScope` a supertrait of `ComposablePass`
([#2921](#2921))
- [**breaking**] Rename ModelText envelope format to SExpression
([#2927](#2927))
- [**breaking**] Fix lower_funcs with custom extensions failing to load
([#2925](#2925))
- Deprecate HugrView::as_petgraph
([#2944](#2944))
- [**breaking**] `hugr-passes` is no longer reexported from
`hugr::algorithms`
([#2922](#2922))
- *(llvm)* [**breaking**] Upgrade to LLVM 21
([#2901](#2901))
- [**breaking**] TypeRow: add impl From array of Type, remove From<Type>
([#2784](#2784))

### Refactor

- [**breaking**] Remove deprecated pass configuration
([#2938](#2938))
- [**breaking**] Remove deprecated Value::Function
([#2928](#2928))
- [**breaking**] Remove deprecated definitions
([#2930](#2930))

### Testing

- Fix type_row intos in doctests
([#2941](#2941))
- Add missing width arg in model-call example
([#2945](#2945))
</blockquote>

## `hugr-passes`

<blockquote>

##
[0.26.0](hugr-passes-v0.25.7...hugr-passes-v0.26.0)
- 2026-03-16

### New Features

- [**breaking**] `hugr-passes` is no longer reexported from
`hugr::algorithms`
([#2922](#2922))
- *(llvm)* [**breaking**] Upgrade to LLVM 21
([#2901](#2901))
- [**breaking**] Update remainder of passes to use PassScope, drop
default with_scope
([#2871](#2871))
- [**breaking**] Make `WithScope` a supertrait of `ComposablePass`
([#2921](#2921))
- [**breaking**] TypeRow: add impl From array of Type, remove From<Type>
([#2784](#2784))
- Deprecate HugrView::as_petgraph
([#2944](#2944))

### Refactor

- [**breaking**] Remove deprecated Value::Function
([#2928](#2928))
- [**breaking**] Remove deprecated pass configuration
([#2938](#2938))
</blockquote>

## `hugr-cli`

<blockquote>

##
[0.26.0](hugr-cli-v0.25.7...hugr-cli-v0.26.0)
- 2026-03-16

### Documentation

- Move `spec/schema` and `spec/std_extensions` to `resources/`
([#2897](#2897))

### New Features

- [**breaking**] Rename ModelText envelope format to SExpression
([#2927](#2927))
- [**breaking**] TypeRow: add impl From array of Type, remove From<Type>
([#2784](#2784))
</blockquote>


</p></details>

---
This PR was generated with
[release-plz](https://github.com/release-plz/release-plz/).

---------

Co-authored-by: Agustín Borgna <agustin.borgna@quantinuum.com>
Co-authored-by: Alec Edgington <54802828+cqc-alec@users.noreply.github.com>
@hugrbot hugrbot mentioned this pull request Mar 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-breaking-change Status: Need a breaking change release to progress

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature]: Add WithScope super trait for ComposablePasses

3 participants