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
+16
-3
@@ -464,12 +464,25 @@ def _claims_message(result) -> str:
|
||||
else "no se llegó a escribir un spec")
|
||||
lines.append(f"⚠️ Sin comprobación de fundamento: {why}.")
|
||||
|
||||
if result.render_warnings:
|
||||
# shortsmith manda dos cosas por el mismo canal: textos que no cupieron al
|
||||
# dibujar y avisos de la narración. Se separan aquí porque piden acciones
|
||||
# distintas — uno se arregla acortando una cadena, el otro puede significar
|
||||
# que el Short salió mudo.
|
||||
trimmed = [w for w in (result.render_warnings or []) if not w.get("kind")]
|
||||
spoken = [w for w in (result.render_warnings or []) if w.get("kind")]
|
||||
|
||||
if trimmed:
|
||||
lines.append("")
|
||||
lines.append(f"✂️ {len(result.render_warnings)} textos recortados al dibujar:")
|
||||
for w in result.render_warnings[:5]:
|
||||
lines.append(f"✂️ {len(trimmed)} textos recortados al dibujar:")
|
||||
for w in trimmed[:5]:
|
||||
lines.append(f" • [{w.get('template', '?')}] {str(w.get('text', ''))[:60]}")
|
||||
|
||||
if spoken:
|
||||
lines.append("")
|
||||
for w in spoken[:5]:
|
||||
icon = "🔇" if w.get("kind") == "narration" else "⏱"
|
||||
lines.append(f"{icon} {str(w.get('text', ''))[:160]}")
|
||||
|
||||
if result.notes:
|
||||
lines.append("")
|
||||
lines.extend(f"📏 {n}" for n in result.notes)
|
||||
|
||||
Reference in New Issue
Block a user