Deployment-target performance matrix

Drawing, undo, and interface-action frame timing across every deployment target, in four display modes each.

11/11 targets captured44/44 modes captured55 actions measured
Rows 44/44 modes

Product commit e5142fab8ff2…, captured 2026-09-07. 7 of 11 targets are marked “Earlier capture”: their results are preserved from an earlier campaign, not re-measured here — Commit provenance lists their source commits. The release gate is the 4 physical rows: iPad physical · web, iPad physical · native, Android physical · web, Android physical · native. Only iPad physical · web carries a calibrated drawing instrument — 4/4 modes captured, 10 of 16 brush aggregates over gate; the other 3 are gates-in-waiting until theirs are calibrated. Mac rows are a regression tripwire, and simulator and emulator rows are advisory (ADR-0156).

Results by target

Four modes per target · hover or tap any cell for the numbers behind it
Brush cells show blank-paper paint P95 in ms · gate 20 ms
Brush cells≤ 0.75× gate0.75–1×1–1.5×> 1.5×fails a drawing gateuncalibrated on a release-gate row: counts as red
Empty cellsN/A by designthe check does not apply to this runtimeUnavailablethis instrument or capture cannot score the cell; the tooltip says whyMissingnot captured yet — a gap to close
Undo✓ pass · ✕ fail against the undo gatesActionspassed/measured — green all pass, amber a few failing, red more than one in ten failing
Paint P95 · ms · gate 20 msverdictpassed
Mode
PenCrayonMagicEraserUndoActions
Release gate · physical iPad and Android4 targets · 16 modesThese rows gate a release: a scoreable red cell needs a recorded product outcome, and a cell an uncalibrated instrument cannot score counts as red here, not as absent.
1. iPad physical · webCalibratediPad13,8 · iPadOS 26.5 · Safari
Portrait · Light
1615161647/47
Portrait · Dark
1615161547/47
Landscape · Light
1615161648/48
Landscape · Dark
1615151648/48
2. iPad physical · nativeGate-in-waitingiPad13,8 · iPadOS 26.5 · Capacitor WebView
Portrait · Light
1515151548/48
Portrait · Dark
1516151547/48
Landscape · Light
1515161549/49
Landscape · Dark
1616161548/49
5. Android physical · webGate-in-waitingSamsung SM-G990U1 · Android 16 · Chrome 152.0.0.0
Portrait · Light
7.87.87.77.848/48
Portrait · Dark
87.97.87.748/48
Landscape · Light
7.87.97.87.733/34
Landscape · Dark
7.97.87.97.834/34
6. Android physical · nativeGate-in-waitingSamsung SM-G990U1 · Android 16 · Capacitor WebView (Chrome 151.0.7922.199)
Portrait · Light
8.18.18849/49
Portrait · Dark
87.987.949/49
Landscape · Light
87.987.935/35
Landscape · Dark
7.987.97.935/35
Regression tripwire · Mac3 targets · 12 modesA Mac cell that turns red on a change that was green on main is a finding to attribute before shipping; a cell that was already red is not a remainder.
9. Mac · ChromeEarlier captureMac desktop · macOS 26.6.2 (25G83) · arm64 · Playwright Chromium 151.0.7922.34
Portrait · Light
9.399.19.648/48
Portrait · Dark
9.39.19.59.448/48
Landscape · Light
9.49.59.49.249/49
Landscape · Dark
9.29.29.29.549/49
10. Mac · SafariEarlier captureMac desktop · macOS 26.6.2 (25G83) · arm64 · Playwright WebKit 26.5
Portrait · Light
1818181748/48
Portrait · Dark
1818181848/48
Landscape · Light
1818171749/49
Landscape · Dark
1818181849/49
11. Mac · FirefoxEarlier captureMac desktop · macOS 26.6.2 (25G83) · arm64 · Playwright Firefox 153.0
Portrait · Light
8.98.78.78.748/48
Portrait · Dark
8.68.68.7948/48
Landscape · Light
8.98.78.88.649/49
Landscape · Dark
8.98.78.88.849/49
Advisory · simulators and emulators4 targets · 16 modesThese rows narrow or reject a hypothesis but never fail or approve a release; their red stays visible so a systemic regression still shows.
3. iPad simulator · webEarlier captureiPad mini (A17 Pro) simulator · iOS 26.5 · Safari
Portrait · Light
1614151637/47
Portrait · Dark
1112111138/47
Landscape · Light
1212111540/48
Landscape · Dark
121271638/48
4. iPad simulator · nativeEarlier captureiPad mini (A17 Pro) simulator · iOS 26.5 · Capacitor WebView
Portrait · Light
1516151138/48
Portrait · Dark
111151637/48
Landscape · Light
1615161637/49
Landscape · Dark
1115111237/49
7. Android emulator · webEarlier capturePixel 7 Pro API 33 emulator · Android 13 · Chrome 149.0.0.0
Portrait · Light
16.516.516.516.5no control
Portrait · Dark
14.515.515.416.146/48
Landscape · Light
16.416.316.216.427/34
Landscape · Dark
16.116.116.316.3no control
8. Android emulator · nativeEarlier capturePixel 7 Pro API 33 emulator · Android 13 · Capacitor WebView (Chrome 149.0.7827.91)
Portrait · Light
16.416.516.416.438/49
Portrait · Dark
16.516.416.416.439/49
Landscape · Light
16.516.516.516.635/35
Landscape · Dark
16.516.616.516.534/35

Most drawing cells aggregate a single capture, so treat a result close to its limit as provisional; each tooltip states the cell’s capture count.

Discrete actions

55 action columns · coverage varies by mode · color is the worst of first-frame P95, post-action P95, and post-action max against its gate
≤ 0.75× gate0.75–1×1–1.5×> 1.5×pass, max over gate in one repeatThe grid scrolls both ways · arrow keys step through cells
Empty cellsN/A by designthe check does not apply to this runtimeUnavailablethis instrument or capture cannot score the cell; the tooltip says whyMissingnot captured yet — a gap to close
Mode passing
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
Release gate · physical iPad and Android4 targets · 16 modesThese rows gate a release: a scoreable red cell needs a recorded product outcome, and a cell an uncalibrated instrument cannot score counts as red here, not as absent.
1. iPad physical · web
Portrait · Light47/47
Portrait · Dark47/47
Landscape · Light48/48
Landscape · Dark48/48
2. iPad physical · native
Portrait · Light48/48
Portrait · Dark47/48
Landscape · Light49/49
Landscape · Dark48/49
5. Android physical · web
Portrait · Light48/48
Portrait · Dark48/48
Landscape · Light33/34
Landscape · Dark34/34
6. Android physical · native
Portrait · Light49/49
Portrait · Dark49/49
Landscape · Light35/35
Landscape · Dark35/35
Regression tripwire · Mac3 targets · 12 modesA Mac cell that turns red on a change that was green on main is a finding to attribute before shipping; a cell that was already red is not a remainder.
9. Mac · Chrome earlier capture
Portrait · Light48/48
Portrait · Dark48/48
Landscape · Light49/49
Landscape · Dark49/49
10. Mac · Safari earlier capture
Portrait · Light48/48
Portrait · Dark48/48
Landscape · Light49/49
Landscape · Dark49/49
11. Mac · Firefox earlier capture
Portrait · Light48/48
Portrait · Dark48/48
Landscape · Light49/49
Landscape · Dark49/49
Advisory · simulators and emulators4 targets · 16 modesThese rows narrow or reject a hypothesis but never fail or approve a release; their red stays visible so a systemic regression still shows.
3. iPad simulator · web earlier capture
Portrait · Light37/47
Portrait · Dark38/47
Landscape · Light40/48
Landscape · Dark38/48
4. iPad simulator · native earlier capture
Portrait · Light38/48
Portrait · Dark37/48
Landscape · Light37/49
Landscape · Dark37/49
7. Android emulator · web earlier capture
Portrait · Lightno control
Portrait · Dark46/48
Landscape · Light27/34
Landscape · Darkno control
8. Android emulator · native earlier capture
Portrait · Light38/49
Portrait · Dark39/49
Landscape · Light35/35
Landscape · Dark34/35
Action-number key
  1. 1expand action drawer
  2. 2collapse action drawer
  3. 3change ink color
  4. 4open custom color picker
  5. 5select custom color
  6. 6open brush menu
  7. 7select crayon brush
  8. 8select Magic brush
  9. 9select eraser
  10. 10select pen brush
  11. 11open stroke-width menu
  12. 12change stroke width
  13. 13open Settings
  14. 14open Settings section: Sound
  15. 15open Settings section: Tool Drawer
  16. 16open Settings section: Coloring
  17. 17open Settings section: AI Art
  18. 18open Settings section: Saving
  19. 19open Parent Center
  20. 20open Settings section: Install
  21. 21open Settings section: Feedback
  22. 22open Settings section: What's New
  23. 23open Settings section: About
  24. 24switch dark theme to light
  25. 25switch light theme to dark
  26. 26disable drawing sounds
  27. 27enable drawing sounds
  28. 28enable auto-save on delete
  29. 29disable auto-save on delete
  30. 30disable advanced controls
  31. 31enable advanced controls
  32. 32disable screenshot action button
  33. 33enable screenshot action button
  34. 34close Settings
  35. 35open coloring books
  36. 36select coloring page
  37. 37clear coloring page
  38. 38save screenshot
  39. 39undo latest stroke
  40. 40clear drawing
  41. 41empty after clear: PORTRAIT to LANDSCAPE rotation
  42. 42undo clear after blank rotation
  43. 43undo restored stroke after blank rotation
  44. 44clear restored drawing after blank rotation
  45. 45empty after clear: LANDSCAPE to PORTRAIT rotation
  46. 46with ink: PORTRAIT to LANDSCAPE rotation
  47. 47with ink: LANDSCAPE to PORTRAIT rotation
  48. 48scroll coloring pages
  49. 49open coloring book
  50. 50enable Night Mode in the compact shell
  51. 51disable Night Mode in the compact shell
  52. 52disable drawing sounds in the compact shell
  53. 53enable drawing sounds in the compact shell
  54. 54disable advanced controls in the compact shell
  55. 55enable advanced controls in the compact shell

Actions failing in the most modes

Counted across the scoreable modes of the 4 release-gate rows — Mac tripwire and simulator/emulator advisory rows, and the row filters above, do not change this list.

  1. 1empty after clear: LANDSCAPE to PORTRAIT rotation1 of 16 modes failed · worst 1.5× gate
  2. 2disable drawing sounds1 of 12 modes failed · worst 1.3× gate
  3. 3disable auto-save on delete1 of 12 modes failed · worst 1.3× gate

Notes and method

What the cells do and do not claim

Capture limitations

16
  • This fold measures product commit e5142fab8ff2d4b5c8ee767e244c495cec3ba8d3, the commit at which all four physical release-gate rows were captured between 2026-09-05 and 2026-09-07 (physical iPad web via issue 1686, physical iPad native and Android web via PR 1689, physical Android native in this fold). The three engine commits main took after e5142fab are not measured here: the strict staleness check reports every captured row STALE against main and current against e5142fab, so this is a coherent single-commit snapshot, not a measurement of current main.
  • All four orientation/theme modes were freshly captured for physical iPad web, physical iPad native, physical Android web, and physical Android native. Every drawing, undo, and action section on those four release-gate rows comes from the campaign product commit.
  • The physical Android native row is two sequential builds of the same clean commit: a probe-host server.url build carries the ADR-0135 split drawing and undo transport, and a bundled https://localhost build carries the Appium action sweep. Both embed e5142fab8ff2d4b5c8ee767e244c495cec3ba8d3; the split artifacts record pageIdentity unprovable by construction because the fixed server.url carries no per-cell nonce.
  • Every physical drawing and undo cell passed its input-fidelity gate. The ten iPad web pen, Magic, and eraser lost-frame-share reds (1.02-1.37% against the 1% budget) are the issue-1693 budget decision; the remaining scoreable reds are three discrete actions tracked by issues 1694 and 1695. The physical Android native row carries no red cell.
  • The physical iPad web row is the calibrated Safari approval target. ADR-0156 also requires the physical iPad native and both physical Android rows to be current and scored before campaign completion; every one is current here.
  • Simulator, emulator, and Mac rows were not recaptured in this physical release-gate campaign. Every section on those rows is explicitly preserved from the prior published report and makes no claim of currency at the final product commit.
  • Action cells are scored under ADR-0156: a post-action max breach counts only when two of the three scored repeats show it; a single breaching repeat is recorded as unconfirmed rather than red. Read each artifact's scoredActionFrameGaps rather than treating the pooled P95/P99/max triple as three repeats.
  • Android physical web and native drawing use the ADR-0135 split input/measurement transport. Fresh artifacts record driving cadence, input fidelity, refresh regime, and page identity. Split-native captures also attest that art.splotch.app was the foreground package.
  • The ADR-0143 60 Hz refresh-rate override keys were verified absent on the physical Android phone before and after its captures; every Android drawing artifact matched the declared 120 Hz regime.
  • The campaign accepted every faithful red drawing or action gate and did not rerun a valid result to turn it green. Retries were reserved for transport, readiness, input-fidelity, and unchanged-canvas failures.
  • Physical iPad capture needs a root-owned RemoteXPC tunnel before iOS 26 XCUITest discovery sees the device. See docs/PROFILING-IPAD.md.
  • A landscape phone renders the compact Settings shell, which offers quick toggles and a pointer to portrait instead of the section list. Compare action modes against the same recorded settingsShell; a different label set between portrait and landscape is a shell difference, not a regression.
  • Firefox is Gecko, which no Splotch deployment target ships; read it as the third desktop browser a parent might open splotch.art in, never as evidence about WebKit or Blink.
  • Desktop captures used exact 1366×915 or 915×1366 CSS viewports at DPR 2 — iPad Pro 12.9 geometry, so the canvas area matches the physical-iPad rows. Playwright retains the requested page viewport regardless of the browser window size.
  • Raw perf-profiles are local scratch and are mostly untracked. ADR-0138 keeps representative whole captures under perf-profiles/evidence/; every section not promoted from this campaign is marked preserved before the strict regeneration.
  • 28 cells carry historical results preserved from data.json rather than re-read raw captures: The 2026-09-05 campaign freshly captured every physical release-gate section and preserves all advisory iPad Simulator, Android Emulator, and Mac desktop rows wholesale. No physical section is preserved. The 28 preserved advisory modes retain their original product commits and do not claim currency. Representative fresh physical evidence is promoted under perf-profiles/evidence/2026-09-05-epic-1567-final-control/. Preserved cells: iPad simulator · web · portrait-light (drawing, undo, actions); iPad simulator · web · portrait-dark (drawing, undo, actions); iPad simulator · web · landscape-light (drawing, undo, actions); iPad simulator · web · landscape-dark (drawing, undo, actions); iPad simulator · native · portrait-light (drawing, undo, actions); iPad simulator · native · portrait-dark (drawing, undo, actions); iPad simulator · native · landscape-light (drawing, undo, actions); iPad simulator · native · landscape-dark (drawing, undo, actions); Android emulator · web · portrait-light (drawing, undo, actions); Android emulator · web · portrait-dark (drawing, undo, actions); Android emulator · web · landscape-light (drawing, undo, actions); Android emulator · web · landscape-dark (drawing, undo, actions); Android emulator · native · portrait-light (drawing, undo, actions); Android emulator · native · portrait-dark (drawing, undo, actions); Android emulator · native · landscape-light (drawing, undo, actions); Android emulator · native · landscape-dark (drawing, undo, actions); Mac · Chrome · portrait-light (drawing, undo, actions); Mac · Chrome · portrait-dark (drawing, undo, actions); Mac · Chrome · landscape-light (drawing, undo, actions); Mac · Chrome · landscape-dark (drawing, undo, actions); Mac · Safari · portrait-light (drawing, undo, actions); Mac · Safari · portrait-dark (drawing, undo, actions); Mac · Safari · landscape-light (drawing, undo, actions); Mac · Safari · landscape-dark (drawing, undo, actions); Mac · Firefox · portrait-light (drawing, undo, actions); Mac · Firefox · portrait-dark (drawing, undo, actions); Mac · Firefox · landscape-light (drawing, undo, actions); Mac · Firefox · landscape-dark (drawing, undo, actions).

How scoring works

Gates. Drawing passes when blank-paper paint P95 ≤ 20 ms, P99 ≤ 33 ms, max ≤ 50 ms, and lost frame time stays under 1% of in-contact time. Undo passes at engine P95 ≤ 20 ms, next-frame P95 ≤ 33 ms, and next-frame max ≤ 50 ms. An action passes at first-frame P95 ≤ 33.5 ms, post-action frame P95 ≤ 20 ms, and post-action frame max ≤ 33.5 ms. A post-action max over its gate counts only when 2 of the three scored repeats show it (ADR-0156); one breaching repeat renders as a warning, not a failure. Ready P95 appears in tooltips but is not gated: its completion semantics differ per action, so a frame-gate pass says nothing about end-to-end response time.

Lost-frame budget exceptions (ADR-0137). Cells held to a different lost-frame budget, and why:

  • Crayon on ipad-device-web — 1.5%. Crayon deposits wax through pattern-filled strokes that Safari prices per path-length, so the web build cannot merge them across pointermoves (the native WKWebView prices per op and merges per frame instead — ADR-0137 as amended), so it pays a per-move cost every other brush coalesces away, and mirror-by-blit already took it from 2.11%. Across all four orientation/theme modes its median is 1.11-1.17%, but a single capture of landscape-light measured 1.40% and re-measured to 1.17% over three samples. A matrix cell IS a single capture, so this is set above the observed single-sample excursion rather than above the median.
  • Crayon on ipad-device-native — 1.5%. Per-frame crayon op merging (ADR-0137 as amended, issue 1236) brought the native WKWebView from a 2.14% published cell to Safari parity: three same-session samples on 2026-08-25 measured 0.96/1.11/1.44%, median 1.11% — inside the web cell's own 1.11-1.17% median band with the same shape of single-sample excursion. The same residual per-move wax cost now binds both runtimes, so the same 1.5% single-capture budget applies, set by the same above-the-excursion rule.

Action allowances on ipad-device-web (ADR-0090, ADR-0160). Actions held to a measured allowance instead of the base post-action gates, and why; every target without a ledger scores them at the base gates:

  • open Settings — post-action P95 ≤ 29 ms. Worst committed P95 28 ms (perf-profiles/evidence/2026-09-05-epic-1567-advanced-controls-certification, landscape/dark at ebc7673b), 27 ms in six further September 2026 captures across three modes at 3c017796, 9af487b3 and e5142fab, 20-26 ms in eleven more. The pane is prewarmed (ADR-0049 amendment) and its open still carries the showModal flip and the heaviest section reveal; Instruments aligns the remaining slow frames with animation completion, compositing-hierarchy changes, layer removal and paint, and the bounded `contain: layout paint` candidate measured negative. Raised from the 26 ms of ADR-0090 under ADR-0160.
  • close Settings — post-action P95 ≤ 22 ms. Worst committed P95 21 ms in three captures (perf-profiles/evidence/2026-09-05-epic-1567-ipad-e514-control landscape/light and landscape/dark; 2026-09-05-epic-1567-ipad-paper-control portrait/light), 17-20 ms in fifteen others. The same dialog retirement over a full-screen paper layer as the coloring picker; it carries no dedicated trace, so ADR-0160 records the attribution as shared and the reopen condition as its own.
  • select coloring page — post-action P95 ≤ 30 ms. Worst committed P95 29 ms (perf-profiles/evidence/2026-09-05-epic-1567-landscape-retirement-controls, landscape/dark at e5142fab), 26-28 ms in eight further captures, portrait/light green at 17. The 29 ms frame sampled in Instruments is GPU-process IOSurface pool eviction, surface creation and Metal submission with no app evaluation in-frame; seven bounded product mechanisms measured negative or insufficient (issue 1569, 2026-09-06 disposition).
  • switch light theme to dark — post-action P95 ≤ 23 ms. Worst committed P95 22 ms (perf-profiles/evidence/2026-09-05-epic-1567-ipad-e514-control, portrait/light), 17 ms in fifteen other captures. A single-capture excursion sized by ADR-0137 worst-single-capture rule: the full-document restyle recomposites every layer in one frame (ADR-0087).
  • with ink: PORTRAIT to LANDSCAPE rotation — post-action P95 ≤ 26 ms. Worst committed P95 25 ms in two captures (perf-profiles/evidence/2026-09-05-epic-1567-ipad-paper-control, portrait/light at 141288da), 22-24 ms in four others; the landscape-origin direction reads 17-18. The slow frame is the first full post-resize interval of the OS rotation; the aligned trace holds GPU surface-pool eviction and command submission beside WebContent layout, and paper-sheet compositor pre-promotion measured negative. Supersedes ADR-0156 decision 5 for this direction only; the 33.5 ms max gate stays.
  • open Settings — post-action max ≤ 56 ms. Capture-environment allowance (issue 1130, ADR-0090 2026-08-26 amendment): every hitch under the 44-55 ms open-Settings frame lands on the automation overlay stack with zero WebContent hitches, but the trace attributes per layer and the real-finger control was confounded by the persistent AutomationModeUI overlay. Covers the observed three-beat frame plus jitter; a clean-device control that still shows the frame retires it.

Action allowances on android-device-web (ADR-0162). Actions held to a measured allowance instead of the base post-action gates, and why; every target without a ledger scores them at the base gates:

  • disable Night Mode in the compact shell — post-action P95 ≤ 33.5 ms. Worst committed P95 33.4 ms (perf-profiles/evidence/2026-09-06-issue-1696-android-night-toggle, landscape/dark full-plan control at f42d0994, two beats in all three scored repeats), 33.3 ms in the e5142fab row capture (perf-profiles/evidence/2026-09-06-epic-1567-android-device-web-e514, landscape/dark) and once in landscape/light (perf-profiles/evidence/2026-09-05-epic-1567-night-mode-control-trace at a9438fc7); 16.7-17.1 ms in ten other captures of the same cell. The paired Chrome trace (issue 1696) puts the click's input task at 26-39 ms on CrRendererMain in every repeat — 9-12 ms of dispatch and a 9.5-14.7 ms whole-document style recalc for the theme token flip that the bounded closed-dialog treatment (PR 1702) did not move — with a DroppedFrame at the first BeginFrame after every click. One 0.1 ms clock quantum above the worst reading and equal to the max gate, so a P95 past it needs three over-gate gaps: spread across repeats the max gate confirms them, concentrated in one repeat this allowance alone fails them.

Release roles (ADR-0156). Release gate · physical iPad and Android: These rows gate a release: a scoreable red cell needs a recorded product outcome, and a cell an uncalibrated instrument cannot score counts as red here, not as absent. Regression tripwire · Mac: A Mac cell that turns red on a change that was green on main is a finding to attribute before shipping; a cell that was already red is not a remainder. Advisory · simulators and emulators: These rows narrow or reject a hypothesis but never fail or approve a release; their red stays visible so a systemic regression still shows. A row’s role follows the hardware it ran on, not its fidelity class; the chip on a release-gate row says whether its drawing instrument is calibrated or the row is a gate-in-waiting.

Empty cells. A cell without a product verdict renders one of three ways. A single struck stroke is N/A by design: the check does not apply to that runtime. A diagonal hatch is unavailable: the capture exists but cannot be scored, because it failed an input-fidelity check, was measured at a refresh rate this target is not scored against, has a failed idle control, or is preserved evidence with no current verdict. A dashed, empty outline is missing: nothing valid was captured, so it is a gap to close. Every tooltip names the reason.

The idle-frame control. Every action sweep includes a control sample that performs no interaction, proving the target can hold frames at rest. When the control fails its own gate the host was dropping frames on its own, so none of that mode’s action scores can be attributed to the app: the mode is marked “no control” and left out of the failure ranking.

One capture per cell. Most drawing cells have one capture behind them; each tooltip states the count. A result close to a limit needs repeat captures before it is trusted either way (ADR-0136).

Focused action captures. Sources are applied in their listed order within each mode. A focused capture replaces only its named actions and requires a full sweep from the same product commit; anything else is refused. Raw drawing tables and action samples are re-scored with the current metric definitions whenever this report is regenerated — stored verdicts are not trusted. A struck action cell is N/A under the action plan that mode’s product surface declared; a dashed one is missing, and both tooltips keep the reason.

Rotation first frames on iPad Safari are N/A rather than gated: under ADR-0142’s resize anchor the value reads 0–2 ms by construction, so rotation there is scored by the post-action frame gates alone.

Candidate actions

14

Additional scenarios and their remaining coverage.

PriorityActionRationaleApplicabilityStatus
P0Sound-source and Clear gesture matrixExercise Drawing/Delete sound toggles, volume drag, and Clear cancel/reverse/success paths with audio enabled and disabled.All web/native targetsPartial: drawing-sound toggle and successful Clear captured; delete sound, volume, and cancelled/reversed Clear remain.
P0Coloring-backed brush matrixMeasure Pen, Crayon, Magic, and Eraser on active coloring art, including reversal, undo, clear, theme swap, and rotation.All targetsPartial: page phases and selection/clear captured; dense ink/theme/rotation combinations remain.
P0Continuous Settings gesturesExercise pane/sidebar scrolling, phone drill/back, quick switches, button-size and volume sliders, and individual tool toggles.All targets; touch variants on mobileNot captured; current suite measures section navigation and selected toggles.
P0Coloring picker cold/warm and race pathsSeparate cold open from warm reopen, page-grid scroll, back, double-tap guard, active-page clear, and progressive pack arrival.All targetsPartial: open/book/scroll/select/clear captured; cold/warm and race variants remain.
P1Deterministic AI interaction flowGate local frames for style choice, generating/minimize/restore, drawing while waiting, completion, refusal, retry, and result decode without gating network latency.Physical targets plus one simulator control per OSNot captured.
P1Parental Gate flowMeasure guarded open, wrong-answer regeneration, backspace, correct solve, close, Parent Center retarget, and policy confirmation.All native targets; representative web targetsPartial: Parent Center entry captured; full gate interaction remains.
P1Screenshot cold versus warmSeparate pointerdown preparation, save readiness, repeated warm save, active-coloring export, and native OS handoff.All targetsPartial: one intercepted save action captured.
P1Theme swaps on realistic contentCompare blank, dense Pen/Crayon, and active coloring/Magic swaps to expose decode, style, and raster costs.All targetsPartial: Settings theme round-trip captured without dense content.
P1Rotation state matrixAdd Settings-open, picker-open, active coloring with ink, AI waiting, and slider-active rotations.Rotatable mobile targetsPartial: blank and generic-ink rotations captured where platform setup allowed.
P2True custom-color dragMeasure drag-across/explore/lift selection, gap snapping, and cancellation instead of a single click.Touch and pointer targetsNot captured.
P2Settings pinch text zoomExercise CSS zoom over the fully mounted Settings surface and reset on section change/close.Physical touch targetsNot captured.
P2Apple Pencil gesturesMeasure Pencil double-tap brush/eraser switching and Pencil/Scribble Clear guards.Physical iPadNot captured by this campaign.
P2Platform-only shell gesturesCover Android web fullscreen/install-banner paths and desktop Ctrl+Z undo.Android web and desktop webNot captured.
P2Lifecycle recoveryBackground/foreground during dense drawing, AI generation, and coloring-pack work to validate recovery and context restoration.Physical and emulated mobile targetsNot captured.

Undo timing per mode

Engine time is the state rollback alone; next-frame adds the following rendered frame. Gates: engine P95 ≤ 20 ms, next-frame P95 ≤ 33 ms, next-frame max ≤ 50 ms.

TargetEngine P95Next P95Next maxGate
iPad physical · web · Portrait · Light11111Pass
iPad physical · web · Portrait · Dark11212Pass
iPad physical · web · Landscape · Light11212Pass
iPad physical · web · Landscape · Dark11313Pass
iPad physical · native · Portrait · Light11010Pass
iPad physical · native · Portrait · Dark11414Pass
iPad physical · native · Landscape · Light11313Pass
iPad physical · native · Landscape · Dark099Pass
Android physical · web · Portrait · Light1.412.812.8Pass
Android physical · web · Portrait · Dark1.612.412.4Pass
Android physical · web · Landscape · Light1.711.611.6Pass
Android physical · web · Landscape · Dark0.912.812.8Pass
Android physical · native · Portrait · Light1.56.26.2Pass
Android physical · native · Portrait · Dark1.36.36.3Pass
Android physical · native · Landscape · Light1.75.95.9Pass
Android physical · native · Landscape · Dark1.45.85.8Pass
Mac · Chrome · Portrait · Light0.47.57.5Pass
Mac · Chrome · Portrait · Dark0.46.96.9Pass
Mac · Chrome · Landscape · Light0.36.46.4Pass
Mac · Chrome · Landscape · Dark0.57.37.3Pass
Mac · Safari · Portrait · Light11212Pass
Mac · Safari · Portrait · Dark11010Pass
Mac · Safari · Landscape · Light199Pass
Mac · Safari · Landscape · Dark11111Pass
Mac · Firefox · Portrait · Light57.57.5Pass
Mac · Firefox · Portrait · Dark56.96.9Pass
Mac · Firefox · Landscape · Light47.67.6Pass
Mac · Firefox · Landscape · Dark210.110.1Pass
iPad simulator · web · Portrait · Light11414Pass
iPad simulator · web · Portrait · Dark11616Pass
iPad simulator · web · Landscape · Light11515Pass
iPad simulator · web · Landscape · Dark11212Pass
iPad simulator · native · Portrait · Light01515Pass
iPad simulator · native · Portrait · Dark11414Pass
iPad simulator · native · Landscape · Light11414Pass
iPad simulator · native · Landscape · Dark11414Pass
Android emulator · web · Portrait · Light0.214.814.8Pass
Android emulator · web · Portrait · Dark0.314.414.4Pass
Android emulator · web · Landscape · Light0.814.914.9Pass
Android emulator · web · Landscape · Dark0.215.615.6Pass
Android emulator · native · Portrait · Light0.314.914.9Pass
Android emulator · native · Portrait · Dark0.313.913.9Pass
Android emulator · native · Landscape · Light0.314.214.2Pass
Android emulator · native · Landscape · Dark0.214.714.7Pass

Commit provenance

The product commit each cell’s evidence was captured at. “Actions at final commit” counts the action rows measured at this campaign’s final product commit.

TargetDrawingUndoActions at final commitAction source commits
iPad physical · web · Portrait · Lighte5142fab8ff2…e5142fab8ff2…47/47e5142fab8ff2…
iPad physical · web · Portrait · Darke5142fab8ff2…e5142fab8ff2…47/47e5142fab8ff2…
iPad physical · web · Landscape · Lighte5142fab8ff2…e5142fab8ff2…48/48e5142fab8ff2…
iPad physical · web · Landscape · Darke5142fab8ff2…e5142fab8ff2…48/48e5142fab8ff2…
iPad physical · native · Portrait · Lighte5142fab8ff2…e5142fab8ff2…48/48e5142fab8ff2…
iPad physical · native · Portrait · Darke5142fab8ff2…e5142fab8ff2…48/48e5142fab8ff2…
iPad physical · native · Landscape · Lighte5142fab8ff2…e5142fab8ff2…49/49e5142fab8ff2…
iPad physical · native · Landscape · Darke5142fab8ff2…e5142fab8ff2…49/49e5142fab8ff2…
Android physical · web · Portrait · Lighte5142fab8ff2…e5142fab8ff2…48/48e5142fab8ff2…
Android physical · web · Portrait · Darke5142fab8ff2…e5142fab8ff2…48/48e5142fab8ff2…
Android physical · web · Landscape · Lighte5142fab8ff2…e5142fab8ff2…34/34e5142fab8ff2…
Android physical · web · Landscape · Darke5142fab8ff2…e5142fab8ff2…34/34e5142fab8ff2…
Android physical · native · Portrait · Lighte5142fab8ff2…e5142fab8ff2…49/49e5142fab8ff2…
Android physical · native · Portrait · Darke5142fab8ff2…e5142fab8ff2…49/49e5142fab8ff2…
Android physical · native · Landscape · Lighte5142fab8ff2…e5142fab8ff2…35/35e5142fab8ff2…
Android physical · native · Landscape · Darke5142fab8ff2…e5142fab8ff2…35/35e5142fab8ff2…
Mac · Chrome · Portrait · Lightd17100cb8e9c…d17100cb8e9c…0/48d17100cb8e9c…
Mac · Chrome · Portrait · Darkd17100cb8e9c…d17100cb8e9c…0/48d17100cb8e9c…
Mac · Chrome · Landscape · Lightd17100cb8e9c…d17100cb8e9c…0/49d17100cb8e9c…
Mac · Chrome · Landscape · Darkd17100cb8e9c…d17100cb8e9c…0/49d17100cb8e9c…
Mac · Safari · Portrait · Lightd17100cb8e9c…d17100cb8e9c…0/48d17100cb8e9c…
Mac · Safari · Portrait · Darkd17100cb8e9c…d17100cb8e9c…0/48d17100cb8e9c…
Mac · Safari · Landscape · Lightd17100cb8e9c…d17100cb8e9c…0/49d17100cb8e9c…
Mac · Safari · Landscape · Darkd17100cb8e9c…d17100cb8e9c…0/49d17100cb8e9c…
Mac · Firefox · Portrait · Lightd17100cb8e9c…d17100cb8e9c…0/48d17100cb8e9c…
Mac · Firefox · Portrait · Darkd17100cb8e9c…d17100cb8e9c…0/48d17100cb8e9c…
Mac · Firefox · Landscape · Lightd17100cb8e9c…d17100cb8e9c…0/49d17100cb8e9c…
Mac · Firefox · Landscape · Darkd17100cb8e9c…d17100cb8e9c…0/49d17100cb8e9c…
iPad simulator · web · Portrait · Lightc80fc3b240a3…c80fc3b240a3…0/47c80fc3b240a3…
iPad simulator · web · Portrait · Darkc80fc3b240a3…c80fc3b240a3…0/47c80fc3b240a3…
iPad simulator · web · Landscape · Lightc80fc3b240a3…c80fc3b240a3…0/48c80fc3b240a3…
iPad simulator · web · Landscape · Darkc80fc3b240a3…c80fc3b240a3…0/48c80fc3b240a3…
iPad simulator · native · Portrait · Light13643a1f2cc5…13643a1f2cc5…0/4813643a1f2cc5…
iPad simulator · native · Portrait · Dark13643a1f2cc5…13643a1f2cc5…0/4813643a1f2cc5…
iPad simulator · native · Landscape · Light13643a1f2cc5…13643a1f2cc5…0/4913643a1f2cc5…
iPad simulator · native · Landscape · Dark13643a1f2cc5…13643a1f2cc5…0/4913643a1f2cc5…
Android emulator · web · Portrait · Light13643a1f2cc5…6961e50b685d…0/4913643a1f2cc5…
Android emulator · web · Portrait · Dark13643a1f2cc5…6961e50b685d…0/4813643a1f2cc5…
Android emulator · web · Landscape · Light13643a1f2cc5…6961e50b685d…0/3413643a1f2cc5…
Android emulator · web · Landscape · Dark13643a1f2cc5…6961e50b685d…0/3413643a1f2cc5…
Android emulator · native · Portrait · Light13643a1f2cc5…6961e50b685d…0/4913643a1f2cc5…
Android emulator · native · Portrait · Dark13643a1f2cc5…6961e50b685d…0/4913643a1f2cc5…
Android emulator · native · Landscape · Lightd17100cb8e9c…6961e50b685d…0/3513643a1f2cc5…
Android emulator · native · Landscape · Darkd17100cb8e9c…6961e50b685d…0/3513643a1f2cc5…