A little desk. Promises we can check.
We want artists to spend their attention on a bunny’s next expression. Ours goes into the changes that bring it safely home. TestSprite explores the live app; our own browser and file checks help us read the evidence closely.
Ledger updated
A heart, in pixels and in words.

A canvas can be difficult to read from the outside. Our Canvas readout gives a screen reader a quiet account of the frame: its size, layers, painted pixels and colors. It gives a browser test something precise to check, too.
A separate Heart recipe adds a pale pink background: 256 painted pixels in three colors. A controlled cloud replay compares the readout with a literal pixel design and the actual exported PNG, then checks Undo and Redo. It passed on the fixing preview; its dated receipt is linked below.
Draw this little heart →Small promises, looked after.
A quiet desk is made of little things you can trust. Here is what a failure asked us to look at, and what we did next.
Controlled preview passed · automatic PR run pending
Bun gets to keep its colors.
A tool for shaping light should leave an artist’s paint alone.
A TestSprite journey sent us to the Normal Chisel. Its setup had the wrong kind of layer. Trying the toolbar on Bun’s ordinary drawing revealed a green patch where the coat had been: surface-map colors had reached the paint.
The surface panel already knew that boundary. The canvas now checks it before a stroke touches pixels or history, and offers a small instruction. The corrected cloud test failed on production; a controlled replay on the fixing preview preserved the artwork and passed.
Exact artwork, history and refusal assertions on an explicitly checked preview origin. The automatic PR suite remains pending.
Controlled preview passed · automatic PR run pending
A lock should keep its promise.
Some pixels are finished for today. The padlock should look after them.
We asked TestSprite to select part of Bun, prove Delete worked, and bring it back with Undo. Then it selected again and locked the layer. Delete still erased it: the cloud comparison found 768 changed RGBA channels after the lock was on.
Drawing tools checked the lock; selection edits had another route in. The repair checks the live layer before destructive selection operations and keeps a refused floating paste available. The same exact-pixel cloud assertion now passes on the fixing preview. Bun’s selected pixels stay put.
Real marquee and keyboard Delete, observed lock control, unlocked sensitivity and exact Undo restoration. Controlled replay pinned the actual preview origin and full fixing source; automatic PR execution and production release remain separate.
Controlled preview passed · automatic PR run pending
Every color has a way back.
A keyboard user should come back to the control that welcomed them in.
The Colors journey moved among real palette swatches, chose foreground and background separately, then pressed Escape. The flyout closed, but focus went to a different swatches button. The same cloud check and local browser regressions reproduced it for the color wells.
The flyout had one fixed return address even though three controls could open it. It now remembers the actual opening button. All three opener regressions pass in Chromium, Firefox and WebKit; the same strict cloud scenario now passes on the fixing preview.
The controlled cloud scenario opens from Primary, chooses both colors and checks exact focus return with protected artwork. Three-browser production cases separately cover Primary, Secondary and the dedicated swatches opener. Automatic PR execution and production release remain separate.
A few more things that held.
These saved-script cloud replays passed on the source named below, with auto-heal disabled. Each link opens its dated TestSprite execution. They are separate from the automatic PR ledger.
A drawing that really leaves the desk.
A real native-scale PNG download decoded independently and matched all 1,024 canvas channels.
Passed cloud replay →Source 92de6c74 · v-afa1b62983af
A little pause, kept.
Two frame holds, a change to 150 ms, Undo to 100 and Redo to 150, with exact artwork preserved.
Passed cloud replay →Source 92de6c74 · v-6e218f037ed0
The parcel opens somewhere new.
A downloaded two-frame, two-layer backup reopened in a fresh browser; layers, holds, palette and clip checked, then edited and undone. Browser download fallback only.
Passed cloud replay →Source 92de6c74 · v-b20bf08e43d6
A palette is an invitation.
All 12 ordered Sakura Night colors checked; browsing preserves the foreground, an explicit swatch chooses it, and the drawing stays unchanged.
Passed cloud replay →Source 92de6c74 · v-478c1fe74b04
This pause belongs to this clip.
Actual project archives establish inclusive clip bounds and refusal of a backward range while frame identities, holds and decoded pixels stay unchanged. Playback/export ranges remain separate.
Passed cloud replay →Source 92de6c74 · v-f0db4915b998
A little animation comes safely home.
Actual PNG, GIF and APNG downloads decoded against two known poses and 100/200 ms holds; actual layered backup reopened in a fresh browser, edited and undone. Known imported 16×16 fixture and download fallback.
Passed cloud replay →Source 92de6c74 · v-2497e01ad86f
Turn it around, and bring it back.
Real selection/HUD actions: two mirrors and four quarter-turns restore exact artwork. Intermediate pixels match independent permutations; downloaded layers, frames and holds stay intact.
Passed cloud replay →Source 92de6c74 · v-55d860ff165f
First, paint something worth keeping.
From a blank canvas, 13 real red brush drags and three white clicks paint a literal heart. Actual PNG decoding and exact lighting Undo/Redo/Undo protect all 1,024 channels on the candidate. Driver-side waits retain CSP. Earlier production proof and invalid SVG-counting failure remain in history.
Passed cloud replay →Source 77a40070 · v-c2f858534e93
A heart, read back exactly.
The literal 256-pixel, three-color Heart recipe matches every readout field, independent canvas RGBA and an actual decoded PNG, including Undo/Redo. Recipe application is separate from pointer drawing.
Passed cloud replay →Source 37b37191 · v-854e85da6da9
A blank frame with room to begin.
Keyboard Enter activates the actual Animate end slot. Its new frame is entirely transparent; the original pixels and observed hold survive adding, Undo and Redo.
Passed cloud replay →Source 37b37191 · v-1b7a575c38ea
A different desk, the same drawing.
Cocoa, Drizzle, Harvest and Harbor are chosen through Studio controls in Night and Day. Exact artwork and frame/layer counts survive every choice and Harbor Day reload. This is not a contrast audit.
Passed cloud replay →Source 37b37191 · v-d22e95767dae
The shelves remember their places.
Actual saved layout fields return from a proven opposite arrangement: left inspector, 300 px, Navigator and Timeline. Reload and reapply preserve exact artwork and frame/layer counts.
Passed cloud replay →Source 37b37191 · v-c44169e2a72e
A frame can travel by keyboard.
Focused-card duplicate, Alt+Left/Right reorder and Delete preserve exact artwork and distinguishable 100/200 ms holds. A real workspace-name input keeps Delete as a text edit.
Passed cloud replay →Source 37b37191 · v-db6dbf45ca67
The bench keeps its own tiny world.
Real Draw, Light and Turn actions change the homepage canvas. The actual Hop GIF decodes to distinct poses with positive holds; the original Studio drawing survives a second tab and reload. Bounded independent GIF reader.
Passed cloud replay →Source 37b37191 · v-55f7396c1362
A surface takes the mark. The paint stays safe.
A real Chisel drag commits to an explicit normal-tagged layer. Actual downloaded layer PNGs prove exact Undo/Redo while diffuse paint, frame identity and hold stay intact; ordinary-paint refusal is also checked. No vector-angle fidelity claim.
Passed cloud replay →Source 77a40070 · v-09eae17b70cc
A neighbor keeps its color.
At tolerance 24 with family mode On and current-frame scope, three known green samples disappear. Red, blue, neutral neighbors and the other frame stay exact in canvas pixels and decoded backups, including Undo/Redo. Known imported fixture.
Passed cloud replay →Source 77a40070 · v-e38c1780cedc
The loop we are connecting
Pull request
Every change opens a pull request against main.
Preview
That exact branch deploys to its own preview URL.
TestSprite check
TestSprite’s cloud browser runs the suite against the preview and reports a status check on the PR.
Fix
A red check comes with a failure bundle. We fix the root cause, never a correct assertion, and push.
Green
The check reruns on the new commit. A pull request merges only on green.
So far
- Cases in the suite
- 121
- Cases in the catalog at the recorded date; not a coverage or pass count.
- PRs with executed runs
- 1
- Automatic executions in the ledger below. Billing-blocked events are excluded.
- Bugs in the PR ledger
- 4
- Product bugs from executed PR runs. Supporting replay discoveries are recorded separately above.
The automatic PR ledger
| Pull request | TestSprite run | What failed | Fixing commit | Verdict |
|---|---|---|---|---|
| #6Automatic App runs: 33/7/81 on b78fffb1 to 121/0/0 on c2670d1c; merged 24 Oct | Run |
| c2670d1 | Passed |
This ledger is committed and schema-checked. It records reviewed evidence at the stated date; follow each run link for its original result.