feat(short): narración — el grounding la cubre, el contrato la admite y el prompt la guía
Build & Deploy ResearchOwl / build-and-push (push) Successful in 10s
Build & Deploy ResearchOwl / build-and-push (push) Successful in 10s
El comprobador va primero, antes que el campo (fase 2 §12): la narración es prosa que el modelo redacta, no una etiqueta que copia, y es donde se cuela una cifra sin fuente. De paso, la huella de una cifra pasa a ser número + unidad canónica: con la voz repitiendo la pantalla, '35,000 FT' y '35,000 feet' son el mismo dato y contarlos dos veces inflaría el informe del que depende la revisión humana. editorial_notes estima la duración CON la voz: la declarada es un suelo y sin esto el modelo escribiría 40 s de shots, les colgaría narración y se enteraría del Short de 65 s cuando ya está pagado. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
93a506b636
commit
a13c3062b6
@@ -140,3 +140,28 @@ class TestSessionFromFilename:
|
||||
assert _session_from_filename("myspec.json") is None
|
||||
assert _session_from_filename("") is None
|
||||
assert _session_from_filename(None) is None
|
||||
|
||||
|
||||
class TestNarrationWarnings:
|
||||
"""shortsmith manda por el mismo canal los textos recortados y los avisos
|
||||
de la voz. Piden acciones distintas, así que se muestran distintos."""
|
||||
|
||||
def test_a_silent_shot_is_reported_as_such(self):
|
||||
text = _claims_message(result_with(render_warnings=[
|
||||
{"kind": "narration", "text": "shots.2.narration not spoken: piper exited 1"}]))
|
||||
assert "🔇" in text and "shots.2.narration" in text
|
||||
assert "recortados" not in text
|
||||
|
||||
def test_a_stretched_video_says_so(self):
|
||||
text = _claims_message(result_with(render_warnings=[
|
||||
{"kind": "timing",
|
||||
"text": "narration stretched the video from 32.0s to 41.5s"}]))
|
||||
assert "41.5s" in text
|
||||
assert "recortados" not in text
|
||||
|
||||
def test_trimmed_text_and_narration_do_not_get_mixed_up(self):
|
||||
text = _claims_message(result_with(render_warnings=[
|
||||
{"template": "data_card", "text": "FILA LARGA", "requested": 44, "size": 38},
|
||||
{"kind": "narration", "text": "no voice installed"}]))
|
||||
assert "1 textos recortados" in text # sólo cuenta el de dibujo
|
||||
assert "🔇 no voice installed" in text
|
||||
|
||||
Reference in New Issue
Block a user