diff --git a/WIZARD_AUTOMATION_ROADMAP.md b/WIZARD_AUTOMATION_ROADMAP.md index ac8c505e..acb16782 100644 --- a/WIZARD_AUTOMATION_ROADMAP.md +++ b/WIZARD_AUTOMATION_ROADMAP.md @@ -493,6 +493,34 @@ Agent Mode complete prematurely. - Two-level task navigation and the embedded Wizard sidebar: landed in #104; keep navigation presentation separate from the factual action runner. +### Post-#137 handoff (#121–#137) + +`main` is at merge #137 (`9ac4cacb`), which includes #135 (`a899a8cc`) and +#138 (`3f14b0e0`). These items from the post-#120 queue are now landed and +must not be re-opened as if pending: + +- Wizard conversation `409` recovery (#122). +- Semantic song/lyrics language (#123). Quoted spans stay literal; UI locale + does not choose content language. +- Series → Comics exact provenance (#124). +- Remove background and Tools upscale (#125, #129, #133). +- Provider-free local validation vs explicit real-media smoke (#130–#132). +- Workflow persist pinned to the source workspace (#134). +- Local MiniMax-Music3 (#135). ACE-Step and Music3 are selectable backends. +- Generation-record v1 (#138). Projection over asset-manifest; not yet wired + into launch writers. +- Lyrics language library (#137). Not yet wired into write-song/generate. + Prefix aliases still need the token follow-up. + +`_launch_runtime.py` is currently free: #140 (Story pending candidate) does +not edit it. Server-side music finalization is phase 5 and remains the next +sequential launch PR. Independent PRs may proceed only when they do not edit +shared hotspots. + +The next queue is the 12-phase wave in +[`docs/development/EXECUTION_BASELINE.md`](docs/development/EXECUTION_BASELINE.md) +and `fase1.md`–`fase12.md`. Every graph arrow requires a merge, not an open PR. + ### Post-#120 handoff (#116–#120) PRs #116 through #120 are merged into `main`, with their required CI checks @@ -517,13 +545,9 @@ whose checks are still running: historical committed baseline. This score is diagnostic, not a CI blocker or quality certificate; the existing ratchet remains the guardrail. -The next queue is deliberately ordered as: Series → Comics exact provenance; -Wizard conversation `409` recovery; semantic song/lyrics fidelity; a second -`useStore` generation slice; Story Lab session-controller extraction; the next -backend domain router; typed Director `PipelineRuntime`; the presentation -decision gate followed by visible Wizard magic; and release validation. The -canonical packet details live in -[`docs/development/SLICE_QUEUE.md`](docs/development/SLICE_QUEUE.md). +The post-#120 queue items for Series → Comics, Wizard `409` recovery and +semantic lyrics language have since landed as #124, #122 and #123. See the +post-#134 handoff above for the live queue. ### Low-cost delegation protocol @@ -554,7 +578,7 @@ chain and missing lyrics are composed into the UI in the requested language. The UI form, not the chat prose, is authoritative for prompts, lyrics and instrumental mode. #119 now binds every step to exact project, cue, candidate, production, task and pipeline IDs and fixes the smoke harness to select the -requested title exactly. Resume the migration at the ordered post-#120 queue +requested title exactly. Resume the migration at the ordered post-#134 queue in `docs/development/SLICE_QUEUE.md`; do not call the quality score a gate and do not claim a future PR or CI run is complete until it is actually complete. Keep Decision gate A open; visible focus/fill/sparkle choreography remains the diff --git a/docs/development/ARCHITECTURE_FOUNDATION.md b/docs/development/ARCHITECTURE_FOUNDATION.md index 05cddcb7..4a8d8a67 100644 --- a/docs/development/ARCHITECTURE_FOUNDATION.md +++ b/docs/development/ARCHITECTURE_FOUNDATION.md @@ -28,9 +28,11 @@ Every entry is classified as behavior, an importable-symbol candidate, an intentional architecture rule, or fragile source inspection. New readers fail the fixture gate until classified and reviewed. -The initial inventory contains 45 Python readers of `_launch_runtime.py`, 13 -Python readers of `useStore.ts`, and 16 UI tests importing the public store -facade. These are measured values, not permanent targets. +The current inventory (`tests/fixtures/architecture_wire_inventory.json` on +`origin/main` at #137) contains **46** readers of `_launch_runtime.py` and +**36** readers of `useStore.ts`. These are measured values, not permanent +targets. The historical snapshot after #100 was 45 / 13 Python plus 16 UI +facade imports; do not treat that older split as the live count. ## WanGP boundary diff --git a/docs/development/DOMAIN_MODEL_AND_ASSET_PROVENANCE.md b/docs/development/DOMAIN_MODEL_AND_ASSET_PROVENANCE.md index 23be656f..db8c689f 100644 --- a/docs/development/DOMAIN_MODEL_AND_ASSET_PROVENANCE.md +++ b/docs/development/DOMAIN_MODEL_AND_ASSET_PROVENANCE.md @@ -53,7 +53,9 @@ will expose registries/read models before any physical file move: The migration must be additive and reversible. No old output is deleted or moved merely because its metadata cannot be upgraded. Remaining work is listed -in `SLICE_QUEUE.md`. +in `SLICE_QUEUE.md`. Generation-record v1 is a **projection** over this +manifest, provenance and job lifecycle; it is not a second scheduler. See +`docs/development/GENERATION_RECORD.md` and `docs/development/EXECUTION_BASELINE.md`. ## Workspace vs output folder diff --git a/docs/development/EXECUTION_BASELINE.md b/docs/development/EXECUTION_BASELINE.md new file mode 100644 index 00000000..2e29e982 --- /dev/null +++ b/docs/development/EXECUTION_BASELINE.md @@ -0,0 +1,100 @@ +# Architecture execution baseline + +Status: living register for the 12-phase wave (`fase1.md`–`fase12.md`). +Verified against `origin/main` **`9ac4cacb`** (2026-09-05). + +This document is the single queue for that wave. Working notes under +`comunicaciones/` are historical evidence only. + +## Authority by datum + +| Datum | Authority | Not authority | +|---|---|---| +| Canonical tasks, job events, wait/cancel | `TaskRegistry` / `app/services/task_manager.py` and the durable generation queue | Generation-record JSON, Activity cards, chat prose | +| Story project, cue, song candidate, production | Story library (`.story-library-v1.json`) and Story domain IDs | Titles, `v1` labels, filenames, Wizard in-memory reports | +| Published bytes and provenance | Adjacent `.meta.json` asset-manifest v1 | Generation-record projection, gallery order | +| Generation attempt lifecycle | **Projection** over asset-manifest + provenance + job lifecycle (`generation-record v1`, #138) | A second scheduler, a second media store | + +`GenerationRecord` does not own GPU workers, file bytes or Story candidates. +Writers stay in the existing stores. Wiring into `_launch_runtime.py` is a +later sequential PR (phases 4–5). + +Workspace **collection** (`workspace_id`) is optional. `output_folder` is the +physical directory name. Do not invent a collection to satisfy a schema. + +## Phase graph + +Each arrow requires the **merge** of the source phase into `origin/main`, not +merely an open PR. + +```text +1 → {2, 3} +3 → 4 → 5 +{2, 4} → 6 +{5, 6} → 7 +4 → 8 +5 → 9 +7 → 10 +{6, 7} → 11 +{3, 7} → 12 +``` + +Hotspot rule: at most one open PR may edit `_launch_runtime.py`, `useStore.ts`, +`agentActions.ts`, `StoryLabPanel.tsx`, or Director/Wizard runtime. Branches +start from current `main`; they are not stacked. + +## Delivery matrix + +Columns are independent. Do not infer merge from CI, or CI from a previous +commit's Cursor review. + +| Entrega | Diseñado | Implementado | Commit | PR | CI del head | Cursor del head | Merge | Validación real | SHA | +|---|---|---|---|---|---|---|---|---|---| +| #135 MiniMax-Music3 | sí | sí | sí | #135 | verde al merge | 5 bugs corregidos en el head mezclado | **sí** `a899a8cc` | no (smoke local aparte) | head `93287183` | +| #138 generation-record v1 | sí | sí (proyección) | sí | #138 | verde al merge | 5 bugs corregidos (`b66ea0a9`) | **sí** `3f14b0e0` | no | head `b66ea0a9` | +| #137 lyrics guard | sí | sí (librería) | sí | #137 | verde al merge | alias `startswith` defectuoso quedó en main | **sí** `9ac4cacb` | no | head `8c696b26` | +| #136 docs cola | sí | sí | `b2bdad47` + este commit | #136 | verificar head nuevo | verificar head nuevo | no | N/A | ver PR | +| #139 lyrics alias tokens | sí (F2.3 parcial) | sí (prefijos) | `a6b7b0ff` | #139 | verde | Bugbot SUCCESS | no | no | `a6b7b0ff` | +| #140 Story song pending | sí (cliente) | sí (pending antes de generate) | `dc63eb5b` | #140 | verde en `dc63eb5b` | hallazgos de `5d513534` corregidos en `dc63eb5b`; Bugbot del head nuevo pendiente | no | no | `dc63eb5b` | + +Stashes (do not apply or delete): `stash@{0}` CI e2e on `test/create_e2e_test`; +`stash@{1}` Hunyuan3D/model3d on `feat/3d-compositor-recipe`. + +Cursor opened `origin/cursor/music-recovery-persistence-6c38` (`ae76c653`) +without a PR. #140 already contains the equivalent persist/reattach fix. +Do not land that branch unless a human compares it with `dc63eb5b`. + +## What #135/#137/#138/#139 still leave open + +Verified on `9ac4cacb` plus the open PR heads. Do not copy old Cursor +findings onto a SHA that already fixed them. + +| Source | Already in tree | Still missing | +|---|---|---| +| #135 | Local ACE-Step + MiniMax-Music3, download, 300s clamp, captions, generate without API key | Server-side song attach; lyrics guard not wired; generation-record not wired | +| #137 | Spanish contamination + bounded CJK/Arabic strip; `[Verse]` allowed | Prefix aliases on main (`English`→es, `en español`→en); empty vocal / unevaluable language / Estonian-as-Spanish; destructive repair-by-default; wiring to generate | +| #138 | Portable generation-record projection; cancel/retry/timing mapping | Empty-list patch semantics; write-point CAS; optional workspace collection; no producer wiring | +| #139 | Token aliases longer than 2 letters | Remaining F2 corpus (empty vocal, unsupported language ≠ ok, protected multiline exact, no destructive default) | +| #140 | Pending `song-…` before generate; sidecar recovery; refuse pending staging | Server finalization without browser (phase 5); launch still blocking POST | + +## Next slices (this wave) + +Mapped onto `fase1.md`–`fase12.md`. Do not open a slice whose arrow is not +merged. + +1. **Phase 1 (this PR)** — this baseline. +2. **Phase 2** — continue #139 after phase 1 merges: unevaluable languages, + exact protected spans, no destructive default. +3. **Phase 3** — generation-record authority after phase 1 merges. +4. **Phase 4** — idempotent music submit (minimal `_launch_runtime.py`). +5. **Phase 5** — server-side music finalization (launch sequential after 4). +6. **Phase 6** — music spec/catalog after 2 and 4 merge. +7. **Phase 7** — async client rehydration after 5 and 6. +8. **Phase 8** — Wizard workflow concurrency after 4. +9. **Phase 9** — Story Music router extract after 5. +10. **Phase 10** — Story session controller after 7. +11. **Phase 11** — Studio music `useStore` slice after 6 and 7. +12. **Phase 12** — visible traceability after 3 and 7. + +Real media smoke remains `bash scripts/run_real_media_smoke.sh` with explicit +confirmation. It is never GitHub Actions. diff --git a/docs/development/GENERATION_RECORD.md b/docs/development/GENERATION_RECORD.md index bd1797c9..12c81b51 100644 --- a/docs/development/GENERATION_RECORD.md +++ b/docs/development/GENERATION_RECORD.md @@ -19,8 +19,11 @@ Python helpers live in `app/services/generation_record.py`. UI types and pure mappers live in `ui/src/lib/generationRecord.ts`. The JSON schema is `generation-record-v1.schema.json`. -This module does not import FastAPI, WanGP or launch. Wiring into -`_launch_runtime.py`, Activity and the Library catalog is a later sequential PR. +This module does not import FastAPI, WanGP or launch. It is not a second +scheduler: TaskRegistry owns tasks/events, the Story library owns +cues/candidates, and asset-manifest v1 owns published bytes. Wiring into +`_launch_runtime.py`, Activity and the Library catalog is a later sequential PR +(see `docs/development/EXECUTION_BASELINE.md`). ## Identity diff --git a/docs/development/SLICE_QUEUE.md b/docs/development/SLICE_QUEUE.md index de8712e8..5f32c2b3 100644 --- a/docs/development/SLICE_QUEUE.md +++ b/docs/development/SLICE_QUEUE.md @@ -11,15 +11,22 @@ Canonical sources in git: - Domain identities: `docs/development/DOMAIN_MODEL_AND_ASSET_PROVENANCE.md` - i18n boy scout: `docs/development/INTERNATIONALIZATION.md` - Architecture contracts: `docs/development/ARCHITECTURE_FOUNDATION.md` +- Execution baseline and 12-phase wave: `docs/development/EXECUTION_BASELINE.md` + and `fase1.md`–`fase12.md` (repo root). Working notes under `comunicaciones/` + are session handoff only. Working notes under `comunicaciones/` are session handoff only. They are gitignored and are not canonical. -## Landed on main (as of #120) +## Landed on main (as of #137) -`main` points at merge #120 (`658a1c3`, 2026-09-03). The queue below records -what is present in that tree; the numbered history is kept so earlier slice -decisions are not rewritten. +`main` points at merge #137 (`9ac4cacb`, 2026-09-05). That commit sits on +#138 (`3f14b0e0`) and #135 (`a899a8cc`). The queue below records what is +present in that tree; the numbered history is kept so earlier slice +decisions are not rewritten. MiniMax-Music3, generation-record v1 and the +lyrics-language library are landed. `_launch_runtime.py`, `useStore.ts` and +`agentActions.ts` are free for **one** sequential PR: durable Story song +identity. Asset-manifest v1 writers: Studio generate (simulated, WGP, H3, SFX), Tools upscale/revoice, Recast/Repaint/Outpaint, MiniMax image, Series assembly, 3D, @@ -151,56 +158,99 @@ prepared branch or an in-progress check with an accepted change. complete router + services per PR (Assets, Music, Series, Comics, …), preserving route-table ordinals. Do not split `_launch_runtime.py` by line count. -10. **Provenance applied by flow** — Studio+Wizard landed (#95), and the - Story song → Director handoff was hardened by #112–#114. Series+Comics - and the final identity checks still remain. 3D+Director already has - folder-vs-Workspace provenance (#89). - -## Next medium PRs after #120 - -Keep these as separate, reviewable slices in this order. Each item has one -verifiable contract and should be prepared only after the previous item's -hotspot and CI state are known. - -1. **Series → Comics exact provenance.** Apply the #119 exact-ID contract to - the remaining cross-domain handoff, preserving project, production, run, - task and output references; never fall back to title lookup after an ID is - returned. -2. **Wizard conversation `409` recovery.** Make concurrent conversation - writes merge/retry safely, preserve turns across workspace changes and - reloads, and add a focused conflict test without hiding a real failure. -3. **Semantic song/lyrics fidelity.** Keep the selected user language for - authored lyrics and preserve quoted-language spans in provider prompts; - add semantic assertions to the opt-in music/video smoke rather than - treating a valid media file as proof of content quality. -4. **Second `useStore` generation slice.** Extract one cohesive remaining - generation/orchestration boundary behind the public facade, with architecture - coverage. Do not move all of `startGeneration` in one PR. -5. **Story Lab session controller.** Continue extracting session/state - coordination from the residual `StoryLabPanel` hotspot through hooks or a - controller, without re-extracting existing tabs, chrome or Assets. -6. **Next backend domain router.** Select one complete domain boundary from - the route inventory, move its router and services together, preserve route - ordinals and keep at most one pending PR on `_launch_runtime.py`. -7. **Typed Director `PipelineRuntime`.** After the human release-order check, - introduce the typed runtime contract and migrate one complete function or - lifecycle at a time; do not split the file by line count. -8. **Decision gate, then visible Wizard magic.** Review the presentation - contract (pace, focus, auto-scroll, reduced motion and interruption) before - expanding the Studio → Video prototype's semantic anchors, field replay and - sparkles to other Labs. -9. **Release validation.** Run the safe full suite, browser Wizard flows, - quality-score comparison and explicitly opt-in local/provider smoke; record - artifact IDs and do not call a branch or CI complete while checks run. +10. **Provenance applied by flow** — Studio+Wizard landed (#95), Story song → + Director was hardened by #112–#114/#119, Series → Comics exact + provenance landed (#124), and generation-record v1 landed as a + portable projection (#138). Remaining identity work is Story music + versions and cue-by-id recovery after the client closes. 3D+Director + already has folder-vs-Workspace provenance (#89). + +## Integrated slices (#121–#134) + +These PRs are merged into `main`. Do not re-plan them. + +- **#121 — documentation after #120:** `0d5b077`. +- **#122 — Wizard conversation `409` recovery:** `98b824a`. Concurrent + conversation writes merge/retry instead of silently overwriting. +- **#123 — semantic song/lyrics language:** `c4e45d2`. Requested lyric + language and quoted spans are preserved; UI locale does not choose content. +- **#124 — Series → Comics exact provenance:** `ecad72d`. Cross-domain + handoff keeps project/production/run/task/output IDs. +- **#125 — remove background Tool:** `020f37e`. +- **#126 — task cost reports:** `08e1adc`. +- **#127 — rich PR template:** `78ed61e`. +- **#129 — Tools image/video upscale:** `df146f2`. +- **#130 — nightly ACE-Step smoke recipe:** `227d0e8`. Uses the local + ACE-Step route, not a MiniMax Music model ID. +- **#131/#132 — local validation vs real smoke:** `94921fb` / `31c0a42`. + `scripts/validate_local.sh` is provider-free; real media is + `scripts/run_real_media_smoke.sh` with explicit confirmation. +- **#133 — Tools upscale worker extract:** `08993d5`. +- **#134 — Wizard workflow persist pinned to source workspace:** `247554a2`. + +## Integrated slices (#135–#137) + +These PRs are merged into `main`. Do not re-plan them. + +- **#135 — local MiniMax-Music3:** `a899a8cc`. ACE-Step and MiniMax-Music3 + are selectable local backends. Wizard download, duration clamp (300s), + caption preservation and local generate-without-API-key landed with the + feature. This was the hotspot PR on `_launch_runtime.py` / `useStore.ts` / + `agentActions.ts`. +- **#138 — generation-record v1:** `3f14b0e0`. Portable projection over + asset-manifest, provenance and job lifecycle. New modules only; wiring + into launch/Activity/Library is still sequential. +- **#137 — lyrics language guard:** `9ac4cacb`. Provider-free Spanish + contamination checks and bounded foreign-script repair. Not yet wired + into write-song/generate. A follow-up must replace prefix aliases + (`English` starts with `es`; `en español` starts with `en`) with exact + aliases plus tokens longer than two letters. + +Open, not landed (verify CI/Cursor on the current head; do not infer merge): + +- **#136 — this PR.** Execution baseline, phase graph and phase files. +- **#139 — lyrics alias tokens** (`a6b7b0ff`). Covers F2.3 prefixes only. +- **#140 — Story pending candidate** (`dc63eb5b`). Client persist-before-generate. + Does not touch `_launch_runtime.py`. Server finalization is phase 5. + +## Next medium PRs after #137 + +Keep these as separate, reviewable slices. Each `faseN.md` is the packet. +Do not open a slice whose graph arrow is not **merged**. + +1. **Phase 1 (this PR)** — execution baseline. Unlock 2 and 3 after merge. +2. **Phase 2** — continue #139: unevaluable languages, exact protected spans, + no destructive default. Library only. +3. **Phase 3** — generation-record authority (projection, CAS, no producers). +4. **Phase 4** — idempotent music submit; sole sequential `_launch_runtime.py` + owner until it merges. +5. **Phase 5** — server-side music finalization (after 4). +6. **Phase 6** — music spec/catalog (after 2 and 4). +7. **Phase 7** — async client rehydration (after 5 and 6). +8. **Phase 8** — Wizard workflow concurrency (after 4). +9. **Phase 9** — Story Music router extract (after 5). +10. **Phase 10** — Story session controller (after 7). +11. **Phase 11** — Studio music `useStore` slice (after 6 and 7). +12. **Phase 12** — visible traceability (after 3 and 7). + +Graph (merge required on every arrow): `1 → {2,3}`; `3 → 4 → 5`; +`{2,4} → 6`; `{5,6} → 7`; `4 → 8`; `5 → 9`; `7 → 10`; `{6,7} → 11`; +`{3,7} → 12`. Details in `docs/development/EXECUTION_BASELINE.md`. ## Residual risks to track separately -- The real smoke produced valid H264/AAC media, but its lyrical content was - semantically generic. Treat that as a content-quality follow-up, not as - evidence that the identity/provenance chain failed. -- Conversation `409` revision conflicts under concurrent writes remain a - separate concurrency investigation; do not fold them into the #119 media - identity acceptance claim. +- The real smoke produced valid H264/AAC media, but lyrical content can still + mix languages or stay generic. Treat that as a content-quality follow-up, + not as evidence that the identity/provenance chain failed. +- Closing the client during local music generation can leave a WAV without a + linked cue/candidate. Server-side finalization is still required. +- #137's prefix alias treats `English` as Spanish and `en español` as + English until #139 (or phase 2) lands. +- Generation-record v1 is a projection, not a second store, and is not + yet wired into launch writers. +- Two local stashes remain unaudited as product work: `stash@{0}` is a CI + workflow addition on `test/create_e2e_test`; `stash@{1}` is Hunyuan3D/ + model3d worker work. Do not apply or delete them without a human. ## Standing rules diff --git a/fase1.md b/fase1.md new file mode 100644 index 00000000..32328752 --- /dev/null +++ b/fase1.md @@ -0,0 +1,58 @@ +# Fase 1 — Estado canónico y reglas de ejecución + +Plan de ejecución basado en la auditoría del 5 de septiembre de 2026. Verificar el código vigente antes de aplicar hallazgos históricos. + +- PR propuesto: `docs/architecture-execution-baseline` → `main`. +- Dependencias: Ninguna. Revisar primero el PR documental #136; actualizarlo si corresponde en lugar de duplicarlo. +- Archivos/módulos propios: fase*.md, docs/development/SLICE_QUEUE.md y documentos canónicos de arquitectura; no código de producción. +- Prohibido: cualquier otro hotspot sin coordinación, launchers, pesos y outputs. +- Riesgo: Bajo. + +## Tareas de implementación + +- [x] F1.1 — Leídos AGENTS.md, planmejora.md, SLICE_QUEUE, CODE_HEALTH, LOCAL_VALIDATION, WIZARD_ACTION_RUNNER, WIZARD_WORKFLOW_RUNTIME, DOMAIN_MODEL_AND_ASSET_PROVENANCE, INTERNATIONALIZATION, GENERATION_RECORD. `comunicaciones/` sólo como evidencia histórica. +- [x] F1.2 — `git fetch origin --prune`. `origin/main` = `9ac4cacb` (merge #137). Stashes `{0}` `{1}` intactos. Workspace en `feat/local-minimax-music3` con `fase*.md` y `outputs/` sin commit. PRs abiertos: #136 `b2bdad47`, #139 `a6b7b0ff`, #140 `dc63eb5b`. Rama Cursor sin PR: `cursor/music-recovery-persistence-6c38` `ae76c653`. +- [x] F1.3 — Matriz en `docs/development/EXECUTION_BASELINE.md`. Columnas independientes; no se infiere merge desde CI. +- [x] F1.4 — #135/#138/#137 mezclados. #139 cubre F2.3 prefijos, no el corpus F2 restante. #140 cubre pending cliente, no finalización servidor. Hallazgos Cursor de SHAs antiguos no se reaplican al head que ya los corrige. +- [x] F1.5 — Cola unificada aquí y en SLICE_QUEUE. Ratchet wrapper y catálogos reutilizados (`scripts/validate_local.sh`, `check_code_health_pr_base.sh`). Fases versionadas en este PR. Sin outputs ni comunicaciones. +- [x] F1.6 — Grafo documentado en EXECUTION_BASELINE.md: merge obligatorio en cada flecha. +- [x] F1.7 — TaskRegistry = tareas/eventos; Story library = cues/candidatos; asset-manifest = bytes publicados; GenerationRecord = proyección, no segundo scheduler. + +## Pruebas y criterio de aceptación + +Comprobar links y diff; verificar estados con GitHub. No ejecutar generaciones para un PR documental. + +Aceptación: Una sola cola vigente, SHA y estados explícitos, fases entregables sin duplicar PRs. + +## Punto de parada + +Puede prepararse 2 y 3 tras integrar esta base. Si #136 ya cubre la fase, documentar evidencia y no abrir otro PR equivalente. + +## Protocolo obligatorio para cada fase + +- [x] Leer fase1.md y esta fase; dependencias: ninguna. #136 ya era el PR documental; se actualiza en lugar de duplicar (`docs/slice-queue-post-134`). +- [x] Inspeccionar cambios locales. Worktree `/tmp/hocus-docs-sync` desde `origin/main` `9ac4cacb`. Stashes `{0}` `{1}` no aplicados. `outputs/` y `comunicaciones/` fuera del PR. +- [x] PRs abiertos: #136 docs, #139 lyrics (no launch), #140 Story pending (no launch). Ningún segundo PR de `_launch_runtime.py` / `useStore.ts` / `agentActions.ts`. Sin ramas apiladas. +- [x] Base SHA `9ac4cacb`. Archivos propios: `fase*.md`, `docs/development/EXECUTION_BASELINE.md`, SLICE_QUEUE, DOMAIN_MODEL, GENERATION_RECORD, WIZARD_AUTOMATION_ROADMAP. Prohibido: launchers, pesos, outputs, WanGP. +- [x] Checkboxes de F1.1–F1.7 marcados con evidencia en EXECUTION_BASELINE.md y este archivo. +- [x] `PYTHON=app/env/bin/python bash scripts/validate_local.sh` OK (contratos 13, UI, lint, build, E2E 7/7). `check_code_health_pr_base.sh` ratchet passed, +0 LOC. `check_documentation_links.py` PASS. +- [x] Add explícito: `fase1.md`–`fase12.md`, `docs/development/EXECUTION_BASELINE.md`, SLICE_QUEUE, DOMAIN_MODEL, GENERATION_RECORD, WIZARD_AUTOMATION_ROADMAP. Sin outputs, comunicaciones, stashes, env. +- [x] Actualiza PR existente #136 (no se abre un segundo PR documental). +- [ ] Esperar CI del último head; resolver fallos atribuibles al cambio. Leer comentarios de Cursor, contrastarlos y corregir con tests. Repetir checks tras fixes; revisión de un commit anterior no acredita el actual. +- [ ] Entregar URL, head/base SHA y estado separado de implementación, CI, Cursor, merge y smoke. No hacer merge ni activar auto-merge. +- [x] No continuar fase 2 ni 3 hasta que esta base esté mezclada. #139/#140 no se duplican. + +## Registro de entrega + +- Base SHA: `origin/main` `9ac4cacb` +- Rama / PR: `docs/slice-queue-post-134` / https://github.com/IAnMove/hocuspocus/pull/136 +- Commit implementado: (este commit de fase 1 sobre #136) +- Tests ejecutados y resultado: documental; `validate_local.sh` + ratchet vs base exacta (sin GPU) +- CI del head: pendiente del push de este commit +- Revisión Cursor (SHA, hallazgos pendientes): pendiente del head nuevo +- Merge en main (lo completa quien lo verifique): no +- Generación real: NO EJECUTADA salvo evidencia manual explícita. +- Bloqueos / siguiente fase elegible: fases 2 y 3 **tras merge** de esta base. #139 y #140 ya abiertos; no duplicar. No continuar 2/3 hasta el merge de fase 1. + +Los checkboxes describen trabajo; los estados de entrega son independientes. No marcar una fase globalmente terminada sólo por abrir su PR. Tests reales requieren autorización manual separada. No son un requisito para abrir el PR y nunca se ejecutan en CI. + diff --git a/fase10.md b/fase10.md new file mode 100644 index 00000000..05079160 --- /dev/null +++ b/fase10.md @@ -0,0 +1,57 @@ +# Fase 10 — Controller de sesión Story + +Plan de ejecución basado en la auditoría del 5 de septiembre de 2026. Verificar el código vigente antes de aplicar hallazgos históricos. + +- PR propuesto: `refactor/story-session-controller` → `main`. +- Dependencias: Fase 7 mezclada; ningún otro PR abierto modifica StoryLabPanel. +- Archivos/módulos propios: StoryLabPanel.tsx y nuevo hook/controller de selección/carga/autosave; tests Story. +- Prohibido: cualquier otro hotspot sin coordinación, launchers, pesos y outputs. +- Riesgo: Medio. + +## Tareas de implementación + +- [ ] F10.1 — Delimitar selección, carga, borradores, autosave/CAS y rehidratación; no reextraer pestañas ni production handoff existentes. +- [ ] F10.2 — Caracterizar cambio de proyecto durante carga/guardado, cambios simultáneos, draft sucio y desmontaje. +- [ ] F10.3 — Extraer unidad cohesiva con dependencias explícitas; conservar facade y contratos de UI. +- [ ] F10.4 — Evitar que callbacks tardíos usen proyecto o carpeta activa nuevos. +- [ ] F10.5 — Mantener copia visible EN/ES sólo en la zona tocada. +- [ ] F10.6 — Comparar acoplamiento y complejidad, sin perseguir una cifra de líneas trasladando el mismo monolito. + +## Pruebas y criterio de aceptación + +Controller sin render cuando sea posible; componentes para transición visible, CAS y errores. + +Aceptación: Sesión testeable fuera del panel, sin pérdidas al cambiar proyecto o recargar. + +## Punto de parada + +Merge antes de otra modificación amplia de StoryLabPanel. + +## Protocolo obligatorio para cada fase + +- [ ] Leer fase1.md y esta fase; comprobar dependencias mezcladas en main remoto. Si el trabajo ya existe, verificarlo y registrar evidencia en lugar de duplicarlo. +- [ ] Inspeccionar cambios locales y logs relevantes al diagnosticar. Trabajar en rama/worktree aislado desde el main actualizado; preservar WIP, stashes y archivos del usuario. +- [ ] Revisar PRs abiertos y sus archivos: máximo un PR por hotspot (_launch_runtime.py, useStore.ts, agentActions.ts, StoryLabPanel o runtime Director/Wizard). No usar ramas apiladas en esta ola. +- [ ] Registrar base SHA, archivos propios/prohibidos y pruebas antes de editar. Aplicar AGENTS.md; no tocar launchers ni código vendor/WanGP salvo paquete posterior explícito. +- [ ] Marcar [x] sólo tras cumplir la tarea y añadir evidencia breve: archivo, comando/resultado o URL/SHA. Un plan o test escrito sin ejecutar no acredita validación. +- [ ] Ejecutar tests focalizados y validación segura pertinente, lint/tipos/build si cambia UI, arquitectura si corresponde y ratchet contra base exacta. No refrescar baseline para ocultar regresiones. +- [ ] Revisar diff y archivos a añadir explícitamente. Nunca incorporar pesos, outputs, secretos, caches, entornos ni comunicaciones. No usar git add indiscriminado. +- [ ] Crear commit y PR hacia main, o actualizar el PR existente correspondiente. Descripción: problema, comportamiento final, alcance, pruebas, riesgos y limitaciones. +- [ ] Esperar CI del último head; resolver fallos atribuibles al cambio. Leer comentarios de Cursor, contrastarlos y corregir con tests. Repetir checks tras fixes; revisión de un commit anterior no acredita el actual. +- [ ] Entregar URL, head/base SHA y estado separado de implementación, CI, Cursor, merge y smoke. No hacer merge ni activar auto-merge. +- [ ] Continuar otra fase sólo si sus dependencias están mezcladas y no comparte hotspot/contrato en cambio. Si no queda trabajo independiente elegible, parar y pedir que se mezclen los PRs concretos. + +## Registro de entrega + +- Base SHA: +- Rama / PR: +- Commit implementado: +- Tests ejecutados y resultado: +- CI del head: +- Revisión Cursor (SHA, hallazgos pendientes): +- Merge en main (lo completa quien lo verifique): +- Generación real: NO EJECUTADA salvo evidencia manual explícita. +- Bloqueos / siguiente fase elegible: + +Los checkboxes describen trabajo; los estados de entrega son independientes. No marcar una fase globalmente terminada sólo por abrir su PR. Tests reales requieren autorización manual separada. No son un requisito para abrir el PR y nunca se ejecutan en CI. + diff --git a/fase11.md b/fase11.md new file mode 100644 index 00000000..ac689119 --- /dev/null +++ b/fase11.md @@ -0,0 +1,57 @@ +# Fase 11 — Slice musical de Studio + +Plan de ejecución basado en la auditoría del 5 de septiembre de 2026. Verificar el código vigente antes de aplicar hallazgos históricos. + +- PR propuesto: `refactor/studio-music-slice` → `main`. +- Dependencias: Fases 6 y 7 mezcladas; reservar useStore.ts. +- Archivos/módulos propios: useStore.ts, nueva slice musical cohesionada, composición tipada y architectureSlices tests. +- Prohibido: cualquier otro hotspot sin coordinación, launchers, pesos y outputs. +- Riesgo: Medio. + +## Tareas de implementación + +- [ ] F11.1 — Elegir sólo selección/configuración/orquestación musical que tenga contrato claro; no mover todo startGeneration. +- [ ] F11.2 — Congelar comportamiento de configuración, restauración, modo vocal/instrumental y selección. +- [ ] F11.3 — Extraer slice que no importe el facade useStore; mantener API pública y composición tipada sin casts evasivos. +- [ ] F11.4 — Consumir catálogo/spec de fase 6, eliminando reglas duplicadas únicamente en esta frontera. +- [ ] F11.5 — Probar restaurar configuración legacy y cambiar modelo sin perder letra o alterar idioma. +- [ ] F11.6 — Dejar parser/reconciliador agentActions para otro PR después del merge; no incluirlo para aprovechar la rama. + +## Pruebas y criterio de aceptación + +Composición, persistencia/restore y contratos de generación musical sin modelos. + +Aceptación: Una responsabilidad musical sale del hotspot manteniendo compatibilidad y sin aumentar complejidad de startGeneration. + +## Punto de parada + +Merge antes de otra slice de useStore. No iniciar automáticamente un refactor global del Wizard. + +## Protocolo obligatorio para cada fase + +- [ ] Leer fase1.md y esta fase; comprobar dependencias mezcladas en main remoto. Si el trabajo ya existe, verificarlo y registrar evidencia en lugar de duplicarlo. +- [ ] Inspeccionar cambios locales y logs relevantes al diagnosticar. Trabajar en rama/worktree aislado desde el main actualizado; preservar WIP, stashes y archivos del usuario. +- [ ] Revisar PRs abiertos y sus archivos: máximo un PR por hotspot (_launch_runtime.py, useStore.ts, agentActions.ts, StoryLabPanel o runtime Director/Wizard). No usar ramas apiladas en esta ola. +- [ ] Registrar base SHA, archivos propios/prohibidos y pruebas antes de editar. Aplicar AGENTS.md; no tocar launchers ni código vendor/WanGP salvo paquete posterior explícito. +- [ ] Marcar [x] sólo tras cumplir la tarea y añadir evidencia breve: archivo, comando/resultado o URL/SHA. Un plan o test escrito sin ejecutar no acredita validación. +- [ ] Ejecutar tests focalizados y validación segura pertinente, lint/tipos/build si cambia UI, arquitectura si corresponde y ratchet contra base exacta. No refrescar baseline para ocultar regresiones. +- [ ] Revisar diff y archivos a añadir explícitamente. Nunca incorporar pesos, outputs, secretos, caches, entornos ni comunicaciones. No usar git add indiscriminado. +- [ ] Crear commit y PR hacia main, o actualizar el PR existente correspondiente. Descripción: problema, comportamiento final, alcance, pruebas, riesgos y limitaciones. +- [ ] Esperar CI del último head; resolver fallos atribuibles al cambio. Leer comentarios de Cursor, contrastarlos y corregir con tests. Repetir checks tras fixes; revisión de un commit anterior no acredita el actual. +- [ ] Entregar URL, head/base SHA y estado separado de implementación, CI, Cursor, merge y smoke. No hacer merge ni activar auto-merge. +- [ ] Continuar otra fase sólo si sus dependencias están mezcladas y no comparte hotspot/contrato en cambio. Si no queda trabajo independiente elegible, parar y pedir que se mezclen los PRs concretos. + +## Registro de entrega + +- Base SHA: +- Rama / PR: +- Commit implementado: +- Tests ejecutados y resultado: +- CI del head: +- Revisión Cursor (SHA, hallazgos pendientes): +- Merge en main (lo completa quien lo verifique): +- Generación real: NO EJECUTADA salvo evidencia manual explícita. +- Bloqueos / siguiente fase elegible: + +Los checkboxes describen trabajo; los estados de entrega son independientes. No marcar una fase globalmente terminada sólo por abrir su PR. Tests reales requieren autorización manual separada. No son un requisito para abrir el PR y nunca se ejecutan en CI. + diff --git a/fase12.md b/fase12.md new file mode 100644 index 00000000..7ce2c828 --- /dev/null +++ b/fase12.md @@ -0,0 +1,59 @@ +# Fase 12 — Trazabilidad visible y cierre de la base + +Plan de ejecución basado en la auditoría del 5 de septiembre de 2026. Verificar el código vigente antes de aplicar hallazgos históricos. + +- PR propuesto: `feat/generation-traceability-views` → `main`. +- Dependencias: Fases 3 y 7 mezcladas; contratos de fase 8 integrados si la UI consume sus cambios. +- Archivos/módulos propios: ProjectsPanel, AssetsPanel, vistas existentes Productions/Runs, ActivityFooter y previews. Elegir una vertical musical; no rediseñar toda la navegación. +- Prohibido: cualquier otro hotspot sin coordinación, launchers, pesos y outputs. +- Riesgo: Medio. + +## Tareas de implementación + +- [ ] F12.1 — Mostrar para una generación musical sus relaciones proyecto/cue/candidato/attempt/task/asset y abrir cada entidad por ID exacto. +- [ ] F12.2 — Consumir estados canónicos: Activity no debe poseer otro ciclo de vida. Conservar orden por evento real y resync. +- [ ] F12.3 — Mostrar prompt original/efectivo, modelo/proveedor, idiomas y tiempos separados; datos legacy ausentes se señalan sin inventarlos. +- [ ] F12.4 — Distinguir temporales internos y assets finales sin perder lineage; no mover ni borrar archivos al listar. +- [ ] F12.5 — Probar previews/selección estable tras recarga y que el input enviado corresponde al asset seleccionado, incluidas respuestas tardías. +- [ ] F12.6 — Verificar formulario Wizard visible, edición manual y reduced motion; no expandir partículas ni coreografía. +- [ ] F12.7 — Preparar checklist manual con SHA para ACE, Music3, cierre de navegador, cancelación, canción→videoclip, imagen/referencia y Tools afectados. No ejecutarlo automáticamente. +- [ ] F12.8 — Registrar pendientes de producto fuera de esta ola: templates, portadas, RhythmMap persistente, primer lifecycle PipelineRuntime, parser/reconciliador y adopciones selectivas de Maestro. Cada uno requiere un nuevo paquete y no queda autorizado por este cierre. + +## Pruebas y criterio de aceptación + +Fixtures de lineage/legacy/temporales, UI/E2E simulado, orden Activity y selección por ID. + +Aceptación: Usuario puede explicar de dónde salió el resultado y recuperar su trabajo; toda validación real pendiente queda explícita. + +## Punto de parada + +Fin de esta ola. Entregar PRs, matriz de evidencia y propuesta de smoke local; esperar merges/validación antes de templates, portadas o refactors adicionales. + +## Protocolo obligatorio para cada fase + +- [ ] Leer fase1.md y esta fase; comprobar dependencias mezcladas en main remoto. Si el trabajo ya existe, verificarlo y registrar evidencia en lugar de duplicarlo. +- [ ] Inspeccionar cambios locales y logs relevantes al diagnosticar. Trabajar en rama/worktree aislado desde el main actualizado; preservar WIP, stashes y archivos del usuario. +- [ ] Revisar PRs abiertos y sus archivos: máximo un PR por hotspot (_launch_runtime.py, useStore.ts, agentActions.ts, StoryLabPanel o runtime Director/Wizard). No usar ramas apiladas en esta ola. +- [ ] Registrar base SHA, archivos propios/prohibidos y pruebas antes de editar. Aplicar AGENTS.md; no tocar launchers ni código vendor/WanGP salvo paquete posterior explícito. +- [ ] Marcar [x] sólo tras cumplir la tarea y añadir evidencia breve: archivo, comando/resultado o URL/SHA. Un plan o test escrito sin ejecutar no acredita validación. +- [ ] Ejecutar tests focalizados y validación segura pertinente, lint/tipos/build si cambia UI, arquitectura si corresponde y ratchet contra base exacta. No refrescar baseline para ocultar regresiones. +- [ ] Revisar diff y archivos a añadir explícitamente. Nunca incorporar pesos, outputs, secretos, caches, entornos ni comunicaciones. No usar git add indiscriminado. +- [ ] Crear commit y PR hacia main, o actualizar el PR existente correspondiente. Descripción: problema, comportamiento final, alcance, pruebas, riesgos y limitaciones. +- [ ] Esperar CI del último head; resolver fallos atribuibles al cambio. Leer comentarios de Cursor, contrastarlos y corregir con tests. Repetir checks tras fixes; revisión de un commit anterior no acredita el actual. +- [ ] Entregar URL, head/base SHA y estado separado de implementación, CI, Cursor, merge y smoke. No hacer merge ni activar auto-merge. +- [ ] Continuar otra fase sólo si sus dependencias están mezcladas y no comparte hotspot/contrato en cambio. Si no queda trabajo independiente elegible, parar y pedir que se mezclen los PRs concretos. + +## Registro de entrega + +- Base SHA: +- Rama / PR: +- Commit implementado: +- Tests ejecutados y resultado: +- CI del head: +- Revisión Cursor (SHA, hallazgos pendientes): +- Merge en main (lo completa quien lo verifique): +- Generación real: NO EJECUTADA salvo evidencia manual explícita. +- Bloqueos / siguiente fase elegible: + +Los checkboxes describen trabajo; los estados de entrega son independientes. No marcar una fase globalmente terminada sólo por abrir su PR. Tests reales requieren autorización manual separada. No son un requisito para abrir el PR y nunca se ejecutan en CI. + diff --git a/fase2.md b/fase2.md new file mode 100644 index 00000000..314607eb --- /dev/null +++ b/fase2.md @@ -0,0 +1,58 @@ +# Fase 2 — Idiomas y texto literal sin reparación destructiva + +Plan de ejecución basado en la auditoría del 5 de septiembre de 2026. Verificar el código vigente antes de aplicar hallazgos históricos. + +- PR propuesto: `fix/lyrics-language-contract` → `main`. +- Dependencias: Fase 1 mezclada. Revisar y continuar #139 si cubre este trabajo; #137 puede estar ya mezclado. +- Archivos/módulos propios: app/services/lyrics_language.py, ui/src/lib/lyricsLanguageGuard.ts, sus tests y docs/development/LYRICS_LANGUAGE.md. +- Prohibido: cualquier otro hotspot sin coordinación, launchers, pesos y outputs. +- Riesgo: Medio. + +## Tareas de implementación + +- [ ] F2.1 — Reproducir con tests puros los defectos que sigan presentes: letra vocal vacía; inglés solicitado como francés; literal obligatorio ausente; reparación de texto chino a vacío; Estonian reconocido como español. +- [ ] F2.2 — Separar resultado válido, inválido y no evaluable. Un idioma sin soporte no puede presentarse como validado. +- [ ] F2.3 — Normalizar etiquetas/alias con reglas explícitas; no usar prefijos libres como startsWith('es'). Conservar variantes regionales y acento cuando sean relevantes. +- [ ] F2.4 — Validar presencia exacta de todos los fragmentos protegidos, incluidos multilineales, sin normalizar espacios, puntuación o Unicode del texto original. +- [ ] F2.5 — Eliminar reparación destructiva por defecto. Devolver propuesta y diferencias; preservar siempre original. No permitir que eliminar contenido produzca una letra vocal válida vacía. +- [ ] F2.6 — Crear un corpus compartido ejecutado por Python y TypeScript: idiomas mixtos autorizados, nombres propios, etiquetas [Verse], letra instrumental, citas solapadas y caracteres no latinos. +- [ ] F2.7 — Documentar que la heurística valida texto, no lo cantado. Mantener separados UI, conversación, contenido, voz y prompt técnico. No cablear todavía a launch ni tocar StoryLabPanel. + +## Pruebas y criterio de aceptación + +Tests Python/TS del corpus, compatibilidad con songLanguage, validación segura del repositorio. + +Aceptación: Ningún caso desconocido o vacío da un falso éxito; ninguna reparación borra silenciosamente texto del usuario. + +## Punto de parada + +Un PR de librería corregida no significa protección activa de Generate. El cableado pertenece a fase 6. + +## Protocolo obligatorio para cada fase + +- [ ] Leer fase1.md y esta fase; comprobar dependencias mezcladas en main remoto. Si el trabajo ya existe, verificarlo y registrar evidencia en lugar de duplicarlo. +- [ ] Inspeccionar cambios locales y logs relevantes al diagnosticar. Trabajar en rama/worktree aislado desde el main actualizado; preservar WIP, stashes y archivos del usuario. +- [ ] Revisar PRs abiertos y sus archivos: máximo un PR por hotspot (_launch_runtime.py, useStore.ts, agentActions.ts, StoryLabPanel o runtime Director/Wizard). No usar ramas apiladas en esta ola. +- [ ] Registrar base SHA, archivos propios/prohibidos y pruebas antes de editar. Aplicar AGENTS.md; no tocar launchers ni código vendor/WanGP salvo paquete posterior explícito. +- [ ] Marcar [x] sólo tras cumplir la tarea y añadir evidencia breve: archivo, comando/resultado o URL/SHA. Un plan o test escrito sin ejecutar no acredita validación. +- [ ] Ejecutar tests focalizados y validación segura pertinente, lint/tipos/build si cambia UI, arquitectura si corresponde y ratchet contra base exacta. No refrescar baseline para ocultar regresiones. +- [ ] Revisar diff y archivos a añadir explícitamente. Nunca incorporar pesos, outputs, secretos, caches, entornos ni comunicaciones. No usar git add indiscriminado. +- [ ] Crear commit y PR hacia main, o actualizar el PR existente correspondiente. Descripción: problema, comportamiento final, alcance, pruebas, riesgos y limitaciones. +- [ ] Esperar CI del último head; resolver fallos atribuibles al cambio. Leer comentarios de Cursor, contrastarlos y corregir con tests. Repetir checks tras fixes; revisión de un commit anterior no acredita el actual. +- [ ] Entregar URL, head/base SHA y estado separado de implementación, CI, Cursor, merge y smoke. No hacer merge ni activar auto-merge. +- [ ] Continuar otra fase sólo si sus dependencias están mezcladas y no comparte hotspot/contrato en cambio. Si no queda trabajo independiente elegible, parar y pedir que se mezclen los PRs concretos. + +## Registro de entrega + +- Base SHA: +- Rama / PR: +- Commit implementado: +- Tests ejecutados y resultado: +- CI del head: +- Revisión Cursor (SHA, hallazgos pendientes): +- Merge en main (lo completa quien lo verifique): +- Generación real: NO EJECUTADA salvo evidencia manual explícita. +- Bloqueos / siguiente fase elegible: + +Los checkboxes describen trabajo; los estados de entrega son independientes. No marcar una fase globalmente terminada sólo por abrir su PR. Tests reales requieren autorización manual separada. No son un requisito para abrir el PR y nunca se ejecutan en CI. + diff --git a/fase3.md b/fase3.md new file mode 100644 index 00000000..29cac36d --- /dev/null +++ b/fase3.md @@ -0,0 +1,60 @@ +# Fase 3 — GenerationRecord: autoridad y proyecciones coherentes + +Plan de ejecución basado en la auditoría del 5 de septiembre de 2026. Verificar el código vigente antes de aplicar hallazgos históricos. + +- PR propuesto: `fix/generation-record-authority` → `main`. +- Dependencias: Fase 1 mezclada; revisar el código integrado de #138 y sus correcciones posteriores. +- Archivos/módulos propios: app/services/generation_record.py, ui/src/lib/generationRecord.ts, schema, tests y documentación de dominio. +- Prohibido: cualquier otro hotspot sin coordinación, launchers, pesos y outputs. +- Riesgo: Medio-alto. + +## Tareas de implementación + +- [ ] F3.1 — Definir relación entre command, workflow, run, generation attempt, task y asset. Un intento puede producir cero o varios assets; no duplicar Run sin justificar su relación. +- [ ] F3.2 — Compatibilizar Workspace como colección opcional con output_folder físico y recursos reutilizables. No fabricar pertenencia a una colección para satisfacer el schema. +- [ ] F3.3 — Elegir y documentar una autoridad de escritura. Preferir proyección de stores existentes; si un registro adicional resulta necesario, especificar propietario, revisión y reconciliación. +- [ ] F3.4 — Corregir equivalencia Python/TS en cancelación, estados desconocidos, retry, fechas y duración. Distinguir solicitud de cancelación de confirmación del worker. +- [ ] F3.5 — Preservar prompt original y efectivo, idiomas, entradas, transformaciones y tiempos de cola/inferencia/total al proyectar y actualizar manifests. +- [ ] F3.6 — Evitar que un patch con listas vacías o campos ausentes borre lineage existente. Definir semántica de merge y demostrar round-trip sin pérdida. +- [ ] F3.7 — Definir recuperación: volver a leer running no acredita worker activo. Representar interrupción o necesidad de reconciliación sin inventar éxito. +- [ ] F3.8 — Si se mantiene store escribible, probar rechazo de actualización obsoleta mediante revisión/CAS en el punto de escritura; un RLock por instancia y rename atómico no bastan. +- [ ] F3.9 — No conectar productores ni migrar físicamente archivos en este PR. + +## Pruebas y criterio de aceptación + +Corpus Python/TS de transiciones y proyecciones; dos escritores; datos legacy y corruptos; cero efectos sobre archivos existentes al leer. + +Aceptación: Contrato compatible, autoridad única definida y actualizaciones sin pérdida de metadata ni sobrescritura obsoleta. + +## Punto de parada + +Mezclar antes de fase 4. No dar por resuelta la recuperación real: todavía falta ejecutar el protocolo. + +## Protocolo obligatorio para cada fase + +- [ ] Leer fase1.md y esta fase; comprobar dependencias mezcladas en main remoto. Si el trabajo ya existe, verificarlo y registrar evidencia en lugar de duplicarlo. +- [ ] Inspeccionar cambios locales y logs relevantes al diagnosticar. Trabajar en rama/worktree aislado desde el main actualizado; preservar WIP, stashes y archivos del usuario. +- [ ] Revisar PRs abiertos y sus archivos: máximo un PR por hotspot (_launch_runtime.py, useStore.ts, agentActions.ts, StoryLabPanel o runtime Director/Wizard). No usar ramas apiladas en esta ola. +- [ ] Registrar base SHA, archivos propios/prohibidos y pruebas antes de editar. Aplicar AGENTS.md; no tocar launchers ni código vendor/WanGP salvo paquete posterior explícito. +- [ ] Marcar [x] sólo tras cumplir la tarea y añadir evidencia breve: archivo, comando/resultado o URL/SHA. Un plan o test escrito sin ejecutar no acredita validación. +- [ ] Ejecutar tests focalizados y validación segura pertinente, lint/tipos/build si cambia UI, arquitectura si corresponde y ratchet contra base exacta. No refrescar baseline para ocultar regresiones. +- [ ] Revisar diff y archivos a añadir explícitamente. Nunca incorporar pesos, outputs, secretos, caches, entornos ni comunicaciones. No usar git add indiscriminado. +- [ ] Crear commit y PR hacia main, o actualizar el PR existente correspondiente. Descripción: problema, comportamiento final, alcance, pruebas, riesgos y limitaciones. +- [ ] Esperar CI del último head; resolver fallos atribuibles al cambio. Leer comentarios de Cursor, contrastarlos y corregir con tests. Repetir checks tras fixes; revisión de un commit anterior no acredita el actual. +- [ ] Entregar URL, head/base SHA y estado separado de implementación, CI, Cursor, merge y smoke. No hacer merge ni activar auto-merge. +- [ ] Continuar otra fase sólo si sus dependencias están mezcladas y no comparte hotspot/contrato en cambio. Si no queda trabajo independiente elegible, parar y pedir que se mezclen los PRs concretos. + +## Registro de entrega + +- Base SHA: +- Rama / PR: +- Commit implementado: +- Tests ejecutados y resultado: +- CI del head: +- Revisión Cursor (SHA, hallazgos pendientes): +- Merge en main (lo completa quien lo verifique): +- Generación real: NO EJECUTADA salvo evidencia manual explícita. +- Bloqueos / siguiente fase elegible: + +Los checkboxes describen trabajo; los estados de entrega son independientes. No marcar una fase globalmente terminada sólo por abrir su PR. Tests reales requieren autorización manual separada. No son un requisito para abrir el PR y nunca se ejecutan en CI. + diff --git a/fase4.md b/fase4.md new file mode 100644 index 00000000..7b651159 --- /dev/null +++ b/fase4.md @@ -0,0 +1,59 @@ +# Fase 4 — Envío musical idempotente antes de ejecutar + +Plan de ejecución basado en la auditoría del 5 de septiembre de 2026. Verificar el código vigente antes de aplicar hallazgos históricos. + +- PR propuesto: `feat/music-submission-contract` → `main`. +- Dependencias: Fase 3 mezclada. Ningún PR abierto puede poseer _launch_runtime.py. +- Archivos/módulos propios: Nuevo servicio musical estrecho en app/services, API musical existente, tests de contrato. Cableado mínimo en app/_launch_runtime.py; no extraer router aún. +- Prohibido: cualquier otro hotspot sin coordinación, launchers, pesos y outputs. +- Riesgo: Alto. + +## Tareas de implementación + +- [ ] F4.1 — Inventariar caminos local/ACE/Music3 y remoto; conservar endpoints y clientes existentes mediante compatibilidad explícita. +- [ ] F4.2 — Definir solicitud con command/idempotency key, proyecto/cue, carpeta, colección opcional, revisión y snapshot inmutable del spec. +- [ ] F4.3 — Reservar y persistir IDs de intento, tarea y candidato antes de aceptar ejecución. Verificar existencia y pertenencia del destino en servidor. +- [ ] F4.4 — Persistir deduplicación atómica: misma clave y payload devuelve el mismo resultado; clave reutilizada con payload distinto devuelve conflicto. +- [ ] F4.5 — Distinguir retransmisión de transporte de nueva versión creativa y retry explícito. Estos últimos generan nuevos intentos con lineage. +- [ ] F4.6 — Responder 202 con referencias y estado consultable sin esperar a inferencia; mantener una vía de compatibilidad documentada. +- [ ] F4.7 — Usar TaskRegistry y scheduler existentes. No introducir infraestructura distribuida, GPU ni descarga de modelos para probarlo. +- [ ] F4.8 — Probar fallo entre reserva y arranque, doble petición concurrente, respuesta perdida y referencia a proyecto inexistente. Nunca resolver por título si ya existe ID. + +## Pruebas y criterio de aceptación + +FastAPI/servicio real con worker falso y almacén temporal; una sola ejecución por clave; ruta y schemas compatibles. + +Aceptación: Toda aceptación queda durable y se puede consultar aunque se pierda la respuesta HTTP. + +## Punto de parada + +Parar para merge antes de fase 5. No abrir simultáneamente otra modificación de launch. + +## Protocolo obligatorio para cada fase + +- [ ] Leer fase1.md y esta fase; comprobar dependencias mezcladas en main remoto. Si el trabajo ya existe, verificarlo y registrar evidencia en lugar de duplicarlo. +- [ ] Inspeccionar cambios locales y logs relevantes al diagnosticar. Trabajar en rama/worktree aislado desde el main actualizado; preservar WIP, stashes y archivos del usuario. +- [ ] Revisar PRs abiertos y sus archivos: máximo un PR por hotspot (_launch_runtime.py, useStore.ts, agentActions.ts, StoryLabPanel o runtime Director/Wizard). No usar ramas apiladas en esta ola. +- [ ] Registrar base SHA, archivos propios/prohibidos y pruebas antes de editar. Aplicar AGENTS.md; no tocar launchers ni código vendor/WanGP salvo paquete posterior explícito. +- [ ] Marcar [x] sólo tras cumplir la tarea y añadir evidencia breve: archivo, comando/resultado o URL/SHA. Un plan o test escrito sin ejecutar no acredita validación. +- [ ] Ejecutar tests focalizados y validación segura pertinente, lint/tipos/build si cambia UI, arquitectura si corresponde y ratchet contra base exacta. No refrescar baseline para ocultar regresiones. +- [ ] Revisar diff y archivos a añadir explícitamente. Nunca incorporar pesos, outputs, secretos, caches, entornos ni comunicaciones. No usar git add indiscriminado. +- [ ] Crear commit y PR hacia main, o actualizar el PR existente correspondiente. Descripción: problema, comportamiento final, alcance, pruebas, riesgos y limitaciones. +- [ ] Esperar CI del último head; resolver fallos atribuibles al cambio. Leer comentarios de Cursor, contrastarlos y corregir con tests. Repetir checks tras fixes; revisión de un commit anterior no acredita el actual. +- [ ] Entregar URL, head/base SHA y estado separado de implementación, CI, Cursor, merge y smoke. No hacer merge ni activar auto-merge. +- [ ] Continuar otra fase sólo si sus dependencias están mezcladas y no comparte hotspot/contrato en cambio. Si no queda trabajo independiente elegible, parar y pedir que se mezclen los PRs concretos. + +## Registro de entrega + +- Base SHA: +- Rama / PR: +- Commit implementado: +- Tests ejecutados y resultado: +- CI del head: +- Revisión Cursor (SHA, hallazgos pendientes): +- Merge en main (lo completa quien lo verifique): +- Generación real: NO EJECUTADA salvo evidencia manual explícita. +- Bloqueos / siguiente fase elegible: + +Los checkboxes describen trabajo; los estados de entrega son independientes. No marcar una fase globalmente terminada sólo por abrir su PR. Tests reales requieren autorización manual separada. No son un requisito para abrir el PR y nunca se ejecutan en CI. + diff --git a/fase5.md b/fase5.md new file mode 100644 index 00000000..de5e7b08 --- /dev/null +++ b/fase5.md @@ -0,0 +1,59 @@ +# Fase 5 — Finalización musical y recuperación sin navegador + +Plan de ejecución basado en la auditoría del 5 de septiembre de 2026. Verificar el código vigente antes de aplicar hallazgos históricos. + +- PR propuesto: `fix/music-server-finalization` → `main`. +- Dependencias: Fase 4 mezclada; reservar launch y servicios de persistencia Story. +- Archivos/módulos propios: Servicio musical, persistencia Story/cues/candidatos, workers existentes y cableado mínimo en _launch_runtime.py. +- Prohibido: cualquier otro hotspot sin coordinación, launchers, pesos y outputs. +- Riesgo: Alto. + +## Tareas de implementación + +- [ ] F5.1 — Finalizar en servidor por IDs reservados: intento → task → bytes → manifest → candidato del cue correcto. +- [ ] F5.2 — Separar producción de bytes de publicación completa. Si falla metadata, conservar el medio y registrar reparación pendiente. +- [ ] F5.3 — Hacer finalización repetible sin duplicar candidato ni asset; persistir progreso de publicación para reconciliar fallos. +- [ ] F5.4 — Medir duración del archivo y guardarla separada de la solicitada. Mantener versión visible independiente del ID. +- [ ] F5.5 — No cambiar automáticamente una selección que el usuario modificó mientras esperaba. Aplicar revisión/precondición o política explícita de selección. +- [ ] F5.6 — Implementar reconciliación de trabajo interrumpido sin regeneración automática costosa: archivo ya producido, metadata pendiente, candidato pendiente o worker ausente. +- [ ] F5.7 — Probar caída después de cada etapa, cancelación contra finalización y dos generaciones del mismo cue. Conservar cambios concurrentes de otros campos. +- [ ] F5.8 — Demostrar con API real y worker falso que terminar sin navegador crea el candidato correcto y que recargar sólo rehidrata. + +## Pruebas y criterio de aceptación + +Integración sin modelos, persistencia real temporal, inyección de fallos, repetición de finalización y cancelación concurrente. + +Aceptación: Cerrar el navegador no pierde relaciones; recuperar no duplica ni adopta otro audio. + +## Punto de parada + +Merge obligatorio antes del cliente de fase 7 o de extraer rutas. Smoke GPU pendiente se registra, no se ejecuta automáticamente. + +## Protocolo obligatorio para cada fase + +- [ ] Leer fase1.md y esta fase; comprobar dependencias mezcladas en main remoto. Si el trabajo ya existe, verificarlo y registrar evidencia en lugar de duplicarlo. +- [ ] Inspeccionar cambios locales y logs relevantes al diagnosticar. Trabajar en rama/worktree aislado desde el main actualizado; preservar WIP, stashes y archivos del usuario. +- [ ] Revisar PRs abiertos y sus archivos: máximo un PR por hotspot (_launch_runtime.py, useStore.ts, agentActions.ts, StoryLabPanel o runtime Director/Wizard). No usar ramas apiladas en esta ola. +- [ ] Registrar base SHA, archivos propios/prohibidos y pruebas antes de editar. Aplicar AGENTS.md; no tocar launchers ni código vendor/WanGP salvo paquete posterior explícito. +- [ ] Marcar [x] sólo tras cumplir la tarea y añadir evidencia breve: archivo, comando/resultado o URL/SHA. Un plan o test escrito sin ejecutar no acredita validación. +- [ ] Ejecutar tests focalizados y validación segura pertinente, lint/tipos/build si cambia UI, arquitectura si corresponde y ratchet contra base exacta. No refrescar baseline para ocultar regresiones. +- [ ] Revisar diff y archivos a añadir explícitamente. Nunca incorporar pesos, outputs, secretos, caches, entornos ni comunicaciones. No usar git add indiscriminado. +- [ ] Crear commit y PR hacia main, o actualizar el PR existente correspondiente. Descripción: problema, comportamiento final, alcance, pruebas, riesgos y limitaciones. +- [ ] Esperar CI del último head; resolver fallos atribuibles al cambio. Leer comentarios de Cursor, contrastarlos y corregir con tests. Repetir checks tras fixes; revisión de un commit anterior no acredita el actual. +- [ ] Entregar URL, head/base SHA y estado separado de implementación, CI, Cursor, merge y smoke. No hacer merge ni activar auto-merge. +- [ ] Continuar otra fase sólo si sus dependencias están mezcladas y no comparte hotspot/contrato en cambio. Si no queda trabajo independiente elegible, parar y pedir que se mezclen los PRs concretos. + +## Registro de entrega + +- Base SHA: +- Rama / PR: +- Commit implementado: +- Tests ejecutados y resultado: +- CI del head: +- Revisión Cursor (SHA, hallazgos pendientes): +- Merge en main (lo completa quien lo verifique): +- Generación real: NO EJECUTADA salvo evidencia manual explícita. +- Bloqueos / siguiente fase elegible: + +Los checkboxes describen trabajo; los estados de entrega son independientes. No marcar una fase globalmente terminada sólo por abrir su PR. Tests reales requieren autorización manual separada. No son un requisito para abrir el PR y nunca se ejecutan en CI. + diff --git a/fase6.md b/fase6.md new file mode 100644 index 00000000..55fb3adc --- /dev/null +++ b/fase6.md @@ -0,0 +1,59 @@ +# Fase 6 — Spec musical y catálogo compartido por modelo + +Plan de ejecución basado en la auditoría del 5 de septiembre de 2026. Verificar el código vigente antes de aplicar hallazgos históricos. + +- PR propuesto: `refactor/music-model-contract` → `main`. +- Dependencias: Fases 2 y 4 mezcladas. Evitar PR concurrente de fase 5 si comparte launch, servicio o contrato; ejecutar después en ese caso. +- Archivos/módulos propios: Servicios/guías musicales, musicModel.ts, catálogo y adapters, router LLM si hace falta; evitar grandes paneles y useStore. +- Prohibido: cualquier otro hotspot sin coordinación, launchers, pesos y outputs. +- Riesgo: Medio. + +## Tareas de implementación + +- [ ] F6.1 — Crear MusicGenerationSpec/Result y guía declarativa reutilizando LanguageIntent y contratos existentes. +- [ ] F6.2 — Distinguir modelo conocido, descargable, incompleto, instalado, compatible, configurado y disponible. Revisar assets obligatorios sin descargar pesos. +- [ ] F6.3 — Declarar modos, duraciones, límites, formato de caption/letra y parámetros por ACE-Step, MiniMax remoto y Music3 local. +- [ ] F6.4 — Compilar spec a solicitud de cada backend; evitar que reglas remotas de 300 caracteres trunquen captions estructurados locales. +- [ ] F6.5 — Aplicar guard de fase 2 en la frontera servidor antes de encolar; mostrar errores estructurados y propuestas sin modificar el original. +- [ ] F6.6 — Conservar modelo pedido; si no está disponible explicar causa. Prohibir fallback silencioso a ACE y respetar enabled/selección explícita. +- [ ] F6.7 — Congelar prompt efectivo, configuración, revisión de guía/modelo e idiomas en la solicitud durable. +- [ ] F6.8 — Probar que UI, Story y Wizard producen specs equivalentes mediante puertos; no introducir templates o portadas. + +## Pruebas y criterio de aceptación + +Fixtures por proveedor, límites, instalación parcial, modelo deshabilitado, idiomas y captions multilínea; ningún proveedor real. + +Aceptación: Un único contrato decide disponibilidad y compilación; validación lingüística activa antes de efectos. + +## Punto de parada + +Mezclar antes de fase 7; no ampliar el catálogo a variantes sin adapter probado. + +## Protocolo obligatorio para cada fase + +- [ ] Leer fase1.md y esta fase; comprobar dependencias mezcladas en main remoto. Si el trabajo ya existe, verificarlo y registrar evidencia en lugar de duplicarlo. +- [ ] Inspeccionar cambios locales y logs relevantes al diagnosticar. Trabajar en rama/worktree aislado desde el main actualizado; preservar WIP, stashes y archivos del usuario. +- [ ] Revisar PRs abiertos y sus archivos: máximo un PR por hotspot (_launch_runtime.py, useStore.ts, agentActions.ts, StoryLabPanel o runtime Director/Wizard). No usar ramas apiladas en esta ola. +- [ ] Registrar base SHA, archivos propios/prohibidos y pruebas antes de editar. Aplicar AGENTS.md; no tocar launchers ni código vendor/WanGP salvo paquete posterior explícito. +- [ ] Marcar [x] sólo tras cumplir la tarea y añadir evidencia breve: archivo, comando/resultado o URL/SHA. Un plan o test escrito sin ejecutar no acredita validación. +- [ ] Ejecutar tests focalizados y validación segura pertinente, lint/tipos/build si cambia UI, arquitectura si corresponde y ratchet contra base exacta. No refrescar baseline para ocultar regresiones. +- [ ] Revisar diff y archivos a añadir explícitamente. Nunca incorporar pesos, outputs, secretos, caches, entornos ni comunicaciones. No usar git add indiscriminado. +- [ ] Crear commit y PR hacia main, o actualizar el PR existente correspondiente. Descripción: problema, comportamiento final, alcance, pruebas, riesgos y limitaciones. +- [ ] Esperar CI del último head; resolver fallos atribuibles al cambio. Leer comentarios de Cursor, contrastarlos y corregir con tests. Repetir checks tras fixes; revisión de un commit anterior no acredita el actual. +- [ ] Entregar URL, head/base SHA y estado separado de implementación, CI, Cursor, merge y smoke. No hacer merge ni activar auto-merge. +- [ ] Continuar otra fase sólo si sus dependencias están mezcladas y no comparte hotspot/contrato en cambio. Si no queda trabajo independiente elegible, parar y pedir que se mezclen los PRs concretos. + +## Registro de entrega + +- Base SHA: +- Rama / PR: +- Commit implementado: +- Tests ejecutados y resultado: +- CI del head: +- Revisión Cursor (SHA, hallazgos pendientes): +- Merge en main (lo completa quien lo verifique): +- Generación real: NO EJECUTADA salvo evidencia manual explícita. +- Bloqueos / siguiente fase elegible: + +Los checkboxes describen trabajo; los estados de entrega son independientes. No marcar una fase globalmente terminada sólo por abrir su PR. Tests reales requieren autorización manual separada. No son un requisito para abrir el PR y nunca se ejecutan en CI. + diff --git a/fase7.md b/fase7.md new file mode 100644 index 00000000..80480067 --- /dev/null +++ b/fase7.md @@ -0,0 +1,58 @@ +# Fase 7 — Cliente asíncrono y selección recuperable + +Plan de ejecución basado en la auditoría del 5 de septiembre de 2026. Verificar el código vigente antes de aplicar hallazgos históricos. + +- PR propuesto: `fix/story-music-rehydration` → `main`. +- Dependencias: Fases 5 y 6 mezcladas. Reservar StoryLabPanel y API UI. +- Archivos/módulos propios: ui/src/api/director.ts y stories.ts, StoryLabPanel/controlador musical, candidatos y tests UI/E2E. +- Prohibido: cualquier otro hotspot sin coordinación, launchers, pesos y outputs. +- Riesgo: Alto. + +## Tareas de implementación + +- [ ] F7.1 — Enviar spec e IDs; consumir aceptación inmediata y seguir task/attempt exacto. No crear candidato sólo al recibir una respuesta final. +- [ ] F7.2 — Rehidratar candidatos del servidor al abrir proyecto, reconectar y recargar. Conservar task_id, asset_id y duración medida. +- [ ] F7.3 — Capturar proyecto/carpeta/revisión al iniciar; una respuesta tardía no debe escribir en el contexto ahora seleccionado. +- [ ] F7.4 — Mostrar valores persistidos y estado real: preparado, aceptado, esperando recurso, ejecutando, cancelación solicitada y terminal. +- [ ] F7.5 — Impedir duplicados con el protocolo servidor; disabled/busy del botón es sólo una ayuda visual. +- [ ] F7.6 — Conservar edición y selección del usuario durante esperas; abrir el resultado por ID y no por título/filename. +- [ ] F7.7 — Probar formulario visible, doble pestaña, respuesta perdida, cambio de proyecto, recarga y audio elegido para Director. + +## Pruebas y criterio de aceptación + +Adapters sin React, tests de componentes y navegador con API/worker simulado. No cargar medios generados reales. + +Aceptación: La UI refleja estado durable y las generaciones sobreviven a desconexión sin duplicación o selección equivocada. + +## Punto de parada + +Parada de aceptación de la base musical: merge y proponer smoke manual local antes de funcionalidades nuevas. + +## Protocolo obligatorio para cada fase + +- [ ] Leer fase1.md y esta fase; comprobar dependencias mezcladas en main remoto. Si el trabajo ya existe, verificarlo y registrar evidencia en lugar de duplicarlo. +- [ ] Inspeccionar cambios locales y logs relevantes al diagnosticar. Trabajar en rama/worktree aislado desde el main actualizado; preservar WIP, stashes y archivos del usuario. +- [ ] Revisar PRs abiertos y sus archivos: máximo un PR por hotspot (_launch_runtime.py, useStore.ts, agentActions.ts, StoryLabPanel o runtime Director/Wizard). No usar ramas apiladas en esta ola. +- [ ] Registrar base SHA, archivos propios/prohibidos y pruebas antes de editar. Aplicar AGENTS.md; no tocar launchers ni código vendor/WanGP salvo paquete posterior explícito. +- [ ] Marcar [x] sólo tras cumplir la tarea y añadir evidencia breve: archivo, comando/resultado o URL/SHA. Un plan o test escrito sin ejecutar no acredita validación. +- [ ] Ejecutar tests focalizados y validación segura pertinente, lint/tipos/build si cambia UI, arquitectura si corresponde y ratchet contra base exacta. No refrescar baseline para ocultar regresiones. +- [ ] Revisar diff y archivos a añadir explícitamente. Nunca incorporar pesos, outputs, secretos, caches, entornos ni comunicaciones. No usar git add indiscriminado. +- [ ] Crear commit y PR hacia main, o actualizar el PR existente correspondiente. Descripción: problema, comportamiento final, alcance, pruebas, riesgos y limitaciones. +- [ ] Esperar CI del último head; resolver fallos atribuibles al cambio. Leer comentarios de Cursor, contrastarlos y corregir con tests. Repetir checks tras fixes; revisión de un commit anterior no acredita el actual. +- [ ] Entregar URL, head/base SHA y estado separado de implementación, CI, Cursor, merge y smoke. No hacer merge ni activar auto-merge. +- [ ] Continuar otra fase sólo si sus dependencias están mezcladas y no comparte hotspot/contrato en cambio. Si no queda trabajo independiente elegible, parar y pedir que se mezclen los PRs concretos. + +## Registro de entrega + +- Base SHA: +- Rama / PR: +- Commit implementado: +- Tests ejecutados y resultado: +- CI del head: +- Revisión Cursor (SHA, hallazgos pendientes): +- Merge en main (lo completa quien lo verifique): +- Generación real: NO EJECUTADA salvo evidencia manual explícita. +- Bloqueos / siguiente fase elegible: + +Los checkboxes describen trabajo; los estados de entrega son independientes. No marcar una fase globalmente terminada sólo por abrir su PR. Tests reales requieren autorización manual separada. No son un requisito para abrir el PR y nunca se ejecutan en CI. + diff --git a/fase8.md b/fase8.md new file mode 100644 index 00000000..191a0615 --- /dev/null +++ b/fase8.md @@ -0,0 +1,58 @@ +# Fase 8 — Concurrencia y límites del workflow Wizard + +Plan de ejecución basado en la auditoría del 5 de septiembre de 2026. Verificar el código vigente antes de aplicar hallazgos históricos. + +- PR propuesto: `fix/wizard-workflow-concurrency` → `main`. +- Dependencias: Fase 4 mezclada; puede adelantarse sólo sin conflicto de backend. No otro PR abierto en runtime Wizard. +- Archivos/módulos propios: wizardWorkflowRuntime.ts, wizard_workflows.py, contratos y tests; API mínima si procede. +- Prohibido: cualquier otro hotspot sin coordinación, launchers, pesos y outputs. +- Riesgo: Alto. + +## Tareas de implementación + +- [ ] F8.1 — Caracterizar dos clientes avanzando/respondiendo/cancelando el mismo workflow y eventos duplicados o fuera de orden. +- [ ] F8.2 — Sustituir resolución del mismo workflow por reloj updatedAt con precondiciones de revisión/paso y conflicto explícito o merge semántico acotado. +- [ ] F8.3 — Asegurar que la exclusión no dependa sólo de una Promise local al navegador; adquisición/validación de paso debe estar en la autoridad definida. +- [ ] F8.4 — Crear y validar comando antes del efecto cuando se migre un paso; preservar execution key y resultado durable. +- [ ] F8.5 — Versionar definiciones/checkpoints y describir qué ocurre con versiones antiguas o incompatibles. +- [ ] F8.6 — Definir claramente pasos server-side y pasos de presencia/UI. No migrar todo el motor a servidor en este PR. +- [ ] F8.7 — Probar workspace fuente durante conflictos, awaiting_input repetido, cancelar/completar y reapertura con eventos retenidos/resync. + +## Pruebas y criterio de aceptación + +Dos instancias de runtime, store temporal, CAS, fixtures de checkpoints antiguos y eventos canónicos. + +Aceptación: Dos clientes no pierden cambios ni ejecutan dos veces un paso costoso; límites de ejecución sin navegador documentados. + +## Punto de parada + +Si requiere rediseñar todo el motor, parar con propuesta concreta; no ampliar silenciosamente este PR. + +## Protocolo obligatorio para cada fase + +- [ ] Leer fase1.md y esta fase; comprobar dependencias mezcladas en main remoto. Si el trabajo ya existe, verificarlo y registrar evidencia en lugar de duplicarlo. +- [ ] Inspeccionar cambios locales y logs relevantes al diagnosticar. Trabajar en rama/worktree aislado desde el main actualizado; preservar WIP, stashes y archivos del usuario. +- [ ] Revisar PRs abiertos y sus archivos: máximo un PR por hotspot (_launch_runtime.py, useStore.ts, agentActions.ts, StoryLabPanel o runtime Director/Wizard). No usar ramas apiladas en esta ola. +- [ ] Registrar base SHA, archivos propios/prohibidos y pruebas antes de editar. Aplicar AGENTS.md; no tocar launchers ni código vendor/WanGP salvo paquete posterior explícito. +- [ ] Marcar [x] sólo tras cumplir la tarea y añadir evidencia breve: archivo, comando/resultado o URL/SHA. Un plan o test escrito sin ejecutar no acredita validación. +- [ ] Ejecutar tests focalizados y validación segura pertinente, lint/tipos/build si cambia UI, arquitectura si corresponde y ratchet contra base exacta. No refrescar baseline para ocultar regresiones. +- [ ] Revisar diff y archivos a añadir explícitamente. Nunca incorporar pesos, outputs, secretos, caches, entornos ni comunicaciones. No usar git add indiscriminado. +- [ ] Crear commit y PR hacia main, o actualizar el PR existente correspondiente. Descripción: problema, comportamiento final, alcance, pruebas, riesgos y limitaciones. +- [ ] Esperar CI del último head; resolver fallos atribuibles al cambio. Leer comentarios de Cursor, contrastarlos y corregir con tests. Repetir checks tras fixes; revisión de un commit anterior no acredita el actual. +- [ ] Entregar URL, head/base SHA y estado separado de implementación, CI, Cursor, merge y smoke. No hacer merge ni activar auto-merge. +- [ ] Continuar otra fase sólo si sus dependencias están mezcladas y no comparte hotspot/contrato en cambio. Si no queda trabajo independiente elegible, parar y pedir que se mezclen los PRs concretos. + +## Registro de entrega + +- Base SHA: +- Rama / PR: +- Commit implementado: +- Tests ejecutados y resultado: +- CI del head: +- Revisión Cursor (SHA, hallazgos pendientes): +- Merge en main (lo completa quien lo verifique): +- Generación real: NO EJECUTADA salvo evidencia manual explícita. +- Bloqueos / siguiente fase elegible: + +Los checkboxes describen trabajo; los estados de entrega son independientes. No marcar una fase globalmente terminada sólo por abrir su PR. Tests reales requieren autorización manual separada. No son un requisito para abrir el PR y nunca se ejecutan en CI. + diff --git a/fase9.md b/fase9.md new file mode 100644 index 00000000..a06829b2 --- /dev/null +++ b/fase9.md @@ -0,0 +1,57 @@ +# Fase 9 — Extracción mecánica del router Story Music + +Plan de ejecución basado en la auditoría del 5 de septiembre de 2026. Verificar el código vigente antes de aplicar hallazgos históricos. + +- PR propuesto: `refactor/story-music-router` → `main`. +- Dependencias: Fase 5 mezclada y todo cableado musical de fase 6 que toque launch integrado. +- Archivos/módulos propios: app/_launch_runtime.py, nuevo router Story Music y servicio asociado; fixtures de arquitectura revisadas. +- Prohibido: cualquier otro hotspot sin coordinación, launchers, pesos y outputs. +- Riesgo: Medio. + +## Tareas de implementación + +- [ ] F9.1 — Inventariar las cuatro rutas stories/music-candidates y sus dependencias reales, además de la compatibilidad con el protocolo nuevo. +- [ ] F9.2 — Congelar tests de comportamiento, método/path/status/schema y orden de montaje. +- [ ] F9.3 — Extraer router y servicio con dependencias explícitas, sin importar launch desde el servicio. +- [ ] F9.4 — Conservar compatibilidad y ordinals; no incluir trim/mix/analyze, otro dominio ni cambios funcionales. +- [ ] F9.5 — Revisar cada cambio de fixture: regenerarla no demuestra corrección. +- [ ] F9.6 — Verificar muro WanGP, cancelación, consulta y errores con dependencias falsas. + +## Pruebas y criterio de aceptación + +Architecture contracts, route table y pruebas de dominio/API sin modelos. + +Aceptación: Mismo comportamiento público; launch reduce responsabilidad y el dominio se importa aisladamente. + +## Punto de parada + +Merge antes de cualquier otro router en launch. Routers siguientes requieren paquete propio. + +## Protocolo obligatorio para cada fase + +- [ ] Leer fase1.md y esta fase; comprobar dependencias mezcladas en main remoto. Si el trabajo ya existe, verificarlo y registrar evidencia en lugar de duplicarlo. +- [ ] Inspeccionar cambios locales y logs relevantes al diagnosticar. Trabajar en rama/worktree aislado desde el main actualizado; preservar WIP, stashes y archivos del usuario. +- [ ] Revisar PRs abiertos y sus archivos: máximo un PR por hotspot (_launch_runtime.py, useStore.ts, agentActions.ts, StoryLabPanel o runtime Director/Wizard). No usar ramas apiladas en esta ola. +- [ ] Registrar base SHA, archivos propios/prohibidos y pruebas antes de editar. Aplicar AGENTS.md; no tocar launchers ni código vendor/WanGP salvo paquete posterior explícito. +- [ ] Marcar [x] sólo tras cumplir la tarea y añadir evidencia breve: archivo, comando/resultado o URL/SHA. Un plan o test escrito sin ejecutar no acredita validación. +- [ ] Ejecutar tests focalizados y validación segura pertinente, lint/tipos/build si cambia UI, arquitectura si corresponde y ratchet contra base exacta. No refrescar baseline para ocultar regresiones. +- [ ] Revisar diff y archivos a añadir explícitamente. Nunca incorporar pesos, outputs, secretos, caches, entornos ni comunicaciones. No usar git add indiscriminado. +- [ ] Crear commit y PR hacia main, o actualizar el PR existente correspondiente. Descripción: problema, comportamiento final, alcance, pruebas, riesgos y limitaciones. +- [ ] Esperar CI del último head; resolver fallos atribuibles al cambio. Leer comentarios de Cursor, contrastarlos y corregir con tests. Repetir checks tras fixes; revisión de un commit anterior no acredita el actual. +- [ ] Entregar URL, head/base SHA y estado separado de implementación, CI, Cursor, merge y smoke. No hacer merge ni activar auto-merge. +- [ ] Continuar otra fase sólo si sus dependencias están mezcladas y no comparte hotspot/contrato en cambio. Si no queda trabajo independiente elegible, parar y pedir que se mezclen los PRs concretos. + +## Registro de entrega + +- Base SHA: +- Rama / PR: +- Commit implementado: +- Tests ejecutados y resultado: +- CI del head: +- Revisión Cursor (SHA, hallazgos pendientes): +- Merge en main (lo completa quien lo verifique): +- Generación real: NO EJECUTADA salvo evidencia manual explícita. +- Bloqueos / siguiente fase elegible: + +Los checkboxes describen trabajo; los estados de entrega son independientes. No marcar una fase globalmente terminada sólo por abrir su PR. Tests reales requieren autorización manual separada. No son un requisito para abrir el PR y nunca se ejecutan en CI. +