Two AI Motion Design (Video Editor > Smart AI) runs were started a few minutes apart from two different boards (Board A at ~11:54 UTC, Board B at ~12:00 UTC), each with its own brief.json saved in its own board folder under greenlight-motion-briefs/. While both agent terminals were working, the user switched between the two boards in the app. Result: each film's pipeline ended up on the WRONG board. Board A's pipeline (frame, 26 step frames, notes, captured site images, storyboard HTML) was created on Board B, with its media uploaded into Board B's folder. Board B's pipeline was initially started on Board A (its assets were later trashed from Board A's folder), and both runs then rebuilt duplicate pipelines once the current board changed back. Board A ended up with 3 copies of the same pipeline; the user had to move 54 elements and delete orphaned duplicate media by hand.
Root cause (from reading the shipped skill code): greenlight-motion/tools/project.mjs board() resolves the target board by calling GET /api/moodboards/current on EVERY tool invocation unless –board is passed. The Smart AI prompt does not pass –board, and the brief.json has no board id field. Worse, boardState() in the same file compares the remembered .board.json boardId with the current one and, when they differ, silently resets state (files: {}, cards: {}) instead of sticking to the remembered board. So a board switch mid-run makes the next tool call (pipeline.mjs, story.mjs, render.mjs, uploads) build a brand-new pipeline on whatever board the user is looking at.
Steps to reproduce
1. On Board A, open Video Editor > Smart AI > AI Motion Design, fill the brief, start (agent terminal 1).
2. Switch to Board B, start another AI Motion Design run (agent terminal 2).
3. Let both run while occasionally switching between the boards.
4. Inspect both boards.
Expected
Each run stays bound to the board its brief was created on for its whole lifetime (brief.json should carry the board id, the Smart AI prompt should pass –board <id>, and .board.json's remembered boardId should win over /api/moodboards/current). If the board cannot be resolved, the tool should stop and ask rather than rebuild elsewhere.
Actual
Pipelines, uploads and cards are written to the currently viewed board; switching boards mid-run moves a film's subsequent output to the other board and creates duplicate pipelines with fresh uploads (old ones orphaned).
Error output
tools/project.mjs board():
if (!id) { const r = await fetch(`${api}/api/moodboards/current`, ...); if (r.ok) id = (await r.json()).id; }
tools/project.mjs boardState():
if (st.boardId !== boardId) Object.assign(st, { boardId, files: {}, cards: {} });
Context
Feature: GL Motion (greenlight-motion skill) board mode, launched from Video Editor > Smart AI > AI Motion Design. Desktop app on Windows 11. brief.json keys: kind, version, source, createdAt, product, film, look, motion, workflow, output (no board id). Two concurrent agent terminals.
Environment
App version: 11.0.1
Platform: Windows 11 (AMD64)
Post a Reply