- REGRESSION FIX: the full-screen conversation overlay stopped opening (fell back to the inline bar) because building the language/output selectors inside the overlay's single try/catch could throw on a phone (navigator.mediaDevices/setSinkId). Overlay build is now two phases: the essential orb+captions+controls attach first; the selectors attach after, each guarded, so a selector failure omits only that control and never the visualization. Control builders can no longer throw (inert hidden fallback); device enumeration is async after attach. Regression test covers mediaDevices-undefined and enumerate-rejects. - Orb watermark is the processed Hermes character glyph (feathered, circle-cropped, screen-blended so the face glows on the dark orb), no more white/grey box. - Output selector defaults to the loudspeaker (excludes the communications/earpiece endpoint that the open mic otherwise forces); explicit choice sticks; hidden gracefully where setSinkId is unsupported. 291 voice tests. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BvMSXH8VH2tMWXanb8SJdf
titan-iac
Flux-managed Kubernetes desired-state config for bstein.dev.
Canonical source URL:
ssh://git@scm.bstein.dev:2242/atlas/titan-iac.git
Scope
This repo contains cluster configuration consumed by Flux:
- platform/infrastructure manifests
- service manifests and kustomizations
- operational scripts for render/reconcile workflows
Apply model
I use Git + Flux as the source of truth and avoid manual in-cluster edits for durable changes.
Description
Languages
Python
74%
JavaScript
10.2%
Shell
6.2%
TypeScript
3.9%
Go
2.1%
Other
3.4%