Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 32 additions & 8 deletions WIZARD_AUTOMATION_ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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

Expand Down Expand Up @@ -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
Expand Down
8 changes: 5 additions & 3 deletions docs/development/ARCHITECTURE_FOUNDATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
4 changes: 3 additions & 1 deletion docs/development/DOMAIN_MODEL_AND_ASSET_PROVENANCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
100 changes: 100 additions & 0 deletions docs/development/EXECUTION_BASELINE.md
Original file line number Diff line number Diff line change
@@ -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 `<stem>.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.
7 changes: 5 additions & 2 deletions docs/development/GENERATION_RECORD.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
Loading