# DTW diagnostic: strict UTF-8 failure Status: internal CPU diagnosis, 2026-10-13. No accepted speech/retrieval score, production ASR integration or new media rating follows from this evidence. Google EmbeddingGemma 2 remains the production semantic model. The original fifteen-window DTW experiment stopped on strict UTF-8 parsing. Its temporary raw output was cleaned, so that first run's exact bytes could not be inspected. Its partial report remains unchanged. A separate coordinator- authorized diagnostic reproduced exactly the second `music01` window: source offset 30000 ms, duration 30000 ms, primary audio stream, 480000 decoded samples. No labels selected text/timestamps, and the whole experiment was not rerun. ## Revalidated execution The whisper.cpp checkout was clean at pinned commit `d1be6fde11ac6e0407606b4e42fe72d34add8037`. Before execution, the fixture and source hashes, base model size/hash, worker hash and both decoder hashes were checked against frozen evidence. The owned runner retained raw output, WAV, probe, stderr and report directly under ignored `.searchi/speech/dtw-window-diagnostic-v1`; no temporary cleanup removed them. | Artifact | SHA-256 | | --- | --- | | Frozen fixture | `b4e465a0eb9582b826eebd2a20797e1680e4907e336d02d0ef2194e2ba0af393` | | Source music01 | `29fcd20414ee19c2a5aa4339eaf6375079dc87959051ab0aea32c76df52f34dc` | | CPU worker | `12c681b4bcd9c7679b647b9a041e121a2f9e72cb2a9c6f189f529ec8b79c36f8` | | Multilingual base model | `60ed5bc3dd14eea856493d334349b405782ddcaf0028d4b5df4088345fba2efe` | | FFmpeg | `b778ca5786ee4b0b4f37f34478617093d2fdb9a532d281fb76cda69d1d579d46` | | FFprobe | `4e1b0afd27bf02d79739f27b2d650137470925afb19d54b5e89a708b7a389236` | | Raw JSON, 29148 bytes | `f1de2c295b0c9a223619abe6dbf34823be6a6aa3dbcad69fea1d6121fa0c200e` | | Native log | `28d174198a3ef980aa5c8c1237618f450a19b0a80c8a270209dce113a8de3a7a` | | Diagnostic report | `b4b0dedfac6365c59793806801b1fc5d9f8f203891b623fb86ad508352ad0114` | Windows VM execution forced CPU: `SEARCHI_FORCE_CPU=1`, native flags `--no-gpu --threads 1 --processors 1 --language auto --output-json-full --dtw base --no-flash-attn`, verified base model and the decoded owned WAV. The existing bounded decoder used absolute 30-second seeking and sample trimming; its output contained exactly 480000 samples. Native ASR exited zero after 42493.25 ms; decoding took 271.42 ms. The owned diagnostic runner exited zero after recording `strict_parse: rejected`. This is not a successful ASR result or a warmed throughput measurement. No other model inference ran concurrently under this coordinator's CPU slot; unrelated VM load was not instrumented. ## Exact failure and pinned native source Strict UTF-8 decoding rejects bytes **1137–1138** (zero-based half-open range 1137–1139). The segment text ends with bytes `E2 80` immediately before the closing JSON quote: a three-byte UTF-8 sequence has no final continuation byte. The last ordinary token, id 913, also ends with exactly `E2 80` at byte 28900. Earlier token text contains complete `E2 80 8D` codepoints. Raw bytes were inspected directly, without replacement decoding or writing repaired JSON. The pinned native core constructs segment text by concatenating token strings. The CLI full-JSON serializer merges adjacent token byte pieces while a codepoint needs continuation **and another token exists**. At the last token there is no continuation to merge; it writes the remaining incomplete bytes. Its segment text serializer likewise writes the already incomplete segment bytes. The escaping function only escapes quotes/backslashes; it cannot restore a missing codepoint byte. Thus this is incomplete recognized byte output, reproduced in both segment and token text, rather than a Python ANSI conversion or DTW time unit error. The exact internal reason the decoder terminated this token sequence has not been instrumented and remains unproven. Relevant pinned source: [CLI serializer and token merging](https://github.com/ggml-org/whisper.cpp/blob/d1be6fde11ac6e0407606b4e42fe72d34add8037/examples/cli/cli.cpp), [UTF-8 continuation helper](https://github.com/ggml-org/whisper.cpp/blob/d1be6fde11ac6e0407606b4e42fe72d34add8037/examples/common-whisper.cpp), and [segment construction](https://github.com/ggml-org/whisper.cpp/blob/d1be6fde11ac6e0407606b4e42fe72d34add8037/src/whisper.cpp). ## Minimal next change and limits Before changing a native worker, add a strict UTF-8 validator at its JSON boundary for original segment strings and merged token strings. If original recognized bytes remain invalid after adjacent-token merging, return an explicit typed recognition-output error with bounded raw evidence; never replace characters, truncate text, synthesize missing bytes or fabricate timestamps. Test a valid split codepoint and an incomplete final codepoint. This makes the failure machine-readable; it does **not** repair recognition or establish improved retrieval. An alternative timestamp/recognition policy must be declared and evaluated separately before any default changes. The Python harness already fails closed, retains bounded raw bytes with SHA and parse positions, and atomically records an incomplete, ineligible checkpoint. The original partial DTW report contains three NASA windows with 21 valid point-based sentence spans and one separately retained ordinary-interval error. It lacks remaining piano windows and three other competitors. Neither that partial report nor this one-window diagnosis can receive an accepted quality score. Packaging, independent bilingual speech, silence/music hallucination, resource peaks and actual production hybrid integration remain open.