feat(short): generación y render de Shorts vía shortsmith
Build & Deploy ResearchOwl / build-and-push (push) Successful in 9s

Añade /generate short_en y /short_spec. El pipeline genera un shot spec
con Haiku, verifica cada cifra, fecha y cita contra los chunks de la
sesión, lo renderiza en shortsmith y entrega el MP4 por Telegram junto
a un informe de claims.

- ShortsmithClient con sondeo y fallback al spec JSON si el render falla
- Contrato de plantillas obtenido de GET /templates, no codificado
- Comprobación de fundamento determinista, sin LLM
- outputs.published_url para enlazar el artículo de Ghost
- Normalización de comillas rectas a tipográficas (ver KNOWN-ISSUES.md)

Lo que no aparece en los chunks se contrasta contra el ejemplo del
prompt: si casa ahí es fuga, no invención, y se informa como tal. El
purgado de sesiones se lleva también su MP4.

La subida a YouTube queda fuera a propósito: fase 3.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
ChemaVX
2026-08-01 21:55:42 +00:00
co-authored by Claude Opus 5
parent 8b81ef87e4
commit 20c8d03aa7
27 changed files with 4350 additions and 23 deletions
+137
View File
@@ -0,0 +1,137 @@
{
"version": 1,
"meta": {
"id": "jal1628",
"title": "JAL 1628: Three Radars, One Object, Zero Explanation",
"width": 1080,
"height": 1920,
"fps": 30,
"theme": "exclusion-zone"
},
"audio": {
"preset": "sonar",
"silence": [[31.0, 36.0]]
},
"shots": [
{
"template": "radar_sweep",
"duration": 4.0,
"props": {
"headline": "3 RADARS",
"subline": "1 UNEXPLAINED RETURN",
"contact_bearing_deg": 210,
"sweeps": 2
}
},
{
"template": "track_map",
"duration": 4.0,
"props": {
"headline": "17 NOV 1986",
"subline": "35,000 FT · 600 MPH",
"waypoints": [
{"label": "FORT YUKON", "lat": 66.57, "lon": -145.27},
{"label": "FAIRBANKS", "lat": 64.84, "lon": -147.72},
{"label": "TALKEETNA", "lat": 62.32, "lon": -150.11},
{"label": "ANCHORAGE", "lat": 61.22, "lon": -149.90}
],
"bounds": {"lat_min": 60.4, "lat_max": 67.4, "lon_min": -152.0, "lon_max": -143.5}
}
},
{
"template": "data_card",
"duration": 5.0,
"props": {
"card_title": "FLIGHT CREW",
"rows": [
{"key": "CAPT. KENJU TERAUCHI", "value": "PILOT IN COMMAND"},
{"key": "EX-FIGHTER PILOT", "value": "JASDF"},
{"key": "29 YEARS", "value": "FLYING EXPERIENCE"},
{"key": "10,000+", "value": "FLIGHT HOURS"}
],
"footer": "REPORTS TWO LIGHTS PACING THE AIRCRAFT"
}
},
{
"template": "scale_bars",
"duration": 5.0,
"props": {
"headline": "REPORTED SCALE",
"bars": [
{"label": "BOEING 747", "value": 232, "unit": "FT", "color": "ink"},
{
"label": "ESTIMATED OBJECT",
"value": 2000,
"unit": "FT",
"color": "amber",
"value_label": "~1,600 2,000 FT"
}
],
"quote": ["“TWICE THE SIZE OF", "AN AIRCRAFT CARRIER”"],
"attribution": "— CAPT. TERAUCHI, ESTIMATE"
}
},
{
"template": "orbit_track",
"duration": 6.0,
"props": {
"headline": "EVASIVE MANEUVER",
"subline": "360° TURN · 4,000 FT",
"legend": [
{"label": "JAL 1628", "color": "ink"},
{"label": "UNIDENTIFIED CONTACT", "color": "amber"}
],
"caption": "CONTACT HOLDS RELATIVE POSITION",
"turn_deg": 360
}
},
{
"template": "signal_strips",
"duration": 7.0,
"props": {
"headline": "THREE INDEPENDENT SOURCES",
"strips": [
{
"label": "ONBOARD RADAR",
"sublabel": "CONTACT 78 NM · 10 O'CLOCK",
"markers": [0.26, 0.48, 0.63, 0.81]
},
{
"label": "ANCHORAGE CENTER",
"sublabel": "PRIMARY RETURNS THROUGH TURNS",
"markers": [0.26, 0.48, 0.63, 0.81]
},
{
"label": "ELMENDORF ROCC",
"sublabel": "TRACKED “FLIGHT OF TWO”",
"markers": [0.26, 0.48, 0.63, 0.81]
}
],
"footnote": "FAIRBANKS RADAR: NOTHING"
}
},
{
"template": "document_quote",
"duration": 5.0,
"props": {
"source": "FAA · 5 MARCH 1987",
"label_a": "OFFICIAL FINDING:",
"quote_a": "“SPLIT RADAR IMAGE”",
"label_b": "AARTCC CONTROLLER:",
"quote_b": "“RARELY, IF EVER”",
"tail": "IN THAT AIRSPACE."
}
},
{
"template": "counter_close",
"duration": 6.0,
"props": {
"count_to": 1500,
"count_label": "PAGES OF FAA DOCUMENTATION",
"lines": ["40 YEARS", "STILL OPEN"],
"url": "THEEXCLUSIONZONE.COM",
"show_mark": true
}
}
]
}