42 Find the cause of a wrong result
Start with the smallest example that shows the problem. Check a single sampled frame before rendering a whole video. Change one thing, then compare the same time again. This page is a lookup aid, not another set of prerequisites.
42.1 Run three fast semantic checks
Before investigating pixels or a complete movie, check the timeline and object presence. These small probes are executable documentation:
> (scene-duration probe-start) 0
> (scene-duration (scene-wait probe-start 1)) 1
Opacity zero and absence are also different semantic states:
> (scene-state-has? (scene-sample probe-hidden 1) 'dot) #t
> (scene-state-has? (scene-sample probe-removed 1) 'dot) #f
If those facts are already wrong, fix the Scene description before investigating the renderer.
42.2 The program finishes without showing anything
A source file can define and export a Scene without opening a window or writing files. In DrRacket, sample it and turn the result into a Pict, as in See the Scene. For saved output, follow Save frames and make a video.
A zero-duration Scene has no animation interval. scene-add does not add time. Use scene-wait for a still video, or scene-play for a change. A plain slide similarly needs hold-slide or build-slide to give it time.
42.3 The finished object never appears in the movie
An instantaneous addition at the exact end has no following interval to display it. Frame grids normally stop before the exact Scene endpoint. Add a hold after the change rather than inventing a tiny extra movement. See Keep a last picture on screen.
42.4 An object is missing, or its ID is already present
Check both its path and its presence. A child may need '(pair dot) rather than 'dot. A faded-to-zero object still exists; a faded-out object is removed at the endpoint. Native fade-in and create introduce absent objects, so do not add them first. See Hide an object, or remove it.
Remember that a Racket variable may still hold an earlier Visual value. The current Scene is the place to inspect an animated object.
42.5 The wrong thing moves
Distinguish the whole group from one child, and local from world coordinates. In 3D, distinguish a spatial path, the 3D camera, and the enclosing 2D view. A movement route is geometry; a target path is a list of IDs. These are not interchangeable. The worked 2D cases are at Build a small scene.
A graph is built from an axes snapshot. Moving the axes alone does not move the stored curve. See Keep the graph with its axes.
42.6 Two changes happen together when they should not
Ordinary requests in one scene-play share the interval. Use two calls for simple succession, or a direct timed wrapper for an explicit delay. Its local start is not a whole-video timestamp. See Control time and visibility. Two overlapping requests that both write one object’s position conflict; putting them in a different argument order is not a way to resolve the conflict.
Native Scene easing takes (smooth), not the constructor smooth. Slide transitions instead take a symbol such as 'smooth.
42.7 The embedded figure is visible but frozen
Visibility and playback are separate. A slide reveal does not start the embedded animation’s clock. Use play-content, then check its endpoint and the beat’s duration. A content-state is deliberately a frozen checkpoint. See Start its own clock and Keep parts connected across slides.
42.8 The runner refuses the output directory
Gallery and probe runners require a fresh destination so old and new results cannot be mixed. Choose a new directory. Do not delete an earlier review merely to make the command run. Output/cache rules for project rendering are separate; look up the tool you are actually running at Slide command-line tools.
42.9 A build or review reports errors
Read the first failure before the later summary. Passing example tests does not prove that Scribble links are valid. Creating an HTML file does not prove that the documentation checker passed. A Pict/Scene comparison checks two rendering paths; it is not a proof that the layout is attractive or that every frame is correct. Do not raise a tolerance merely to silence an unexplained discrepancy.
For a slide probe report, retain "manifest.json", "index.html", the PNGs, and "stdout.txt"/"stderr.txt". For a manual build, "scribblings/build-manual.py" keeps each stage’s output and exit code under the chosen destination’s "build-logs/" directory. Its "build-report.json" states which stages actually completed.