# franken_tts — Technical Due-Diligence Assessment

**The hook:** 96,057 lines of pure-Rust CPU voice cloning whose own negative-evidence ledger killed the flagship speculative optimization — twice, with receipts — and published the autopsy.

**Tier legend (Rulebook §1):** **[Verified]** direct inspection of the pinned clone or a live page read by the analyst — flavors **[Counted]** (I ran the count), **[Git-observed]** (git metadata), **[Code-verified]** (source read). **[CI-observed]** is Tier 2 (seen executing on live CI pages — attests the suite *runs*, not that it is green). **[Maintainer claim]** asserted in README/docs, not independently executed. **[External]** independent sources. **[Inference]** analyst judgment, always labeled. Confidence: **High** / **Medium** / **Low**.

## TL;DR

franken_tts is a genuine, shipped, pure-Rust CPU-only runtime for one model — Qwen3-TTS-12Hz-0.6B-Base — that reimplements the 28-layer talker → 15-step residual-code microdecoder → causal-codec pipeline with no Python, no ML framework, and no GPU at inference: 10 crates, 96,057 lines of first-party Rust across 138 files, 11 GitHub releases (v0.1.0–v0.1.10) with prebuilt binaries for macOS/Linux/Windows, a Homebrew tap, an install one-liner, 18 built-in voices, voice enrollment with a neural denoiser, shareable voice cards, a streaming conversation layer, a native iOS app, and a live WASM playground at frankentts.com. Its seam-by-seam parity apparatus — a pinned truth pack (HF weights @ `5d83992`, upstream source @ `022e286`), a discrepancies ledger, a negative-evidence ledger, and a CV≤5%-gated performance ledger — is the most honest evidence machinery found in this program's model-runtime family. **TRL 7. NODUS ring: Explore.** Strongest strength: it actually ships (installable binaries, real receipts, and a maintainer who published his flagship optimizer's two death certificates in-tree). Strongest ceiling: the single-maintainer / no-outside-contributions governance, a non-OSI MIT+OpenAI/Anthropic-rider license that bars exactly the two AI labs building agent-voice infrastructure from even benchmarking it, an open listening-evaluation gap on the default int8 route (DISC-003), and load-dependent real-time performance — with zero independent validation of any kind.

## Quick Links

- Repository: https://github.com/Dicklesworthstone/franken_tts
- README: https://github.com/Dicklesworthstone/franken_tts/blob/HEAD/README.md
- Releases (v0.1.0–v0.1.10, binaries + SHA256SUMS): https://github.com/Dicklesworthstone/franken_tts/releases
- License (MIT + OpenAI/Anthropic rider, read verbatim): https://github.com/Dicklesworthstone/franken_tts/blob/HEAD/LICENSE
- Changelog: https://github.com/Dicklesworthstone/franken_tts/blob/HEAD/CHANGELOG.md
- Negative evidence ledger: https://github.com/Dicklesworthstone/franken_tts/blob/HEAD/docs/NEGATIVE_EVIDENCE.md
- Discrepancies ledger (DISC-001…006): https://github.com/Dicklesworthstone/franken_tts/blob/HEAD/docs/DISCREPANCIES.md
- Performance ledger (CV≤5% admission gate): https://github.com/Dicklesworthstone/franken_tts/blob/HEAD/docs/PERF_LEDGER.md
- Truth pack — pin record (HF weights + upstream source pins): https://github.com/Dicklesworthstone/franken_tts/blob/HEAD/docs/truth-pack/PIN_RECORD.md
- CI & quality gates (the `./scripts/check.sh` doctrine): https://github.com/Dicklesworthstone/franken_tts/blob/HEAD/docs/CI_AND_GATES.md
- The model (Qwen3-TTS-12Hz-0.6B-Base, Apache-2.0): https://huggingface.co/Qwen/Qwen3-TTS-12Hz-0.6B-Base
- Live WASM playground: https://frankentts.com

## Did you know?

A voice card is a picture you can speak from. `ftts card export aria` renders the voice's 1,024-float speaker embedding as a green mosaic — 144×144 cells at two bits per cell, QR-style finder patterns, interleaved Reed–Solomon error correction — and the card survives screenshots and messaging-app recompression, so `ftts say --voice aria-card.png` speaks straight from the image [Maintainer claim, High confidence in the mechanism as documented; encode/decode behavior not executed by the analyst].

## Franken-worthy next steps

These are research directions, not engineering tickets: each is novel, specific, falsifiable, and backed by rigor this project has already demonstrated.

1. **Close DISC-003 with a published blind listening protocol.** The ledger honestly records that the default int8 route's sampled outputs are "different valid renditions" and that "Contract-B listening with a real voice is OPEN" — including a measured int8 side effect worth quoting: one enrolled synthetic voice shifted whole-utterance RMS 0.019→0.221 and centroid 860→236 Hz ("audible LF drone risk"). Turn the obligation into a registered protocol: a fixed, versioned utterance/voice matrix, blind A/B vs the f32 reference, pre-committed pass criteria, results published win-or-lose in the ledger. **Falsification:** if listeners reliably prefer or detect the f32 route, the int8-default thesis dies and the default flips back to the reference; if they can't, DISC-003 closes and the ring argument for Pilot gets its key evidence. Nobody else in this program has a listening-eval-shaped hole this well instrumented.
2. **Aim the truth-pack oracle harness at Kyutai Pocket TTS 100M.** AGENTS.md already names Kyutai's 100M model as the "mandatory challenger / ultra-edge second model" with a three-gate bakeoff plan — the research move is to point the *evidence machinery* (oracle capture flow, seam-parity receipts, acceptance surface, nondeterminism-floor measurement) at the challenger before the bakeoff, and publish whether the harness decouples from Qwen-specifics within one focused workstream. **Falsification:** if the truth-pack cannot be aimed at a second model without a rewrite, it is product scaffolding, not a method — and the bakeoff's quality gate inherits that weakness.
3. **Run the learned-drafter ladder as a registered go/no-go experiment.** NE-002 and NE-003 killed the transition-sketch drafter (sampled acceptance ~0.01/depth; greedy p_token = 0.0000 across 480 proposals — published, not hidden), and the ledger names the exact resurrection condition: "a drafter with measured mean per-depth acceptance above ~0.6 (e.g. a small learned draft head)." The measurement apparatus already exists (`FTTS_SPEC_PROBE` shadow-drafter instrumentation, the ACCEPTANCE_SURFACE break-even thresholds of p*≈94–95% per-depth and alpha_full*≈40–46%): distill a one-layer draft head on microdecoder residual codes and run the pre-registered go/no-go (bead w4q). **Falsification:** if no learned drafter clears the break-even bar, FrankenMTP is buried with honors and the flagship "solution" paragraph in the README must be rewritten as history — which is itself the finding.
4. **The WASM real-time campaign as a gated measurement series.** The honest speed note is already public on frankentts.com: **0.31–0.43× real time across runs** (the previous single-threaded build managed 0.05×), with "Relaxed SIMD and an int4 microdecoder" named as "what still stand[s] between this and real time in the tab." Run it as the ledger demands: quiet-window rows, CV≤5%, per-regime receipts, and a declared reference device. **Falsification:** if relaxed-SIMD plus full threading cannot sustain 1.0× on the reference device, the WASM playground stays a demo and the "realtime-capable end to end" README status line must be qualified — the ledger's admission rules already contain the sentence for it.
5. **Stress the voice-card mosaic as a robustness benchmark.** The card channel is a genuine steganographic transport for a 1,024-float vector with a pinned bit-identical encoder test — so treat it as one: publish a recompression ladder (PNG → JPEG quality steps → messaging-app recompression → rotation/crop) with measured decode-success rates at each rung. **Falsification:** if decode success collapses below 100% anywhere inside the claimed "survives screenshots and messaging-app recompression" envelope, the shareable-voice claim shrinks to "survives intact PNGs" — a smaller, still-useful truth.

---
## 4.1 Header

| Field | Value |
|---|---|
| Repository | https://github.com/Dicklesworthstone/franken_tts |
| Pinned revision | `eafdf4540da7343dbd28d61b9930e8b7bfcaf0d1` — 2026-09-19 20:12:07 -0400 (2026-09-20 00:12:18 UTC per push timestamp) [Verified, High] |
| Assessment date | 2026-09-22 |
| Language / toolchain | Rust, edition 2024, pinned `nightly-2026-07-05` (`rust-toolchain.toml`), `rust-version = "1.90"` [Verified, High] |
| License | MIT License **with OpenAI/Anthropic Rider** — NOT OSI open source; full text read verbatim, rider scope quoted in §4.8 [Verified, High]. Model weights: Apache-2.0 by Alibaba Cloud (Qwen), explicitly carved out of the rider's scope in the LICENSE's third-party notice [Verified, High] |
| Scale | 10 workspace crates; 96,057 Rust lines / 138 `.rs` files under `crates/`; `ftts-conformance` holds 36 test files (50 test `.rs` files workspace-wide) [Verified, High] |
| Stars / forks | 44 stars, 9 forks (GitHub API, read 2026-09-22) [External, High] |
| Releases / tags | 11 GitHub releases v0.1.0–v0.1.10 (2026-08-06 → 2026-08-30), each with prebuilt binaries + SHA256SUMS [Verified via releases API, High]. The local shallow clone carries no tags (expected: shallow clones omit tags by default), so tag state was not checkable locally and no claim is made from it |
| Last push | 2026-09-20 00:12:18 UTC [External, High] |
| Maintainer | Single: Dicklesworthstone (Jeffrey Emanuel, per LICENSE copyright) — bus factor 1; README's "About Contributions" refuses outside merges [Verified, High] |
| Inception | 2026-08-06 per repo creation timestamp [External, High] |

**Analyst method.** Fresh shallow clone of HEAD to `~/workspace/.scratch/franken_tts-verify/` on 2026-09-22; recorded pinned commit and date. Read: README (264 lines), LICENSE (verbatim), AGENTS.md (contribution policy, bead/test conventions), `docs/NEGATIVE_EVIDENCE.md` (NE-002/NE-003 verbatim), `docs/DISCREPANCIES.md` (DISC-001…006), `docs/PERF_LEDGER.md` (entry schema, admission gate, representative rows), `docs/CI_AND_GATES.md`, `docs/truth-pack/PIN_RECORD.md`, `docs/DENOISER.md` (upstream pin). Grep-verified: workspace members, per-crate line/file counts, `forbid(unsafe_code)` distribution and every `unsafe` site's classification in the gated crates, the `FTTS_SPEC_MTP` arming condition in `microdecoder.rs`/`generate.rs`, asupersync dependency and usage, FrankenMTP/README cross-references, README-vs-code drift (badge version, docs count). Fetched and confirmed resolution of every Quick Link; verified stars/forks/releases via the GitHub API; searched the web for independent coverage. **Not done:** did not compile the workspace, run any test, synthesize audio, execute a benchmark, run the WASM or iOS builds, or reproduce any parity receipt — all behavioral and performance claims rest on maintainer evidence plus revision-bound documentation. CI per-run status could not be checked: no workflow configuration exists in the tree (see §4.3, claim 15).
## 4.2 Executive verdict

franken_tts is a **genuinely substantive, shipped, pure-Rust CPU-only runtime for one model — Qwen3-TTS-12Hz-0.6B-Base** [Inference, High] — not vaporware: a shallow clone of HEAD confirms 10 crates and 96,057 lines of first-party Rust [Verified, High], 11 GitHub releases with prebuilt binaries for five platform targets plus SHA256SUMS [Verified via releases API, High], a pinned truth pack recording the oracle pins (HF weights `5d83992` from 2026-01-29, upstream source `022e286` from 2026-03-17) [Verified, High], and a discrepancies ledger with six entries carrying claim IDs, evidence IDs, measured impacts, kill switches, and review dates [Verified, High]. The negative-evidence ledger records the flagship speculative-drafting optimization (FrankenMTP) as dead *twice* — NE-002: sampled-drafter mean acceptance ~0.01 per depth, expected accepted-prefix length 0.04 of 15 frames, "strictly worse" than sequential; NE-003: greedy-drafter p_token = 0.0000 across 480 proposals, disposition REVERT [Verified verbatim, High] — while the README's "solution" paragraph still presents speculative block drafting as the payoff of the architecture. That tension, disclosed rather than hidden, is the packet's central adversarial finding. **But:** it is a single-maintainer, single-model artifact with an explicit no-outside-contributions policy [Verified, High], a nightly-Rust toolchain [Verified, High], a custom MIT+OpenAI/Anthropic-rider license that withholds *all* rights — including benchmarking and analysis — from OpenAI, Anthropic, their affiliates, and anyone acting for them [Verified verbatim, High], no CI workflow configuration in the tree despite "green main" release language [Verified, High], zero independent validation of any kind [External, High within recall], and maintainer-only benchmarks where the headline real-time number carries the project's own "no certified RTF row exists yet" caveat [Verified, High]. **NODUS: Explore. TRL 7.** The artifact is the strongest "works today" specimen of the FrankenSuite model-runtime family, and its evidence machinery is the more transferable asset — but the default int8 route's quality is not listening-certified (DISC-003), the optimization thesis's main lever is dead, and the governance admits no second maintainer by design.

## 4.3 Claim inventory: demonstrated vs aspirational

Status values: *demonstrated* / *partially demonstrated* / *aspirational* / *disproven* / *stale*.

| # | Claim | Status | Evidence |
|---|---|---|---|
| 1 | Pure-Rust, CPU-only runtime: no Python, no ML framework, no GPU at inference | **Demonstrated** | [Verified, High] — 10-crate Rust workspace; `asupersync` is the only runtime dependency; no Python/torch/CUDA references in the build |
| 2 | Seam-by-seam parity vs pinned PyTorch oracle (talker argmax-exact through 28 layers; codec codes exact; peak frame RMS 0.08578 vs 0.0859745) | **Partially demonstrated** | [Verified that the receipts exist, High] + [Maintainer claim on the figures, Medium] — truth-pack pins, manifests, and conformance suites verified in-tree; not executed by the analyst |
| 3 | 11 releases v0.1.0–v0.1.10 with prebuilt binaries (macOS arm64/x86_64, Linux x86_64/arm64, Windows x86_64) + install.sh/install.ps1 + Homebrew tap + SHA256SUMS | **Demonstrated** | [Verified via GitHub releases API, High] — five platform assets and SHA256SUMS on v0.1.10; download counts are small (2–32 per asset) |
| 4 | 18 built-in voices (`matt` default), each "approved by listening before it shipped" | **Partially demonstrated** | [Verified names + count, High] + [Maintainer claim on listening approval, Medium] — names enumerated in README and v0.1.10 release body; enrollment/listening process not observed |
| 5 | Faster than real time: 1.4–1.6× RT on unloaded Mac Mini M4 Pro (int8 default route) | **Partially demonstrated** | [Maintainer claim, Medium] — and the README itself gates it: "no certified RTF row exists yet in `docs/PERF_LEDGER.md`"; heavily-loaded runs measured 0.66–1.05×, i.e. sub-real-time under load |
| 6 | FrankenMTP speculative block drafting as the architectural payoff | **Disproven** | [Verified, High] — NE-002 (sampled drafter ~1% acceptance, "strictly worse", REVERT) and NE-003 (greedy p_token = 0.0000, REVERT); the speculative path survives only under `FTTS_SPEC_MTP=1` **and** `SamplingMode::CanonicalGreedy` (the argmax parity mode, not production sampling) per `generate.rs:1463-1466` |
| 7 | Cache-resident microdecoder hot pack | **Aspirational** | [Maintainer claim, High as admission] — README: "designed but unimplemented"; tracked as the remaining headroom alongside per-depth quantization |
| 8 | iOS app: native SwiftUI on the same engine via `ftts-ffi` C ABI, on-device synthesis | **Partially demonstrated** | [Verified structure, High] — `ios/` Xcode project + `ftts-ffi` crate exist; honest boundary quoted in README: "No speed figure is claimed until one is measured on A18-class hardware" |
| 9 | Browser WASM playground at frankentts.com, currently 0.31–0.43× real time | **Partially demonstrated** | [Verified live 2026-09-22, High] — frankentts.com fetched: "IT SPEAKS · ENTIRELY IN YOUR BROWSER," model ≈1.77 GB download, honest speed note "this build synthesizes at **0.31–0.43× real time** across runs" (previous single-threaded build 0.05×), "no server behind this page and no mocked demo"; "Relaxed SIMD and an int4 microdecoder are what still stand between this and real time in the tab" |
| 10 | `ftts talk` streaming conversation layer with proven cancellation contract (SIGINT → exit code 6, partial audio delivered, second signal force-exits) | **Partially demonstrated** | [Verified code paths exist, High] + [Maintainer claim on the proven contract, Medium] — v0.1.9 release note; the cancellation receipt semantics not executed by the analyst |
| 11 | asupersync as the orchestration runtime | **Demonstrated** | [Verified, High] — `asupersync 0.5.0` in workspace `Cargo.toml` ("Owner directive 2026-08-22" per comment), used in `ftts-core` (`Runtime`, `Budget`, `Cx`) for orchestration/cancellation; wasm32 builds pin the `wasm-browser-prod` profile |
| 12 | Memory-safe: workspace forbids `unsafe_code` | **Partially demonstrated** | [Verified, High] — 5 crates carry `#![forbid(unsafe_code)]`; but `ftts-kernels` is the *documented* unsafe island (44 unsafe blocks, `deny(unsafe_op_in_unsafe_fn)`, "the sole crate permitted to contain audited kernel unsafe islands") and `ftts-ffi` carries an audited C ABI island (`unsafe extern "C"`, narrow `unsafe impl Send/Sync`, deny-by-default per its doc comment). The posture is real and disclosed; only the blanket "end to end" phrasing overstates it |
| 13 | No outside contributions accepted | **Demonstrated** (as policy) | [Verified, High] — README "About Contributions" refuses merges outright: PRs "won't be merged directly"; Claude/Codex may review via `gh` |
| 14 | License: "MIT" (badge, README license section shorthand) | **Stale** | [Verified, High] — LICENSE is MIT *with an OpenAI/Anthropic rider* denying all rights to named parties; non-OSI; the README does say "MIT with an OpenAI/Anthropic rider" in the License section, but the badge and shorthand read as plain MIT |
| 15 | "Cut from green main" / "51 test suites green at the tagged commit" (v0.1.7–v0.1.10 release notes) | **Partially demonstrated** | [Maintainer claim, Medium] — the quote is real (release bodies); `docs/CI_AND_GATES.md` describes CI as `./scripts/check.sh` as "its single test step" — but **no `.github/` workflow configuration exists anywhere in the tree** (`git ls-tree` confirms), so the CI that gates those releases runs off-tree on owner infrastructure and its per-run status is unverifiable by any outside party |
| 16 | Voice cards: the mosaic IS the 1,024-float embedding (144×144 grid, 2 bits/cell, Reed–Solomon (255,223), lossless private PNG chunk), survives screenshots/recompression | **Partially demonstrated** | [Maintainer claim + code, High] — CHANGELOG v0.1.6: "CLI and Swift encoders are bit-identical — proven byte-for-byte against real artifacts and pinned by a CRC test"; import from PNG/JPEG not executed by analyst |
| 17 | Neural denoiser (pure-Rust FastEnhancer-S port, 207K params) at 114–125 dB SNR vs its PyTorch reference | **Partially demonstrated** | [Verified the port + docs, High] + [Maintainer claim on the SNR figures, Medium] — `docs/DENOISER.md` pins upstream `aask1357/fastenhancer @ f85223b` (MIT); receipts not executed by analyst |
| 18 | SLEEF SnakeBeta at 129.6 dB SNR vs libm ("inaudible by a wide margin") | **Partially demonstrated** | [Maintainer claim, Medium] — README; the DISC-003 ledger independently records "fast snake SNR 129.6 dB (transparent)" as measured evidence |
| 19 | `ftts pull`: pre-quantized artifact (~2.0 GB), SHA-256 verified, resumable | **Partially demonstrated** | [Verified code paths, High] + [Maintainer claim on the download experience, Medium] — not executed by analyst (no model download performed) |
| 20 | Microdecoder int4 (AWQ/GPTQ) pipeline as the new optimization route (v0.1.10 headline) | **Aspirational** (recorded as an OPEN OBLIGATION) | [Verified, High] — the v0.1.10 release markets the "microdecoder int4 AWQ/GPTQ pipeline," but NE-005 records the arithmetic as landed and routing as OFF: gate_a failed decisively (int4 0.04× vs shipping int8, i.e. 25× slower), and a second strike with a NEON unpack island still measured 0.52× (~2× slower) under the pre-committed protocol. Doctrine requires both a speed gate and a blind-listening gate before routing; neither has been run |
| 21 | Cross-target determinism: browser matches CLI sample-for-sample | **Partially demonstrated** | [Verified, High] — DISC-006 traced the wasm-vs-CLI divergence to per-target f32 epsilons (RMSNorm sums, libm sin/cos/exp ulps) and records RESOLVED under the canonical gate: 96,000/96,000 samples, max 0 LSB, tapI/tapM/tapC hashes bit-equal across all 50 frames. The default route (gate off) retains the carried divergence; both renditions are valid sampler draws |
| 22 | ICL-quality cloning mode (reference audio + verbatim transcript) | **Partially demonstrated** | [Verified, High] — shipped in v0.1.9 (2026-08-25): `ftts enroll --mode quality --transcript-text/--transcript-file` writes transcript-backed `.ftvoice` packs; `ftts say --voice pack.ftvoice` consumes them "through the reference-prefix codec path (prime, cut exactly, snapshot)" (CHANGELOG v0.1.9). The README's enrollment section still calls it "the upcoming higher-quality ICL cloning mode" — stale by one release. No independent quality/listening validation |
| 23 | Voice-card portability: a card exported anywhere imports everywhere | **Partially demonstrated** | [Maintainer claim + code, High] — codec: 1,024-float embedding at 2 bits/cell over a 144×144 grid with QR finder patterns, calibration strips, Reed-Solomon (255,223), lossless private PNG chunk; "CLI and Swift encoders are bit-identical — proven byte-for-byte against real artifacts and pinned by a CRC test" (CHANGELOG v0.1.6). No independent recompression-survival run |

## 4.4 Architecture (reconstructed, not summarized)

[Verified from the clone; README diagrams treated as claims where noted]

**Crate topology (10 workspace members, `Cargo.toml`):** `ftts-core` (8,973 lines — orchestration, the asupersync runtime surface, cancellation), `ftts-model-qwen` (21,322 lines — the model: talker, 5-layer microdecoder, codec, tokenizer, speaker encoder, the FrankenMTP drafter ladder, sampling), `ftts-kernels` (10,005 lines — the int8/int4/f32 kernel tiers plus the documented unsafe island), `ftts-artifacts` (11,903 lines — the `.fttsq` quantized-artifact format, mmap loading), `ftts-conformance` (17,980 lines, 36 test files — oracle/parity/ladder harnesses), `ftts-cli` (19,210 lines — `say/enroll/talk/robot/card/convert/pull/doctor/resident-daemon/make-video/voices`), `ftts-video` (1,710 lines — 1080p branded renderer), `ftts-voicecard` (1,284 lines — mosaic encode/decode), `ftts-wasm` (1,441 lines — `wasm-bindgen` translation), `ftts-ffi` (2,229 lines — C ABI for iOS).

**Data flow:** CLI/robot → `ftts-core` (asupersync-orchestrated session, cancellation tokens) → `ftts-model-qwen` generation loop (28-layer talker once per frame; 5-layer microdecoder 15× sequential per 80 ms frame; causal codec decode pipelined with generation) → `ftts-kernels` GEMV/GEMM tiers (int8 W8A8 default; f32 reference pinned for conformance) → codec SnakeBeta → 24 kHz WAV / live PCM / streaming packets. No Python in the inference path; the only async runtime is asupersync; the hot loop runs on a six-thread persistent worker team whose partitioning is claimed bit-identical to serial at every thread count (README; the `ftts robot selftest` command proves int8 tiers exactly equal to the scalar reference in i32 "on your machine, at this model's real reduction lengths"). (Dev/validation scripts in `scripts/` do use Python — the "no Python" claim is about the shipped runtime, not the repo.)

**Memory-safety posture** [Verified, High]: 5 crates `#![forbid(unsafe_code)]` (artifacts, cli, conformance, core, model-qwen). `ftts-kernels` is the documented island — 44 `unsafe` blocks concentrated in SIMD/int8/int4 kernels and mmap, under `#![deny(unsafe_op_in_unsafe_fn)]` with `SAFETY:` comments; the crate's own doc header declares it "the sole crate permitted to contain audited kernel `unsafe` islands." `ftts-ffi` carries the audited C ABI island (`unsafe extern "C"`, narrow `unsafe impl Send/Sync`, deny-by-default per its doc comment). Every `unsafe`-word hit in `ftts-artifacts` is a doc comment (verified individually) — the forbid gate there holds. The posture is coherent and honestly documented, unlike the blanket "pure Rust, end to end" marketing line.

**Dependency posture:** thin for a model runtime — asupersync (crates.io 0.5.0, pinned per the Cargo.toml owner directive of 2026-08-22; the project's real orchestration runtime for the talk/resident-daemon streaming and cancellation machinery), plus kernel/platform glue (Accelerate on Apple for the BLAS-form f32 codec, SLEEF port) [Verified, High]. Notably, there is **no frankentorch dependency at HEAD at all** — zero hits for `frankentorch`/`ft-core`/`ft-kernel-cpu`/`ft-serialize` across every manifest — so the sibling-constellation coupling pattern seen in some FrankenSuite repos is absent here. The `frankentorch-facade` validator rule listed in `docs/CI_AND_GATES.md` (forbidding reaching around `ftts-kernels` to call those crates directly) guards a dependency that no longer exists in the tree: one more layer of staleness in the same doc as the missing workflow file [Verified, High].

**README-vs-code drift (governance signal):** version badge reads 0.1.9 while `Cargo.toml` is 0.1.10 (stale badge); docs/ holds 21 top-level `.md` files; "Pure Rust, end to end" (marketing line) vs the documented unsafe islands in `ftts-kernels`/`ftts-ffi` (disclosed elsewhere in the same README's architecture section — one stale sentence, not a cover-up); the "solution" paragraph's present-tense FrankenMTP framing vs NE-002/NE-003's REVERT dispositions (the honest ledger and the marketing paragraph coexist unresolved). No `.github/` directory exists though release notes speak of "green main" — the CI configuration is off-tree.

## 4.5 Benchmark and conformance audit

### Maintainer-produced numbers

| Claim | Value | Method controls | Would it survive independent rerun? |
|---|---|---|---|
| Int8 default route throughput | 1.4–1.6× real time, unloaded M4 Pro | Owner-side runs; `ttfa_ms` in robot NDJSON output | Provisional — the README itself says "no certified RTF row exists yet in `docs/PERF_LEDGER.md`"; the ledger's admission gate (CV ≤ 5%) would reject the current row |
| Same, heavily loaded | 0.66–1.05× real time | Same | The honest row — real-time is load-dependent, not guaranteed |
| First audio latency | 200–225 ms (`ttfa_ms`) | PERF-007, "indicative pending quiet-window re-certification"; frankentts.com advertises "first audio about 450 ms after synthesis starts" | Provisional by its own label |
| Warm model load | ~3.7 s (PERF-003, certified) | CV 3.1%/2.9% campaign rows — admissible | The strongest row: certified under the project's own gate |
| f32 reference route | 6–7× slower than real time, by design | — | Reference-only; not a product claim |
| Worker-team fan-out kernels | 3.6–5.0× per projection at the model's decode shapes | Kernel-level A/B vs the scalar route | Provisional — "provisional pending a quiet-host run," quoted for the w8a16 route in the v0.1.7 changelog and again in the v0.1.10 notes [Maintainer claim, Medium] |
| WASM threaded build | 0.31–0.43× real time across runs | Site-measured (frankentts.com, fetched 2026-09-22); previous single-threaded build 0.05× | Plausibly rerunnable — the gate is in-tree (`site/` harness); no independent measurement |
| SnakeBeta vs libm | 129.6 dB SNR | Spectral check | Objective and narrow; likely survives |
| Denoiser vs PyTorch | 114–125 dB SNR on pinned fixtures | Fixture-pinned | Objective and narrow; likely survives |
| Kernel exactness | int8 tiers exactly equal to scalar in i32 | `ftts robot selftest` runs on the user's machine | Reproducible by construction — the strongest class of claim here |

**Reproduction cost (honest):** clone is light (no giant corpus — the model is a ~2.0 GB download via `ftts pull`, not checked in); builds on pinned `nightly-2026-07-05`; the sanctioned verification path is `./scripts/check.sh` plus model-gated suites. An independent rerun of the *throughput* numbers needs an M4 Pro-class machine, a quiet window (the ledger's own CV≤5% rule), and the ~2 GB artifact — hours, not minutes. An independent rerun of the *parity* numbers needs the pinned oracle (upstream PyTorch @ `022e286` + weights @ `5d83992`) and the truth-pack capture flow — documented in `docs/truth-pack/` with `fetch-truth-pack.sh --verify`.

### Conformance evidence

- **Truth pack:** `docs/truth-pack/` ships `PIN_RECORD.md` (two upstream pins + paper, dated 2026-08-06, with the honest note that the GitHub code pin is ~7 weeks newer than the weights pin), `MANIFEST.sha256`, `ACCEPTANCE_SURFACE.json` (the FrankenMTP break-even thresholds), `NONDETERMINISM_FLOOR.md`, tensor inventories, and a fetch/verify script — a portable oracle-capture apparatus, not just fixtures [Verified, High].
- **Release gates:** v0.1.7–v0.1.10 notes claim "51 test suites and clippy -D warnings green at the tagged commit" with "standing model-gated ladder skips reported honestly by the skip audit" [Maintainer claim, Medium]. The skip-honesty doctrine (`summarize_receipts.py`, XFAIL≠SKIP, `require_model!` harness in `ftts-conformance`) is verified in-tree [Verified, High]; actual greenness was not observed by the analyst.
- **Discrepancies ledger:** six entries (DISC-001 tokenizer regex, DISC-002 f32 accumulation vs Accelerate/SLEEF, DISC-003 optimized-default vs f32 reference, DISC-004 browser cache endpoint, DISC-005 tail trim, DISC-006 browser-vs-CLI divergence after frame 0), each with claim/evidence IDs, measured impact, kill switches, review dates, and re-review notes (DISC-001 re-reviewed 2026-08-24 with next review 2026-09-30) [Verified, High].
- **Negative-evidence ledger:** the FrankenMTP kill records (NE-002: sampled drafter; NE-003: greedy drafter — note the ledger's own numbering collision: a second, unrelated entry on wasm-SIMD expectations also carries the NE-003 label; all citations here mean the greedy-drafter entry unless stated) plus tier-ceiling corrections on WASM SIMD expectations (the 4–8× estimate rejected, "do not budget more than ~2×"), plus NE-005 — the int4 microdecoder's two failed speed gates (0.04× then 0.52× vs shipping int8) recorded as an OPEN OBLIGATION with a pre-committed re-test predicate — and NE-006, a **retracted** entry ("This entry was wrong, and the way it was wrong is the useful part": a 622 MB cold embedding hid behind a one-axis census), kept in-tree with the lesson rather than deleted [Verified, High]. The ledger retracts its own errors publicly.
- **The 97 ms that may not be quoted.** Qwen's paper claims 97 ms first-packet latency; PERF-007 records it as [NO ADMISSIBLE RATIO] because the paper measured on "our internal vLLM engine" with no hardware named — and the truth pack's OQ-15 resolution goes further, freezing the local CPU oracle environment (torch==2.7.1, librosa==0.11.0, …) and declaring "official CPU is not an admissible G2 performance incumbent and no CPU/GPU ratio may be reported" [Verified, High]. The project refuses comparisons its evidence cannot cash.
- **Cross-target determinism, debugged to the operator.** DISC-006 traced the browser-vs-CLI divergence past frame 0 to per-target f32 epsilons — input RMSNorm's sum-of-squares/rsqrt diverging first, then Q/K norm+RoPE on identical inputs (libm sin/cos ulps), then SiLU's exp — with the W8A8 path re-matching bit-for-bit wherever per-row quantization absorbs sub-ulp deltas. Resolution: a canonical gate (`FTTS_CANONICAL_NORM=1`) under which browser PCM matches the CLI sample-for-sample (96,000/96,000, max 0 LSB); the default route carries the divergence as ledgered, both renditions being valid sampler draws [Verified, High]. This is byte-exactness as a debugged property across ISAs, not a slogan.

### Independent numbers

**None found.** Web search returns only the repository itself, its release/commit pages, one fork (`goshen192/franken_tts`), and a stale sibling page under the old `frankentts` repo name — no third-party benchmark, code review, listening test, or production deployment [External, High within recall]. The frankentts.com demo is operator-hosted, not independent. **Independent validation: zero.**

## 4.6 Comparison: who owns the lane

**The incumbent** is the upstream stack itself — Qwen's own `qwen-tts` PyTorch package on a GPU (the HF quickstart is `device_map="cuda:0"`, bfloat16, flash-attention-2), plus the cloud TTS APIs (ElevenLabs, OpenAI, Azure) that own "voice cloning as a service." **Why the incumbent wins today, in one paragraph:** for anyone with a GPU or a network connection, the upstream package is the path of least resistance — maintained by the model authors, tracking the model as it evolves, with no 2 GB side-artifact to trust and no nightly-Rust toolchain. The cloud APIs win on zero-ops and voice quality. franken_tts wins only where the incumbent cannot go: no Python, no GPU, no network, private on-device synthesis — a lane defined by constraints, not by beating the incumbent at its own game.

**Adjacent lanes:** **LiteRT / llama.cpp-style GGUF tooling** (the generic "run models on CPU" lane — Qwen3-TTS appears in Google's LiteRT samples, which independently corroborate the 28-layer talker + 5-layer 15-step MTP architecture); **Kyutai Pocket TTS 100M** (the ultra-edge challenger the maintainer names as mandatory for the bakeoff); **Sherpa-ONNX / Piper / Coqui** (the established CPU TTS runtimes, though not zero-shot cloners of this class).

**The genuinely unoccupied lane [Inference, Medium]:** a *fixed-model, evidence-carrying* CPU runtime — one model revision, pinned oracle, seam-by-seam receipts, ledgers that publish the kills. Nobody owns it: the generic CPU runtimes don't do oracle parity, the cloud APIs don't do on-device, and the model authors don't do Rust. It is a narrow lane — it dies the day Qwen4-TTS ships and the port must be redone — but while the model is fixed, the combination of installable binaries and published negative evidence has no direct competitor.

## 4.7 Technical merit and adversarial review

**Strengths:**
1. **It ships.** 11 GitHub releases in 24 days (2026-08-06 → 2026-08-30), five platform binaries, SHA256SUMS, install one-liners, a Homebrew tap, and a live WASM demo — the release cadence and distribution surface are real product work, not a research prototype's afterthought [Verified, High].
2. **Evidence discipline with teeth.** The ledgers don't just record wins: NE-002/NE-003 killed the flagship optimization with measured numbers (p_token = 0.0000, acceptance 0.01/depth, "strictly worse"), DISC-003 records the int8 route's audible side effects (RMS 0.019→0.221, centroid 860→236 Hz, "audible LF drone risk"), the perf ledger's CV≤5% gate rejects the project's own headline RTF number ("no certified RTF row exists yet"), and NE-006 is a *retracted* entry kept in-tree with its lesson ("This entry was wrong, and the way it was wrong is the useful part"). The release notes carry "Generated with Claude Code" markers (observed in the v0.1.7 notes) and still gate on 51 suites green — the honesty apparatus is load-bearing, not decorative [Verified, High].
3. **The truth-pack is a genuine method artifact.** Pinned oracle revisions with SHA provenance, a nondeterminism floor, an acceptance surface with break-even thresholds, a fetch-and-verify script — this is the exportable piece: a recipe for "how to claim parity with a PyTorch model and mean it" [Verified, High].
4. **The voice-card mosaic is a real idea, executed.** A 1,024-float embedding as a self-locating, error-corrected visual channel with a pinned bit-identical encoder test — the smallest genuinely novel artifact in the repo, and the one with the clearest path to outliving the model [Verified mechanism, High].
5. **Scope discipline.** "One fixed model revision, model-specific kernels, and no pretense of being a general speech framework" — the anti-framework stance is what makes the parity claims tractable at all [Verified, High].

**Weaknesses:**
1. **The flagship optimization is dead and the top-of-README framing hasn't caught up.** NE-002/NE-003 (both REVERT) killed FrankenMTP's drafter — sampled acceptance ~1%, greedy acceptance literally 0.0000 — and the v0.1.7 changelog records the speculation track as "labeled unshipped at its code sites, cross-referencing the measured negative evidence, so the in-tree primitives cannot be mistaken for a realized traffic win." Credit where due: the *code sites* were relabeled. But the README's lead "solution" paragraph still presents speculative block drafting in the payoff list ("turns the model's hidden 15-step residual-code microdecoder from its largest CPU liability into its largest optimization advantage"), and the pattern repeated with v0.1.10's headline "microdecoder int4 AWQ/GPTQ pipeline": the arithmetic landed, but NE-005 records routing as OFF after two failed speed gates (0.04×, then 0.52× vs shipping int8) — an OPEN OBLIGATION, not a shipped lever. The ledger is honest; the top-of-funnel framing runs one release ahead of it [Verified, High].
2. **Bus factor 1 with a no-merge policy by design.** The README refuses outside contributions outright — not "we're busy," but a permanent governance choice: "I do not accept outside contributions for any of my projects." Combined with a 96K-line tree and a release cadence of 11 versions in 24 days, review depth is one human plus agent assistance, forever [Verified, High].
3. **Zero independent validation, and the CI doc is stale relative to the tree.** No third-party benchmark, listening test, code review, or production deployment found. Worse, the doc that says "CI runs exactly that script" (`docs/CI_AND_GATES.md`) describes a `.github/workflows/ci.yml` with three jobs and a self-hosted-runner status — but **no `.github/` directory exists in the pinned tree** (716 tracked files, none under `.github/`), and the same doc describes sibling path dependencies (`../asupersync`, `/dp/frankentorch`) that the tree has replaced with a crates.io `asupersync 0.5.0` (zero frankentorch references in any manifest). The doc itself preempts the objection — "There is no second list of commands in a workflow file to drift out of sync" — yet the workflow file it points to is not in the tree, and the doc has drifted from the tree. The receipts/`GREEN WITH SKIPS` honesty doctrine is sophisticated, but it is a doctrine you can only read about, not audit [Verified/External, High].
4. **The performance story is provisional where it matters.** The headline number (1.4–1.6× RT) is uncertified by the project's own ledger; under load it drops to 0.66–1.05× (sub-real-time); the WASM path is at 0.31–0.43× (the site's own measured figure); the f32 reference is 6–7× slower than real time. The only certified rows are narrow (warm load 3.7 s, kernel exactness). "Faster than real time" is true on one machine, unloaded, on the uncertified route [Verified, High].
5. **The license is a strategic own-goal for the stated mission.** The rider withholds all rights — including *benchmarking, testing, and analyzing* — from OpenAI, Anthropic, affiliates, and anyone acting for them. For a project whose natural users include agent-voice infrastructure builders, the two labs most likely to evaluate, adopt, or acquire it are legally barred from even measuring it [Verified, High].
6. **Model churn is existential.** Everything is Qwen3-TTS-12Hz-0.6B-Base-specific: the kernels, the truth pack, the parity receipts, the voice presets. A new model revision means a new port; nothing transfers except the methodology [Inference, High].

**Steelman of the bear case:** franken_tts is a brilliant monument to a single model revision that will be obsolete the moment Alibaba ships its successor. The core technical bet — speculative drafting of the microdecoder — failed twice by the project's own measurement, leaving an int8-quantized sequential decoder whose real-time claim is uncertified, load-dependent, and listening-unevaluated on its default route. The moat is 96,057 lines of nightly-Rust that one human refuses to let anyone else touch, under a license that bars the two labs building the agent-voice future from even benchmarking it. The honest ledgers are admirable, but ledgers are not a business, not a community, and not a second maintainer — and when the model revs, the artifact rots while the methodology gets a nice blog post. The rational move is to extract the truth-pack method and let the runtime be what it is: a fast, private, well-built dead end.

**Hook audit (the packet grades its own hook):** "96,057 lines of pure-Rust CPU voice cloning whose own negative-evidence ledger killed the flagship speculative optimization — twice, with receipts — and published the autopsy." Line count verified by fresh count; "pure-Rust CPU voice cloning" verified modulo the two documented unsafe islands (the hook says "pure-Rust," not "unsafe-free" — defensible, but the packet notes the islands in §4.4); the two kill records verified verbatim in the ledger (NE-002, NE-003, both REVERT); "published the autopsy" verified — the entries are in-tree with evidence IDs, probe commands, and do-not-retry predicates. The hook survives.

## 4.8 License and governance (material, not boilerplate)

**License text, read verbatim** [Verified, High]: `LICENSE` is the MIT License **with an "ADDITIONAL RIDER / RESTRICTION (OpenAI / Anthropic)"** that is "part of the 'conditions' of this License" and "controls" in any conflict. Quoted scope: *"Restricted Parties" means OpenAI, L.L.C.; Anthropic, PBC; any of their respective Affiliates; and any person or entity acting directly or indirectly on behalf of, for the benefit of, or under the direction of any of the foregoing (including any officer, director, employee, contractor, agent, consultant, service provider, or representative).* *"Notwithstanding any other provision of this License, no rights are granted to any Restricted Party."* For purposes of the rider, *"use" includes, without limitation: copying, modifying, … benchmarking, testing, analyzing, indexing, or incorporating the Software or any Derivative Works into any dataset, training corpus, evaluation harness, or pipeline for machine learning or other automated systems.* Breach terminates all permissions automatically; injunctive relief and attorneys' fees reserved to Jeffrey Emanuel (copyright holder, 2026). **Classification: NOT OSI open source** — named-party discrimination plus a use restriction covering even benchmarking and analysis. Source-available with a targeted exclusion.

The LICENSE's third-party notice carves model weights out cleanly: the rider "covers ONLY the franken_tts source code… It does NOT cover any model weights," which are Apache-2.0 by Alibaba Cloud, with the Apache text "embedded in the ftts binary" and "preserved verbatim in this repository's pinned truth pack" [Verified, High]. This is careful lawyering — the exclusion is scoped to the code, not the model.

**The rider as strategy:** defensively coherent (it prevents the two best-positioned labs from absorbing the work into training corpora or eval harnesses without permission) and offensively self-sabotaging: the project's most credible future users — agent-voice infrastructure builders — sit downstream of exactly the excluded parties, and the rider's breadth (even *benchmarking* is forbidden) chills the independent validation the project most needs. No third party can publish a benchmark without lawyering the rider first, which helps explain why independent validation is zero [Inference, Medium]. The README's badge and shorthand say "MIT"; the License section does disclose "MIT with an OpenAI/Anthropic rider" — disclosure exists but is easy to miss.

**Governance:** owner-directed single maintainer; the README's "About Contributions" is an explicit, permanent no-merge policy ("I do not accept outside contributions for any of my projects… I won't merge them directly. Instead, I'll have Claude or Codex review submissions via `gh`"). Release notes carry "Generated with Claude Code" markers. Bus factor 1 [Verified, High]. The `.beads` issue tracker is the planning surface; AGENTS.md documents the skip-honesty doctrine and the hard `cargo test --locked` gate. **What breaks first if velocity decays:** the tree is 96K lines on a pinned nightly with no second maintainer and no contributor on-ramp — bit-rot within quarters, and the 2 GB side-artifact distribution (SHA-256 manifests, Homebrew tap) has no succession story.

## 4.9 NODUS factsheet

| Criterion | Score | One-line justification |
|---|---|---|
| Technology readiness (TRL 1–9) | **7** | Real releases, installable binaries on 5 platforms, parity receipts, operational surface (robot mode, resident daemon, iOS, WASM) — operational prototype; capped by DISC-003 (listening-eval gap on the default route) and load-dependent RTF |
| Strategic relevance (1–5) | **4** | Private, on-device, CPU-only voice cloning for agents is directly on the local-capability thesis; capped by the rider excluding the frontier labs |
| Impact potential (1–5) | **3** | Single-model runtime; the truth-pack/ledger methodology and the voice-card channel generalize better than the artifact |
| Implementation feasibility (1–5) | **4** | Installs today via one-liners; friction is the nightly toolchain, the 2 GB model download, and load-sensitive RTF |
| Time to mainstream (1–5) | **2** | Niche research artifact for years without governance change; single-model expiry is structural |
| Collaboration potential (1–5) | **1** | Rider excludes OpenAI/Anthropic; explicit no-merge policy; bus factor 1 — collaboration is refused by design, not just absent |

**Ring: Explore.** The ring rules are decisive: *Pilot* requires a release artifact plus a bounded, real workload fit. The release artifacts exist — but the only route fast enough for a real workload is the int8 default, whose quality is not listening-certified (DISC-003 open), while the certified-quality route (f32) runs 6–7× slower than real time and cannot serve one. Until the listening gap closes or the default flips, there is no pilotable configuration. *Invest* requires independent validation plus governance; neither exists, and governance is refused by design. Explore is the default for substantive-but-unproven — and this is the most substantive unproven artifact in the family. Revisit triggers: DISC-003 closed by a published listening protocol; a learned drafter clearing the NE-003 break-even bar; any independent benchmark or listening test; a license change.

## 4.10 Wardley placement

- **Text-to-speech / voice cloning as a capability:** Commodity — cloud APIs and open models own it.
- **CPU-only memory-safe single-model TTS runtime:** Custom-built → early Product — installable, released, real users possible; moves to Product with independent validation and the listening gap closed.
- **Speculative microdecoder drafting (FrankenMTP):** Genesis → dead — measured at 0.0000 acceptance and REVERTed; moves only if a learned drafter clears the ledger's own break-even bar.
- **Seam-parity truth pack + discrepancy/negative-evidence/performance ledgers:** Custom-built — novel as a packaged discipline for model runtimes; moves toward Product the moment a second project (e.g. the Kyutai bakeoff) adopts the harness.
- **Voice-card mosaic channel:** Genesis — no equivalent anywhere; moves right if the robustness ladder (next step 5) publishes.

**The decoupling lens:** franken_tts represents *framework-from-model* (no PyTorch, no Python — the model decoupled from its reference stack) and advances *engine-from-license* only partially (the code is rider-encumbered even as the weights stay Apache-2.0). It gestures at the next decoupling the deep-dive named — *memory from the store* — only weakly: the voice card is a portable voice capsule (a 1,024-float embedding that survives screenshots), a proto-example of a portable, attestable agent asset, but with no provenance binding and no protocol around it.

## 4.11 Trajectory (12 / 24 / 60 months) — [Inference]

- **12 months:** continued single-maintainer iteration; the int4 AWQ/GPTQ microdecoder pipeline (v0.1.10) either lands as the new default route or joins FrankenMTP in the ledger; the Kyutai bakeoff happens or doesn't; DISC-003 is the quality milestone to watch — a published listening protocol would be the most credibility-dense event available to the project.
- **24 months:** bifurcation. **Upside:** the listening gap closes, the WASM path crosses 1.0× real time on a reference device, and the truth-pack method gets adopted by a second model port — Pilot for narrow workloads (private on-device agent voice, accessibility). **Decay:** model churn arrives (a Qwen3-TTS successor or a shift in the architecture), the port must be redone, and the 96K-line tree's bus-factor-1 maintenance load compounds on a pinned nightly.
- **60 months:** binary. Either a niche-but-real artifact (the private-voice runtime embedded in agent infrastructure, with the voice-card channel as its most durable idea) or superseded: upstream ships an official CPU path, a generic runtime (LiteRT-class) absorbs the model, and the "one fixed model revision" bet expires. The verification methodology is the more likely survivor either way.

**Revisit triggers (concrete, observable):** DISC-003 closed with a published listening evaluation; a learned drafter clearing the NE-003 break-even thresholds (p*≈94–95%, alpha_full*≈40–46%); any independent benchmark, listening test, or code review; the WASM path crossing 1.0× sustained; a second human maintainer or any softening of the no-merge policy; any change to the license rider; a Qwen3-TTS successor model appearing.

## 4.12 Limitations and open questions (mandatory)

**Not done:** did not compile the workspace, run any test, synthesize audio, execute a benchmark, run the WASM or iOS builds, download the model artifact, or reproduce any parity receipt — all behavioral and performance claims rest on maintainer evidence plus revision-bound documentation. Shallow clone only (no history beyond HEAD). CI per-run status is unverifiable: no workflow configuration exists in the tree. Star/fork counts from a live API read (high confidence). Download counts from the releases API. Web search for independent coverage carries the usual recall caveats.

**Open questions that would most change the verdict:** can anyone outside the author reproduce the parity receipts from the pinned oracle?; does the default int8 route pass a blind listening test vs the f32 reference (DISC-003)?; is there any path — learned drafter or otherwise — past the NE-003 break-even bar?; does the WASM path reach real time, and on what reference device?; will the author ever accept a second maintainer or soften the rider?; what happens to the tree when the nightly pin ages out?

## The eight deepening questions (one paragraph each)

1. **Provenance.** The system records almost nothing about *who produced* an artifact: synthesized WAVs carry no watermark or producer attestation (the truth pack even keeps the open question `docs/truth-pack/OQ8_WATERMARKING.md`), voice cards carry the embedding but no signature binding it to an enrollment event, and the model artifact's integrity is pinned-digest verification (SHA-256 manifests) — integrity of *bytes*, not attestation of *origin* [Verified, High]. Making attestation portable would require signing voice cards and synthesis receipts with an operator key at creation time and publishing the verification path — the mosaic channel is structurally well-suited to carrying a signature (Reed–Solomon-protected cells with spare capacity), but today it carries only the vector [Inference, Medium].

2. **The embeddable unit.** The smallest useful adoptable piece is the voice-card codec (`ftts-voicecard`, 1,284 lines, one file) — a self-contained 1,024-float vector → robust image channel with a pinned bit-identical test — adoptable without the model, the kernels, or the nightly toolchain's hot path [Verified, High]. The adoption cost is the license rider (it follows every derivative) and the crate's residence in a nightly-pinned workspace, though the codec itself is plain Rust. The next-smallest unit, the int8 kernel tiers behind `ftts robot selftest`, is more valuable and more entangled: exact-i32 proofs at real reduction lengths, but wired into the workspace's routing and threading assumptions [Inference, Medium].

3. **Unexercised option value.** The architecture holds at least four unused capabilities: the `FTTS_SPEC_PROBE` shadow-drafter instrumentation is a general speculative-decoding measurement harness currently aimed only at its own dead drafter; the truth-pack oracle-capture flow is a general parity method currently aimed only at Qwen3-TTS; the `ftts-wasm` threaded build plus the repo's Chromium gate is a browser-benchmark apparatus one reference device away from a publishable real-time campaign; and the voice-card mosaic is a general robust vector channel currently used only for speaker embeddings [Verified, High]. What unlocks them is, respectively, a learned draft head, the Kyutai bakeoff, a declared reference device, and the recompression ladder — all measurement decisions, none blocked on research [Inference, Medium].

4. **Benchmark honesty.** The numbers most likely to survive an independent rerun are the *adverse and narrow* ones — the 0.66–1.05× loaded throughput, the 6–7× slower f32 reference, the 0.0000 greedy drafter acceptance, the site's own 0.31–0.43× browser figure, the denoiser/SnakeBeta SNR figures — because they are either the maintainer's own published losses or objective narrow checks with pinned fixtures [Inference, Medium]. The load-bearing number for the thesis is the 1.4–1.6× real-time int8 claim: it has the weakest controls (one machine, owner-measured) and is explicitly uncertified by the project's own ledger ("no certified RTF row exists yet"), so the performance thesis currently rests on a number its own author won't admit to the ledger — honest, but provisional [Verified, High].

5. **The governance path.** There is no credible route from one maintainer to an institution under the current policy, because the policy is the obstacle: the README permanently refuses outside merges, and the rider bars the labs most likely to institutionalize the work. The credible route would require two reversals — a contribution policy and a license both rewritten — and the maintainer has stated the first will not happen ("the only way I can move at this velocity and keep my sanity") [Verified, High]. What breaks first if velocity decays is the distribution surface, then the tree: the Homebrew tap, the install scripts, and the 2 GB artifact hosting are all owner-operated with no succession story, and a 96K-line nightly-pinned tree with no second reader bit-rots within quarters [Inference, High].

6. **The license as strategy.** The rider excludes exactly OpenAI, L.L.C., Anthropic, PBC, their affiliates, and anyone acting for, benefiting, or under the direction of them — and defines "use" to include benchmarking, testing, analyzing, and indexing, with automatic termination and injunctive relief reserved to Jeffrey Emanuel [Verified verbatim, High]. As strategy it is coherent defensively (it prevents the two labs best positioned to absorb the work from doing so without permission, and it cleanly carves out the Apache-2.0 model weights) and self-sabotaging offensively: the project's most credible future is agent-voice infrastructure, the excluded parties *are* the agent-infrastructure builders, and the rider's breadth chills the independent benchmarking the project most needs — a Catch-22 where the license that protects the work prevents the validation that would prove it [Inference, Medium].

7. **Agent-era fit.** The concrete workload that would pick franken_tts over the upstream PyTorch stack or a cloud API is an agent that must speak where there is no network, no GPU, and no tolerance for audio leaving the device — a field robot, a privacy-bound assistant, an air-gapped kiosk — with `ftts robot` NDJSON and stable exit codes as the machine interface and the resident daemon amortizing the ~3.7 s model load across utterances [Inference, Medium]. What would have to become true first: the listening gap on the default route must close (no agent ships a voice its builder hasn't listening-certified), real-time must hold under load rather than just unloaded (0.66–1.05× under load is a dropped-word generator), and the deployer must be legally clear of the rider — which rules out the two labs' platforms and anyone downstream of them [Inference, Medium].

8. **The kill test.** The single event that would falsify the core thesis — "a fixed-model, evidence-carrying CPU runtime is worth building" — is upstream (or the LiteRT-class generic runtimes) shipping an official, maintained CPU path for Qwen3-TTS that matches the int8 route's speed with the f32 route's quality: it would commoditize the artifact while the methodology survives as the project's real contribution [Inference, Medium]. The experimental falsifications are nearly as decisive: a blind listening test showing the int8 default audibly degrades the voice (the DISC-003 ledger already documents the LF-drone mechanism), or an independent parity rerun from the pinned oracle that fails to reproduce the seam receipts — either collapses a pillar the thesis stands on [Inference, Medium].

---

**Working notes:** fresh shallow clone at `~/workspace/.scratch/franken_tts-verify/` (HEAD `eafdf454`, 2026-09-19 20:12 EDT). Prior v1 draft was used as a starting point only; every number above was re-verified at the new HEAD — notable corrections vs the draft: no `.github/` workflow configuration exists in the tree (the draft's CI row was wrong), conformance holds 36 test files not "36 conformance test files" as a release-gate claim, docs/ has 21 top-level `.md` files, the clone counts 138 `.rs` files (draft said 142), and the asupersync dependency is real and load-bearing in `ftts-core` (not a facade). No durable user-facing files created besides this assessment and its versioned intermediates.
