# Changelog

## Score

- CAI 41 → 32 (-9.2)
- Rubric changed (rubric-2026.10.1 → rubric-2026.10.5) — scores are not directly comparable.

## Lenses

- Code Health 29 → 25 (-3.6)
- Architecture 76 → 78 (+2.0)
- Maturity 60 → 38 (-21.8)
- Readiness 41 → 42 (+0.9)
- Security 73 → 29 (-44.1)
- Accessibility 48 → 37 (-10.7)
- Performance 100 → 100 (+0.0)

## Resolved (21)

- (anonymous) (cognitive 21) (lib/clacky/web/features/channels/store.js)
- (anonymous) (cognitive 72) (lib/clacky/web/features/trash/store.js)
- (anonymous) (cyclomatic 22) (lib/clacky/web/features/channels/store.js)
- (anonymous)::patch (cognitive 25) (lib/clacky/web/sessions.js)
- (anonymous)::patch (cyclomatic 16) (lib/clacky/web/sessions.js)
- Ambiguous ownership of session restoration. `Agent.from_session` appears to be a factory method that reconstructs an Agent from session data, while `SessionSerializer.restore_session` also takes session data. It is unclear if `restore_session` returns a raw state object or an Agent instance, leading to potential duplication of reconstruction logic or confusion about which method to use for deserialization.
- Change-coupling hub: http_server.rb → json_ui_controller.rb, message_history.rb, plain_ui_controller.rb, ext.js, view.js, view.js, store.js, settings.js, ws-dispatcher.js (lib/clacky/server/http_server.rb)
- Change-coupling hub: i18n.js → channel_config.rb, view.js, view.js, view.js, store.js, view.js, ws-dispatcher.js (lib/clacky/web/i18n.js)
- Hotspot: lib/clacky/brand_config.rb (lib/clacky/brand_config.rb)
- Hotspot: lib/clacky/utils/file_processor.rb (lib/clacky/utils/file_processor.rb)
- Hotspot: lib/clacky/web/core/ext.js (lib/clacky/web/core/ext.js)
- Off-boarding risk: anonymized user #1
- Off-boarding risk: anonymized user #2
- Off-boarding risk: anonymized user #3
- PR-triggered workflow without a permissions block
- Redundant model switching logic across Agent and AgentConfig. The Agent class exposes `switch_model_by_id`, which likely delegates to or duplicates the logic in `AgentConfig`. Furthermore, `AgentConfig` has both `switch_model_by_id` and `switch_model_by_name`, while `Agent` only has `switch_model_by_id`. This creates an inconsistent API surface for changing the active model.
- Repeated repair: lib/clacky/message_format/anthropic.rb (lib/clacky/message_format/anthropic.rb)
- Repeated repair: lib/clacky/web/features/new-session/store.js (lib/clacky/web/features/new-session/store.js)
- chat-navigator._renderTicks (cognitive 34) (lib/clacky/web/components/chat-navigator.js)
- chat-navigator.init (cyclomatic 20) (lib/clacky/web/components/chat-navigator.js)
- …and 1 more

## New (69)

- (anonymous) (cognitive 19) (lib/clacky/web/sessions.js)
- (anonymous) (cognitive 27) (lib/clacky/web/features/channels/store.js)
- (anonymous) (cognitive 57) (lib/clacky/web/features/archive/store.js)
- (anonymous) (cognitive 71) (lib/clacky/web/features/trash/store.js)
- (anonymous) (cyclomatic 28) (lib/clacky/web/features/channels/store.js)
- (anonymous) (cyclomatic 54) (lib/clacky/web/features/archive/store.js)
- (anonymous)._initSearchSettings::_syncKeyVisibility (cognitive 22) (lib/clacky/web/settings.js)
- (anonymous)._render (cognitive 17) (lib/clacky/web/features/archive/view.js)
- (anonymous)._renderCostTrend (cognitive 19) (lib/clacky/web/features/billing/view.js)
- (anonymous)._renderCostTrend (cyclomatic 20) (lib/clacky/web/features/billing/view.js)
- (anonymous)._renderHeatmap (cognitive 30) (lib/clacky/web/features/billing/view.js)
- (anonymous)._renderHeatmap (cyclomatic 26) (lib/clacky/web/features/billing/view.js)
- (anonymous)._wire (cognitive 29) (lib/clacky/web/features/archive/view.js)
- (anonymous)._wire (cyclomatic 18) (lib/clacky/web/features/trash/view.js)
- (anonymous)._wire (cyclomatic 21) (lib/clacky/web/features/archive/view.js)
- (anonymous).createViewer.buildImageTab (cognitive 17) (lib/clacky/web/features/workspace/view.js)
- (anonymous).createViewer.buildImageTab (cyclomatic 17) (lib/clacky/web/features/workspace/view.js)
- (anonymous).reconcileEntries (cognitive 17) (lib/clacky/web/features/workspace/view.js)
- (anonymous)::patch (cognitive 27) (lib/clacky/web/sessions.js)
- (anonymous)::patch (cyclomatic 19) (lib/clacky/web/sessions.js)
- …and 49 more

## Changes since last survey

- 113 commits — 68 feature/other, 45 fixes

## By area

- lib/clacky — 99 commits
- spec/clacky — 6 commits
- (root) — 5 commits
- (repo) — 2 commits
- .github/workflows — 1 commit

## Notable commits

- fix: Merge pull request #655 from octo-patch/fix/minimax-m31-request-rollout
- fix: Merge pull request #656 from clacky-ai/fix/minimax-m3-pricing
- fix: Merge pull request #657 from clacky-ai/fix/sidebar-live-session-membership
- fix: fix(agent): charge tier-less auto failures to the floor lane
- fix: fix(agent): preserve attachment messages during processing (C-5654) (#628)
- fix: fix(agent): prevent repeated compression of oversized recent messages (#643)
- fix: fix(agent): rebuild session client when its model card is edited (C-5821) (#661)
- fix: fix(channel): deliver web-originated replies to IM after a finished progress card (#603) (#605)
- fix: fix(channel): require qr_binder from the QQ adapter
- fix: fix(client): preserve headers when handling Anthropic stream errors (#642)
- fix: fix(ext-studio): localize screenshot upload errors and retry after device binding (C-5751) (#636)
- fix: fix(history): drop tool results with a blank tool_call_id before sending
- fix: fix(i18n): suggest switching models when retries are exhausted
- fix: fix(minimax): complete Flash effort handling and retire legacy Ollama choices
- fix: fix(new-session): inset the attachment strip inside the composer card (C-5822) (#659)
- fix: fix(new-session): keep the /#new draft name out of quick-created sessions (C-5829) (#658)
- fix: fix(pricing): correct MiniMax-M3 rates with its 512K tier (C-5827)
- fix: fix(reasoning): keep the Default choice intact end-to-end
- fix: fix(search): default to the free engine chain, not DeepSeek
- fix: fix(settings): localize the QR lightbox caption and unclip its close button
- …and 93 more

## Architecture

- 0 containers · 1 bounded contexts · 0 dependency edges (baseline)
