Skip to content

Development - #354

Draft
IAnMove wants to merge 278 commits into
mainfrom
development
Draft

Development#354
IAnMove wants to merge 278 commits into
mainfrom
development

Conversation

@IAnMove

@IAnMove IAnMove commented Sep 11, 2026

Copy link
Copy Markdown
Owner

Resumen ejecutivo

Esta primera sección está pensada para project managers y revisores no
técnicos. Mantén el detalle técnico completo más abajo.

Qué cambia

Para qué sirve

Impacto para el usuario

Riesgo

  • Bajo
  • Medio
  • Alto

Estado

  • En desarrollo
  • Listo para revisión
  • Bloqueado por CI o revisión
  • Requiere migración o acción manual

Summary

Overview

Detailed changes

Backend

UI and Wizard

Data, provenance and compatibility

Files and ownership

Validation

  • Date (UTC):

  • Base SHA:

  • Head SHA:

  • Validation scope: focused / fast / CI-equivalent (--full) / real smoke

  • python scripts/verify_clean_repo.py

  • python -m compileall -q app/services app/launch.py scripts

  • Focused Python tests:

  • cd ui && npm run i18n:check

  • UI tests:

  • cd ui && npm run lint -- --max-warnings=0

  • cd ui && npm run build

  • git diff --check

  • E2E/smoke checks:

Code quality

  • Score: pending CI
  • Complexity trend: pending CI
  • Production LOC trend: pending CI
  • Regression versus main: pending CI
  • Ratchet: pending CI

CI and review

Mutable CI/Cursor facts belong in this PR body. Updating them does not
require a new documentary commit. Stable behavior evidence belongs in docs.

  • CI of this HEAD: pending
  • Independent agent review of this HEAD: pending
  • Human merge click (operational, not code review): pending

Cursor/Bugbot — pick exactly one. A review of an older SHA does not cover a
new HEAD. Silence is not approval. If required QA is missing, use another
authorized agent or leave pending; do not assume a human code review will
substitute.

  • Reviewed at current HEAD
  • Earlier review; HEAD has changed since (stale)
  • Pending
  • Unavailable

Coste de la tarea

  • Tests simulados: 0 tokens externos
  • Tests reales: N/A
  • Llamadas LLM externas: 0
  • Tokens de prompt: N/A
  • Tokens de respuesta: N/A
  • Tokens totales: N/A
  • Generaciones de imágenes/audio/vídeo: 0
  • Tiempo transcurrido: N/A
  • Proveedores/modelos: N/A

Notes and limitations

Follow-up work

Checklist

  • The executive summary is understandable without reading the code.
  • The detailed Summary/Overview has not been removed or shortened.
  • Tests and their actual results are recorded.
  • Generated assets, secrets and local-only files are not committed.
  • Required CI and Cursor/Bugbot review are complete, or the PR is clearly
    marked as waiting for them.

IAnMove and others added 30 commits September 11, 2026 08:56
AAC mix was a few milliseconds short of the integer-frame duration and
failed export validation. Pad and trim the mixed audio to the video
length before promoting the artifact.
Give explorer previews an owner/refcount pool with a bounded idle
cache and abort of stale fetches so 20 open/close cycles stay stable
without revoking buffers another view still holds.
Keep resolve/assert helpers below the eslint complexity 15 gate and
narrow the receipt cast so tsc and the E2E webServer build succeed.
…20260911

feat(video3d): exportar e importar plantillas de escenario
…0911

feat(ui): Generación directa y Director en el área principal
…20260911

feat(settings): requisitos y explicación de cada modelo
…le-20260911

fix(picker): bound preview resources and cancel stale loads
…-20260911

ci: cache Python deps and shard tests without weakening CI required
…ames-20260911

fix(video-editor): exact frame accounting in concat exports
Merging #333 added frame-accounting tests that the committed shard
manifest did not list. --group then exited 2, so every PR against
development skipped Python A/B. Assign ungrouped suite files to
python-a and record the Video Editor tests in python-b.
--check-partition still fails on a stale manifest.
…260911

feat(generation): typed generation.video for Wizard and MCP
…20260911

fix(ci): include new pytest modules in shards
…ción

Settings, Director y Generación directa se abrían solo por eventos de
ventana registrados en DirectGenerationWorkspace. Ese panel ya no está
montado en Story Lab, biblioteca ni Director, así que Ajustes no abría
y las producciones de Story/Comics no revelaban Director.

Co-authored-by: ignaciodelcano+dcl <ignaciodelcano+dcl@gmail.com>
mergeKeptSlot solo buscaba slot.sourceUrl. Las pantallas standalone
guardan el vídeo en screen.sourceUrl, así que Conservar mis objetos
dejaba billboards y control rooms en blanco. Importar un plano solo
con pantalla también infería includeAssets=false y recortaba el media.

Co-authored-by: ignaciodelcano+dcl <ignaciodelcano+dcl@gmail.com>
#339 added studio/video generation modules. --group assigns them to
python-a, but test_ci_shards still requires an exact committed partition.
#339 added studio/video generation modules. --group assigns them to
python-a, but test_ci_shards still requires an exact committed partition.
Export used Video3D media into a versioned zip, import with preflight
and picker repair, and refuse templates, cinema runtimes, zip slip and
oversized archives without touching the previous project on failure.
…tory

CI cannot install python-multipart; accept the package as a raw zip body.
Split preflight helpers so complexity stays under the ratchet, copy bytes
before SHA-256 for TypeScript, and record the new scene-package reader.
Split URL/ref/preflight helpers and extract router handlers so no
function stays at complexity 15+ and the service stays under 1200 lines.
…shes

Export looked up packed hashes with (workspace, filename, url), but slots
that only have sourceUrl were rewritten with an empty filename, so the
GLB stayed pointed at the source workspace after a "successful" import.
Also skip dest names whose .meta.json already belongs to another extension.

Co-authored-by: ignaciodelcano+dcl <ignaciodelcano+dcl@gmail.com>
…0 lines

The ratchet treats a new 1,253-line module as a hotspot. Move import,
reassignment and unique-name helpers to scene_packages_import.py.
…rship

Land Cursor #345/#347 on the package branch: do not treat a sibling's
sidecar as this file's hash, and keep empty companion slots on import.
List test_scene_packages.py and generation.video modules in python-a so
test_ci_shards matches the suite after rebase onto development.
Read Activity as request → child jobs → attempts → artifacts. Group by
existing intent/receipt IDs, keep selection stable across SSE/polling,
and let Wizard receipts open the exact group without a second progress source.
Extract stream, panel, compact bar and execution cards so every function
stays at eslint complexity 14 or lower. Refresh the architecture wire
inventory for the ActivityFooter store import in tests.
Activity opened details via agentUiBus and mapped targets via
executionCards. Both belong to Agent Mode; listen through uiBus and
keep the tab map local so the slice-import contract stays empty.
Add a cue timeline for source-time viseme edits and interval reanalysis,
and hash stored GLBs with a workspace SHA-256 so face profiles still save
on HTTP LAN without crypto.subtle.
Extract track, tools and cue fields so no function exceeds complexity 14,
and call reanalyze only after an explicit selection/handler guard.
CueTimeline reused the Listen aria-label and the GLB digest route was
unhandled after boot. Give playback its own copy and stub
/character-kits/speech/digest in the simulated API.
IAnMove and others added 30 commits September 12, 2026 17:02
Cutout planning no longer treats consonants as silence or shuts short
Whisper words for half their duration. Aligned-audio beats stay open
during speech. Tijeral ships Spanish and English scripts, WAVs, and
Video 2.5D shots (shots/ vs shots/en/).
A zero-length closed viseme shared a timestamp with the first spoken
word. rebuild kept the later open frame, so evaluateSceneLayer held
that viseme from t=0 (Nilo open for 6s, Berta for 17s). Rest closed
now starts at t=0. Detect-from-audio no longer applies a dummy plan
when every Whisper unit is empty.

Co-authored-by: ignaciodelcano+dcl <ignaciodelcano+dcl@gmail.com>
Backfill used a Studio selection as playback authority and also cleared
video_stale. After an image rerun the selected take no longer matches the
new start frame, but load, prompt edits, and review persist then let Rejoin
assemble that outdated video.

Keep the selection for playback and leave video_stale for callers that
gate export.

Co-authored-by: ignaciodelcano+dcl <ignaciodelcano+dcl@gmail.com>
…tale-selected' into codex/review-pr406-20260912

# Conflicts:
#	tests/test_director_review.py
Rejoin gated video_stale only on the non-H3 path. MiniMax H3 productions
still assembled playable segments or a Studio selection after the start
image changed, so the joined movie no longer matched the current frame.

Raise the same stale-clip error before the H3 branch.

Co-authored-by: ignaciodelcano+dcl <ignaciodelcano+dcl@gmail.com>
…3-stale-rejoin' into codex/review-pr406-20260912
Fix review persist dropping Approve after notes blur
fix(review): preserve recovered takes and stale-video guards
fix(cut-paper): lipsync Hocus de Tijeral con las voces Qwen
After Approve plus an image rerun the desk re-sends tag_clip:good with
notes. Rejecting that no-op dropped the whole atomic batch. Allow an
already-good tag to be restated while still blocking a new approval of a
missing or stale take.

Co-authored-by: ignaciodelcano+dcl <ignaciodelcano+dcl@gmail.com>
fix(review): keep notes when restating a stale approval
…60913

feat(studio): contextual Series production and reusable phonetic character rigs
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants