Repository navigation
feat(dev): DS-H-07b shot.mjs motion, dpr and video - #1694
Conversation
…ed, --dpr, --wait, --video Failing first: shot.mjs does not know these options yet. Test-First: scripts/dev/shot.test.mjs::--dpr 1.5 writes a png at 1.5x size with a dpr suffix Test-First: scripts/dev/shot.test.mjs::--motion lively stores the motion mode before load Test-First: scripts/dev/shot.test.mjs::--motion calm leaves the app without a stored motion mode Test-First: scripts/dev/shot.test.mjs::--reduced emulates reduced motion Test-First: scripts/dev/shot.test.mjs::--theme dark writes only the dark png Test-First: scripts/dev/shot.test.mjs::--wait delays the screenshot until a late frame is visible Test-First: scripts/dev/shot.test.mjs::--video writes a webm Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Adds --theme, --motion calm|lively|off (stored before load, mirror of motionMode.ts), --reduced, --dpr, --wait and --video. Without the new options, calls and output are unchanged. Test-First: scripts/dev/shot.test.mjs::--dpr 1.5 writes a png at 1.5x size with a dpr suffix Test-First: scripts/dev/shot.test.mjs::--motion lively stores the motion mode before load Test-First: scripts/dev/shot.test.mjs::--motion calm leaves the app without a stored motion mode Test-First: scripts/dev/shot.test.mjs::--reduced emulates reduced motion Test-First: scripts/dev/shot.test.mjs::--theme dark writes only the dark png Test-First: scripts/dev/shot.test.mjs::--wait delays the screenshot until a late frame is visible Test-First: scripts/dev/shot.test.mjs::--video writes a webm Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
No-Test: plan text only Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
BLOCKIERT (review, Root 07:22): two independent free review runs on head b910f48 gave no verdict — Cohere north-mini-code (kilo auto-rejected a tool call the model tried to run), Laguna s-2.1 (empty answer). Per the review gate neither counts. Resume condition: one valid non-Anthropic verdict on b910f48 (retry later when the lanes are quiet, or the Ollama pair after 2026-11-01). The package itself is complete (prepush exit 0, manual proof in the report). |
|
@Cuarroc Dieser PR hat einen Konflikt mit main und kann nicht in die Merge-Queue. Bitte main hineinmergen (kein Rebase, kein Force-Push) und den Konflikt loesen; das Label |
Conflict resolution only: docs/PLAN.md keeps the DS-H-07a row from main and the DS-H-07b row of this PR. No-Test: merge of main, conflict resolution only Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Review R1694-F1: the tab check ran only for the light scheme, so a dark-only run left report.tab null and exited 1. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…scheme Review R1694-F1: with --theme dark the check was skipped and the run failed. Test-First: scripts/dev/shot.test.mjs::--theme dark supports --check-tab Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…c fixture Review R1694-F2: the fixture had a continuously rotating element, so differing PNG bytes did not prove the late change was captured. The fixture is now static with one delayed background flip; the test reads the first pixel with and without --wait. No-Test: adds coverage for existing behaviour (review R1694-F2) Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The earlier Test-First trailer names this test; the rename broke red-first. No-Test: test rename only, behaviour unchanged 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. |
|
@Mergifyio queue |
☑️ This pull request is already queued |
|
Root auto-queue: head 0cbe3f2 unchanged since review-ok, all checks green. @Mergifyio queue |
Merge Queue Status
This pull request spent 14 minutes 16 seconds in the queue, including 13 minutes 44 seconds running CI. Required conditions to merge
|
Conflict in docs/PLAN.md resolved by keeping this PR's rows and taking the new DS-H-07b row from main unchanged. No-Test: merge of main, conflict resolution only Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Das Werkzeug
shot.mjskann jetzt für die Abnahme der Probe-Halle den Bewegungsmodus (Ruhig, Lebendig, Aus), die Bewegungsreduktion des Betriebssystems, 125-%- und 150-%-Skalierung, eine Wartezeit vor dem Bild und ein Video aufnehmen. Ohne die neuen Optionen sind Aufruf und Ausgabe genau wie vorher. Die eigentliche Abnahme (sechs Bilder, zwei Videos) läuft erst, wenn auch die Galerie-Seite (DS-H-07a) da ist.Plan-ID: DS-H-07b
Report
Change (235 changed lines incl. tests, no seam):
scripts/dev/shot.mjs,scripts/dev/shot.test.mjs, new fixturescripts/dev/fixtures/shot-motion.html,scripts/dev/README.md, one new PLAN row (DS-H-07b).Options (all in
--help; none existed before,--themeincluded):--theme light|dark: only that scheme (default both).--motion calm|lively|off: storesprojecta.settings.motionModebefore load (mirror ofsrc/design/motion/motionMode.ts; calm removes the key); PNG name gets-<mode>. The report getsmotionApplied(data-motionon<html>and the liveprefers-reduced-motionmatch per scheme).--reduced: with--motion, emulates OS reduced motion (reducedMotion: "reduce"), name gets-reduced.--dpr <n>(0.5-4):deviceScaleFactor; PNG is n x 1440x900, name gets-dpr<n>.--wait <ms>(0-60000): wait before the screenshot.--video <s>(1-120):recordVideoper scheme, saved as<slug>-<scheme>.webmnext to the PNGs; the file covers load time plus<s>seconds after the shot.Design decision to check: the old script always emulates reduced motion. That stays when
--motionis absent, so existing shots are unchanged. With--motionthe emulation isno-preference(otherwise Lebendig would look like Aus because the OS setting wins in the app);--reducedswitches it back. Hence--reducedalone changes nothing.Red -> green: commit 9e721ed (tests only) was red at the merge base:
node --test scripts/dev/shot.test.mjsfails 7 new tests (unknown options exit 2). Head: all green.bash scripts/ci/red-first.shexit 0 (7Test-Firsttrailers, one per test; the unknown-values test passes on the base too and carries no trailer).Evidence
node --test scripts/dev/shot.test.mjs scripts/lib/dev-shot.test.mjsexit 0, 17/17 pass.bash scripts/ci/gates.sh lane prepushexit 0 (unmasked), worktree = this branch, HEAD b910f48.node scripts/dev/shot.mjs --route /fixture --fixture scripts/dev/fixtures/shot-motion.html --out <tmp> --theme light --motion lively --dpr 1.5 --video 3exit 0.fileon the PNG:PNG image data, 2160 x 1350(= 1.5 x 1440x900). The webm starts with the EBML header; there is noffprobeon the server, so Playwright's bundledffmpeg -igaveDuration: 00:00:04.68 ... Video: vp8, 1440x900, 25 fps(3 s plus about 1.7 s load).Architecture drift: none.
NICHT ABGEDECKT
#[cfg(windows)]tests and a Windows run of the script; the Windows lane runs only in the merge queue.ffprobeon the server; the video duration was read via Playwright's ffmpeg.--waittest compares PNG bytes around a 1.2 s timer in the fixture, so it is timing-based (generous margin: wait 1.6 s).Review: pending, Root commissions (tier B, one independent non-Anthropic reviewer). Author family: Anthropic.
🤖 Generated with Claude Code on the ProjectA server worker
Conflict resolution (18.10.)
origin/mainat f3fb146 (merge commit, no rebase, no force-push). Previous head: b910f48.docs/PLAN.mdonly (one conflict hunk: adjacent rows; kept the DS-H-07a row from main and this PR's DS-H-07b row, wording unchanged, each once).git ls-remotematches).npx vitest run src/design src/i18n: exit 0 (47 files, 248 tests)npm run typecheck: exit 0node scripts/contrast-check.mjs: exit 0node scripts/plan-check.mjs --offline: exit 0git diff origin/main...HEAD --stat: only this PR's 5 files (PLAN.md, scripts/dev/README.md, shot.mjs, shot.test.mjs, fixtures/shot-motion.html)bash scripts/ci/gates.sh lane prepush: first run exit 1, onlyfe-test, two timeouts (Shell.test.tsx,renderBudget.test.tsx) at server load average ~49; both files pass alone (exit 0);--from fe-test lane prepushthen exit 0 (fe-test, hq-test, denkraum, clippy, rust-suite green). Earlier gates were green in the first run.#[cfg(windows)]tests are not covered on Linux, the Windows lane runs in the merge queue.Review round 1 (18.10.)
Reviewer: Codex gpt-6-astra (OpenAI), verdict "approve with conditions"; Root verified and accepted both findings. New head SHA: 0cbe3f2 (
git ls-remotematches).--theme dark --check-tab: the tab check ran only for the light scheme, soreport.tabstayed null and the run exited 1--theme dark supports --check-tab, exit 1 at that commit), fix 1155d56: the check runs on the first captured scheme--waittest did not prove the late change was captured (the fixture had a continuously rotating element)--waitand black with--wait 1600. 0cbe3f2 keeps the historical test name (red-first)Size:
git diff --shortstat origin/main...HEAD: 5 files, 253 insertions, 10 deletions = 263 changed lines (limit 400 for a review fix round).Evidence (all in this worktree, exit codes unmasked)
node --test scripts/dev/shot.test.mjs scripts/lib/dev-shot.test.mjs: exit 0bash scripts/ci/red-first.sh: exit 0 (the new test is red at the red commit, green at head)npm run typecheck: exit 0node scripts/contrast-check.mjs: exit 0node scripts/plan-check.mjs --offline: exit 0bash scripts/ci/gates.sh lane prepush: exit 0git push -u origin claude/ds-h-07bexit 0, verified withgit ls-remote.NICHT ABGEDECKT: unchanged; the
#[cfg(windows)]tests and a Windows run of the script are not covered on Linux, the Windows lane runs in the merge queue. The--waittest is still timing-based (1.2 s timer in the fixture, wait 1.6 s), now with a pixel assertion.Review: pending, Root checks the delta (tier B).
🤖 Generated with Claude Code on the ProjectA server worker
Root review disposition and acceptance (head 0cbe3f2)
Tier B (dev evidence tool
scripts/dev/shot.mjs, no app runtime effect). Author family: Anthropic (Claude Sonnet server job). The reviews come from other families:--theme dark --check-tabalways failed (shot.mjs:167)--waittest passed through a rotating fixture--motiononly sets the global mode; the gallery hall page reads its own mode from the hash (Gallery.tsx:94,102)?page=hall&motion=…&set=…is the agreed DS-H-07a interface. Root's evidence run passes the mode in the route AND--motion/--reducedfor the OS setting. Follow-up: document this in the shot usage text later.plan:syncflip it). Tier B needs one non-author review, and OpenRouter is not used.Conflict merge 637e354 checked by Root: the non-PLAN diff is identical to b910f48; PLAN has only the own row. Size: +253/-10 in 5 files.
Decision: accept. Bound to head 0cbe3f2; a later push voids it.