fix(phone): one push/pop slide for every phone stack, built once and only moved; no flash of the previous pane (#1005, rebuild of #1006) #1014
Closed
kayg
wants to merge 0 commits from
t3/pane-slide-c into dev
pull from: t3/pane-slide-c
merge into: kayg:dev
kayg:main
kayg:feat/style-sheet-fixes
kayg:storage/wal-checkpoint-off-save-1051
kayg:t3/paged-search-reconcile-final
kayg:feat/pass8
kayg:review/calendar-2
kayg:fix/shared-row-swipes
kayg:feat/contrast
kayg:dev
kayg:feat/collections-db
kayg:fix/instant-keys-1056
kayg:feat/money-round
kayg:perf/stalls-1054
kayg:wip/tiering-v3-cold4
kayg:wip/tiering-v3-cold5
kayg:port/rows-actions
kayg:port/rows-drop
kayg:port/hidden-blocks
kayg:port/rows
kayg:port/port-tables
kayg:port/port-tables-2
kayg:t3/mail-1011-liveness
kayg:port/devices
kayg:port/port-attachments
kayg:port/port-attachments-2
kayg:port/port-attachments-3
kayg:docs/design-consistency
kayg:docs/engineering-standards
kayg:fix/rusqlite-0.41-rustsec-2026-0459
kayg:feat/iphone-fixes
kayg:shared/restore-and-stale-918-919
kayg:fix/phone-top-band-contrast
kayg:feat/notes-approve
kayg:perf/soak-max-gate
kayg:feat/files-s1-identity
kayg:fix/lifecycle-event-id
kayg:feat/quickfix
kayg:wip/tiering-v3-cold
kayg:perf/web-mockup-frame-fixes
kayg:port/contacts-merge
kayg:port/contacts-edit
kayg:test/shared-room-no-deleted-text
kayg:perf/first-paint-credits
kayg:fix/shared-history-after-grant
kayg:fix/phone-swipe-regressions
kayg:feat/contrast-r1
kayg:review/sharing-pr3-review
kayg:feat/tiering-v3-s2-tags
kayg:feat/folder-drop
kayg:fix/deskpills-lazy-share
kayg:feat/sharing-s1-pr3
kayg:tmp/money-round-before
kayg:fix/phone-pane-backdrop-roots
kayg:fix/palette-preload-chips
kayg:fix/invite-defaults
kayg:port/tasks-matrix
kayg:fix/restore-green-gates
kayg:fix/sharing-fast-path-hardening
kayg:t3/photos-s1
kayg:feat/tiering-v3-s1-namespace
kayg:notes-archive-hide
kayg:feat/tasks-actions
kayg:t3/photos-plan-slice-one
kayg:feat/whiteboard-s1
kayg:t3/paged-search-reconcile
kayg:t3/smooth-pane-transitions
kayg:t3/index-position-startup-scan
kayg:fix/private-staging-759b-r2
kayg:feat/dav-transport
kayg:feat/imap-notes-fetch
kayg:feat/imap-notes-projection
kayg:feat/imap-notes-readonly
kayg:feat/imap-notes-auth
kayg:feat/imap-notes-server-foundation
kayg:docs/undo-block-ids-plan
kayg:fix/undo-768
kayg:proto/block-identity-v7d
kayg:issue/carddav-read-perf-fix-r2
kayg:issue/carddav-read-r2
kayg:docs/imap-766-plan-v2
kayg:docs/imap-notes-plan
kayg:docs/quota-plan-2
kayg:fix/parallel-test-flakes
kayg:feat/contacts-companion-pure
kayg:docs/calendar-backend-v2-plan
kayg:feat/calendar-ical-converter
kayg:docs/tasks-writes-v2-plan
kayg:docs/carddav-writes-v2-plan
kayg:docs/contacts-import-v2-plan
kayg:issue/610-pm-midnight
kayg:feat/calendar-v2-s1-containment
kayg:docs/dav-recorder-v2-plan
kayg:plan/previews-865
kayg:plan/save-log-durable-entry
kayg:fix/e2e-data-on-ram
kayg:feat/appwindow3
kayg:feat/appwindow2
kayg:feat/appwindow
kayg:feat/money-p1
kayg:feat/keys-sheet
kayg:review/calendar-2-themes
kayg:feat/smooth-cursor
kayg:fix/float-style
kayg:review/calendar-2-float
kayg:release/2026-11-06-hotfix
kayg:archive/port/rows-drop-code
kayg:archive/port/rows-actions
kayg:archive/port/rows
kayg:scratch/tasks-894-ui-gates
kayg:review/calendar-2-night-wip
kayg:release/2026-11-05
kayg:archive/feat/tiering-v3-s1-namespace
kayg:archive/flaky/rows-drop-fixed
kayg:archive/flaky/rows-actions
kayg:archive/feat/tiering-v3-reader
kayg:archive/feat/tiering-v3-roots
kayg:archive/flaky/rows
kayg:sim/bm15-final
kayg:sim/bm15-fix
kayg:sim/bm15-bis-932
kayg:sim/bm15-bis-909
kayg:sim/bm15
kayg:sim/bm15-bis-887
kayg:perf/tiering-option-b
kayg:port/style-3
kayg:port/style-2
kayg:port/style
kayg:fix/sw-lazy-precache
kayg:fix/vim-w-waits-for-save
kayg:fix/signout-test-races
kayg:fp-scratch/all
kayg:sim/bm15-first-paint
kayg:archive/bm15/rows-drop
kayg:archive/bm15/rows-actions
kayg:fix/palette-snippet-contrast
kayg:archive/bm15/rows
kayg:archive/bm15/hidden
kayg:archive/plan/save-log-durable-entry
kayg:mock/money-fix2
kayg:archive/fix/e2e-data-on-ram
kayg:mock/appearance-all
kayg:mock/pill-press
kayg:archive/docs/design-consistency
kayg:mock/auto-swipes
kayg:mock/mail-actions
kayg:archive/feat/mail-p1
kayg:mock/money-static
kayg:archive/review/standards-917
kayg:archive/docs/engineering-standards
kayg:perf/tiering-761-fix
kayg:mock/type-audit
kayg:mock/third-pane
kayg:feat/contacts-import-v2-s1
kayg:perf/executor-hot-path
kayg:archive/port/hidden-blocks
kayg:archive/port/devices
kayg:scratch/executor-on-894
kayg:scratch/executor-spans2
kayg:scratch/executor-spans
kayg:train/2026-11-03-bm14c
kayg:archive/port/rows-drop
kayg:feat/tiering-761-d-scale
kayg:feat/tiering-761-c-index
kayg:feat/tiering-761-b-reader
kayg:archive/review/sharing-pr3-review-9fec3d1f
kayg:train/2026-11-03-bm14b
kayg:perf/ports-lazy-budgets
kayg:feat/tiering-761-a-migration
kayg:train/2026-11-03-bm14
kayg:train/2026-11-03-bm12
kayg:archive/review/sharing-pr3-review
kayg:archive/feat/sharing-s1-pr3
kayg:train/2026-11-03-bm11
kayg:archive/feat/imap-notes-fetch
kayg:train/2026-11-03-bm10
kayg:archive/review/sharing-pr3-review-code
kayg:archive/plan/previews-865
kayg:train/2026-11-02-bm9
kayg:archive/port/port-attachments-3
kayg:archive/port/contacts-merge
kayg:fix/motion-audit-859
kayg:train/2026-11-02-bm8
kayg:archive/scratch/bm8-prep
kayg:archive/port/port-pickers
kayg:archive/port/port-tables-2
kayg:archive/port/port-tables
kayg:archive/feat/sharing-s1-pr3-code
kayg:archive/scratch/bm7-fixed
kayg:train/2026-11-02-bm7
kayg:archive/fix/parallel-test-flakes-code-minipc01
kayg:train/2026-11-02-bm6
kayg:docs/imap-766-readonly-slice
kayg:feat/dav-recorder-v3
kayg:research/788-diagnosis
kayg:archive/fix/parallel-test-flakes
kayg:archive/perf/pr792-cold-index-edit
kayg:docs/sharing-slice-1
kayg:archive/docs/imap-766-plan-v2
kayg:feat/dav-recorder-v2
kayg:archive/docs/dav-recorder-v2-plan
kayg:spike/imap-766-s0-cases
kayg:archive/fix/undo-768
kayg:feat/dav-recorder
kayg:archive/docs/contacts-import-v2-plan
kayg:archive/feat/calendar-ical-converter
kayg:feat/contacts-import
kayg:perf/cold-growth-on-764
kayg:perf/cold-growth-on-tiering
kayg:archive/docs/tasks-writes-v2-plan
kayg:archive/docs/calendar-backend-v2-plan
kayg:archive/feat/contacts-companion-pure
kayg:feat/tasks-set-status
kayg:feat/tasks-move-reorder
kayg:archive/docs/carddav-writes-v2-plan
kayg:archive/feat/calendar-v2-s1-containment
kayg:feat/tasks-delete-promote-duplicate
kayg:archive/feat/dav-transport
kayg:archive/fix/carddav-rebuild-r1
kayg:archive/fix/carddav-retention-r1
kayg:feat/carddav-writes
kayg:perf/quota-on-tiering
kayg:perf/quota-simple
kayg:perf/cold-growth-on-quota-stack
kayg:feat/calendar-identity
kayg:feat/calendar-event-parser
kayg:feat/calendar-props-maps
kayg:port/glass-when-ring
kayg:feat/tiering-761-s1
kayg:wip/10by32-01-impl-759b-scratch-20261030
kayg:wip/6by32-01-bm3-webkit-pause-20261030
kayg:wip/10by32-01-bm3-chromium-pause-20261030
kayg:wip/6by32-01-tier-761-s1-pause-20261030
kayg:spike/imap-766-s0
kayg:wip/6by32-02-calternal-pause-20261030
kayg:wip/8by64-01-review-688-pause-20261030
kayg:wip/6by32-01-verify-744-pause-20261030
kayg:wip/6by32-01-verify-742-pause-20261030
kayg:fix/private-staging-759b
kayg:wip/6by32-01-review-748-pause-20261030
kayg:wip/6by32-01-review-733c-pause-20261030
kayg:wip/6by32-01-review-733b-pause-20261030
kayg:wip/6by32-01-perf-idle-8-pause-20261030
kayg:wip/6by32-01-perf767-base-pause-20261030
kayg:wip/6by32-01-perf767b-767-pause-20261030
kayg:wip/6by32-01-perf767b-764-pause-20261030
kayg:wip/6by32-01-perf767-767-pause-20261030
kayg:wip/6by32-01-perf767-764-pause-20261030
kayg:wip/6by32-01-lists-b-pause-20261030
kayg:wip/6by32-01-ids-verify5-pause-20261030
kayg:wip/6by32-01-ids-verify4-pause-20261030
kayg:review/calendar-month
kayg:wip/10by32-02-undo-768-20261030
kayg:test/ids-verify3
kayg:wip/10by32-02-bm3-chromium-20261030
kayg:wip/10by32-01-review-753-20261030
kayg:wip/10by32-01-perf-idle-2-20261030
kayg:wip/10by32-01-bm2-webkit2-20261030
kayg:plan/759b-staging
kayg:train/2026-10-30-bm2
kayg:review/758b-tests
kayg:review/758-tests
kayg:review/764d-tests
kayg:review/767b-tests
kayg:review/preview-2026-10-29
kayg:review/767-tests
kayg:docs/tiering-731-plan
kayg:wip/c6b02-when2
kayg:wip/c6b02-tasks-create-fix5
kayg:wip/c6b02-settings-frost-mock
kayg:wip/c6b02-settings-frost-base
kayg:wip/c6b02-settings-frost
kayg:wip/c6b02-ring
kayg:wip/c6b02-review-733d
kayg:wip/c6b02-bm1-full-a
kayg:wip/compute02-when-field
kayg:wip/compute02-webkit-lists-repro
kayg:wip/compute02-train-bl2-dev
kayg:wip/compute02-dev-green-pw164
kayg:docs/deploy-plan
kayg:review/764c-tests
kayg:review/764b-tests
kayg:review/748g-tests
kayg:review/764-tests
kayg:review/759b-tests
kayg:fix/storage-owner-liveness-642
kayg:fix/storage-fix-7
kayg:wip/compute02-storage-fix-7
kayg:review/759-tests
kayg:feat/tiering-731
kayg:wip/tiering-731-first-attempt
kayg:wip/compute02-storage-fix-1
kayg:review/754g-tests
kayg:perf/idle-honest-2
kayg:review/754f-tests
kayg:review/754e-tests
kayg:review/755-tests
kayg:review/754d-tests
kayg:review/754c-tests
kayg:review/754b-tests
kayg:review/754-tests
kayg:fix/storage-private-tmp-642-dev
kayg:wip/compute02-verify-750
kayg:test/ids-verify5
kayg:test/ids-verify4
kayg:fix/storage-exact-file-quarantine-642
kayg:wip/compute02-verify-740
kayg:perf/one-flush-save
kayg:review/calendar-static
kayg:wip/compute02-verify-737
kayg:review/indexing-ring
kayg:review/when-field-2
kayg:wip/compute02-review-733
kayg:proto/block-identity-2-review
kayg:proto/block-identity-review
kayg:wip/c6b02-tc-design
kayg:review/when-field
kayg:issue/tasks-create-ids
kayg:issue/tasks-create
kayg:review/combined
kayg:wip/compute02-review-combined
kayg:review/task-polish
kayg:review/top-buttons
kayg:review/q1-q5
kayg:train/2026-10-26-bl2
kayg:archive/wt-398h
kayg:archive/train-bm-proptest-seed
kayg:archive/integ325-293
kayg:archive/integ325-ci
kayg:archive/client-auth-review-baseline
kayg:archive/wt-sim-4853
kayg:archive/wt-sim-4811
kayg:archive/wt-448m
kayg:archive/wt-398a-allocator
kayg:issue/calendar-adr
kayg:archive/old/train/2026-10-23bk2
kayg:archive/old/train/2026-10-23bk
kayg:issue/469-mockup-9a
kayg:issue/smart-tasks-mockup
kayg:issue/469-menus
kayg:issue/652-signout-flake
kayg:issue/652-history-fix7
kayg:issue/652-history-fix6
kayg:archive/old/issue/spring-check-perf
kayg:issue/spring-check-perf
kayg:issue/659-rename-fast
kayg:archive/old/train/2026-10-21ar
kayg:issue/search-hardening-3
kayg:issue/652-history-fix5
kayg:issue/660-port-sheets-glass
kayg:issue/652-history-fix4
kayg:issue/652-history-fix3
kayg:issue/652-history-fix2
kayg:issue/652-history-flake
kayg:train/2026-10-21an
kayg:issue/settings-admin-port
kayg:issue/search-port
kayg:train/2026-10-20am
kayg:issue/storage-split-fix2
kayg:issue/storage-split
kayg:archive/old/issue/folder-ids-fix
kayg:train/2026-10-20al
kayg:archive/old/issue/folder-ids
kayg:train/2026-10-20ak
kayg:issue/tables-mockup
kayg:train/2026-10-19aj
kayg:train/2026-10-19ai
kayg:issue/469-merge-fixes
kayg:issue/sidebar-band
kayg:archive/old/issue/608-settings-spec
kayg:train/2026-10-19ah
kayg:issue/swipe-offscreen
kayg:train/2026-10-19ag
kayg:archive/old/issue/590-nlp-adr
kayg:archive/old/issue/587-event-after-write-2
kayg:train/2026-10-19af
kayg:archive/old/issue/587-event-after-write
kayg:issue/469-pill-room-c
kayg:issue/469-pill-room
kayg:train/2026-10-19ae
kayg:issue/469-narrow-handle
kayg:issue/397-ios-swipe-2
kayg:archive/old/issue/adrs-photos-files-tasks
kayg:issue/469-desk-fixes
kayg:archive/old/issue/auto-update-adr
kayg:issue/469-filter-gap
kayg:issue/469-port-1b
kayg:issue/442-opacity-flake
kayg:archive/397-ios-swipe-2
kayg:issue/327-web-fast-3
kayg:archive/old/issue/469-port-1
kayg:issue/469-port-1
kayg:issue/327-web-fast-2
kayg:archive/old/issue/327-web-fast
kayg:archive/old/issue/425-stt-bench-vq1
kayg:archive/old/issue/445-no-bleed
kayg:archive/old/issue/400-swipe-mockup-2
kayg:issue/426-client-review
kayg:issue/426-client-2
kayg:issue/426-client
kayg:archive/old/issue/476-safe-area-lab
kayg:archive/445-top-light-2
kayg:archive/old/issue/445-top-light
kayg:issue/471-blocks-mockup
kayg:archive/old/issue/448-links-app-2
kayg:archive/old/issue/448-links-app
kayg:archive/old/issue/398-cold-links
kayg:issue/434-442-small-2
kayg:issue/434-442-small
kayg:archive/old/issue/398-unload
kayg:archive/old/issue/445-bottom-band
kayg:issue/445-bottom-band
kayg:issue/351-rem-3
kayg:archive/312-views-mockup
kayg:issue/351-rem-2
kayg:issue/351-rem
kayg:archive/old/issue/327-first-note
kayg:issue/395-width-phone
kayg:archive/old/issue/327-typing
kayg:issue/396-ios-edges
kayg:issue/397-ios-swipe
kayg:archive/398-allocator
kayg:archive/old/issue/327-notes-index
kayg:issue/345-347-contrast-empty-2
kayg:archive/old/issue/44-arenas
kayg:issue/44-arenas
kayg:archive/integ325
kayg:archive/old/issue/327-perf-harness
kayg:archive/old/issue/44-thp
kayg:issue/44-thp
kayg:archive/old/issue/285-sticky-pills
kayg:archive/old/issue/44-trim-3
kayg:issue/44-trim-3
kayg:archive/old/issue/165-cards
kayg:archive/old/issue/165-picker-2
kayg:archive/old/issue/212-multi-select
No reviewers
Labels
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set
Reference
kayg/calternal!1014
Loading…
Reference in a new issue
No description provided.
Delete branch "t3/pane-slide-c"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Issue #1005. A rebuild of #1006 from
dev(cd7f84432) as kayg decided in #1006's round-5 note: option (c), every phone screen is built once and only moved, by one CSS transition per screen on one attribute. #1006 is superseded by this and left open for kayg to close. Evidence for the 2× strips is in the comment below.What it does
styles/panes.cssis the whole slide: a screen'stranslateandopacityare a CSS transition on itsdata-place(front,under,ahead, fromlib/pane.tsplaceOf),280ms cubic-bezier(0.25, 0.8, 0.25, 1)withtransition-delay: -16ms(the first frame already moves),visibilityflipping with it, Reduce Motion crossfading. No script animation, no second transition, no unmounting for a slide, nothing built or changed under a finger. Notes (PhoneStack), Contacts and Tasks use it..stack::before), the screens have no fill: the root cause of #1005's flash of the previous pane (a tinted screen drifting sideways showed its hard edge through the card above it).snippet, already in memory) on a page drawn like the editor's but with classes of its own (so nothing that looks for the editor finds it); the live editor is made after landing, hidden, and blur-crossfades in over it (180 ms) with nothing else moving (a spec asserts that at the moment it is put in the page no animation runs); then the preview leaves.data-placefirst: the route changes a task later, and a card handed back at once moved back a few pixels before turning round, which the swipe spec caught).inert), and fades in after the card has left on a pop; never over the card.calternal.looksin localStorage, written from the editor's own state for the last 300 notes; a note not seen on this device yet shows the default page until the crossfade). The row preview carries no frontmatter and nothing was added to the list rows.Decisions kept from the note
Option (c); card = title plus first lines; curve
cubic-bezier(0.25, 0.8, 0.25, 1), 280 ms, both directions. The iOS tap fix of #1006 is not ported: nothing is built or changed while a finger is down any more, and in the simulator 60 of 60 taps on rows (30 light, 30 dark) plus 40 more in the swipe runs opened their note. Dropped: the plain-note stand-in and its text peek (peekTextwas never warm in dev, so it gave the default page every time), build-ahead on press and focus, the MutationObserver head start, the settle timers and the pane-stack module; dead tint tokens (--chrome,--solid,--side-tint).Round 2 (kayg's three items) and what I found on the way
perf/web.sh --bundle-only --gate, dev-01, prodcd7f84432measured next to it): 225.353 KiB JS / 17.935 KiB CSS against prod 225.368 / 17.955. (Round 1 compared KiB with bytes: sorry.) The slide's motion CSS (transitions, shadows, Reduce Motion), the card, its CSS and the look memory are in the lazyswipe-backchunk and its stylesheet (and the lazy Contacts and Tasks import the motion CSS); the first stylesheet has only the tint layer and the resting places. #1006's leftovers are gone (the branch is fresh fromdev; the dead tint tokens and the.screen.note.cardbackground rule are removed). Budgets moved only:swipe-back1.7 KB,Palette20.95 KB (from 22),vim38.35 KB (from 39); nothing raised. Brotli moves the first script by about 150 B with any edit (chunk hashes and the scoped style hash feed it): the stylesheet's first comment inPhoneStackcarries a word ((s1)) that is the one of 24 sampled neutral variants that measured under prod; the note in the script says so. Sampling had to be repeated several times as the code changed.pane-transition"a note's own page look is on its card from the first frame once this device has seen it" (first open: default page, then the editor's; after a reload the card already wears it).stable(which decides when the document's flow changes) was a pre-effect, saw the slide as not begun and laid the whole document out again in the tap's frame (the second frame, 30 to 50 ms, in 15 of 15 cold pushes). It is a plain effect now. What was left is attributed and fixed in round 3 below.Two things found by re-recording (the first strips of round 2 were of an older variant still served on the preview port, so I checked what the real head did): (a) the card was full-bleed under the pills and jumped to the inset page when the editor faded in (an absolutely placed card ignores the body's padding): fixed in
2a9687f19, andpane-transitionnow compares the card's box with the page's box (it fails without the fix); (b) 16 specs failed at the earlier head (note-pills,tint,title-pill; chromium and webkit): the editor's wrapper had no height (.pageis 100% of it, so nothing scrolled) and an editor made before the card chunk arrived was taken away and made again after the slide, leaving the pills and headings tracking the old scroller. Both fixed (a12806d13,ea7239429); the 16 pass.Round 3 (the grey bands, the slow cold-push frames)
cd7f84432, built and served the same way, same simulator, same six runs, same action scripts and lengths) and ran the same detector on both: dev 4 hits in six recordings, this PR 3 (and 0 in the six recordings of the final head). All seven hits are at 53.0 to 53.8 s into their recording, in dev and in this PR, whatever was happening: a fixed time after the recording starts points at the simulator's recorder, not the page. Separate issue with both sheets: #1017. Not a blocker.measure()rAFs) with the main thread busy for 42 to 90 ms. So dev's slow frames are JS on the main thread; this PR's were something else, and fewer.backdrop-filteroff 0; the list's bar'sbackdrop-filteroff 0; the top pills'backdrop-filteroff 6; the list's bar moved below the window with opacity left at 1 0. The bar, kept built and painted under the note and only made see-through at the tap, is a glass layer that is still in the window; making it invisible made the frame after the tap late..dockbox.hide .dockalso hasbottom: -300px(instant, not transitioned, so on a pop it is back in place at once, still invisible, and its fade after 183 ms is unchanged). Cold pushes after the fix, real build: 0 of 40 with a frame ≥30 ms in the first 60 ms after the tap (before: 18 of 40).Round 4 (warm pops, the swipe-back flake)
bottomcomes back with the fade (transition: bottom 0s linear 183msbeside the opacity's), so the bar stays below the window until the card has landed. Also in all 40 pops one frame of 33 to 49 ms about 330 ms after the tap: the editor being taken away (a Svelte flush, main thread busy), after the card has landed, not a slide frame; dev's equivalent is 51 to 59 ms in the tap frame itself (8 of 40) and 52 to 98 ms in the ABAB window.3c5c99618)pane-transition.spec.tsat--repeat-each=50, webkit-390, default workers: 46 failed of 500. The causes, each fixed at its root:NotePreview,slideEnd).swipe-back.ts). And the release sent the screens to0px 0/100% 0, where the stylesheet saysnone/100%: handing back 340 ms later started a second transition from where the first had got to. It now writes the stylesheet's own values, so there is no second transition.transitionrunevent comes with a frame, and a frame later than a 140 ms Reduce Motion transition is long missed it) and walks them through their whole length in fixed steps (hold,walk), whatever the load. It waits for a screen's own transition before walking (a press on a row starts transitions of its own), sets aside what an earlier step left held (the tap during the slide now holds the slide a third of the way, and checks the reversal starts from there), and says what it saw if none comes.div.li, other tests' notes arriving).pane-transition.spec.tsat--repeat-each=100(1,000 runs), webkit-390, default workers, while the full webkit suite and the simulator ran on the same host: 1000 passed, 0 failed (and 500 of 500 two heads earlier). No retries, no looser limits.swipe-back1.85,vim38.2 (total unchanged);Palettestays 20.95.Gates (head
05985db57)journal-trash, the known flake that passes alone and on dev); webkit-390: all passed; webkit-1440: 131 passed, 0 failed on its own run (the first full run haddayfail with an ENOENT intest-results, caused by my own second Playwright run in the same worktree, andjournal-trash;daypasses alone 3 of 3)pane-transition.spec.ts×100 (1,000 runs), webkit-390, default workerssvelte-check/ lintOne post-landing frame per push and per pop (the editor made, or taken away, after the card has landed) is a 36 to 128 ms frame in the tap window: cold-push ABAB window ≥50: PR 15 per 15 pushes (one each; window max 90 to 128 ms) against dev 17 to 26 (max 62 to 167). It is not a slide frame, and I did not try to split it; say if you want that.
Not met, and open
TasksScreen.svelte)./#/list/allpage (?test=1) left alone for about 9 s opens today's daily note by itself in Safari.🤖 Generated with Claude Code
Simulator strips at 2×, from the build of head
05985db57(iOS 27.0 Home Screen app, iPhone 18 Pro)Replaces the strips of
3c5c99618. Every second recorded frame (every frame for the mount and the cancelled swipe), labelled with its frame number in the recording. Pop and mount are the two things that changed since the last strips: the list's bar returns with its fade, and the editor is made a frame after the slide's last one.Push (the card slides in as the note's title and the first lines of its row)

light:
dark:
Editor mount after the push (the ~90 to 128 ms post-landing frame: the live editor is made under the card and blur-crossfades in; the title stays at the same height, the page does not move, nothing jumps)

light, frames 168 to 184:
dark, frames 144 to 176:
Pop by the back pill (the card leaves; the list's bar fades in after it has gone, never over the card)

light:
dark:
Edge swipe (released: it goes on from where the finger left it; at the end the editor crossfade is the same one)

light:
dark:
Cancelled swipe (the card comes back, the list's bar never shows)

light:
dark:
No code changed for these.
🤖 Generated with Claude Code
Merged to dev at
c63a4398e(head05985db57), verified by the orchestrator: 2× sim strips (push/pop/edge/cancelled/mount, light+dark) clean; first paint 225.361/17.940 KiB ≤ prod; Mac gate 0 slide frames ≥33 ms; warm-pop ABAB vs dev better; swipe-back spec 1000/1000. Ships with the next daily train.Note: an earlier merge commit (
7d2ed2b41) used a stale refs/pull head (3a8c763d1, an ancestor);c63a4398ecompletes it.Follow-ups: cold-push post-landing editor-mount frame (90–128 ms, fewer than dev) and #1017 (sim grey bands, pre-existing).
kayg referenced this pull request2026-11-09 00:34:13 +00:00
kayg referenced this pull request2026-11-09 00:34:31 +00:00
kayg referenced this pull request2026-11-09 00:34:48 +00:00
Pull request closed