Repository navigation
Export a uo-content job as a transfer artifact (SM-XPORT1) - #25
Conversation
tools/transfer-export/run.py reads a finished job (read only), crops each rendered frame to its alpha bounding box, writes transfer.json and the cropped PNGs, then reads the result back with spritemotion.transfer.read. Fields the job does not record are left out. Docs gain "Making one". Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
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: 977c9b6c15
ℹ️ 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".
| if mode == "full" and any(e["directions"] != [0, 1, 2, 3, 4] for e in actions.values()): | ||
| raise ExportError("The job's mode is full but an action is missing stored directions; rebuild it.") |
There was a problem hiding this comment.
Reject incomplete action sets labeled as full
When a job explicitly uses mode: "full" with a subset of actions—which tools/uo-content/pipeline.py permits—this check only verifies that each present action has directions 0–4. The exporter therefore emits coverage: "full" even when actions 0–34 are missing, allowing GUO's coverage gate to accept an artifact that leaves the wearable absent during omitted game actions. Require the complete action set, or use the validation report's full_animation_set, before declaring full coverage.
Useful? React with 👍 / 👎.
| for source, digest in (spec.get("source_fingerprints") or {}).items(): | ||
| hashes[f"source/{Path(source.replace(chr(92), '/')).name}"] = digest |
There was a problem hiding this comment.
Preserve hashes for same-named source files
When a supported asset-pack job contains source files from different directories with the same basename, both fingerprints map to the same source/<basename> key and the later digest silently overwrites the earlier one. The resulting artifact remains schema-valid but no longer records all inputs needed for reproducibility; generate collision-safe labels rather than keying solely by basename.
Useful? React with 👍 / 👎.
SM-XPORT1, accepted by spritemotion-director at 977c9b6 on main 1386e86.
tools/transfer-export/run.pyexports a uo-content build job as a transfer artifact (schema v1, accepted by GUO's director), read back throughspritemotion.transfer.🤖 Generated with Claude Code