P1 — add transcript-normalizer configuration, selection, status and diagnostics #217

Closed
opened 2026-08-28 03:23:52 +00:00 by nsaspy · 1 comment
Owner

Parent: #215
Depends on: #216, #217
Integrates with: #3, #92, daemon/client configuration surfaces

Goal

Make transcript normalization an explicit user-selectable Zara setting with one configuration authority and clear runtime health/status.

Configuration

Extend existing TOML configuration with validated settings equivalent to:

[voice.transcript_normalization]
backend = "off"          # off | s1-mini
failure_policy = "raw"   # raw | fail-turn
language_policy = "auto"

[voice.transcript_normalization.s1_mini]
runtime = "openai-compatible"
base_url = "http://127.0.0.1:11434/v1"
model = "s1-mini"
style = "balanced"
structure = "prose"
context = "general"
timeout_ms = 1000

Exact naming is design-owned, but requirements are:

  • default remains off unless explicitly changed;
  • unknown backend/runtime rejected;
  • endpoint/model/timing values bounded and validated;
  • style/structure/context constrained to supported values;
  • localhost/local endpoint is the safe documented path;
  • configuring a remote endpoint is explicit and visibly changes privacy posture;
  • secrets, if ever required by a configured endpoint, use existing secret/config handling and never diagnostics output.

Selection and lifecycle

  • backend can be selected without changing the STT backend;
  • runtime reports selected backend, model, endpoint locality, ready/degraded/unavailable state and last bounded error class;
  • live reload is supported only if the owning config architecture makes it safe; otherwise restart requirement is explicit;
  • no silent model download/start of a third-party daemon merely because backend = "s1-mini" is selected.

User surfaces

Expose selection/status through the supported CLI/config diagnostics and, once #92 settings UI is available, the same underlying descriptors in desktop settings. Do not create a second desktop-only configuration store.

Settings should explain:

  • S1-mini is post-STT cleanup, not transcription;
  • current model is English-only;
  • local endpoint keeps cleanup local;
  • failure_policy = raw preserves the raw transcript if cleanup is unavailable;
  • #122 semantic rewrite is a separate later stage.

Tests

TDD config defaults, round-trip, invalid backend, invalid control values, remote/local endpoint classification, timeout bounds, unavailable provider status, redaction and restart/live-reload semantics.

Acceptance

A user can select off or s1-mini through Zara's normal configuration system and inspect whether normalization is actually active, local, ready or degraded without exposing secrets or confusing it with STT/#122.

Parent: #215 Depends on: #216, #217 Integrates with: #3, #92, daemon/client configuration surfaces ## Goal Make transcript normalization an explicit user-selectable Zara setting with one configuration authority and clear runtime health/status. ## Configuration Extend existing TOML configuration with validated settings equivalent to: ```toml [voice.transcript_normalization] backend = "off" # off | s1-mini failure_policy = "raw" # raw | fail-turn language_policy = "auto" [voice.transcript_normalization.s1_mini] runtime = "openai-compatible" base_url = "http://127.0.0.1:11434/v1" model = "s1-mini" style = "balanced" structure = "prose" context = "general" timeout_ms = 1000 ``` Exact naming is design-owned, but requirements are: - default remains `off` unless explicitly changed; - unknown backend/runtime rejected; - endpoint/model/timing values bounded and validated; - style/structure/context constrained to supported values; - localhost/local endpoint is the safe documented path; - configuring a remote endpoint is explicit and visibly changes privacy posture; - secrets, if ever required by a configured endpoint, use existing secret/config handling and never diagnostics output. ## Selection and lifecycle - backend can be selected without changing the STT backend; - runtime reports selected backend, model, endpoint locality, ready/degraded/unavailable state and last bounded error class; - live reload is supported only if the owning config architecture makes it safe; otherwise restart requirement is explicit; - no silent model download/start of a third-party daemon merely because `backend = "s1-mini"` is selected. ## User surfaces Expose selection/status through the supported CLI/config diagnostics and, once #92 settings UI is available, the same underlying descriptors in desktop settings. Do not create a second desktop-only configuration store. Settings should explain: - S1-mini is post-STT cleanup, not transcription; - current model is English-only; - local endpoint keeps cleanup local; - `failure_policy = raw` preserves the raw transcript if cleanup is unavailable; - #122 semantic rewrite is a separate later stage. ## Tests TDD config defaults, round-trip, invalid backend, invalid control values, remote/local endpoint classification, timeout bounds, unavailable provider status, redaction and restart/live-reload semantics. ## Acceptance A user can select `off` or `s1-mini` through Zara's normal configuration system and inspect whether normalization is actually active, local, ready or degraded without exposing secrets or confusing it with STT/#122.
Author
Owner

Core read-only preflight while #217 exact-head CI runs: current ZaraConfig is already the single XDG TOML authority and has explicit reload() semantics, so #218 should not add a watcher or second settings store. #217's actual provider contract accepts an endpoint origin and appends /v1/chat/completions; the stale issue example base_url = .../v1 would double /v1 if copied literally. The implementation design should therefore use/document an endpoint/origin field without /v1 (or explicitly normalize that suffix), and use the backend's real trained styling value semi-formal rather than the stale balanced example. Default remains off; config changes should take effect only through explicit ZaraConfig.reload() / owner reconstruction unless runtime research proves a safe live provider swap. Diagnostics should project backend/model/locality/status/last bounded error only—never transcript bodies, URL credentials, or endpoint userinfo. No code consumed yet because #218 declares #217 as a dependency.

Core read-only preflight while #217 exact-head CI runs: current `ZaraConfig` is already the single XDG TOML authority and has explicit `reload()` semantics, so #218 should not add a watcher or second settings store. #217's actual provider contract accepts an endpoint origin and appends `/v1/chat/completions`; the stale issue example `base_url = .../v1` would double `/v1` if copied literally. The implementation design should therefore use/document an endpoint/origin field without `/v1` (or explicitly normalize that suffix), and use the backend's real trained styling value `semi-formal` rather than the stale `balanced` example. Default remains `off`; config changes should take effect only through explicit `ZaraConfig.reload()` / owner reconstruction unless runtime research proves a safe live provider swap. Diagnostics should project backend/model/locality/status/last bounded error only—never transcript bodies, URL credentials, or endpoint userinfo. No code consumed yet because #218 declares #217 as a dependency.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
nsaspy/zara#217
No description provided.