# Changelog

## Score

- CAI 59 → 61 (+2.1)

## Lenses

- Code Health 77 → 77 (-0.1)
- Architecture 93 → 78 (-14.5)
- Maturity 67 → 80 (+12.7)
- Readiness 43 → 46 (+3.4)
- Security 81 → 71 (-10.0)
- Performance 77 → 77 (-0.4)

## Resolved (45)

- Documentation: no project overview (docs/audio/voice-pipeline.md)
- Documentation: no project overview (docs/benchmarks/moss-coreml.md)
- Duplicate ring buffer implementations. `AudioRingBuffer` and `AudioSampleRingBuffer` appear to serve the same purpose (storing float audio samples) but have different method signatures (write returns Void vs Int) and potentially different internal implementations. This creates confusion for users about which buffer to use.
- Duplicated block (10 lines × 2) (Sources/SpeechVAD/ReDimNet2Speaker.swift)
- Duplicated block (10 lines × 2) (Sources/VoxtralASR/VoxtralASR.swift)
- Duplicated block (11–16 lines × 3) (Sources/CanaryASR/CanaryASR+Loading.swift)
- Duplicated block (13 lines × 3) (Sources/NemotronStreamingASR/NemotronStreamingASR.swift)
- Duplicated block (13–17 lines × 2) (Sources/CanaryASR/CanaryASR+Loading.swift)
- Duplicated block (13–18 lines × 2) (Sources/CosyVoiceTTS/CosyVoiceTTS.swift)
- Duplicated block (15 lines × 2) (Sources/SpeechVAD/SileroVAD+Memory.swift)
- Duplicated block (15–18 lines × 3) (Sources/CanaryASR/CanaryASR+Loading.swift)
- Duplicated block (17–19 lines × 3) (Sources/SpeechVAD/FireRedVAD.swift)
- Duplicated block (18 lines × 2) (Sources/SpeechVAD/SileroVAD.swift)
- Duplicated block (23–24 lines × 2) (Sources/KokoroTTS/KokoroTTS.swift)
- Duplicated block (32–35 lines × 2) (Sources/VibeVoiceTTS/VibeVoice15BTTSModel.swift)
- Duplicated block (39 lines × 2) (Sources/MossTranscribe/MossMLXRuntime.swift)
- Duplicated block (5 lines × 2) (Sources/KokoroTTS/KokoroModel.swift)
- Duplicated block (5 lines × 2) (Sources/Qwen3Chat/Gemma4Model.swift)
- Duplicated block (7 lines × 2) (Sources/AudioServer/AudioServer.swift)
- Duplicated block (7 lines × 2) (Sources/FlashSR/Downloader.swift)
- …and 25 more

## New (348)

- AsrBench.runIsolated (cognitive 18) (Sources/AsrBenchmark/AsrBench.swift)
- BreezeTTSBenchmark.run (cognitive 26) (scripts/profiling/BreezeTTSBenchmark.swift)
- BreezeTTSBenchmark.run (cyclomatic 18) (scripts/profiling/BreezeTTSBenchmark.swift)
- BreezeTTSConfig.validate (cognitive 59) (Sources/BreezeTTS/Options.swift)
- BreezeTTSConfig.validate (cyclomatic 53) (Sources/BreezeTTS/Options.swift)
- BreezeTTSModel.generateStreaming (cognitive 28) (Sources/BreezeTTS/BreezeTTSModel.swift)
- BreezeTTSModel.generateStreaming (cyclomatic 20) (Sources/BreezeTTS/BreezeTTSModel.swift)
- ClassTooLong: GermanPhonemizer (Sources/KokoroTTS/GermanPhonemizer.swift)
- ClassTooLong: HuggingFaceDownloader (Sources/AudioCommon/HuggingFaceDownloader.swift)
- Critical CVE: [GHSA redacted] (scripts/qwen3_tts_coreml/requirements-lock.txt)
- Critical CVE: [GHSA redacted] (scripts/qwen3_tts_coreml/requirements-lock.txt)
- Critical vulnerability: [GHSA redacted] (scripts/qwen3_tts_coreml/requirements-lock.txt)
- Duplicated block (10 lines × 2) (Sources/AudioCLILib/SpeakCommand.swift)
- Duplicated block (10 lines × 2) (Sources/MossTranscribe/MossMLXMemory.swift)
- Duplicated block (10–21 lines × 4) (Sources/ChatterboxTTS/ChatterboxFlashCoreMLModel.swift)
- Duplicated block (11 lines × 2) (Sources/AudioCLILib/SpeakCommand.swift)
- Duplicated block (11 lines × 2) (Sources/Qwen3ASR/CoreMLEncoder.swift)
- Duplicated block (11 lines × 2) (Sources/SpeechVAD/ReDimNet2Speaker.swift)
- Duplicated block (11 lines × 2) (Sources/VoxtralASR/VoxtralASR.swift)
- Duplicated block (11 lines × 3) (Sources/AudioCLILib/SpeakCommand.swift)
- …and 328 more

## Changes since last survey

- 90 commits — 71 feature/other, 19 fixes

## By area

- (repo) — 40 commits
- (root) — 7 commits
- Sources/Qwen3Chat — 7 commits
- Sources/KokoroTTS — 5 commits
- Tests/Qwen3ChatTests — 5 commits
- Sources/VoxtralTTS — 3 commits
- Sources/AudioCommon — 2 commits
- Sources/AudioServer — 2 commits
- Sources/SpeechVAD — 2 commits
- Tests/NemotronStreamingASRTests — 2 commits
- docs/benchmarks — 2 commits
- .claude/skills — 1 commit
- Sources/FishAudioTTS — 1 commit
- Sources/MLXCommon — 1 commit
- Sources/PocketTTS — 1 commit
- Sources/VoxCPM2TTS — 1 commit
- Tests/BreezeTTSTests — 1 commit
- Tests/KokoroTTSTests — 1 commit
- Tests/MossTranscribeTests — 1 commit
- Tests/Qwen3ASRRuntimeTests — 1 commit

## Notable commits

- fix: Fix Gemma tool history boundary before user turns
- fix: Merge main and fix Drama 3 streaming and configuration validation
- fix: Merge pull request #506 from yangzichao/fix/model-load-graph-leak
- fix: Merge pull request #512 from soniqo/fix/voxtral-preset-downloads
- fix: Merge pull request #524 from 1nto5/fix/validated-local-path-private-prefix
- fix: Merge pull request #525 from soniqo/fix/moss-mlx-cache-limit
- fix: Merge pull request #527 from soniqo/fix/gemma4-12b-tool-format
- fix: Merge pull request #529 from soniqo/fix/gemma4-failure-diagnostics
- fix: Merge pull request #531 from soniqo/fix/kokoro-chunk-hard-cap
- fix: Merge pull request #536 from soniqo/fix/voxcpm2-cache-limit
- fix: Merge pull request #537 from soniqo/fix/default-mlx-cache-limit
- fix: Merge pull request #538 from soniqo/fix/qwen-japanese-icl
- fix: Merge pull request #539 from soniqo/fix/gemma4-tool-turn-boundary
- fix: Merge remote-tracking branch 'origin/main' into fix/gemma4-failure-diagnostics
- fix: Merge remote-tracking branch 'origin/main' into fix/kokoro-chunk-hard-cap
- fix: Merge remote-tracking branch 'origin/main' into fix/qwen-japanese-icl
- fix: Record Breeze round-trip regression and current performance
- fix: Record MOSS cache-limit regression and memory validation
- fix: Refresh Kyutai quality, performance and regression results
- change: Accept missing files under a /private-prefixed cache directory
- …and 70 more

## Architecture

- Unchanged — 0 containers · 1 contexts · 0 edges
