fix(short): cerrar el bucle de edición y el desfase spec/vídeo en la subida
Build & Deploy ResearchOwl / build-and-push (push) Successful in 1m17s
Build & Deploy ResearchOwl / build-and-push (push) Successful in 1m17s
Dos huecos de la revisión:
1. /short_spec prometía re-renderizar el spec editado pero no existía el
camino de vuelta. Ahora un .json adjunto se valida contra el contrato
vivo (errores con su ruta verbatim), se re-comprueba el fundamento (la
edición pudo meter una cifra nueva), se guarda como output nuevo y se
renderiza. Sin LLM: este camino es gratis. La sesión sale del nombre
del fichero (short_{id}_spec.json), que Telegram conserva al reenviar.
2. /upload_short podía subir un vídeo viejo con metadatos nuevos: produce
guarda el spec ANTES de renderizar, así que un re-intento con render
fallido deja en disco el MP4 de la vuelta anterior. Ahora se compara el
mtime del vídeo con el created_at del spec y se niega (force lo salta).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
ec3e6d05c0
commit
cc1f0cab93
@@ -40,7 +40,7 @@ OutputGenerator (Ollama)
|
||||
| `/finish` | Stop early, proceed to generation |
|
||||
| `/generate podcast\|blog\|report\|thread` | Generate output |
|
||||
| `/generate short_en` | Vertical Short: shot spec → grounding check → MP4 |
|
||||
| `/short_spec` | Last shot spec as a JSON file, to hand-edit and re-render |
|
||||
| `/short_spec` | Last shot spec as a JSON file; edit it and send it back to re-render free |
|
||||
| `/upload_short` | Upload the rendered Short to YouTube (private, for review) |
|
||||
| `/sources` | List all sources found |
|
||||
| `/cancel` | Cancel current research |
|
||||
@@ -84,6 +84,14 @@ Fallbacks hold throughout: if shortsmith is unreachable, the job errors, or the
|
||||
spec never validates, the spec JSON comes back as a file. The expensive part is
|
||||
the generation, not the render.
|
||||
|
||||
**Hand-editing loop:** `/short_spec` hands you the spec as
|
||||
`short_{session_id}_spec.json`; edit it and send the file back to the bot. It
|
||||
validates against the live contract (errors come back with their exact paths),
|
||||
**re-runs the grounding check** — your edit may have introduced a new figure —
|
||||
saves the edited spec as a new output, and renders. No LLM in that path: it is
|
||||
free. The session comes from the filename, so it works even if the chat has
|
||||
researched something else since.
|
||||
|
||||
Full spec of the phase: `docs/shortsmith-phase2-spec.md`.
|
||||
|
||||
## YouTube (`/upload_short`)
|
||||
@@ -92,7 +100,9 @@ Uploads `/data/shorts/{session_id}.mp4` to the channel with the title from the
|
||||
spec, a description carrying the article link and the sources the Short cites on
|
||||
screen, and tags derived from the topic. The YouTube URL is written back to the
|
||||
output row, so a second `/upload_short` on the same session refuses unless you
|
||||
say `/upload_short force`.
|
||||
say `/upload_short force`. It also refuses if the MP4 on disk is **older than
|
||||
the latest saved spec** — that happens when a spec regeneration's render fails,
|
||||
and uploading would put the new metadata on the old video.
|
||||
|
||||
**Read this before setting it up.** Videos uploaded through `videos.insert` from
|
||||
an **unaudited API project** are [restricted to private viewing
|
||||
|
||||
Reference in New Issue
Block a user