T140 clamps an out-of-range VoiceSpec.Pace (e.g. 3.0) to the engine bound silently — ruled right for the LOG (the 30s refresh poll would repeat forever), but the operator gets no signal anywhere. The once-per-change channel already exists: PersonaImportResponse.Warnings (the resolve-voice precedent). Add: 'pace 3.0 is outside this engine's [0.5, 2.0] window and will render at 2.0' at import/save time. Project #4 (TTS+LLM).
T140 clamps an out-of-range
VoiceSpec.Pace(e.g. 3.0) to the engine bound silently — ruled right for the LOG (the 30s refresh poll would repeat forever), but the operator gets no signal anywhere. The once-per-change channel already exists:PersonaImportResponse.Warnings(the resolve-voice precedent). Add: 'pace 3.0 is outside this engine's [0.5, 2.0] window and will render at 2.0' at import/save time. Project #4 (TTS+LLM).