# Changelog

## Score

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

## Lenses

- Code Health 59 → 59 (-0.4)
- Architecture 99 → 95 (-3.9)
- Maturity 62 → 68 (+5.8)
- Readiness 64 → 62 (-2.1)
- Security 69 → 72 (+2.9)
- Domain Modelling 100 → 100 (+0.0)
- Event Sourcing 100 → 100 (+0.0)
- Accessibility 48 → 48 (+0.0)
- Performance 85 (new)

## Resolved (243)

- Documentation: no contributor guidance (README.md)
- Documentation: no installation or build instructions (README.md)
- Duplicated block (10 lines × 2) (crates/op-host-desktop/src/image_enrich_cli/retry.rs)
- Duplicated block (10 lines × 2) (crates/op-image-enrich/src/net/fetch.rs)
- Duplicated block (10 lines × 2) (crates/op-preview-core/src/present.rs)
- Duplicated block (11 lines × 2) (crates/op-codegen/src/codegen_targets.rs)
- Duplicated block (13 lines × 2) (crates/op-host-native/src/widget_host/slides_panel.rs)
- Duplicated block (15 lines × 2) (crates/op-engine-ffi/src/lifecycle.rs)
- Duplicated block (16 lines × 2) (crates/op-html/src/special_image.rs)
- Duplicated block (17 lines × 2) (crates/op-orchestrator/src/concurrent.rs)
- Duplicated block (20–22 lines × 2) (crates/op-host-services/src/import_html_url.rs)
- Duplicated block (6 lines × 2) (crates/op-host-services/src/web_canvas_server/tenant.rs)
- Duplicated block (6–7 lines × 2) (crates/op-host-web/src/iconify_web.rs)
- Duplicated block (7 lines × 2) (crates/op-codegen/src/codegen_targets.rs)
- Duplicated block (7 lines × 2) (crates/op-codegen/src/codegen_targets.rs)
- Duplicated block (7 lines × 2) (crates/op-codegen/src/codegen_targets.rs)
- Duplicated block (8–9 lines × 2) (crates/op-host-services/src/chat_provider_llm.rs)
- Duplicated block (9 lines × 2) (crates/op-host-desktop/src/image_enrich_cli/retry.rs)
- Duplicated block (9 lines × 2) (crates/op-orchestrator/src/stub_repair.rs)
- Duplicated block (9 lines × 6) (crates/op-orchestrator/src/geometry_bottom_gap.rs)
- …and 223 more

## New (420)

- Ambiguous semantic overlap between 'close' and 'delete'. In many session-based APIs, 'close' terminates the active session but may keep state, while 'delete' removes it entirely. However, the naming `close_session_if_supported` and `delete_session_if_supported` suggests these are capability-gated operations. If the underlying protocol treats them as distinct lifecycle stages, the names are okay, but if they are often used interchangeably or one implies the other, this is confusing. Given the presence of `supports_session_close` and `supports_session_delete`, they are likely distinct, but the API surface feels cluttered with capability checks that could be handled internally or via a single `terminate_session` method.
- BindingOverlay::consume_scroll_requests (cognitive 16) (crates/op-preview-core/src/binding_overlay.rs)
- Duplicate intent across different types. Both `OpenAiToolCollector` and `AnthropicToolCollector` have a `handle` method that takes a string and returns a `ChatDelta`. This suggests a common trait or interface should be defined for tool collectors to abstract away the provider-specific parsing logic.
- Duplicated block (10 lines × 2) (crates/op-chat-agent/src/design_agent_tools/root_seed.rs)
- Duplicated block (10 lines × 2) (crates/op-editor-core/src/icon_path_normalize.rs)
- Duplicated block (10 lines × 2) (crates/op-host-services/src/web_image_generate.rs)
- Duplicated block (10 lines × 2) (crates/op-orchestrator/src/card_inner_padding.rs)
- Duplicated block (10 lines × 2) (crates/op-orchestrator/src/concurrent.rs)
- Duplicated block (10 lines × 2) (crates/op-preview-contracts/src/effect.rs)
- Duplicated block (10 lines × 2) (packaging/ios/Sources/AuthCodeFormViewController.swift)
- Duplicated block (10 lines × 2) (templates/step0/_generators/tpl1.py)
- Duplicated block (10 lines × 2) (templates/step0/_generators/tpl_gradient_tech.py)
- Duplicated block (10 lines × 3) (templates/step0/_generators/tpl2.py)
- Duplicated block (10 lines × 5) (crates/op-orchestrator/src/absolute_child_clamp.rs)
- Duplicated block (10 lines × 5) (templates/step0/_generators/tpl_journal_card.py)
- Duplicated block (10–13 lines × 2) (templates/step0/_generators/tpl_toolkit_carousel.py)
- Duplicated block (11 lines × 2) (crates/op-editor-ui/src/widgets/home_surface_copy.rs)
- Duplicated block (11 lines × 2) (crates/op-editor-ui/src/widgets/home_surface_paint_art_screens.rs)
- Duplicated block (11 lines × 2) (crates/op-host-native/src/widget_host/mode_transition_host.rs)
- Duplicated block (11 lines × 2) (crates/op-orchestrator/src/card_inner_padding.rs)
- …and 400 more

## Changes since last survey

- 26 commits — 14 feature/other, 12 fixes

## By area

- crates/op-editor-ui — 8 commits
- crates/op-editor-host-core — 3 commits
- crates/op-host-services — 3 commits
- (root) — 2 commits
- crates/op-ai-skills — 1 commit
- crates/op-chat-agent — 1 commit
- crates/op-cli — 1 commit
- crates/op-design-lint — 1 commit
- crates/op-git — 1 commit
- crates/op-host-native — 1 commit
- crates/op-html — 1 commit
- crates/op-i18n — 1 commit
- crates/op-smoke — 1 commit
- screenshot/fluxion-ai-sponsor-banner.png — 1 commit

## Notable commits

- fix: fix(agent): keep the natively-cased Windows vars for guarded CLIs (#233)
- fix: fix(agent): match the Codex env allowlist case-insensitively (#232)
- fix: fix(agent): route every Studio task family to the design pipeline
- fix: fix(ai): keep the radius context cut on a char boundary (#241)
- fix: fix(ai): ride out provider 429s in the headless smoke client
- fix: fix(cli): decode a percent-encoded resource name before the disk lookup (#242)
- fix: fix(desktop): never overwrite a settings file the startup load rejected
- fix: fix(desktop): persist the chosen chat model row, not just the provider
- fix: fix(editor): address restored blobs with git's path separator (#235)
- fix: fix(editor): make Home's avatar and model picker actually usable
- fix: fix(html): stop a non-ascii css prelude from panicking the import (#240)
- fix: fix(i18n): carry the catalog size into the exporter, and split the settings tests
- change: docs(readme): add Fluxion AI sponsor block alongside Infistar in all locales
- change: docs(readme): arrange sponsor ads in two columns
- change: docs(readme): update Fluxion AI sponsor banner
- change: feat(ai): add Atlas Cloud image provider (#227)
- change: feat(editor): Studio entry surface — task home, generation workspace, Agent rail
- change: feat(editor): home entrance choreography and result-view short-viewport fit
- change: feat(editor): home model chip, connect card, persisted agent and orchestrator route
- change: feat(editor): home surface — match the prototype's composition and finish
- …and 6 more
