## LTplus-AG/ifc-lite — v9.1.0…v9.2.0

_118 commits._

### Features
- **feat(viewer): load LandXML 1.2 TIN surfaces (#5010)** (47f39b8)
- **feat(viewer): localize appearance workflows (#5025)** (d3e45c7)
- **feat(cost): integrate viewer collaboration authoring (#5018)** (2d1c66e)
- **feat(viewer): localize hierarchy and properties (#5023)** (fb4d6fe)
- **feat(core): generate schema-aware Rust attribute registries (#4996)** (6e283f0)
- **feat(cost): expose store authoring to headless SDKs (#5017)** (55d4354)
- **feat(geometry): render structural surface members (#5026)** (50c23d4)
- **feat(parser): complete schema-derived relationship graph (#5009)** (d38af5a)
- **feat(geometry): render structural curved and oriented edges (#5020)** (3a47a0c)
- **feat(viewer): add manual clash groups (#5011)** (c230e9a)
- **feat(rust): preserve all supported IFC type names (#5014)** (19af4c9)
- **feat(cost): add loaded-model authoring foundation (#5016)** (0100a54)
- **feat(viewer): localize bulk property editor (#5028)** (2197922)
- **feat(parser): index structural relationships (#4991)** (e211790)
- **feat(charts): per-chart source filter, dashboard v2 (#4946) (#4984)** (873a648)
- **feat(viewer): work-calendar-aware Gantt shading + animation skip (#4830) (#4982)** (13a04c0)
- **feat(viewer): selector + group unions as OR-of-AND filter groups (#4904) (#4987)** (b853e62)
- **feat(cli,mcp): wasm geometry fingerprints for diff --by-content (#4977)** (7556ce5)
- **feat(viewer): Compare Suggestions — accept successor claims, split/merge groups, sidecar export/import (#4971)** (0d84727)
- **feat(cli,mcp,viewer,parser): authored keys, container paths, lineage flags, rekey (#4967)** (65ea107)
- **feat(diff): lineage — the 1:k artifact external data rekeys on (#4966)** (0a62c19)
- **feat(diff): successor claims — replaced-in-place suggestions from position (#4965)** (fc72af0)
- **feat(viewer): rotate GPU-instanced geometry when repositioning (#4890) (#4969)** (6e28171)
- **feat(diff): bucket split/merge candidates by class family (#4964)** (e30b86c)
- **feat(diff): pair a redrawn, auto-renamed element by world geometry (respecified) (#4963)** (62a57f7)
- **feat(renderer): rotate GPU-instanced occurrences about a pivot (#4890) (#4961)** (bd1e3f1)
- **feat(viewer): rotate a model about the workspace vertical axis when repositioning (#4873)** (7ade189)
- **feat(query,viewer): selector parent= as a shared spatial-ancestor rule (#4924)** (37a5949)
- **feat(charts): chart by quantity, material, classification, type and spatial container (#4891)** (cd4ee9e)
- **feat(charts): bind element charts to exact IFC attributes and properties (#4889)** (f24aff9)
- **feat(viewer): contributed-locale discovery + localized ribbon toolbar (#4883)** (18af517)
- **feat(viewer): fly navigation on the right mouse button (#4864) (#4868)** (e6cf6a6)
- **feat(tools): GlobalId-keyed cost differential parity for IFC 5D (#4878)** (5fbae02)
- **feat(viewer): read-only Cost panel for IFC 5D inspection (#4875)** (4d91c25)
- **feat(create): author IFC cost schedules, items and values with valid typed STEP (#4876)** (8733dc9)
- **feat(sdk): expose IFC cost read model (#4867)** (e43c455)
- **feat(parser): add schema-aware IFC cost read model (#4863)** (20bff7c)
- **feat(viewer): localize section tool (#4862)** (4e6904a)

### Fixes
- **fix(geometry): keep wall-normal cutters on the +Z rectangular depth; restore csg_capture build (#5039)** (86dafce)
- **fix(geometry): close remaining low-detail wall boundaries (#5033)** (531246a)
- **fix(viewer): localize extensions panel (#4918 slice 5a) (#4999)** (b399a49)
- **fix(viewer): bring Load Report and the new Cost panel onto both toolbars (#5032)** (29aef12)
- **fix(viewer): localize MCP, sources, tours and shell chrome (#4918 slice 5b) (#5000)** (6500376)
- **fix(renderer): free point-cloud assets by id and ignore duplicate loss reports (#5031)** (e9c6eb9)
- **fix(viewer): mirror generic store mutations (#5015)** (6a5f3f2)
- **fix(viewer): localize IDS panel (#5030)** (0078a76)
- **fix(renderer, viewer): recover lost WebGPU devices in place (#4998)** (bcff7f6)
- **fix(geometry): cut vertical wall strips in local frame (#5003)** (0e8a421)
- **fix(viewer): localize add element authoring (#5024)** (707cc22)
- **fix(viewer): localize property editor workflows (#5027)** (3424378)
- **fix(viewer): localize 2D section workflow (#5029)** (e211002)
- **fix(viewer): localize schedule/Gantt-panel chrome (#4918 slice 6) (#5002)** (802a30f)
- **fix(viewer): localize saved-list builder panels (#4918 slice 6) (#5004)** (bb31778)
- **fix(geometry): scope precise plane tags to unions (#5012) (#5019)** (24b2416)
- **fix(release): make Rust major offset and string-marker fix persistent (#5007)** (9ee30ce)
- **fix(viewer): localize tools panels — measure, space sketch, split (#4918 slice 6) (#5001)** (6304b8e)
- **fix(vercel): raise the Node heap cap for the viewer bundle (#4990) (#4997)** (c1883ea)
- **fix(xmatch): filter incomparable mapped donors (#4995)** (edba812)
- **fix(viewer,charts): document chart height/width, legend truncation, spacer, text styles (#4940) (#4983)** (427e886)
- **fix(viewer): localize document menu (#4993)** (32244cd)
- **fix(release): major-bump parser for EntityTable contract (#4992)** (ec114fe)
- **fix(review): OpenRouter providers, cheap parallel ensemble, diagnosable CLI_SILENT_EXIT (#4981)** (df9b1ca)
- **fix(geometry): stitch a consolidate plane-bucket split with kernel-precise tags (#4988)** (dce19f5)
- **fix(geometry): bound B-spline degree/control-points, memoize Cox-de Boor (#4901) (#4980)** (faadbb4)
- **fix(renderer,viewer): gate GPU upload paths on device loss (#4885) (#4978)** (1e2e444)
- **fix(geometry): bound pre-worker phases that can stall forever (#4902) (#4979)** (e2ca87d)
- **fix(viewer): localize the command palette + ship the #4918 sweep's ending gate (#4973)** (6e4d92a)
- **fix(viewer): grow the preAlignment snapshot when appendGeometryBatch appends meshes (#4976)** (5a85249)
- **fix(geometry): lower RTC re-base gate from 10 km to 1 km (#4934) (#4962)** (bab4e30)
- **fix(viewer): distinguish absent attribute from empty string in selector string matching (#4958)** (e1ace4f)
- **fix(viewer): distinguish an RTC convergence in placementFrameKey (#4952)** (ccf6c08)
- **fix(viewer): localize the shared command lists both toolbars render (#4918 slice 2) (#4968)** (9729891)
- **fix(viewer): undoing a split leaves both halves and drops the source (#4960)** (c5bb0f9)
- **fix(create): duplicate keeps the source's IFC type on imported elements (#4957)** (ab8380e)
- **fix(viewer): localize the classic MainToolbar strip (#4918 slice 1) (#4959)** (b4686f8)
- **fix(viewer): placement and split-cut picks ignore the model's reposition transform (#4953)** (521e8d8)
- **fix(export): a pending edit to '' is written as $, collapsing an empty IfcLabel (#4949)** (9c41278)
- **fix(viewer): live rotated extent keeps a pruned mesh until the angle changes (#4950)** (aba25fd)
- **fix(viewer): stop filing browser-extension throws as viewer bugs (#4939) (#4942)** (30c67c7)
- **fix(viewer): read duplicate bounds from the edited model, not the active one (#4943)** (66b3ade)
- **fix(viewer): drop pruned meshes from the rotation baseline (#4944)** (0b86e02)
- **fix(viewer,geometry): make federation frame order-independent (#4897) (#4906)** (8ccfa05)
- **fix(viewer): appendGeometryBatch files new meshes under the owning model, not the active one (#4928)** (88eac24)
- **fix(cost): make bim.cost reads observe a loaded model's pending edits (#4857) (#4916)** (ef42c0e)
- **fix(tools): IFC2X3 formulas, MODULO, weight dimension, unit Symbol/Dimension parity (#4913)** (159b064)
- **fix(viewer): default the sky on in the Cesium world context only (#4927)** (8d22ad7)
- **fix(viewer): prune geometryResult.meshes on mesh-removal drain (#4894)** (076428b)
- **fix(deploy): only a READY production build verifies the nightly advance (#4917)** (08916a2)
- **fix(parser): cost read model keeps an explicit empty IfcLabel distinct from absent (#4909)** (bbd3a67)
- **fix(parser): filter IfcRelAssignsToControl-assigned objects to products in cost-extractor (#4911)** (9f34896)
- **fix(parser): settle terminate()'d parseColumnar promise, add signal support (#4908)** (84941dd)
- **fix(parser): point the published worker URL at the file the package ships (#4900)** (39153d1)
- **fix(viewer): sectionPlane.enabled means the cut is on screen (#4910) (#4914)** (8ed7798)
- **fix(docs): list the Cost panel guide in the nav and build the docs site strictly on PRs (#4915)** (61e6ba5)
- **fix(deploy): pin each build's assets to its own deployment, not the browser's (#4907)** (cd2c7cc)
- **fix(viewer): BCF viewpoints clip only on a visible section; focused clash orbits the pair (#4806) (#4905)** (8c0f557)
- **fix(renderer): overlay batches inherit their base batch quantization (#4832) (#4887)** (1606952)
- **fix(viewer): treat a worker script that never loaded as a missing engine file (#4892)** (f8863ff)
- **fix(geometry): recover from a hung geometry call instead of failing the load (#4888)** (6a9fc13)
- **fix(geometry,bcf,sdk,cli): BCF viewpoints in world coordinates outside the viewer (#4879) (#4880)** (35c0517)
- **fix(viewer,bcf,clash): write and read BCF viewpoints in IFC world coordinates (#4872)** (1cc533f)
- **fix(viewer): show storey world elevation without a MapConversion (#4843) (#4871)** (16b049b)
- **fix(viewer): keep BCF Capture 2D visible and explain why it is disabled (#4870)** (9a7e2bf)

### Backend
- **Identity follow-up (#4989): replaced provenance on replay, viewer authored key, xmatch merge lane + donor sizing, stale docs (#5005)** (794986e)

### Tests
- **test(geometry): bless the census golden for #5033's closed hosts; pin the rvt01 #10191 replay honestly (#5040)** (776bd0c)
- **test(export): prove structural STEP round-trip fidelity (#5013)** (9ecbc95)
- **test(viewer): wait for the async sidecar export/import instead of a fixed 20 ms (#4986)** (c26136d)
- **test(xmatch): validate respecified, successor and split claims on the corpus (#4974)** (81be016)
- **test(viewer): wait for the full data store before the reposition projection snapshot (#4951)** (8fb004c)

### Docs
- **docs: correct sections the code has outgrown (audit 2026-09-19) (#5021)** (fc8fc3f)
- **docs(cli,provenance): README commands, export formats, status line (#5022)** (3c1cf51)
- **docs: Stable Element Identity guide, rekey and --key-from in the CLI and MCP guides (#4975)** (6c01865)
- **docs(python): generate docs/api/python.md from rust/python/README.md (#4926)** (db2dde4)
- **docs: fix stale Auto Origin Shift example, document federation's shared RTC frame (#4920)** (603d987)

### Chore
- **chore: version packages (#4954)** (1bcbd6d)
- **chore: version packages (#4948)** (bffdd89)
- **chore: version packages (#4893)** (2973306)
- **chore: version packages (#4866)** (9b8bb82)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/LTplus-AG/ifc-lite?utm_source=github-action)._