diff --git a/Cargo.lock b/Cargo.lock index 3c8f13ff..eaaf2949 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1063,7 +1063,7 @@ dependencies = [ [[package]] name = "ifc-model" -version = "0.4.3" +version = "0.4.4" dependencies = [ "ahash", "cargo_metadata", @@ -1332,7 +1332,7 @@ checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" [[package]] name = "openbim-ifc" -version = "0.39.2" +version = "0.39.3" dependencies = [ "calamine", "flate2", diff --git a/Cargo.toml b/Cargo.toml index 4cd7dc87..7b7a34b3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,7 +31,7 @@ openbim-ifc = { path = "crates/openbim-ifc", version = "0.39.0", default-feature openbim-ifc-binding-core = { path = "crates/openbim-ifc-binding-core", version = "0.1.0", default-features = false } ifc-step = { path = "crates/ifc-step", version = "0.6.0" } ifc-xml = { path = "crates/ifc-xml", version = "0.5.0" } -ifc-model = { path = "crates/ifc-model", version = "0.4.3" } +ifc-model = { path = "crates/ifc-model", version = "0.4.4" } ifc-geometry = { path = "crates/ifc-geometry", version = "0.32.0", default-features = false } ifc-properties = { path = "crates/ifc-properties", version = "0.10.0", default-features = false } ifc-template-catalog = { path = "crates/ifc-template-catalog", version = "0.4.0", default-features = false } diff --git a/crates/ifc-model/CHANGELOG.md b/crates/ifc-model/CHANGELOG.md index 8aa04189..7815f41a 100644 --- a/crates/ifc-model/CHANGELOG.md +++ b/crates/ifc-model/CHANGELOG.md @@ -12,6 +12,8 @@ everything released before per-crate changelogs began. ## [Unreleased] +## [0.4.4] - 2026-10-29 + ### Fixed (#595) - `Model::set_attribute` and `Model::set_attributes` panic before any write @@ -185,7 +187,8 @@ First release under per-crate versioning. See the [repository changelog](../../CHANGELOG.md) for the family-wide history that produced this version. -[Unreleased]: https://github.com/openbimrs/ifc/compare/ifc-model-v0.4.3...HEAD +[Unreleased]: https://github.com/openbimrs/ifc/compare/ifc-model-v0.4.4...HEAD +[0.4.4]: https://github.com/openbimrs/ifc/releases/tag/ifc-model-v0.4.4 [0.4.3]: https://github.com/openbimrs/ifc/releases/tag/ifc-model-v0.4.3 [0.4.2]: https://github.com/openbimrs/ifc/releases/tag/ifc-model-v0.4.2 [0.4.1]: https://github.com/openbimrs/ifc/releases/tag/ifc-model-v0.4.1 diff --git a/crates/ifc-model/Cargo.toml b/crates/ifc-model/Cargo.toml index b8ca8fe5..d2ac5bc5 100644 --- a/crates/ifc-model/Cargo.toml +++ b/crates/ifc-model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ifc-model" -version = "0.4.3" +version = "0.4.4" edition = "2021" rust-version = "1.99" license = "AGPL-3.0-or-later OR LicenseRef-Commercial" diff --git a/crates/openbim-ifc/CHANGELOG.md b/crates/openbim-ifc/CHANGELOG.md index 977208ea..41b39d32 100644 --- a/crates/openbim-ifc/CHANGELOG.md +++ b/crates/openbim-ifc/CHANGELOG.md @@ -12,6 +12,8 @@ everything released before per-crate changelogs began. ## [Unreleased] +## [0.39.3] - 2026-10-29 + ### Added (#595) - `Model::preview` (from `ifc-model` 0.4.4); the `authoring` bench measures it @@ -1399,7 +1401,8 @@ First release under per-crate versioning. See the [repository changelog](../../CHANGELOG.md) for the family-wide history that produced this version. -[Unreleased]: https://github.com/openbimrs/ifc/compare/openbim-ifc-v0.39.2...HEAD +[Unreleased]: https://github.com/openbimrs/ifc/compare/openbim-ifc-v0.39.3...HEAD +[0.39.3]: https://github.com/openbimrs/ifc/releases/tag/openbim-ifc-v0.39.3 [0.39.2]: https://github.com/openbimrs/ifc/releases/tag/openbim-ifc-v0.39.2 [0.39.1]: https://github.com/openbimrs/ifc/releases/tag/openbim-ifc-v0.39.1 [0.39.0]: https://github.com/openbimrs/ifc/releases/tag/openbim-ifc-v0.39.0 diff --git a/crates/openbim-ifc/Cargo.toml b/crates/openbim-ifc/Cargo.toml index 0de2558a..3c5fadb5 100644 --- a/crates/openbim-ifc/Cargo.toml +++ b/crates/openbim-ifc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "openbim-ifc" -version = "0.39.2" +version = "0.39.3" edition = "2021" rust-version = "1.99" license = "AGPL-3.0-or-later OR LicenseRef-Commercial" diff --git a/docs/.vitepress/data/facts.json b/docs/.vitepress/data/facts.json index 0daf2ebb..8364cfa9 100644 --- a/docs/.vitepress/data/facts.json +++ b/docs/.vitepress/data/facts.json @@ -175,10 +175,10 @@ "url": "https://crates.io/crates/ifc-model" } ], - "released": "0.4.3", - "released_date": "2026-10-28", + "released": "0.4.4", + "released_date": "2026-10-29", "status": "implemented", - "version": "0.4.3" + "version": "0.4.4" }, "ifc-occurrence": { "description": "Built element and distribution occurrence classes and their type pairing.", @@ -400,10 +400,10 @@ "url": "https://crates.io/crates/openbim-ifc" } ], - "released": "0.39.2", + "released": "0.39.3", "released_date": "2026-10-29", "status": "implemented", - "version": "0.39.2" + "version": "0.39.3" }, "openbim-ifc-binding-core": { "description": "Host-independent core shared by the openbim-ifc language bindings (WebAssembly, C ABI, Python).", diff --git a/docs/guide/install.md b/docs/guide/install.md index 6c15fefb..0ce52afa 100644 --- a/docs/guide/install.md +++ b/docs/guide/install.md @@ -8,7 +8,7 @@ one reads the same in the others. | Language | Package | Latest release | Install | Requires | Reference | | --- | --- | --- | --- | --- | --- | -| Rust | [`openbim-ifc`](https://crates.io/crates/openbim-ifc) | 0.39.2 (2026-10-29) | `cargo add openbim-ifc` | Rust `1.99.0` | [`openbim-ifc`](/reference/crates/openbim-ifc) | +| Rust | [`openbim-ifc`](https://crates.io/crates/openbim-ifc) | 0.39.3 (2026-10-29) | `cargo add openbim-ifc` | Rust `1.99.0` | [`openbim-ifc`](/reference/crates/openbim-ifc) | | JavaScript / TypeScript | [`@openbim/ifc`](https://www.npmjs.com/package/@openbim/ifc) | 0.15.0 (2026-10-28) | `npm install @openbim/ifc` | Node `>=18` | [`openbim-ifc-wasm`](/reference/crates/openbim-ifc-wasm) | | Python | [`openbim-ifc`](https://pypi.org/project/openbim-ifc/) | 0.15.0 (2026-10-28) | `pip install openbim-ifc` | Python `>=3.9` | [`openbim-ifc-py`](/reference/crates/openbim-ifc-py) | | C / C++ | [`openbim_ifc`](https://github.com/openbimrs/ifc/releases/tag/openbim-ifc-capi-v0.1.20) (CMake, prebuilt archives) | 0.1.20 (2026-10-28) | `find_package(openbim_ifc)` | a C11 or C++17 compiler and CMake 3.21; Rust to build from source | [`openbim-ifc-capi`](/reference/crates/openbim-ifc-capi) | diff --git a/docs/reference/crates/ifc-model.md b/docs/reference/crates/ifc-model.md index ff99a897..c39273d8 100644 --- a/docs/reference/crates/ifc-model.md +++ b/docs/reference/crates/ifc-model.md @@ -11,7 +11,7 @@ The IFC entity graph: storage and structural queries, free of domain semantics a | | | | --- | --- | | Status | Implemented | -| Latest release | 0.4.3 (2026-10-28) | +| Latest release | 0.4.4 (2026-10-29) | | Registries | [crates.io `ifc-model`](https://crates.io/crates/ifc-model) | | API documentation | [rustdoc](/api/rustdoc/ifc_model/index.html){target="_self"} · [docs.rs](https://docs.rs/ifc-model) | | Source | [`crates/ifc-model/`](https://github.com/openbimrs/ifc/tree/main/crates/ifc-model) | @@ -29,25 +29,20 @@ serialization. ## Changes -Latest release, 0.4.3 (2026-10-28): +Latest release, 0.4.4 (2026-10-29): -### Added (#587) +### Fixed (#595) -- `Model::reverse_index`: the reverse index, built on the first call and kept - current by every write, undo and redo after that; equal to - `ReverseIndex::build` at every moment. -- `Model::global_id_candidates`: the entities whose first attribute is the - text of a `Guid`, ascending by id, kept the same way. -- `Model::drop_derived_indexes`, to free both. -- `PartialEq` and `Eq` on `ReverseIndex`. +- `Model::set_attribute` and `Model::set_attributes` panic before any write + for an attribute index of `usize::MAX`, instead of wrapping in release builds + and truncating the entity, or leaving the first edits of a batch unrecorded. -### Changed (#587) +### Added (#595) -- `Transaction::preflight` reads the model's own reverse index when something - built it, instead of scanning the model for a commit that removes. -- Undoing a batch is linear in the batch: file order and type buckets are - searched from the end. - -Semver: minor. +- `Model::preview` runs a change and rolls it back exactly, the revision + included: entities, orders, header, next free id, diagnostics and the + maintained indexes are put back, and a `History`, `Transaction` or `Inverse` + made before it stays valid. Revisions drawn inside are never reissued. + Semver: minor (additive). Full history: [`crates/ifc-model/CHANGELOG.md`](https://github.com/openbimrs/ifc/blob/main/crates/ifc-model/CHANGELOG.md) diff --git a/docs/reference/crates/openbim-ifc.md b/docs/reference/crates/openbim-ifc.md index 29cd2d25..efe3e569 100644 --- a/docs/reference/crates/openbim-ifc.md +++ b/docs/reference/crates/openbim-ifc.md @@ -11,7 +11,7 @@ Facade for the openBIM IFC crates: pick codecs and domains as features. | | | | --- | --- | | Status | Implemented | -| Latest release | 0.39.2 (2026-10-29) | +| Latest release | 0.39.3 (2026-10-29) | | Registries | [crates.io `openbim-ifc`](https://crates.io/crates/openbim-ifc) | | API documentation | [rustdoc](/api/rustdoc/ifc/index.html){target="_self"} · [docs.rs](https://docs.rs/openbim-ifc) | | Source | [`crates/openbim-ifc/`](https://github.com/openbimrs/ifc/tree/main/crates/openbim-ifc) | @@ -103,17 +103,11 @@ Facade for the openBIM IFC crates: pick codecs and domains as features. ## Changes -Latest release, 0.39.2 (2026-10-29): +Latest release, 0.39.3 (2026-10-29): -### Fixed (#596) +### Added (#595) -- A layer, profile or constituent set, or an IFC2X3 `IfcMaterialList`, - naming several materials no longer refuses the product before looking at - them: with no styled material it has no colour, with all styled - materials agreeing on rgb and transparency it takes that colour, and - anything else (differing styles, or a mix of styled and unstyled - materials) is `ColourError::AmbiguousMaterial`. - -Semver: patch. +- `Model::preview` (from `ifc-model` 0.4.4); the `authoring` bench measures it + against a clone. Full history: [`crates/openbim-ifc/CHANGELOG.md`](https://github.com/openbimrs/ifc/blob/main/crates/openbim-ifc/CHANGELOG.md) diff --git a/docs/reference/index.md b/docs/reference/index.md index f385498a..a6929e53 100644 --- a/docs/reference/index.md +++ b/docs/reference/index.md @@ -10,14 +10,14 @@ Every page here is generated from the crate itself: its manifest, its crate docu | Crate | Status | Latest release | Description | | --- | --- | --- | --- | -| [`openbim-ifc`](./crates/openbim-ifc) | Implemented | 0.39.2 | Facade for the openBIM IFC crates: pick codecs and domains as features. | +| [`openbim-ifc`](./crates/openbim-ifc) | Implemented | 0.39.3 | Facade for the openBIM IFC crates: pick codecs and domains as features. | ## Model, codecs, schema, authoring and validation | Crate | Status | Latest release | Description | | --- | --- | --- | --- | | [`ifc-author`](./crates/ifc-author) | Implemented | 0.4.2 | Schema-checked IFC authoring: construct entities by attribute name with arity and type validation. | -| [`ifc-model`](./crates/ifc-model) | Implemented | 0.4.3 | The IFC entity graph: storage and structural queries, free of domain semantics and serialization. | +| [`ifc-model`](./crates/ifc-model) | Implemented | 0.4.4 | The IFC entity graph: storage and structural queries, free of domain semantics and serialization. | | [`ifc-schema`](./crates/ifc-schema) | Implemented | 0.3.5 | IFC schema as data: entity table, supertype chain, attribute names. | | [`ifc-step`](./crates/ifc-step) | Implemented | 0.6.2 | STEP physical file (ISO 10303-21) codec for the IFC model. | | [`ifc-validate`](./crates/ifc-validate) | Implemented | 0.8.2 | Schema conformance: WHERE rules, cardinality, GUID and reference integrity. |