# Changelog

## Score

- CAI 60 → 62 (+1.9)
- Rubric changed (rubric-2026.09.8 → rubric-2026.09.17) — scores are not directly comparable.

## Lenses

- Code Health 82 → 81 (-0.9)
- Architecture 56 → 60 (+4.0)
- Maturity 74 → 74 (+0.0)
- Readiness 69 → 59 (-10.0)
- Security 55 → 64 (+9.2)
- Domain Modelling 92 → 68 (-24.5)
- Event Sourcing 100 → 100 (+0.0)
- Accessibility 66 → 66 (+0.0)
- Performance 100 (new)

## Resolved (210)

- Boundary-crossing change coupling: create_table.rs ↔ stream_cdc_table_scan.rs (src/frontend/src/handler/create_table.rs)
- Boundary-crossing change coupling: function_catalog.rs ↔ mod.rs (src/frontend/src/catalog/function_catalog.rs)
- Boundary-crossing change coupling: function_catalog.rs ↔ mod.rs (src/frontend/src/catalog/function_catalog.rs)
- Boundary-crossing change coupling: hummock_service.rs ↔ hummock_meta_client.rs (src/meta/service/src/hummock_service.rs)
- Boundary-crossing change coupling: hummock_service.rs ↔ hummock_meta_client.rs (src/meta/service/src/hummock_service.rs)
- Boundary-crossing change coupling: notification_service.rs ↔ observer_manager.rs (src/meta/service/src/notification_service.rs)
- Boundary-crossing change coupling: observer_manager.rs ↔ notification_service.rs (src/common/common_service/src/observer_manager.rs)
- Boundary-crossing change coupling: observer_manager.rs ↔ observer_manager.rs (src/frontend/src/observer/observer_manager.rs)
- Boundary-crossing change coupling: relabeled_metric.rs ↔ streaming_stats.rs (src/common/metrics/src/relabeled_metric.rs)
- Boundary-crossing change coupling: schedule.rs ↔ iceberg_compactor_runner.rs (src/meta/src/manager/iceberg_compaction/schedule.rs)
- CatalogController::update_source_props_by_source_id (cognitive 16) (src/meta/src/controller/streaming_job.rs)
- CatalogController::update_source_props_by_source_id (cyclomatic 16) (src/meta/src/controller/streaming_job.rs)
- CatalogController::update_source_rate_limit_by_source_id (cognitive 17) (src/meta/src/controller/streaming_job.rs)
- Change coupling: batch_hash_join.rs ↔ batch_lookup_join.rs (src/frontend/src/optimizer/plan_node/batch_hash_join.rs)
- Change coupling: batch_hash_join.rs ↔ stream_hash_join.rs (src/frontend/src/optimizer/plan_node/batch_hash_join.rs)
- Change coupling: config.rs ↔ mod.rs (src/risedevtool/src/config.rs)
- Change coupling: create_source.rs ↔ create_table_as.rs (src/frontend/src/handler/create_source.rs)
- Change coupling: kinesis.rs ↔ utils.rs (src/connector/src/sink/kinesis.rs)
- Change coupling: local_hummock_storage.rs ↔ traced_store.rs (src/storage/src/hummock/store/local_hummock_storage.rs)
- Change coupling: main.rs ↔ store_impl.rs (src/storage/hummock_test/src/bin/replay/main.rs)
- …and 190 more

## New (222)

- Boundary-crossing change coupling: distributed_lookup_join.rs ↔ scan.rs (src/batch/executors/src/executor/join/distributed_lookup_join.rs)
- Boundary-crossing change coupling: function_catalog.rs ↔ mod.rs (src/frontend/src/catalog/function_catalog.rs)
- Boundary-crossing change coupling: function_catalog.rs ↔ mod.rs (src/frontend/src/catalog/function_catalog.rs)
- Boundary-crossing change coupling: handle_privilege.rs ↔ utils.rs (src/frontend/src/handler/handle_privilege.rs)
- Boundary-crossing change coupling: hummock_service.rs ↔ hummock_meta_client.rs (src/meta/service/src/hummock_service.rs)
- Boundary-crossing change coupling: hummock_service.rs ↔ hummock_meta_client.rs (src/meta/service/src/hummock_service.rs)
- Change coupling: hash_join.rs ↔ tests.rs (src/stream/src/executor/hash_join.rs)
- Change coupling: logical_join.rs ↔ stream_delta_join.rs (src/frontend/src/optimizer/plan_node/logical_join.rs)
- Change coupling: logical_over_window.rs ↔ over_window_to_topn_rule.rs (src/frontend/src/optimizer/plan_node/logical_over_window.rs)
- Change coupling: replay_impl.rs ↔ monitored_store.rs (src/storage/hummock_test/src/bin/replay/replay_impl.rs)
- Change coupling: state_table.rs ↔ sort.rs (src/stream/src/common/table/state_table.rs)
- Change coupling: stream_delta_join.rs ↔ stream_temporal_join.rs (src/frontend/src/optimizer/plan_node/stream_delta_join.rs)
- Change coupling: stream_hash_agg.rs ↔ stream_simple_agg.rs (src/frontend/src/optimizer/plan_node/stream_hash_agg.rs)
- Change coupling: stream_hash_agg.rs ↔ stream_stateless_simple_agg.rs (src/frontend/src/optimizer/plan_node/stream_hash_agg.rs)
- Change-coupling hub: batch_hash_join.rs → batch_lookup_join.rs, stream_delta_join.rs, stream_hash_join.rs (src/frontend/src/optimizer/plan_node/batch_hash_join.rs)
- Change-coupling hub: mod.rs → config.rs, risedev_env.rs, service_config.rs (src/risedevtool/src/task/mod.rs)
- Change-coupling hub: reader.rs → reader.rs, reader.rs, reader.rs (src/connector/src/source/nexmark/source/reader.rs)
- Change-coupling hub: store_impl.rs → main.rs, replay_impl.rs, test_utils.rs, test_utils.rs (src/storage/src/store_impl.rs)
- Change-coupling hub: stream_hop_window.rs → stream_dynamic_filter.rs, stream_hash_agg.rs, stream_hash_join.rs, stream_project.rs, stream_project_set.rs, stream_union.rs (src/frontend/src/optimizer/plan_node/stream_hop_window.rs)
- Change-coupling hub: stream_union.rs → stream_dynamic_filter.rs, stream_hash_agg.rs, stream_project.rs, stream_stateless_simple_agg.rs (src/frontend/src/optimizer/plan_node/stream_union.rs)
- …and 202 more

## Changes since last survey

- 94 commits — 63 feature/other, 31 fixes

## By area

- (root) — 35 commits
- src/meta — 13 commits
- src/stream — 8 commits
- src/frontend — 6 commits
- src/storage — 6 commits
- java/connector-node — 3 commits
- src/connector — 3 commits
- src/tests — 3 commits
- docker/dashboards — 2 commits
- e2e_test/source_inline — 2 commits
- e2e_test/source_legacy — 2 commits
- ci/scripts — 1 commit
- dashboard/package.json — 1 commit
- docs/dev — 1 commit
- e2e_test/iceberg — 1 commit
- e2e_test/streaming — 1 commit
- integration_tests/feature-store — 1 commit
- src/batch — 1 commit
- src/common — 1 commit
- src/config — 1 commit

## Notable commits

- fix: fix(cdc): align heartbeat interval validation across Rust and Java (#27017)
- fix: fix(cdc): enhance string decimal handling mode validation (#27143)
- fix: fix(cdc): force-close SQL Server connections on shutdown (#27186)
- fix: fix(ci): download minio and mc from RisingWave CI mirror (#27097)
- fix: fix(common): prevent memory accounting drift (#27069)
- fix: fix(connector): preserve SQL Server composite primary key order (#27160)
- fix: fix(dashboard): normalize output blocking ratio in user dashboard (#27003)
- fix: fix(grafana): use container_memory_rss for Node Memory relative (#27142)
- fix: fix(iceberg): derive REST table location from namespace (#27104)
- fix: fix(iceberg): merge manifests during COW overwrite (#26992)
- fix: fix(iceberg): reject row lineage column names for V3 tables (#27223)
- fix: fix(iceberg): reject unsupported primary keys in engine tables (#27105)
- fix: fix(meta): fence sink coordinators during recovery (#27180)
- fix: fix(meta): preserve compaction candidates across topology changes (#27042)
- fix: fix(meta): preserve connection and secret refs during connector alters (#26923)
- fix: fix(meta): recover source splits for snapshot backfill jobs (#27208)
- fix: fix(meta): stabilize automatic compaction group split and merge (#27044)
- fix: fix(object-store): propagate metadata errors during listing (#27266)
- fix: fix(optimizer): avoid unsafe correlated aggregate decorrelation (#27065)
- fix: fix(refresh): finish a table refresh only after all materialize actors and abandon it on recovery (#27041)
- …and 74 more
