Skip to content

chore: release#1

Open
github-actions[bot] wants to merge 1 commit intomainfrom
release-plz-2026-01-06T19-39-52Z
Open

chore: release#1
github-actions[bot] wants to merge 1 commit intomainfrom
release-plz-2026-01-06T19-39-52Z

Conversation

@github-actions
Copy link
Copy Markdown

@github-actions github-actions bot commented Jan 6, 2026

🤖 New release

  • facet-core: 0.42.0 -> 0.43.0 (⚠ API breaking changes)
  • facet-testhelpers-macros: 0.42.0 -> 0.43.0
  • facet-testhelpers: 0.42.0 -> 0.43.0
  • facet-macro-types: 0.42.0 -> 0.43.0
  • facet-macro-parse: 0.42.0 -> 0.43.0
  • facet-macros-impl: 0.42.0 -> 0.43.0 (✓ API compatible changes)
  • facet-macros: 0.42.0 -> 0.43.0
  • facet-reflect: 0.42.0 -> 0.43.0 (⚠ API breaking changes)
  • facet: 0.42.0 -> 0.43.0 (✓ API compatible changes)
  • facet-pretty: 0.42.0 -> 0.43.0
  • facet-value: 0.42.0 -> 0.43.0
  • cinereus: 0.42.0 -> 0.43.0
  • facet-diff-core: 0.42.0 -> 0.43.0
  • facet-diff: 0.42.0 -> 0.43.0
  • facet-assert: 0.42.0 -> 0.43.0 (✓ API compatible changes)
  • facet-path: 0.42.0 -> 0.43.0
  • facet-singularize: 0.42.0 -> 0.43.0
  • facet-solver: 0.42.0 -> 0.43.0
  • facet-validate: 0.42.0 -> 0.42.1
  • facet-format: 0.42.0 -> 0.42.1 (✓ API compatible changes)
  • facet-xml: 0.42.0 -> 0.42.1 (✓ API compatible changes)
  • facet-json: 0.42.0 -> 0.42.1 (✓ API compatible changes)
  • facet-error: 0.42.0 -> 0.42.1
  • facet-miette: 0.42.0 -> 0.42.1
  • facet-default: 0.42.0 -> 0.42.1 (✓ API compatible changes)
  • facet-args: 0.42.0 -> 0.43.0 (⚠ API breaking changes)
  • facet-urlencoded: 0.42.0 -> 0.43.0
  • facet-kdl: 0.42.0 -> 0.42.1 (✓ API compatible changes)
  • facet-msgpack: 0.42.0 -> 0.42.1 (✓ API compatible changes)
  • facet-postcard: 0.42.0 -> 0.42.1
  • facet-toml: 0.42.0 -> 0.42.1 (✓ API compatible changes)
  • facet-yaml: 0.42.0 -> 0.42.1 (✓ API compatible changes)
  • facet-axum: 0.42.0 -> 0.43.0
  • facet-json-schema: 0.42.0 -> 0.42.1
  • facet-typescript: 0.42.0 -> 0.42.1
  • facet-shapelike: 0.42.0 -> 0.42.1 (✓ API compatible changes)
  • facet-svg: 0.42.0 -> 0.42.1
  • facet-asn1: 0.42.0 -> 0.42.1 (✓ API compatible changes)
  • facet-csv: 0.42.0 -> 0.42.1
  • facet-xdr: 0.42.0 -> 0.42.1
  • facet-html: 0.42.0 -> 0.42.1 (✓ API compatible changes)
  • facet-html-dom: 0.42.0 -> 0.42.1
  • facet-atom: 0.42.0 -> 0.42.1
  • facet-tokio-postgres: 0.42.0 -> 0.42.1

facet-core breaking changes

--- failure constructible_struct_adds_field: externally-constructible struct adds field ---

Description:
A pub struct constructible with a struct literal has a new pub field. Existing struct literals must be updated to include the new field.
        ref: https://doc.rust-lang.org/reference/expressions/struct-expr.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/constructible_struct_adds_field.ron

Failed in:
  field Shape.decl_id in /tmp/.tmpxX91qH/facet/facet-core/src/types/shape.rs:119
  field Shape.module_path in /tmp/.tmpxX91qH/facet/facet-core/src/types/shape.rs:162
  field Shape.source_file in /tmp/.tmpxX91qH/facet/facet-core/src/types/shape.rs:168
  field Shape.source_line in /tmp/.tmpxX91qH/facet/facet-core/src/types/shape.rs:174
  field Shape.source_column in /tmp/.tmpxX91qH/facet/facet-core/src/types/shape.rs:180

--- failure enum_repr_variant_discriminant_changed: variant of an enum with explicit repr changed discriminant ---

Description:
An enum variant has changed its discriminant value. The enum has a defined primitive representation, so this breaks downstream code that used the discriminant value via an unsafe pointer cast.
        ref: https://doc.rust-lang.org/reference/items/enumerations.html#pointer-casting
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/enum_repr_variant_discriminant_changed.ron

Failed in:
  variant Variance::Covariant 0 -> 1 in /tmp/.tmpxX91qH/facet/facet-core/src/types/variance.rs:87
  variant Variance::Contravariant 1 -> 2 in /tmp/.tmpxX91qH/facet/facet-core/src/types/variance.rs:97
  variant Variance::Invariant 2 -> 3 in /tmp/.tmpxX91qH/facet/facet-core/src/types/variance.rs:115

--- failure enum_variant_added: enum variant added on exhaustive enum ---

Description:
A publicly-visible enum without #[non_exhaustive] has a new variant.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#enum-variant-new
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/enum_variant_added.ron

Failed in:
  variant Variance:Bivariant in /tmp/.tmpxX91qH/facet/facet-core/src/types/variance.rs:74
  variant TryFromError:UnsupportedSourceType in /tmp/.tmpxX91qH/facet/facet-core/src/types/error.rs:117

--- failure struct_pub_field_missing: pub struct's pub field removed or renamed ---

Description:
A publicly-visible struct has at least one public field 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.45.0/src/lints/struct_pub_field_missing.ron

Failed in:
  field shape of struct OxPtrUninit, previously in file /tmp/.tmp7vDrWa/facet-core/src/types/builtins.rs:193
  field shape of struct OxPtrMut, previously in file /tmp/.tmp7vDrWa/facet-core/src/types/builtins.rs:108
  field shape of struct OxMut, previously in file /tmp/.tmp7vDrWa/facet-core/src/types/builtins.rs:393
  field shape of struct OxRef, previously in file /tmp/.tmp7vDrWa/facet-core/src/types/builtins.rs:253
  field shape of struct OxPtrConst, previously in file /tmp/.tmp7vDrWa/facet-core/src/types/builtins.rs:62

--- failure struct_pub_field_now_doc_hidden: pub struct field is now #[doc(hidden)] ---

Description:
A pub field of a pub struct is now marked #[doc(hidden)] and is no longer part of the public API.
        ref: https://doc.rust-lang.org/rustdoc/write-documentation/the-doc-attribute.html#hidden
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/struct_pub_field_now_doc_hidden.ron

Failed in:
  field OxPtrUninit.shape in file /tmp/.tmpxX91qH/facet/facet-core/src/types/builtins.rs:189
  field OxPtrMut.shape in file /tmp/.tmpxX91qH/facet/facet-core/src/types/builtins.rs:104
  field OxMut.shape in file /tmp/.tmpxX91qH/facet/facet-core/src/types/builtins.rs:389
  field OxRef.shape in file /tmp/.tmpxX91qH/facet/facet-core/src/types/builtins.rs:249
  field OxPtrConst.shape in file /tmp/.tmpxX91qH/facet/facet-core/src/types/builtins.rs:58

--- warning repr_c_plain_struct_fields_reordered: struct fields reordered in repr(C) struct ---

Description:
A public repr(C) struct had its fields reordered. This can change the struct's memory layout, possibly breaking FFI use cases that depend on field position and order.
        ref: https://doc.rust-lang.org/reference/type-layout.html#reprc-structs
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/repr_c_plain_struct_fields_reordered.ron

Failed in:
  Shape.layout moved from position 2 to 3, in /tmp/.tmpxX91qH/facet/facet-core/src/types/shape.rs:123
  Shape.vtable moved from position 3 to 4, in /tmp/.tmpxX91qH/facet/facet-core/src/types/shape.rs:127
  Shape.type_ops moved from position 4 to 5, in /tmp/.tmpxX91qH/facet/facet-core/src/types/shape.rs:137
  Shape.marker_traits moved from position 5 to 6, in /tmp/.tmpxX91qH/facet/facet-core/src/types/shape.rs:140
  Shape.ty moved from position 6 to 7, in /tmp/.tmpxX91qH/facet/facet-core/src/types/shape.rs:144
  Shape.def moved from position 7 to 8, in /tmp/.tmpxX91qH/facet/facet-core/src/types/shape.rs:148
  Shape.type_identifier moved from position 8 to 9, in /tmp/.tmpxX91qH/facet/facet-core/src/types/shape.rs:152
  Shape.type_params moved from position 9 to 14, in /tmp/.tmpxX91qH/facet/facet-core/src/types/shape.rs:184
  Shape.doc moved from position 10 to 15, in /tmp/.tmpxX91qH/facet/facet-core/src/types/shape.rs:188
  Shape.attributes moved from position 11 to 16, in /tmp/.tmpxX91qH/facet/facet-core/src/types/shape.rs:192
  Shape.type_tag moved from position 12 to 17, in /tmp/.tmpxX91qH/facet/facet-core/src/types/shape.rs:196
  Shape.inner moved from position 13 to 18, in /tmp/.tmpxX91qH/facet/facet-core/src/types/shape.rs:201
  Shape.builder_shape moved from position 14 to 19, in /tmp/.tmpxX91qH/facet/facet-core/src/types/shape.rs:206
  Shape.type_name moved from position 15 to 20, in /tmp/.tmpxX91qH/facet/facet-core/src/types/shape.rs:211
  Shape.proxy moved from position 16 to 21, in /tmp/.tmpxX91qH/facet/facet-core/src/types/shape.rs:216
  Shape.variance moved from position 17 to 22, in /tmp/.tmpxX91qH/facet/facet-core/src/types/shape.rs:225
  Shape.flags moved from position 18 to 23, in /tmp/.tmpxX91qH/facet/facet-core/src/types/shape.rs:232
  Shape.tag moved from position 19 to 24, in /tmp/.tmpxX91qH/facet/facet-core/src/types/shape.rs:236
  Shape.content moved from position 20 to 25, in /tmp/.tmpxX91qH/facet/facet-core/src/types/shape.rs:240

facet-reflect breaking changes

--- failure inherent_method_unsafe_added: pub method became unsafe ---

Description:
A publicly-visible method or associated fn became `unsafe`, so calling it now requires an `unsafe` block.
        ref: https://doc.rust-lang.org/book/ch19-01-unsafe-rust.html#calling-an-unsafe-function-or-method
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/inherent_method_unsafe_added.ron

Failed in:
  PeekList::new in /tmp/.tmpxX91qH/facet/facet-reflect/src/peek/list.rs:108
  PeekNdArray::new in /tmp/.tmpxX91qH/facet/facet-reflect/src/peek/ndarray.rs:57

facet-args breaking changes

--- failure enum_variant_added: enum variant added on exhaustive enum ---

Description:
A publicly-visible enum without #[non_exhaustive] has a new variant.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#enum-variant-new
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/enum_variant_added.ron

Failed in:
  variant Attr:Counted in /tmp/.tmpxX91qH/facet/facet-args/src/lib.rs:36
Changelog

facet-core

0.43.0 - 2026-01-09

Added

  • (shape) add DeclId for identifying type declarations
  • (facet-core) add module_path to foreign type implementations
  • (shape) add module_path and source location fields

Fixed

  • (variance) &'a mut T is covariant in 'a when T is bivariant
  • prevent exponential variance computation for recursive types
  • (soundness) propagate variance correctly for reference types
  • resolve rustdoc links and clippy auto-deref warnings
  • (soundness) introduce TryFromOutcome enum for explicit ownership semantics
  • (soundness) return Invariant when variance depth limit is hit
  • (soundness) make shape field private on Ox* types

Other

  • (decl_id) auto-compute from module_path + kind + type_identifier
  • (decl_id) auto-compute for non-generic types
  • (variance) replace function-based variance with declarative model

facet-testhelpers-macros

0.43.0 - 2026-01-09

Added

  • (shape) add DeclId for identifying type declarations
  • (facet-core) add module_path to foreign type implementations
  • (shape) add module_path and source location fields

Fixed

  • (variance) &'a mut T is covariant in 'a when T is bivariant
  • prevent exponential variance computation for recursive types
  • (soundness) propagate variance correctly for reference types
  • resolve rustdoc links and clippy auto-deref warnings
  • (soundness) introduce TryFromOutcome enum for explicit ownership semantics
  • (soundness) return Invariant when variance depth limit is hit
  • (soundness) make shape field private on Ox* types

Other

  • (decl_id) auto-compute from module_path + kind + type_identifier
  • (decl_id) auto-compute for non-generic types
  • (variance) replace function-based variance with declarative model

facet-testhelpers

0.43.0 - 2026-01-09

Added

  • (shape) add DeclId for identifying type declarations
  • (facet-core) add module_path to foreign type implementations
  • (shape) add module_path and source location fields

Fixed

  • (variance) &'a mut T is covariant in 'a when T is bivariant
  • prevent exponential variance computation for recursive types
  • (soundness) propagate variance correctly for reference types
  • resolve rustdoc links and clippy auto-deref warnings
  • (soundness) introduce TryFromOutcome enum for explicit ownership semantics
  • (soundness) return Invariant when variance depth limit is hit
  • (soundness) make shape field private on Ox* types

Other

  • (decl_id) auto-compute from module_path + kind + type_identifier
  • (decl_id) auto-compute for non-generic types
  • (variance) replace function-based variance with declarative model

facet-macro-types

0.43.0 - 2026-01-09

Added

  • (shape) add DeclId for identifying type declarations
  • (facet-core) add module_path to foreign type implementations
  • (shape) add module_path and source location fields

Fixed

  • (variance) &'a mut T is covariant in 'a when T is bivariant
  • prevent exponential variance computation for recursive types
  • (soundness) propagate variance correctly for reference types
  • resolve rustdoc links and clippy auto-deref warnings
  • (soundness) introduce TryFromOutcome enum for explicit ownership semantics
  • (soundness) return Invariant when variance depth limit is hit
  • (soundness) make shape field private on Ox* types

Other

  • (decl_id) auto-compute from module_path + kind + type_identifier
  • (decl_id) auto-compute for non-generic types
  • (variance) replace function-based variance with declarative model

facet-macro-parse

0.43.0 - 2026-01-09

Added

  • (shape) add DeclId for identifying type declarations
  • (facet-core) add module_path to foreign type implementations
  • (shape) add module_path and source location fields

Fixed

  • (variance) &'a mut T is covariant in 'a when T is bivariant
  • prevent exponential variance computation for recursive types
  • (soundness) propagate variance correctly for reference types
  • resolve rustdoc links and clippy auto-deref warnings
  • (soundness) introduce TryFromOutcome enum for explicit ownership semantics
  • (soundness) return Invariant when variance depth limit is hit
  • (soundness) make shape field private on Ox* types

Other

  • (decl_id) auto-compute from module_path + kind + type_identifier
  • (decl_id) auto-compute for non-generic types
  • (variance) replace function-based variance with declarative model

facet-macros-impl

0.43.0 - 2026-01-09

Added

  • (shape) add DeclId for identifying type declarations
  • (facet-core) add module_path to foreign type implementations
  • (shape) add module_path and source location fields

Fixed

  • (variance) &'a mut T is covariant in 'a when T is bivariant
  • prevent exponential variance computation for recursive types
  • (soundness) propagate variance correctly for reference types
  • resolve rustdoc links and clippy auto-deref warnings
  • (soundness) introduce TryFromOutcome enum for explicit ownership semantics
  • (soundness) return Invariant when variance depth limit is hit
  • (soundness) make shape field private on Ox* types

Other

  • (decl_id) auto-compute from module_path + kind + type_identifier
  • (decl_id) auto-compute for non-generic types
  • (variance) replace function-based variance with declarative model

facet-macros

0.43.0 - 2026-01-09

Added

  • (shape) add DeclId for identifying type declarations
  • (facet-core) add module_path to foreign type implementations
  • (shape) add module_path and source location fields

Fixed

  • (variance) &'a mut T is covariant in 'a when T is bivariant
  • prevent exponential variance computation for recursive types
  • (soundness) propagate variance correctly for reference types
  • resolve rustdoc links and clippy auto-deref warnings
  • (soundness) introduce TryFromOutcome enum for explicit ownership semantics
  • (soundness) return Invariant when variance depth limit is hit
  • (soundness) make shape field private on Ox* types

Other

  • (decl_id) auto-compute from module_path + kind + type_identifier
  • (decl_id) auto-compute for non-generic types
  • (variance) replace function-based variance with declarative model

facet-reflect

0.43.0 - 2026-01-09

Added

  • (shape) add DeclId for identifying type declarations
  • (facet-core) add module_path to foreign type implementations
  • (shape) add module_path and source location fields

Fixed

  • (variance) &'a mut T is covariant in 'a when T is bivariant
  • prevent exponential variance computation for recursive types
  • (soundness) propagate variance correctly for reference types
  • resolve rustdoc links and clippy auto-deref warnings
  • (soundness) introduce TryFromOutcome enum for explicit ownership semantics
  • (soundness) return Invariant when variance depth limit is hit
  • (soundness) make shape field private on Ox* types

Other

  • (decl_id) auto-compute from module_path + kind + type_identifier
  • (decl_id) auto-compute for non-generic types
  • (variance) replace function-based variance with declarative model

facet

0.43.0 - 2026-01-09

Added

  • (shape) add DeclId for identifying type declarations
  • (facet-core) add module_path to foreign type implementations
  • (shape) add module_path and source location fields

Fixed

  • (variance) &'a mut T is covariant in 'a when T is bivariant
  • prevent exponential variance computation for recursive types
  • (soundness) propagate variance correctly for reference types
  • resolve rustdoc links and clippy auto-deref warnings
  • (soundness) introduce TryFromOutcome enum for explicit ownership semantics
  • (soundness) return Invariant when variance depth limit is hit
  • (soundness) make shape field private on Ox* types

Other

  • (decl_id) auto-compute from module_path + kind + type_identifier
  • (decl_id) auto-compute for non-generic types
  • (variance) replace function-based variance with declarative model

facet-pretty

0.43.0 - 2026-01-09

Added

  • (shape) add DeclId for identifying type declarations
  • (facet-core) add module_path to foreign type implementations
  • (shape) add module_path and source location fields

Fixed

  • (variance) &'a mut T is covariant in 'a when T is bivariant
  • prevent exponential variance computation for recursive types
  • (soundness) propagate variance correctly for reference types
  • resolve rustdoc links and clippy auto-deref warnings
  • (soundness) introduce TryFromOutcome enum for explicit ownership semantics
  • (soundness) return Invariant when variance depth limit is hit
  • (soundness) make shape field private on Ox* types

Other

  • (decl_id) auto-compute from module_path + kind + type_identifier
  • (decl_id) auto-compute for non-generic types
  • (variance) replace function-based variance with declarative model

facet-value

0.43.0 - 2026-01-09

Added

  • (shape) add DeclId for identifying type declarations
  • (facet-core) add module_path to foreign type implementations
  • (shape) add module_path and source location fields

Fixed

  • (variance) &'a mut T is covariant in 'a when T is bivariant
  • prevent exponential variance computation for recursive types
  • (soundness) propagate variance correctly for reference types
  • resolve rustdoc links and clippy auto-deref warnings
  • (soundness) introduce TryFromOutcome enum for explicit ownership semantics
  • (soundness) return Invariant when variance depth limit is hit
  • (soundness) make shape field private on Ox* types

Other

  • (decl_id) auto-compute from module_path + kind + type_identifier
  • (decl_id) auto-compute for non-generic types
  • (variance) replace function-based variance with declarative model

cinereus

0.43.0 - 2026-01-09

Added

  • (shape) add DeclId for identifying type declarations
  • (facet-core) add module_path to foreign type implementations
  • (shape) add module_path and source location fields

Fixed

  • (variance) &'a mut T is covariant in 'a when T is bivariant
  • prevent exponential variance computation for recursive types
  • (soundness) propagate variance correctly for reference types
  • resolve rustdoc links and clippy auto-deref warnings
  • (soundness) introduce TryFromOutcome enum for explicit ownership semantics
  • (soundness) return Invariant when variance depth limit is hit
  • (soundness) make shape field private on Ox* types

Other

  • (decl_id) auto-compute from module_path + kind + type_identifier
  • (decl_id) auto-compute for non-generic types
  • (variance) replace function-based variance with declarative model

facet-diff-core

0.43.0 - 2026-01-09

Added

  • (shape) add DeclId for identifying type declarations
  • (facet-core) add module_path to foreign type implementations
  • (shape) add module_path and source location fields

Fixed

  • (variance) &'a mut T is covariant in 'a when T is bivariant
  • prevent exponential variance computation for recursive types
  • (soundness) propagate variance correctly for reference types
  • resolve rustdoc links and clippy auto-deref warnings
  • (soundness) introduce TryFromOutcome enum for explicit ownership semantics
  • (soundness) return Invariant when variance depth limit is hit
  • (soundness) make shape field private on Ox* types

Other

  • (decl_id) auto-compute from module_path + kind + type_identifier
  • (decl_id) auto-compute for non-generic types
  • (variance) replace function-based variance with declarative model

facet-diff

0.43.0 - 2026-01-09

Added

  • (shape) add DeclId for identifying type declarations
  • (facet-core) add module_path to foreign type implementations
  • (shape) add module_path and source location fields

Fixed

  • (variance) &'a mut T is covariant in 'a when T is bivariant
  • prevent exponential variance computation for recursive types
  • (soundness) propagate variance correctly for reference types
  • resolve rustdoc links and clippy auto-deref warnings
  • (soundness) introduce TryFromOutcome enum for explicit ownership semantics
  • (soundness) return Invariant when variance depth limit is hit
  • (soundness) make shape field private on Ox* types

Other

  • (decl_id) auto-compute from module_path + kind + type_identifier
  • (decl_id) auto-compute for non-generic types
  • (variance) replace function-based variance with declarative model

facet-assert

0.43.0 - 2026-01-09

Added

  • (shape) add DeclId for identifying type declarations
  • (facet-core) add module_path to foreign type implementations
  • (shape) add module_path and source location fields

Fixed

  • (variance) &'a mut T is covariant in 'a when T is bivariant
  • prevent exponential variance computation for recursive types
  • (soundness) propagate variance correctly for reference types
  • resolve rustdoc links and clippy auto-deref warnings
  • (soundness) introduce TryFromOutcome enum for explicit ownership semantics
  • (soundness) return Invariant when variance depth limit is hit
  • (soundness) make shape field private on Ox* types

Other

  • (decl_id) auto-compute from module_path + kind + type_identifier
  • (decl_id) auto-compute for non-generic types
  • (variance) replace function-based variance with declarative model

facet-path

0.43.0 - 2026-01-09

Added

  • (shape) add DeclId for identifying type declarations
  • (facet-core) add module_path to foreign type implementations
  • (shape) add module_path and source location fields

Fixed

  • (variance) &'a mut T is covariant in 'a when T is bivariant
  • prevent exponential variance computation for recursive types
  • (soundness) propagate variance correctly for reference types
  • resolve rustdoc links and clippy auto-deref warnings
  • (soundness) introduce TryFromOutcome enum for explicit ownership semantics
  • (soundness) return Invariant when variance depth limit is hit
  • (soundness) make shape field private on Ox* types

Other

  • (decl_id) auto-compute from module_path + kind + type_identifier
  • (decl_id) auto-compute for non-generic types
  • (variance) replace function-based variance with declarative model

facet-singularize

0.43.0 - 2026-01-09

Added

  • (shape) add DeclId for identifying type declarations
  • (facet-core) add module_path to foreign type implementations
  • (shape) add module_path and source location fields

Fixed

  • (variance) &'a mut T is covariant in 'a when T is bivariant
  • prevent exponential variance computation for recursive types
  • (soundness) propagate variance correctly for reference types
  • resolve rustdoc links and clippy auto-deref warnings
  • (soundness) introduce TryFromOutcome enum for explicit ownership semantics
  • (soundness) return Invariant when variance depth limit is hit
  • (soundness) make shape field private on Ox* types

Other

  • (decl_id) auto-compute from module_path + kind + type_identifier
  • (decl_id) auto-compute for non-generic types
  • (variance) replace function-based variance with declarative model

facet-solver

0.43.0 - 2026-01-09

Added

  • (shape) add DeclId for identifying type declarations
  • (facet-core) add module_path to foreign type implementations
  • (shape) add module_path and source location fields

Fixed

  • (variance) &'a mut T is covariant in 'a when T is bivariant
  • prevent exponential variance computation for recursive types
  • (soundness) propagate variance correctly for reference types
  • resolve rustdoc links and clippy auto-deref warnings
  • (soundness) introduce TryFromOutcome enum for explicit ownership semantics
  • (soundness) return Invariant when variance depth limit is hit
  • (soundness) make shape field private on Ox* types

Other

  • (decl_id) auto-compute from module_path + kind + type_identifier
  • (decl_id) auto-compute for non-generic types
  • (variance) replace function-based variance with declarative model

facet-validate

0.42.0 - 2026-01-06

Other

  • Add runtime validation for all built-in validators
  • Add facet-validate crate for field validation during deserialization

facet-format

0.42.1 - 2026-01-09

Fixed

  • (facet-kdl) implement transparent document model for roundtripping
  • accept all numeric scalar tags for numeric types
  • (jit) validate scalar tags before reading payload to prevent type confusion
  • (html) preserve whitespace-only text nodes in parser

facet-xml

0.42.1 - 2026-01-09

Fixed

  • (facet-kdl) implement transparent document model for roundtripping
  • accept all numeric scalar tags for numeric types
  • (jit) validate scalar tags before reading payload to prevent type confusion
  • (html) preserve whitespace-only text nodes in parser

facet-json

0.42.1 - 2026-01-09

Fixed

  • (facet-kdl) implement transparent document model for roundtripping
  • accept all numeric scalar tags for numeric types
  • (jit) validate scalar tags before reading payload to prevent type confusion
  • (html) preserve whitespace-only text nodes in parser

facet-error

0.42.1 - 2026-01-09

Fixed

  • (facet-kdl) implement transparent document model for roundtripping
  • accept all numeric scalar tags for numeric types
  • (jit) validate scalar tags before reading payload to prevent type confusion
  • (html) preserve whitespace-only text nodes in parser

facet-miette

0.42.1 - 2026-01-09

Fixed

  • (facet-kdl) implement transparent document model for roundtripping
  • accept all numeric scalar tags for numeric types
  • (jit) validate scalar tags before reading payload to prevent type confusion
  • (html) preserve whitespace-only text nodes in parser

facet-default

0.42.1 - 2026-01-09

Fixed

  • (facet-kdl) implement transparent document model for roundtripping
  • accept all numeric scalar tags for numeric types
  • (jit) validate scalar tags before reading payload to prevent type confusion
  • (html) preserve whitespace-only text nodes in parser

facet-args

0.43.0 - 2026-01-09

Added

  • (facet-args) add counted flag support

facet-kdl

0.42.1 - 2026-01-09

Fixed

  • (facet-kdl) implement transparent document model for roundtripping

facet-msgpack

0.42.1 - 2026-01-09

Added

  • (format-suite) implement net type tests for all formats

facet-toml

0.42.1 - 2026-01-09

Added

  • (format-suite) implement net type tests for all formats

facet-yaml

0.42.1 - 2026-01-09

Added

  • (format-suite) implement net type tests for all formats

facet-shapelike

0.42.1 - 2026-01-09

Fixed

  • (soundness) make shape field private on Ox* types

facet-asn1

0.42.1 - 2026-01-09

Added

  • (format-suite) implement net type tests for all formats

facet-html

0.42.1 - 2026-01-09

Fixed

  • (html) preserve whitespace-only text nodes in parser
  • (html) preserve whitespace in text content per HTML spec

Other

  • explain XML vs HTML data model differences
  • Add second ws preservation test
  • Add link for HTML because rustdoc is smart enough to warn us about it but not enough to just link it I guess.
  • Fails to preserve line breaks

facet-tokio-postgres

0.42.0 - 2026-01-06

Other

  • (deps) update rust dependencies
  • Add rust_decimal::Decimal support + fix XML type inference
  • Add UUID, jiff, chrono, and time support to facet-tokio-postgres
  • Gate postgres tests behind test-postgres feature
  • Add CI job for facet-tokio-postgres with postgres service container
  • Add integration tests with testcontainers
  • Add facet-tokio-postgres crate for deserializing postgres rows


This PR was generated with release-plz.

@github-actions github-actions bot changed the title chore: release v0.42.1 chore: release Jan 7, 2026
@github-actions github-actions bot force-pushed the release-plz-2026-01-06T19-39-52Z branch 2 times, most recently from d3cca39 to b34c9e2 Compare January 8, 2026 15:47
@github-actions github-actions bot force-pushed the release-plz-2026-01-06T19-39-52Z branch from b34c9e2 to 08b3d57 Compare January 9, 2026 15:19
romac pushed a commit that referenced this pull request Jan 22, 2026
…-rs#1833)

## Summary

This PR significantly improves the tree diffing and DOM patching
infrastructure:

### facet-diff / cinereus improvements
- Add `diff_trees_with_matching` to cinereus to expose the Matching
alongside edit operations
- Rewrite facet-diff's path conversion to use a shadow tree approach
that tracks index shifts
- Enable proper Move operation support in tree diff
- Add `Properties` trait for node attributes (HTML/XML attributes)
- Generate `UpdateAttribute` operations for matched nodes with differing
attributes

### facet-html-diff
- Implement Chawathe edit script semantics with slot-based displacement
model
- `InsertAt` and `Move` operations use `detach_to_slot` for displaced
nodes
- Proper path-to-DOM-index translation through type metadata

### facet-html-diff-wasm (NEW)
- New crate for browser-based validation of DOM patching
- Compiles to WASM, uses web-sys for real DOM manipulation
- Uses `replaceChild` for atomic displacement with slot storage
- Playwright test harness runs patches against real browser DOM

### Testing
- Property tests verify roundtrip: `apply(A, diff(A, B)) == B`
- 19 browser-based WASM tests validating real DOM behavior
- 113+ facet-html-diff tests, 480+ total tests passing

### Documentation
- Added `cinereus/CHAWATHE_SEMANTICS.md` documenting the
displacement/slot model
- Key insight: Chawathe INSERT/MOVE don't shift siblings - they displace
to slots

## Chawathe Semantics

The Chawathe algorithm uses **displacement** rather than **shifting**:

```
INSERT X at position 0, detach_to_slot: Some(1)
  → X takes position 0, previous occupant goes to slot #1

MOVE slot #1 to position 1, detach_to_slot: Some(2)  
  → Node from slot #1 takes position 1, previous occupant goes to slot facet-rs#2
```

This maps perfectly to DOM's `replaceChild(newNode, oldNode)` which
atomically swaps and returns the displaced node.

## Test plan
- [x] All 480 tests pass locally
- [x] Property tests for roundtrip invariant
- [x] Browser-based WASM tests with Playwright
- [x] CI job for WASM browser testing
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants