# Changelog

## Score

- CAI 62 → 62 (+0.5)
- Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.

## Lenses

- Code Health 73 → 74 (+0.3)
- Architecture 99 → 93 (-6.3)
- Maturity 64 → 68 (+4.2)
- Readiness 54 → 55 (+0.9)
- Security 61 → 61 (+0.0)
- Domain Modelling 100 → 100 (+0.0)
- Performance 80 (new)

## Resolved (41)

- AsrModels.loadVocabulary (cognitive 17) (Sources/FluidAudio/ASR/Parakeet/SlidingWindow/TDT/AsrModels.swift)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Duplicated block (10–11 lines × 2) (Sources/FluidAudioCLI/Commands/ASR/Parakeet/SlidingWindow/TranscribeCommand.swift)
- Duplicated block (11 lines × 2) (Sources/FluidAudioCLI/Commands/ASR/Parakeet/SlidingWindow/TranscribeCommand.swift)
- Duplicated block (13 lines × 2) (Sources/FluidAudio/Diarizer/Sortformer/SortformerStateUpdater.swift)
- Duplicated block (23–35 lines × 2) (Sources/FluidAudio/TTS/PocketTTS/Pipeline/PocketTtsSynthesizer.swift)
- Duplicated block (3–5 lines × 4) (Sources/FluidAudio/TTS/NeuTts/NeuTtsPrompt.swift)
- Duplicated block (4–9 lines × 3) (Sources/FluidAudioCLI/Utils/WERCalculator.swift)
- Duplicated block (5 lines × 2) (Sources/FluidAudio/ASR/Parakeet/Streaming/Nemotron/StreamingNemotronMultilingualAsrManager+Decode.swift)
- Duplicated block (5 lines × 3) (Sources/FluidAudio/TTS/KokoroAne/Pipeline/KokoroAneSynthesizer+Conversion.swift)
- Duplicated block (6 lines × 2) (Sources/FluidAudio/ModelRegistry.swift)
- Duplicated block (6–8 lines × 2) (Sources/FluidAudio/ASR/Parakeet/Streaming/Nemotron/StreamingNemotronMultilingualAsrManager+Decode.swift)
- Edited copy of a member (19 corresponding lines) (Sources/FluidAudio/TTS/PocketTTS/Pipeline/PocketTtsStateEngine.swift)
- Hotspot: Sources/FluidAudio/ASR/Parakeet/Streaming/EOU/StreamingEouAsrManager.swift (Sources/FluidAudio/ASR/Parakeet/Streaming/EOU/StreamingEouAsrManager.swift)
- Hotspot: Sources/FluidAudio/ASR/Parakeet/Unified/StreamingUnifiedAsrManager.swift (Sources/FluidAudio/ASR/Parakeet/Unified/StreamingUnifiedAsrManager.swift)
- Hotspot: Sources/FluidAudio/Diarizer/Offline/Clustering/VBxClustering.swift (Sources/FluidAudio/Diarizer/Offline/Clustering/VBxClustering.swift)
- Hotspot: Sources/FluidAudio/Diarizer/Sortformer/Offline/OfflineSortformerDiarizer.swift (Sources/FluidAudio/Diarizer/Sortformer/Offline/OfflineSortformerDiarizer.swift)
- Hotspot: Sources/FluidAudio/TTS/Chatterbox/Nano/ChatterboxNanoSynthesizer.swift (Sources/FluidAudio/TTS/Chatterbox/Nano/ChatterboxNanoSynthesizer.swift)
- Hotspot: Sources/FluidAudio/TTS/Chatterbox/Pipeline/ChatterboxSynthesizer.swift (Sources/FluidAudio/TTS/Chatterbox/Pipeline/ChatterboxSynthesizer.swift)
- …and 21 more

## New (140)

- AsrModels.parseVocabulary (cognitive 17) (Sources/FluidAudio/ASR/Parakeet/SlidingWindow/TDT/AsrModels.swift)
- ClassTooLong: Nemotron3DiarizeCommand (Sources/FluidAudioCLI/Commands/Nemotron3DiarizeCommand.swift)
- Coverage not measured — Swift suite
- CtcDecoder.swift.ctcBeamSearch (cognitive 45) (Sources/FluidAudio/ASR/Parakeet/SlidingWindow/CTC/CtcDecoder.swift)
- CtcDecoder.swift.ctcBeamSearch (cyclomatic 20) (Sources/FluidAudio/ASR/Parakeet/SlidingWindow/CTC/CtcDecoder.swift)
- Dependency hygiene PARTLY measured — SwiftPM pinning read, dependency currency NOT established
- Duplicated block (10 lines × 2) (Sources/FluidAudio/ASR/Parakeet/AsrTypes.swift)
- Duplicated block (10 lines × 2) (Sources/FluidAudio/TTS/Inflect/InflectError.swift)
- Duplicated block (10 lines × 2) (Sources/FluidAudio/TTS/StyleTTS2/StyleTTS2Error.swift)
- Duplicated block (10 lines × 2) (Sources/FluidAudioCLI/Commands/EnhanceBenchmarkCommand.swift)
- Duplicated block (10–12 lines × 2) (Sources/FluidAudio/Diarizer/Nemotron3/Nemotron3Models.swift)
- Duplicated block (10–13 lines × 2) (Sources/FluidAudio/Diarizer/Nemotron3/Nemotron3StateUpdater.swift)
- Duplicated block (11–12 lines × 2) (Sources/FluidAudioCLI/Commands/Nemotron3DiarizeCommand.swift)
- Duplicated block (12 lines × 2) (Sources/FluidAudio/TTS/PocketTTS/PocketTTSError.swift)
- Duplicated block (12 lines × 2) (Sources/FluidAudioCLI/Commands/ASR/Parakeet/SlidingWindow/AsrBenchmark.swift)
- Duplicated block (13 lines × 2) (Sources/FluidAudioCLI/Commands/ASR/Parakeet/SlidingWindow/TranscribeCommand.swift)
- Duplicated block (14 lines × 2) (Sources/FluidAudio/ASR/Parakeet/SlidingWindow/CTC/CtcDecoder.swift)
- Duplicated block (14–15 lines × 2) (Sources/FluidAudioCLI/Commands/ASR/Parakeet/SlidingWindow/TranscribeCommand.swift)
- Duplicated block (16–17 lines × 2) (Scripts/nemo_ami_benchmark/nemo_ami_benchmark.py)
- Duplicated block (17 lines × 2) (Scripts/nemo_ami_benchmark/nemo_ami_benchmark.py)
- …and 120 more

## Changes since last survey

- 33 commits — 21 feature/other, 12 fixes

## By area

- Sources/FluidAudio — 16 commits
- (root) — 11 commits
- Documentation/ASR — 1 commit
- Documentation/Architecture.md — 1 commit
- Documentation/Showcase.md — 1 commit
- Examples/LocalVQEDemo — 1 commit
- Sources/FluidAudioCLI — 1 commit
- Tests/FluidAudioTests — 1 commit

## Notable commits

- fix: fix(build): bump NemoTextProcessing to v0.3.1 for Mac Catalyst (#949)
- fix: fix(build): bump podspec to 0.17.1
- fix: fix(build): bump podspec to 0.17.2
- fix: fix(build): bump podspec to 0.17.3
- fix: fix(build): bump podspec to 0.17.4
- fix: fix(diarizer/nemotron3): type output backings from the model description, retry if rejected (#952)
- fix: fix(tts/english-tn): read roman-numeral list markers as numbers (#974)
- fix: fix(tts/kokoro-ane): quiet onset on long utterances — use fp32 KokoroProsody_v2 (#947) (#963)
- fix: fix(tts/kokoro-ane): restore long-text chunking in synthesizeDetailed(text:) (#940) (#965)
- fix: fix(tts/luxtts): remove spurious mid-phrase pauses and chunk long text (#937) (#942)
- fix: fix(tts/pocket): keep cache-safe long sentences whole (#938)
- fix: fix(vocab): make alignBaseWordsToUTF8Ranges iterative (#961) (#962)
- change: Add CUA-S1-FORMS Core ML scoring and benchmarks (#936)
- change: Add Orca One to the FluidAudio showcase (#953)
- change: Load local Orukeet-compatible ASR bundles without repository fallback (#928)
- change: Pin diarization artifacts to immutable revision (#927) (#939)
- change: Update README to include Trendshift badge
- change: Update README with Trendshift badge and alignment
- change: docs(asr): refresh Redux/Ultra numbers on the v3-family long-form path (#957)
- change: docs(readme): add Banter to showcase (#966)
- …and 13 more
