Skip to content

Animated options keep their script, play, and are judged on motion (0.7.0) - #108

Merged
umeranjum17 merged 3 commits into
mainfrom
fm/first-draft-keeps-animations-scripts-and-8e
Oct 30, 2026
Merged

umeranjum17 merged 3 commits into
mainfrom
fm/first-draft-keeps-animations-scripts-and-8e

Conversation

@umeranjum17

@umeranjum17 umeranjum17 commented Oct 30, 2026 •

Copy link
Copy Markdown
Owner

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:

  • Options keep their code. The exported page keeps inline <script> and handlers under a CSP that adds only script-src 'unsafe-inline' (still default-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).
  • Playable. The board already serves each option from a separate origin with sandbox allow-scripts and connect-src 'none'; with the script kept, the motion plays there and in Play, and cannot reach the board, its data or the network.
  • Frame capture. render-check captures 4 frames at 390 and 4 at 1280 (0.4, 1.4, 2.6, 4.2 s after load) around the first moving element. make and judge write them to <option>.motion/ (motion.json plus JPEGs). The Studio shows the series and the verdict beside the option.
  • The judge scores motion. When the frames move, the judge gets them and returns critique.motion = { present, score, reason, defects }. A page that does not move gets score: 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.
  • Polish. Each round writes 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).
  • README, the shipped skill, the landing page facts, ENGINE.md and the guide updated; version 0.7.0.

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 pack installed into a scratch prefix, run as the first-draft-axi bin; generator byokit:codex / gpt-6.1-sol, independent judge byokit:claude / claude-sonnet-5-5. Evidence kept under the task's data/first-draft-keeps-animations-scripts-and-8e/.

  1. make with 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.
  2. In the Studio, option 3 plays: $ npm · mid-typing, then three commands typed a few seconds later (browser screenshots); at 390 the board has no sideways scroll.
  3. Each option has 4 frames at 390 and 4 at 1280 in shipwright-N.motion/.
  4. The judge's motion verdict for each option: 7/10 with named defects, e.g. "motion-1280-1 and motion-390-1: the terminal is a blank dark block at 400ms".
  5. polish on 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 calls also fails on unchanged main here (environmental). public references failed 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

…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.
@umeranjum17
umeranjum17 merged commit 7044669 into main Oct 30, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant