# Changelog

## Score

- CAI 69 → 70 (+1.5)
- Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.

## Lenses

- Code Health 89 → 89 (+0.0)
- Architecture 98 → 92 (-5.6)
- Maturity 74 → 73 (-1.9)
- Readiness 50 → 55 (+5.2)
- Security 100 → 100 (+0.0)
- Performance 100 (new)

## Resolved (4)

- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Off-boarding risk: anonymized user #1
- Orphaned files with no living knowledge

## New (13)

- Concentrated knowledge decay
- Coverage not measured — Swift suite
- Dependency hygiene PARTLY measured — SwiftPM pinning read, dependency currency NOT established
- Inconsistent naming for adapter conversion methods. `AsyncWriter` converts to a caller-side writer via `asCallerAsyncWriter()`, while `CallerAsyncWriter` converts to an async writer via `asAsyncWriter()`. The directionality is clear, but the naming pattern is not symmetrical or parallel. `asCallerAsyncWriter` implies 'become a caller async writer', whereas `asAsyncWriter` implies 'become an async writer'. A more consistent pattern might be `toCallerAsyncWriter` and `toAsyncWriter`, or ensuring the suffix matches the target type exactly.
- Inconsistent naming for equivalent operations across related types. `AsyncReader` uses `pipe` and `pipe(copyingInto)`, while `CallerAsyncReader` uses `pipe` and `pipe(bufferingInto)`. The semantic difference between 'copying' and 'buffering' is not immediately obvious from the names alone, and the verb 'pipe' is used for both, but the secondary action names differ (`copyingInto` vs `bufferingInto`).
- Inconsistent naming strategy for buffer policies. `bounded` is a general term, while `bufferingLatest` and `bufferingOldest` are specific strategies. It is unclear if `bounded` implies a specific strategy (e.g., oldest) or is a generic factory. If `bounded` is a specific strategy, it should be named like the others (e.g., `bufferingBounded` or `bufferingOldest` if that's what it does). If it is a generic factory, the other two should perhaps be `bufferingLatest` and `bufferingOldest` under a `bounded` umbrella, or all should be specific strategies.
- Most significant orphaned file (Sources/AsyncAlgorithms/CombineLatest/CombineLatestStateMachine.swift)
- Most significant orphaned file (Sources/AsyncAlgorithms/Debounce/DebounceStateMachine.swift)
- Most significant orphaned file (Sources/AsyncAlgorithms/Merge/MergeStateMachine.swift)
- Off the main sequence: AsyncAlgorithms
- Off-boarding risk: anonymized user #1
- Projects may be oversized for their cohesion
- TooManyMethods: AsyncSequence (Sources/AsyncAlgorithms/AsyncAdjacentPairsSequence.swift)

## Changes since last survey

- 2 commits — 0 feature/other, 2 fixes

## By area

- (root) — 1 commit
- Tests/AsyncStreamingTests — 1 commit

## Notable commits

- fix: Fix compilation errors in AsyncStreaming (#459)
- fix: fix for Swift Collections 1.7.0 (#456)
