# Changelog

## Score

- CAI 70 → 73 (+2.7)
- Rubric changed (rubric-2026.09.8 → rubric-2026.09.17) — scores are not directly comparable.

## Lenses

- Code Health 83 → 83 (+0.0)
- Architecture 97 → 95 (-2.7)
- Maturity 67 → 67 (+0.0)
- Readiness 75 → 77 (+1.6)
- Security 64 → 71 (+7.0)
- Performance 100 (new)

## Resolved (191)

- Change coupling: listing_schema.rs ↔ mod.rs (datafusion/catalog/src/listing_schema.rs)
- Dependency advisory scan runs only on code events
- Documentation: no installation or build instructions (README.md)
- Documentation: no project overview (README.md)
- Documentation: no project overview (datafusion/physical-expr-adapter/README.md)
- Documentation: no project overview (datafusion/sqllogictest/README.md)
- Duplicated block (10 lines × 2) (datafusion/functions/src/regex/regexpcount.rs)
- Duplicated block (10 lines × 2) (datafusion/functions/src/string/levenshtein.rs)
- Duplicated block (10 lines × 3) (datafusion/physical-plan/src/joins/hash_join/exec.rs)
- Duplicated block (10–12 lines × 3) (datafusion/functions/src/regex/regexpcount.rs)
- Duplicated block (11 lines × 2) (datafusion/functions-nested/src/array_add.rs)
- Duplicated block (11 lines × 2) (datafusion/functions-nested/src/range.rs)
- Duplicated block (11 lines × 2) (datafusion/functions/src/core/arrow_field.rs)
- Duplicated block (11 lines × 3) (datafusion/functions/src/regex/regexpcount.rs)
- Duplicated block (11 lines × 3) (datafusion/physical-plan/src/aggregates/hash_stream.rs)
- Duplicated block (11 lines × 3) (datafusion/physical-plan/src/aggregates/ordered_final_stream.rs)
- Duplicated block (11 lines × 4) (datafusion/physical-plan/src/aggregates/ordered_final_stream.rs)
- Duplicated block (11–12 lines × 2) (datafusion/functions-nested/src/array_add.rs)
- Duplicated block (12 lines × 2) (datafusion/datasource-csv/src/file_format.rs)
- Duplicated block (12 lines × 2) (datafusion/functions/src/regex/regexpcount.rs)
- …and 171 more

## New (163)

- AsOfJoinExecNode::deserialize (cognitive 25) (datafusion/proto-models/src/generated/pbjson.rs)
- AsOfJoinExecNode::deserialize (cyclomatic 22) (datafusion/proto-models/src/generated/pbjson.rs)
- AsOfJoinNode::deserialize (cognitive 28) (datafusion/proto-models/src/generated/pbjson.rs)
- AsOfJoinNode::deserialize (cyclomatic 25) (datafusion/proto-models/src/generated/pbjson.rs)
- AsOfJoinNode::serialize (cognitive 16) (datafusion/proto-models/src/generated/pbjson.rs)
- AsOfJoinNode::serialize (cyclomatic 17) (datafusion/proto-models/src/generated/pbjson.rs)
- BinaryTypeCoercer::signature_inner (cognitive 16) (datafusion/expr-common/src/type_coercion/binary.rs)
- Change coupling: listing_schema.rs ↔ listing_table_factory.rs (datafusion/catalog/src/listing_schema.rs)
- Change coupling: listing_schema.rs ↔ statement.rs (datafusion/catalog/src/listing_schema.rs)
- ClassTooLong: AsOfJoinExec (datafusion/physical-plan/src/joins/asof_join.rs)
- ClassTooLong: MultiLevelMergeBuilder (datafusion/physical-plan/src/sorts/multi_level_merge.rs)
- CsvWriterOptions::try_from (cognitive 31) (datafusion/proto-common/src/from_proto/mod.rs)
- CsvWriterOptions::try_from (cyclomatic 22) (datafusion/proto-common/src/from_proto/mod.rs)
- DecorrelatePredicateSubquery::rewrite (cognitive 21) (datafusion/optimizer/src/decorrelate_predicate_subquery.rs)
- DerivedRelationBuilder::build (cognitive 17) (datafusion/sql/src/unparser/ast.rs)
- Documentation: no installation or build instructions (datafusion/ffi/README.md)
- Documentation: no usage examples (datafusion/ffi/README.md)
- Duplicated block (10 lines × 2) (datafusion/common/src/hash_utils.rs)
- Duplicated block (10 lines × 2) (datafusion/datasource-csv/src/file_format.rs)
- Duplicated block (10 lines × 2) (datafusion/physical-plan/src/aggregates/ordered_single_stream.rs)
- …and 143 more

## Changes since last survey

- 248 commits — 147 feature/other, 101 fixes

## By area

- datafusion/physical-plan — 44 commits
- .github/workflows — 20 commits
- datafusion/functions — 17 commits
- datafusion/optimizer — 17 commits
- datafusion/core — 15 commits
- datafusion/sqllogictest — 14 commits
- datafusion/physical-expr — 11 commits
- benchmarks/sql_benchmarks — 10 commits
- datafusion/functions-nested — 10 commits
- datafusion/datasource-parquet — 8 commits
- (root) — 7 commits
- docs/source — 7 commits
- datafusion/functions-aggregate — 6 commits
- datafusion/sql — 6 commits
- datafusion/substrait — 6 commits
- ci/scripts — 5 commits
- datafusion/common — 5 commits
- datafusion/expr — 5 commits
- datafusion/session — 4 commits
- datafusion/datasource — 3 commits

## Notable commits

- fix: Fix `EliminateLimit` not eliminating limits under `LogicalPlan::Extension` nodes. (#25577)
- fix: Fix `Numeric` signature coercion to properly handle null types (#24988)
- fix: Fix outdated Python DataFrame API documentation link (#25225)
- fix: Fix panic from `avg(x ORDER BY y)` (and more) (#25711)
- fix: Fix panic in `PercentileContGroupsAccumulator::convert_to_state()` (#25755)
- fix: chore(docs): Fix the documentation for TableProvider::scan()'s `limit` argument (#25397)
- fix: chore(docs): Fix the rendering of an expression in docstring (#25379)
- fix: fix datafusion-cli CI: switch from minio to rustfs (#25706)
- fix: fix(core): reject a DELETE or an UPDATE whose WHERE clause cannot reach the provider (#24657)
- fix: fix(datetime): floor negative scalar timestamps in date_trunc (#25430)
- fix: fix(docs): Fix code snippet in LogicalPlan docs (#25377)
- fix: fix(ffi): don't discard downcast-delegating wrappers of foreign plans (#25749)
- fix: fix(physical-plan): CoalescePartitionsExec panic on wasm32-unknown-unknown (#24890)
- fix: fix(physical-plan): honor distinct soft limits in SingleHashAggregateStream (#25158)
- fix: fix(proto): preserve CSV sink writer options (#25058)
- fix: fix(proto): preserve Parquet source and sink state (#25057)
- fix: fix(substrait): consume chained window functions whose default names collide (#25181)
- fix: fix: Correct `array_repeat` NULL handling (#25230)
- fix: fix: Derive Substrait intersection nullability from every input (#25091)
- fix: fix: Emit equality conditions for Substrait CASE base expressions (#25191)
- …and 228 more
