# Changelog

## Score

- CAI 56 → 56 (+0.4)
- Rubric changed (rubric-2026.09.10 → rubric-2026.09.18) — scores are not directly comparable.

## Lenses

- Code Health 43 → 42 (-0.7)
- Architecture 97 → 98 (+0.7)
- Maturity 73 → 74 (+0.1)
- Readiness 62 → 62 (-0.1)
- Security 60 → 66 (+5.4)
- Event Sourcing 100 → 100 (+0.0)

## Resolved (717)

- Button::dom (cognitive 16) (layout/src/widgets/button.rs)
- ClassTooLong: DisplayList (layout/src/solver3/display_list.rs)
- ClassTooLong: DisplayListBuilder (layout/src/solver3/display_list.rs)
- ClassTooLong: DisplayListGenerator (layout/src/solver3/display_list.rs)
- ClassTooLong: DisplayListItem (layout/src/solver3/display_list.rs)
- ClassTooLong: LayoutWindow (layout/src/window.rs)
- Cpp14Generator::generate (cognitive 16) (doc/src/codegen/v2/lang_cpp/cpp14.rs)
- CssPropertyCache::apply_ua_css (cognitive 64) (core/src/prop_cache.rs)
- CssPropertyCache::apply_ua_css (cyclomatic 25) (core/src/prop_cache.rs)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Duplicated block (10 lines × 2) (doc/src/autofix/mod.rs)
- Duplicated block (10 lines × 2) (doc/src/codegen/v2/lang_go/types.rs)
- Duplicated block (10 lines × 2) (layout/src/widgets/ribbon.rs)
- Duplicated block (10 lines × 2) (layout/src/widgets/text_area.rs)
- Duplicated block (10 lines × 2) (layout/src/widgets/text_area.rs)
- Duplicated block (10 lines × 2) (layout/src/widgets/titlebar.rs)
- Duplicated block (10 lines × 2) (webrender/core/src/render_task_graph.rs)
- Duplicated block (10 lines × 2) (webrender/glyph/src/lib.rs)
- Duplicated block (10 lines × 2) (webrender/swgl/src/shaders/brush_yuv_image_alpha_pass_texture_rect_yuv.rs)
- …and 697 more

## New (730)

- Ambiguous naming for single-item construction. 'from_vec' suggests taking a collection (Vec), but the argument is a single `AccessibilityAction`. 'from_item' is clearer. Having both suggests 'from_vec' might be a typo or legacy name, or it takes a Vec in a different overload not shown, but the signature shows a single item. This creates confusion about whether to pass a single item or a collection.
- CI installs an unverified third-party binary (.github/workflows/rust.yml)
- Conflicting naming for Option unwrapping. 'into_option' typically implies consuming the wrapper to get the inner value (or the standard Option<T>). 'as_option' usually implies borrowing. However, both signatures return `AccessibilityAction` (owned), not `&AccessibilityAction`. This suggests 'as_option' is misnamed or 'into_option' is misnamed. Standard Rust convention is 'into_inner' or 'unwrap' for owned, and 'as_ref'/'as_mut' for borrowed. Using 'as_option' for an owned return is non-standard and confusing.
- ConformancePlan::build (cognitive 33) (doc/src/codegen/v2/conformance/mod.rs)
- ConformancePlan::build (cyclomatic 23) (doc/src/codegen/v2/conformance/mod.rs)
- CssProperty::interpolate (cyclomatic 50) (css/src/props/property.rs)
- CssPropertyCache::normal_props_present (cognitive 20) (core/src/prop_cache.rs)
- DpiFunctions::hwnd_dpi (cognitive 19) (dll/src/desktop/shell2/windows/dpi.rs)
- Duplicated block (10 lines × 2) (dll/src/desktop/shell2/linux/wayland/mod.rs)
- Duplicated block (10 lines × 2) (doc/src/codegen/v2/lang_cpp/cpp20.rs)
- Duplicated block (10 lines × 2) (doc/src/codegen/v2/lang_crystal/model.rs)
- Duplicated block (10 lines × 2) (doc/src/codegen/v2/lang_crystal/wrappers.rs)
- Duplicated block (10 lines × 2) (doc/src/codegen/v2/lang_csharp/wrappers.rs)
- Duplicated block (10 lines × 2) (doc/src/codegen/v2/lang_d/wrappers.rs)
- Duplicated block (10 lines × 2) (doc/src/codegen/v2/lang_kotlin/managed.rs)
- Duplicated block (10 lines × 2) (doc/src/codegen/v2/lang_ocaml/wrappers.rs)
- Duplicated block (10 lines × 2) (doc/src/codegen/v2/lang_odin/types.rs)
- Duplicated block (10 lines × 2) (doc/src/reftest/regression.rs)
- Duplicated block (10 lines × 2) (layout/src/widgets/ribbon.rs)
- Duplicated block (10 lines × 2) (layout/src/widgets/themes/flat.rs)
- …and 710 more

## Changes since last survey

- 300 commits — 172 feature/other, 128 fixes

## By area

- doc/src — 101 commits
- doc/guide — 97 commits
- dll/src — 25 commits
- .github/workflows — 20 commits
- (root) — 11 commits
- layout/src — 11 commits
- core/src — 4 commits
- examples/cpp — 3 commits
- (repo) — 2 commits
- dll/build_link.rs — 2 commits
- doc/templates — 2 commits
- examples/assets — 2 commits
- examples/azul-meet — 2 commits
- css/src — 1 commit
- dll/Cargo.toml — 1 commit
- examples/azul-writer — 1 commit
- examples/c — 1 commit
- examples/crystal — 1 commit
- examples/go — 1 commit
- examples/julia — 1 commit

## Notable commits

- fix: Fix Java and Kotlin examples to use Update enum directly
- fix: Merge pull request #474 from fschutt/fix/compilation-1009
- fix: Merge pull request #475 from fschutt/fix/docs-update-human
- fix: ci: fix the zig download and the C# doc-comment XML
- fix: codegen(cpp): 3-arg AZ_REFLECT_JSON in every C++ header, Option has_value()/value(), deducing-this builders, toStdExpected fix
- fix: codegen(pascal): PACKENUM 4 ABI fix, typed callback surface, TAzApp<T>, builder chains, string overloads
- fix: codegen: Fix has_wrapper_class to include structs with methods even if they have no delete function
- fix: fix(a11y): hand a waiting adapter the whole tree, never an increment
- fix: fix(animation): a declared transition animates on every toggle, on the CPU renderer too
- fix: fix(api)!: public constructors are named create, and new is rejected
- fix: fix(app): open the windows queued with App::add_window
- fix: fix(autodoc): write the screenshot manifest with portable paths
- fix: fix(autofix): keep the WebTransport event types in the webtransport module
- fix: fix(azul-writer): restore the AzWriter entry point that a merge replaced with the old AzulDoc demo
- fix: fix(bindings): catch at every callback boundary, log, return the fallback
- fix: fix(build): a link-dynamic consumer build no longer overwrites libazul
- fix: fix(codegen): Remove illegal borrow in write_string for Lua bindings
- fix: fix(codegen): Route all Lua aggregates through Byref to fix Linux x64 LuaJIT
- fix: fix(codegen): Vec-typed fields were unreachable from Python
- fix: fix(codegen): bindings reference only symbols libazul exports
- …and 280 more
