Files
Frank 8af40c402b chore(agent): commit the machine tier and the doctrine text the checkout was already running
Landing blocker for #61 and #63: the deployment checkout is 12 commits behind and
`merge --ff-only` refuses while tracked paths are dirty. Discard is not available here
(workspace policy: no `checkout`/`stash` on shared state), so the dirt is committed.

- `agent/APPEND_SYSTEM.md`: the point-of-use / one-work-log / PR-link doctrine, already
  byte-identical to `origin/main` (`cmp` against the trunk blob: no difference). No new
  prose — the commit exists so the trunk merge can proceed.
- `agent/config.yml` and `agent/managed-skills/**`: the machine-live tier the heartbeat
  owns (AGENTS.md § Live-sync tiers).

`ALLOW_SECRETS=1` was used, deliberately and after auditing the staged diff by hand: the
only credential-shaped strings in it are two copies of `AKIA0000000000000EXAMPLE` — the
inert all-zero AWS example id — and they appear inside the two skill pages that teach
that exact placeholder shape. This checkout is still running the pre-#61 hook; the merged
gate (value-scoped placeholder filter, `71601f7`) exempts this value, so the refusal
dies with this landing. No `--no-verify` was used: the gate ran and its verdict is
recorded here.

Refs #61
2026-10-21 01:44:51 -07:00

2.6 KiB
Raw Permalink Blame History

name, description
name description
frank-tts-voice-locate Answer fleet-voice questions (where voices are stored, add a voice) by jumping straight to the serverAppConfig vault pages and the live 7772 roster probe, instead of re-searching Gitea for a frank-tts repo that does not exist.

Frank-TTS voice facts: skip the search, go to the owners

Questions like "how do I add a voice?", "where are voices stored?", "why is narratorN missing?" are already answered elsewhere. The frank-tts code does NOT live in a Gitea repo named frank-tts (repo search finds nothing; it is dank/serverAppConfigs), and the engine repo is upstream qwentts.cpp pinned at 5916bf7c.

  1. Vault pages (canonical, all of it lives here) in the local checkout ~/Projects/serverAppConfig:
    • serverAppConfigs-docs/Dankclaw/Voice Packs.md — pack anatomy, the builder, the 10-second source invariant, "Adding a fourth voice" steps, engine-bump arithmetic.
    • serverAppConfigs-docs/Dankclaw/Frank TTS Engine.md — registry law (memory-only; warm hook), routes, Vulkan device law, troubleshooting table.
    • serverAppConfigs-docs/Dankclaw/Frank TTS.md — the 7772 facade contract.
    • Code/seam: dankclaw/voiceservice/, scripts/build-voice-pack.sh, scripts/voice-packs.env, tests/voice_pack_unit.bats.
  2. Live roster (authoritative over any doc census): curl -s http://192.168.0.143:7772/v1/audio/voices (bare JSON array; /health also echoes voices). A missing name = its dir lacks reference.wav or the name is not lowercase — check /home/dank/voices/<name>/ via ssh dankclaw.

Facts that cost turns to re-derive

  • Voice storage: /home/dank/voices/<name>/ on Dankclaw (host state, never git; RO mount at /voices). Files: reference.wav (24 kHz mono, 18–25 s, existence gate), reference.spk (8192 B), reference.rvq (5456–6864 B), manifest.json.
  • Roster = facade directory scan; engine registry is in-memory, filled by podman exec frank-tts-engine /app/warm-voices.sh (boot ExecStartPost; re-register replaces, restart costs 6–8 s/voice).
  • Clients (omp-dankvoice, OpenWebUI) store NO voices — they GET /v1/audio/voices; only the chosen name persists client-side (~/.omp/cache/dankvoice.json voice).
  • Crop law: past first 10 s (hard invariant), 20–25 s preferred, floor 19.84 s for .rvq; sources pinned by sha256 in scripts/voice-packs.env; sample media live on workstations (/home/blank/audiosample*) and must be copied to /home/dank/voice-sources before a build.
  • Engine GET /v1/audio/voices returns {} at the pinned commit — always ask the 7772 facade, never 8880, for the list.