Repository navigation
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1b611ca8aa
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| exe = Path(python).resolve() | ||
| paths.external_path(exe, checkout) | ||
| result = subprocess.run([str(exe), '-c', 'import spritemotion; print(spritemotion.__file__)'], |
There was a problem hiding this comment.
Preserve the virtualenv interpreter path when validating imports
On Linux/macOS, the environment created by python -m venv normally uses a symlink for bin/python. Resolving that symlink here and executing its target invokes the base interpreter without the virtualenv's site-packages, so startup rejects a correctly installed checkout environment (or checks an unrelated base installation). This blocks the updated shell launchers and direct pipeline/studio startup after normal setup. Validate the physical path separately, but run the import check through the original virtualenv interpreter path.
Useful? React with 👍 / 👎.
| status.update(state='failed', error='Generated derivatives expired; retained inputs/settings/scene can rebuild.') | ||
| p.write_text(json.dumps(status, indent=2), encoding='utf-8') |
There was a problem hiding this comment.
Preserve completion ordering when marking derivatives expired
When eligible jobs expire, rewriting status.json gives them a fresh mtime, but subsequent retention passes use that same mtime to determine the newest finished jobs. Expired jobs therefore displace the jobs whose outputs were supposed to be retained. With keep=1 and two jobs older than the age threshold, the first prune removes the older job's VD and the immediately following prune removes the newer job's VD, leaving neither retained. Preserve the original completion timestamp or otherwise prevent cleanup updates from changing retention ordering.
Useful? React with 👍 / 👎.
| with staging_store(out).session() as store: | ||
| return _stage(vd,client,body,out,store) |
There was a problem hiding this comment.
Protect the selected VD source during staging retention
When staging a finished job that is older than the retention threshold and outside the newest-job allowance, entering this session prunes the source job before _stage reads its VD. The Studio's animation-only /api/stage path passes job/item.vd and job/staged-client here, so the requested import deletes its own source and then raises FileNotFoundError. Protect the source job during the session, as the equipment-staging path already does.
Useful? React with 👍 / 👎.
Content jobs and checkout setup could grow indefinitely or fall back to generating files inside a checkout. Add configurable external-store limits and finished-job retention, while preserving inputs, editable scenes, active/queued jobs and protected files. Producers reserve large copies/packages and stop monitored child processes at the byte limit. Setup uses external environments, canonical inputs and Godot storage; launchers validate physical paths and the exact editable install.
Rebuild pin creation and the full retention selection/deletion pass share an exclusive store lock. The pin body releases the lock so create/render/merge sessions can proceed safely. Deterministic barriers cover both orderings; the previous implementation fails the late-pin controls.
This PR is stacked on #34: base work/SM-GLB5-director at 1ffc72e. Exact reviewed head: 1b611ca. It keeps #34's approved scope unchanged. Integrate #34 first, then retarget this PR to main for owner approval; no agent merge or direct trunk push.
Validation at the exact head:
Limits and configuration: