Skip to content

scroll: coast-frame-pacing - #889

Merged
fizzy-pm[bot] merged 3 commits into
mainfrom
scroll/coast-frame-pacing
Oct 27, 2026
Merged

fizzy-pm[bot] merged 3 commits into
mainfrom
scroll/coast-frame-pacing

Conversation

@fizzy-linux

@fizzy-linux fizzy-linux Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Part of fizzyedit/work#435

Goal

Keep touch coast drawing at the current frame's timestamp, and answer windows/codex F1 at 3314dc7 (Part of fizzyedit/work#435).

What changed and why

Removed unconditional stderr measurement output from the coast displacement regression. Its motion assertions remain intact. This is test-output cleanup, not a demonstrated repair of the reported Windows unit failure.

The reported 152/181 Windows unit result cannot be diagnosed from a step count alone. Linux unit tests pass 181/181 on both the supplied head and this edit. The new ScrollArea regression is imported by core/sizing_tests.zig, whose run artifact belongs to test-integration in build/app.zig, not the unit gate. FIXES.md declines attributing that unidentified failure to this test.

How it was verified

Linux headless coast displacement regression passes 94/94 build steps, 14/14 tests. Formatting, lint, native build and unit tests pass; full results and sandbox socket failures are in GATES.md. No device presentation or Windows execution was available.

Temporary measurement instrumentation captured the following headless per-frame gaps and child displacement (viewport points at scale 1). Before means coast restored to its pre-fix position in deinit after release handling; after means coast advanced before child layout. The instrumentation was removed after capture.

Gap (ms) Before displacement (px) After displacement (px) Before px/ms After px/ms
25 13.0267 20.1731 0.5211 0.8069
8 19.5378 6.2453 2.4422 0.7807
25 6.0486 18.8847 0.2419 0.7554
8 18.2899 5.8464 2.2862 0.7308
25 5.6623 17.6785 0.2265 0.7071
8 17.1218 5.4730 2.1402 0.6841
25 5.3006 16.5494 0.2120 0.6620
8 16.0282 5.1234 2.0035 0.6404

The regression fails with the pre-fix placement (92/94 steps, 13/14 tests) and passes with the fix (94/94 steps, 14/14 tests). This retains the per-frame evidence requested by the earlier F1 at 79a595e.

Not done / follow-ups

The Windows unit failure remains unverified and needs the first failing command and full diagnostic from a Windows rerun. The harness commits, pushes, and posts the single FIXES comment; this worker has no network or git write access. Maintainer device/web presentation validation remains outstanding.

Changes (63 files, +557/-1681)
 .github/workflows/ci.yml                           |  25 --
 CONTRIBUTING.md                                    |   4 +-
 app/App.zig                                        |   4 +-
 app/Recents.zig                                    |   4 +-
 app/Tracks.zig                                     |   4 +-
 app/control/Server.zig                             |  73 +++---
 app/layout/Picker.zig                              |   2 +-
 app/layout/Region.zig                              |   2 +-
 app/layout/SplitTree.zig                           |   4 +-
 app/layout/State.zig                               |  19 +-
 app/layout/ViewDrag.zig                            |  44 ++--
 app/store/PluginLoader.zig                         |  44 ++--
 app/store/PluginStore.zig                          |   2 +-
 app/update/bounded_join.zig                        |  58 -----
 app/update/update_notify.zig                       |  34 +--
 build.zig                                          |  14 +-
 build/app.zig                                      |   2 -
 build/plugins.zig                                  |   4 +-
 build/sdk.zig                                      |   7 +
 core/FileTable.zig                                 | 104 +-------
 core/LocalFs.zig                                   |   2 +-
 core/dialogs.zig                                   |   8 +-
 core/form_factor.zig                               |  26 +-
 core/widgets/DropZones.zig                         |   2 +-
 core/widgets/ScrollArea.zig                        |  53 +++-
 core/widgets/TreeWidget.zig                        |  74 +++---
 docs/AGENT_WORK.md                                 |  11 -
 docs/AUTOMATION.md                                 |   1 +
 docs/DEPENDENCIES.md                               |   3 -
 plugins/workbench/src/Workbench.zig                |  22 +-
 plugins/workbench/src/Workspace.zig                |  23 +-
 scripts/agent-finish                               |  11 +-
 scripts/check-examples.sh                          | 137 ++---------
 scripts/fixtures/build-api/app/build.zig           |  50 ----
 scripts/fixtures/build-api/app/build.zig.zon       |  16 --
 scripts/fixtures/build-api/plugin/build.zig        |  24 --
 scripts/fixtures/build-api/plugin/build.zig.zon    |  14 --
 scripts/fixtures/build-api/plugin/lib.c            |   4 -
 scripts/fixtures/build-api/plugin/lib.zig          |   3 -
 scripts/fixtures/build-api/plugin/plugin.zig       |  76 ------
 .../fixtures/build-api/plugin/plugin.zig.zon.tmpl  |   7 -
 scripts/test-agent-work.sh                         |  12 -
 scripts/test-web-text-input.sh                     |  13 -
 scripts/test-zb.sh                                 |  13 +-
 scripts/zb                                         |  34 +--
 sdk/tape/Script.zig                                |  15 +-
 sdk/tape/Tape.zig                                  |  14 ++
 sdk/tape/binary.zig                                |  15 +-
 src/Entry.zig                                      |   2 -
 src/editor/Demo.zig                                | 229 ++++++++---------
 src/editor/Editor.zig                              |  11 +-
 src/editor/PluginReloads.zig                       |   9 +-
 src/editor/Workspaces.zig                          |  30 +--
 src/editor/explorer/settings.zig                   | 100 ++++++--
 tests/demos.zig                                    |  21 +-
 tests/fixtures/app-only/build.zig                  |  18 --
 tests/fixtures/app-only/build.zig.zon              |  14 --
 tests/fixtures/app-only/plugin.zig                 |   1 -
 tests/integration.zig                              | 270 ++++-----------------
 tests/tapes/soak.zon                               |   2 +
 web/fizzy.js                                       |  21 +-
 ...oard-s-correction-replaces-the-typed-word.patch | 266 --------------------
 web/tests/text-input.test.js                       | 107 --------
 63 files changed, 557 insertions(+), 1681 deletions(-)
Gates: 6 of 6 passed

scripts/check-fmt.sh (exit 0)

check-fmt: listing tracked files
check-fmt: checking 535 files

scripts/zb build --summary all (exit 0)

... (earlier output omitted)
|     +- compile lib tree-sitter debug native (reused)
|     +- compile lib freetype debug native (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- options (reused)
|     +- options (reused)
|     +- translate-c dvui-c cached
|     |  +- compile exe translate-c debug native (+21 more reused dependencies)
|     +- options cached
|     +- options cached
+- install text cached
|  +- compile lib text debug native cached 12ms MaxRSS:40M
|     +- WriteFile plugin_root.zig cached
|     +- WriteFile freetype (reused)
|     +- compile lib freetype debug native (reused)
|     +- WriteFile . (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- compile lib freetype debug native (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- options (reused)
|     +- translate-c dvui-c (+1 more reused dependencies)
|     +- options (reused)
|     +- options (reused)
+- install markdown cached
|  +- compile lib markdown debug native cached 12ms MaxRSS:40M
|     +- WriteFile plugin_root.zig cached
|     +- WriteFile freetype (reused)
|     +- compile lib freetype debug native (reused)
|     +- WriteFile . (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- compile lib freetype debug native (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- options (reused)
|     +- translate-c dvui-c (+1 more reused dependencies)
|     +- options (reused)
|     +- options (reused)
|     +- translate-c (reused)
+- install image cached
   +- compile lib image debug native cached 12ms MaxRSS:40M
      +- WriteFile plugin_root.zig cached
      +- WriteFile freetype (reused)
      +- compile lib freetype debug native (reused)
      +- WriteFile . (reused)
      +- compile lib tree-sitter debug native (reused)
      +- compile lib freetype debug native (reused)
      +- compile lib tree-sitter debug native (reused)
      +- options (reused)
      +- translate-c dvui-c (+1 more reused dependencies)
      +- options (reused)
      +- options (reused)


scripts/zb build test --summary all (exit 0)

... (earlier output omitted)
      +- WriteFile freetype cached
      +- compile lib freetype debug native cached 12ms MaxRSS:39M
      +- WriteFile . cached
      +- compile lib tree-sitter debug native cached 11ms MaxRSS:39M
      +- compile lib freetype debug native (reused)
      +- compile lib tree-sitter debug native (reused)
      +- translate-c dvui-c cached
      |  +- compile exe translate-c debug native cached 6ms MaxRSS:39M
      |     +- options cached
      |     +- options cached
      |     +- options cached
      |     +- run exe generate-def (aarch64.zig) cached
      |     |  +- compile exe generate-def debug native cached 4ms MaxRSS:39M
      |     +- run exe generate-def (amdgcn.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (arm.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (bpf.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (common.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (hexagon.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (loongarch.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (mips.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (neon.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (nvptx.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (powerpc.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (riscv.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (s390x.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (ve.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (wasm.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (x86_64.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (x86.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (xcore.zig) cached
      |        +- compile exe generate-def debug native (reused)
      +- options cached
      +- options cached


scripts/zb build test-integration --summary all (exit 0)

... (earlier output omitted)
|     +- options (reused)
|     +- options (reused)
+- run test fizzy-glass-tests cached
|  +- compile test fizzy-glass-tests debug native cached 13ms MaxRSS:40M
|     +- WriteFile freetype (reused)
|     +- compile lib freetype debug native (reused)
|     +- WriteFile . (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- compile lib freetype debug native (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- translate-c dvui-c (+1 more reused dependencies)
|     +- options (reused)
|     +- options (reused)
+- run test fizzy-plugin-loader-tests cached
|  +- compile test fizzy-plugin-loader-tests debug native cached 14ms MaxRSS:40M
|     +- WriteFile freetype (reused)
|     +- compile lib freetype debug native (reused)
|     +- WriteFile . (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- compile lib freetype debug native (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- translate-c dvui-c (+1 more reused dependencies)
|     +- options (reused)
|     +- options (reused)
+- run test fizzy-text-plugin-tests cached
|  +- compile test fizzy-text-plugin-tests debug native cached 15ms MaxRSS:36M
|     +- options (reused)
|     +- WriteFile freetype (reused)
|     +- compile lib freetype debug native (reused)
|     +- WriteFile . (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- compile lib freetype debug native (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- translate-c dvui-c (+1 more reused dependencies)
|     +- options (reused)
|     +- options (reused)
+- run test fizzy-workbench-plugin-tests cached
   +- compile test fizzy-workbench-plugin-tests debug native cached 14ms MaxRSS:38M
      +- options (reused)
      +- options (reused)
      +- WriteFile freetype (reused)
      +- compile lib freetype debug native (reused)
      +- WriteFile . (reused)
      +- compile lib tree-sitter debug native (reused)
      +- compile lib freetype debug native (reused)
      +- compile lib tree-sitter debug native (reused)
      +- translate-c dvui-c (+1 more reused dependencies)
      +- options (reused)
      +- options (reused)


scripts/zb build check-web --summary all (exit 0)

... (earlier output omitted)
|  |     +- run exe generate-def (amdgcn.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (arm.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (bpf.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (common.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (hexagon.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (loongarch.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (mips.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (neon.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (nvptx.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (powerpc.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (riscv.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (s390x.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (ve.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (wasm.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (x86_64.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (x86.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (xcore.zig) cached
|  |        +- compile exe generate-def debug native (reused)
|  +- options cached
|  +- options cached
|  +- options cached
|  +- options cached
|  +- options cached
|  +- options cached
|  +- options cached
|  +- options cached
|  +- options cached
|  +- options cached
|  +- translate-c cached 3ms MaxRSS:34M
+- compile obj rehome-fixture-web debug wasm32-freestanding cached 6ms MaxRSS:35M
   +- translate-c dvui-c (+1 more reused dependencies)
   +- options (reused)
   +- options (reused)


scripts/zb build test-sdk-version --summary all (exit 0)

... (earlier output omitted)
   +- WriteFile . cached
   +- compile lib tree-sitter debug native cached 10ms MaxRSS:36M
   +- compile lib freetype debug native (reused)
   +- compile lib tree-sitter debug native (reused)
   +- options cached
   +- options cached
   +- translate-c dvui-c cached
   |  +- compile exe translate-c debug native cached 6ms MaxRSS:39M
   |     +- options cached
   |     +- options cached
   |     +- options cached
   |     +- run exe generate-def (aarch64.zig) cached
   |     |  +- compile exe generate-def debug native cached 5ms MaxRSS:37M
   |     +- run exe generate-def (amdgcn.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (arm.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (bpf.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (common.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (hexagon.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (loongarch.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (mips.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (neon.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (nvptx.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (powerpc.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (riscv.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (s390x.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (ve.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (wasm.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (x86_64.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (x86.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (xcore.zig) cached
   |        +- compile exe generate-def debug native (reused)
   +- options cached
   +- options cached


The coast stepped after the children were laid out, so each frame drew
where the clock was one gap ago and uneven gaps showed as uneven steps.
It now steps in init, before layout.

Agent-Team: linux
Worker: claude

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@fizzy-linux
fizzy-linux Bot force-pushed the scroll/coast-frame-pacing branch from ce95595 to 79a595e Compare October 26, 2026 23:35
@fizzy-pm

fizzy-pm Bot commented Oct 26, 2026

Copy link
Copy Markdown

PM note: how this PR will be handled

What it is for: scroll: coast-frame-pacing
Issue #362: mobile: animations and the coast run at 60 fps on a 120 Hz display (frame pacing)
Done when (from the issue): one PR with the test, numbers in the body; foxnne checks on the main web build.

Rules that apply: none special.
Reviews needed: 1, from any other team or kind.
Needs the maintainer's explicit yes before merge: no

Things to watch (checked by rule):

  • the body names its work issue (Part of fizzyedit/work#N)
  • size within 800 lines outside tests and docs (25)
  • a gates section with what was run

What happens next:

  1. Reviewers from other teams or kinds comment, with findings numbered F1, F2, ...
  2. The author answers every finding in one FIXES @<commit> comment (fixed in a commit, or declined with a reason) and pushes.
  3. Reviewers re-review the new commit on their own.
  4. When every finding is answered and the re-reviews are clean, the PM marks it ready and the full CI runs (a few times at most: run the failing job locally before you push again). Only when CI passes does the PM look, and the PM gives the final okay.

A living status comment below is kept current. Nothing here is a merge decision.

@fizzy-pm

fizzy-pm Bot commented Oct 26, 2026 •

Copy link
Copy Markdown

Where this PR stands

Stage: Done: approved
Next: Waiting for the merge queue

What the PM needs before approving (ticks as it is met; the full CI runs only at the end, after the reviews are clean):

  • The body names its basis (Part of fizzyedit/work#N or a plan step)
  • Within the size limit: 53 of 800 lines outside tests and docs
  • The body shows which gates the author ran
  • No open findings at this commit
  • Every earlier finding was answered in a FIXES comment (2 answered)
  • Clean reviews at this commit from 1 kind: linux/agy (has 1)
  • Marked ready, which starts the full CI (the PM does this the moment the items above are met)
  • The full CI passes at this commit (CI is green)
  • The PM's final okay (pm-approval)

Reviews at the current commit (650c9b1):

Reviewer Verdict Findings
linux/agy clean none

2 earlier reviews are for older commits and will be redone.

Latest fixes comment: https://github.com/fizzyedit/work/issues/419#issuecomment-6438916902 (2 findings answered)

Updated 2026-10-27 11:45 UTC by the PM. This comment is edited in place.

@fizzy-windows fizzy-windows Bot added the reviewing:windows-codex a windows/codex review is running label Oct 27, 2026
@fizzy-macos fizzy-macos Bot added reviewing:macos-agy a macos/agy review is running and removed reviewing:macos-agy a macos/agy review is running labels Oct 27, 2026
@fizzy-windows fizzy-windows Bot removed the reviewing:windows-codex a windows/codex review is running label Oct 27, 2026
Agent-Team: linux

Worker: codex
@fizzy-windows fizzy-windows Bot added reviewing:windows-codex a windows/codex review is running and removed reviewing:windows-codex a windows/codex review is running labels Oct 27, 2026
Agent-Team: linux

Worker: codex
@fizzy-linux fizzy-linux Bot added reviewing:linux-agy a linux/agy review is running and removed reviewing:linux-agy a linux/agy review is running labels Oct 27, 2026
@fizzy-pm
fizzy-pm Bot marked this pull request as ready for review October 27, 2026 10:29
@fizzy-pm
fizzy-pm Bot added this pull request to the merge queue Oct 27, 2026
Merged via the queue into main with commit c89ea47 Oct 27, 2026
32 of 34 checks passed
@fizzy-pm
fizzy-pm Bot deleted the scroll/coast-frame-pacing branch October 27, 2026 11:57
@fizzy-linux fizzy-linux Bot mentioned this pull request Oct 27, 2026
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.

0 participants