Repository navigation
Animated options keep their script, play, and are judged on motion (0.7.0) - #108
Merged
umeranjum17 merged 3 commits intoOct 30, 2026
Merged
Conversation
…ion (0.7.0)
A brief that asked for a terminal animation or a pulse was told to write
no script, and the drawn page dropped every script, so the motion was
lost and agents hand-rolled it in the product instead.
- Export keeps inline script and handlers under a CSP that adds only
script-src 'unsafe-inline'; a script with a src is still refused or
drawn once and dropped. Draft and engine contracts ask for real motion.
- render-check captures a 4-frame series at 390 and 1280 around the first
moving element; make and judge write it to <option>.motion/.
- The judge gets the frames and returns motion { score, reason, defects };
a still page gets score null (and a defect when motion was asked for);
decorative loops are capped as defects.
- Polish captures frames per round and refuses a round that loses motion.
- The view lists the frame series and verdict beside the option; the
option already plays in its sandboxed frame origin.
- journeys/motion.mjs drives it through the real CLI with stand-ins.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changed
A brief that asked for motion (a typing terminal, a pulse) was told
no-script, and the drawn page dropped every script, so options never moved and agents hand-rolled the animation in the product. Now:<script>and handlers under a CSP that adds onlyscript-src 'unsafe-inline'(stilldefault-src 'none': nothing loads or is sent, remote images stay blocked, one self-contained file). A<script src>is still refused, or drawn once and dropped when Chrome is present. Logo and redesign stay script-free. Draft and engine contracts now ask for real motion (allow-list:script-kept-inline,script-inline-only,motion-for-real).sandbox allow-scriptsandconnect-src 'none'; with the script kept, the motion plays there and in Play, and cannot reach the board, its data or the network.render-checkcaptures 4 frames at 390 and 4 at 1280 (0.4, 1.4, 2.6, 4.2 s after load) around the first moving element.makeandjudgewrite them to<option>.motion/(motion.jsonplus JPEGs). The Studio shows the series and the verdict beside the option.critique.motion = { present, score, reason, defects }. A page that does not move getsscore: null(plus a defect, and no pass, when the brief asked for motion). A decorative loop is a defect capped at 6; motion below 9 does not pass.round-N.motion/; the polish judge sees the frames; a round that stops moving is not accepted. Owner feedback (--feedback,polish-feedback) works on animated options (proven below).Known limit: on an animated page, the light/dark "same in both themes" check is looser, because the animation alone makes the two captures differ.
UI change
Nav before: Options board, Studio (Both, Desktop, Phone), Play, Fullscreen, Comments, Polish chosen direction
Nav after: Options board, Studio (Both, Desktop, Phone), Play, Fullscreen, Comments, Polish chosen direction
Nothing is removed or renamed; the Studio gains a Motion panel (frames and verdict) beside the option, under the canvas at phone width.
Live proof (packaged CLI)
npm packinstalled into a scratch prefix, run as thefirst-draft-axibin; generatorbyokit:codex/ gpt-6.1-sol, independent judgebyokit:claude/ claude-sonnet-5-5. Evidence kept under the task'sdata/first-draft-keeps-animations-scripts-and-8e/.makewith a brief for a deploy tool whose terminal types the install and deploy commands, with a pulsing live dot: 3 options, each kept its inline script.$ npm ·mid-typing, then three commands typed a few seconds later (browser screenshots); at 390 the board has no sideways scroll.shipwright-N.motion/.polishon option 3 with "Start typing straight away so the terminal is never an empty block, and finish the deploy line within four seconds.": round 1 was accepted, the feedback was judged as kept, its motion score went from 4 to 7, and it still moves (8 frames); screenshots show it playing.Tests
journeys/motion.mjs(new; real CLI with local model and judge stand-ins) passes.npm test: 26 of 28 pass.pooled model callsalso fails on unchangedmainhere (environmental).public referencesfailed once under load and passed when rerun on its own.Checks
outcome: A typing-terminal option made from a brief renders its terminal typing at 390 and 1280 wide: the first 390-wide frame shows the terminal with '$ npm insta' partly typed, the later 390-wide frame shows the three finished command lines, and the 1280-wide frame shows the same three lines with the cursor below.
repro: node journeys/motion.mjs
proof: done-done-verify-first-draft (features/motion-kept-and-judged.md), done-done run 20261030T064523Z-c76d1eab-e43e50 at commit c76d1ea
evidence: 20261030T064523Z-c76d1eab-e43e50/frames/motion-390-1.jpg, 20261030T064523Z-c76d1eab-e43e50/frames/motion-390-4.jpg, 20261030T064523Z-c76d1eab-e43e50/frames/motion-1280-4.jpg