Tasks UI slice 3: ticking (spring check, set-status, Undo) #888
Closed
kayg
wants to merge 1 commit from
port/tasks-3-s3 into dev
pull from: port/tasks-3-s3
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!888
Loading…
Reference in a new issue
No description provided.
Delete branch "port/tasks-3-s3"
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?
Stacked on #832 (Tasks UI slices 1–2, rebased onto dev
41f2efa3for this work). Slice 3 of the Tasks UI port plan: ticking.What it does
SpringCheckBoxandstrike), keyboard changes without motion. The box outline is back at 3:1 on the glass (--check-border: var(--ink-3)); slice 2's "disabled, exempt from contrast" mark is gone.tasks.set-status(never a text edit). The row shows the change in the next frame (pending), asks the server, and lets go of it only after the list has been asked again, so a tick never flickers back.keep:[ids]on everytasks.listcall until you leave the list), struck through.set-statusback to the old status, because the action reportsundo_available: false(no job fornotes.undo).block_changedshows the row as it now is.Server gaps (listed, not faked)
tasks.listrows carry noversion, andset-statusneeds the task note's. Each change first asksnotes.getfor it (one round trip, off the frame). Ask: addversionto thetasks.list/tasks.getrow.set-statusback to todo cannot take that back (Undo restores the status only).tasks.update-many(orset-when-many); onetasks.updateper task would not be atomic (W6). The red overdue chip from slice 2 stays.Frames / perf: no work on the typing path; the tick touches one row and one request. Bundle: Tasks chunk only (sizes below).
Gates: see the first comment (the VMs were under train bm14's lock when this opened, so the gates run after it).
🤖 Generated with Claude Code
Budget (kayg approved, 2026-11-08 08:20 IST): kayg approved raising the lazy budget total, up to 543.9 KiB.
perf/budgets.jsonin this PR sets each named lazy line to the largest size measured over the 17 approved ports after trimming (rounded up to 0.01 KiB) and the total to the sum of the lines (543.25 KiB). The same file is in the first PR of every stack, so whichever merges first carries it. First paint is judged separately and has not been raised.Gates for slice 3 (head
3b7c3e33)Run on dev-02 (aarch64), Chromium and WebKit, through
~/bin/slot,CI=1 --retries=0 --workers=1(dev-01's/tmpran out of inodes late in the day; its Chromium runs on the earlier heads of this work are in the notes below).tasks-tick,tasks-lists,tasks-lazy,tasks-no-hscroll,task-check: chromium-1440tasks-contrast(projectcontrast, 4 sky hours × 2 looks × 2 widths, now including every tick box's outline at 3:1)src/tasks; the 2 errors are ine2e/review4-signout.spec.ts(already on dev)Commands (on the VM, in
~/Developer/Worktrees/port-tasks-3):CI=1 ~/bin/slot nix develop -c bash -c 'cd apps/web && CALTERNAL_BIN=<repo>/target/debug/calternal bunx playwright test e2e/tasks-tick.spec.ts e2e/tasks-lists.spec.ts e2e/tasks-lazy.spec.ts e2e/tasks-no-hscroll.spec.ts e2e/task-check.spec.ts --project=<p> --workers=1 --retries=0'for<p>in chromium-1440, chromium-390, webkit-1440, webkit-390;… e2e/tasks-contrast.spec.ts --project=contrast.What the specs prove: a tick strikes in place and the server has
done(tasks.get); the row stays after the list asks again, and is gone after leaving the list; Undo puts it back; unticking is its own undo; Space ticks withtransition: none(keyboard never animates); a 500 puts the row back and says so once; a change from another place shows on the open page; a tick with the server's reply held back for 800 ms does not hold up typing in the Composer.Found and fixed on the way: the contrast helper measured every spring check's tick (drawn over its own accent fill) against the glass, which is why slice 2 had marked the box disabled; it now skips the tick and measures the outline separately. A tick right behind this device's own write got a 409 (the note's version moves once more after a write): one re-ask of the version, only within 3 s of our own write.
Bundle (
scripts/bundle-size.mjs, brotli, KB)62cfff69)First paint stays ≤ 240. Chunk lists for budgets.json (not edited):
TasksScreen5.95 JS + 1.97 CSS (the existingweb.bundle.tasks_js_brotlicap is 20).Screenshots (product vs mockup, 1440×900 and 390×844)
On
code:~/Developer/Worktrees/shots/port-tasks-3/(s3-*product,m-s3-*mockupreview/calendar-2). Attached below. The product shots were taken at the slice 5 head, so the header also shows the layout switcher from slice 5.Not measured
Mac VM frame numbers (rAF deltas, tap-to-strike, 1,000-row scroll) are NOT done. The 1,000-task scroll and "ticking never blocks typing" under load need the Mac VM and the perf harness; only the functional typing test above ran. Virtualisation of long lists is not implemented (the page renders all rows; a list is capped by the server at 2,000).
s3-list-1440x900.png
m-s3-list-1440x900.png
s3-ticked-1440x900.png
m-s3-ticked-1440x900.png
s3-list-390x844.png
m-s3-list-390x844.png
s3-ticked-390x844.png
m-s3-ticked-390x844.png
WIP: Tasks UI slice 3: ticking (spring check, set-status, Undo)to Tasks UI slice 3: ticking (spring check, set-status, Undo)kayg referenced this pull request2026-11-03 11:16:23 +00:00
Round 2 (head
d5e90609): mockup values--gthat moved the box 3 px; the box's padding no longer depends on it (new spec compares the box's x on a row with chips and one without).Gates, dev-02,
CI=1 --retries=0 --workers=1, specs tick / lists / lazy / no-hscroll / task-check: chromium-1440 27 passed, chromium-390 26, webkit-1440 27, webkit-390 26.tasks-contrastpassed. Bundle (brotli KB): first-paint JS 233.51, all JS 322.05,TasksScreen5.93 JS + 1.98 CSS.Also fixed: the "changed in another place" spec's own second client now asks for the version again when a write has just moved it (it flaked once on WebKit).
Shots:
~/Developer/Worktrees/shots/port-tasks-3/oncode(s3-*product,m-s3-*mockup), attached. Not measured: Mac VM frames.s3-list-1440x900.png
m-s3-list-1440x900.png
s3-ticked-1440x900.png
m-s3-ticked-1440x900.png
s3-list-390x844.png
m-s3-list-390x844.png
s3-ticked-390x844.png
m-s3-ticked-390x844.png
kayg referenced this pull request2026-11-05 23:21:11 +00:00
housekeeping #1009: rebased+failing, left open for review.
rebased Tasks tick/list/lazy UI slice onto dev; earlier Tasks foundations are already in dev.
head:
9a614c8d20a5694879b1d3e430c3fb4e1d1f13c6; based on devcd7f84432febfc63b788fbb9b9f9950452982d74, pushed with the original exact force-with-lease.frontend frozen install, check, lint, build and unit tests passed. bundle gate failed. first-paint brotli vs dev: JS 230701 B (-76 B), CSS 18386 B (+0 B).
targeted Chromium and WebKit specs at 1440 and 390 never started. the audit waited more than three hours behind the live daily-train-1107 locks (first queue at 23:45 IST, 7 November; final queue cleanup after 02:46 IST, 8 November). browser validation and UI captures are unrun. only this audit’s exact queued units were stopped; the train locks and owners were left intact. hot-path perf qualification is unrun.
all executed gates used the VM Nix environment, shared Mac lock and slot. exact commands, source heads, logs and dev baseline. frontend inputs are identical to the tested frontend tree when a Rust-only repair changed the head.
original-head cherry/patch inventory,
pr-888.md; unmatched entries are missing-patch candidates, with semantic overlap/replacements noted above.final queue, cleanup and source-verification evidence.
Final-port test pass (issue #1009), READY: no: specs pass; bundle gate fails.
head
3ae31ca93843efbfff96e837123d8abc53762aa8Targeted specs,
CI=1 --retries=0 --workers=1, dev-01 Chromium and dev-02 WebKit (through~/bin/slot), against a dev-head backend (cd7f84432).Bundle gate:
perf/web.sh --bundle-only --gate(the 17 failures from the housekeeping audit). Per the gate's own rule (total_js_brotlibudget must equal the sum of the named chunk budgets) a cap can only move between named chunks; there is no donor chunk inside this PR, so a fix is a code cut or a decision by kayg. I raised nothing and moved nothing.TasksScreenis 5.982 KB brotli against its 5.1 KB cap (+0.88 KB, all of it the tick slice:status.ts,TaskRow,data.svelte.ts). First paint is fine: JS -76 B, CSS +0 B vs dev.tasks_js_brotli20 -> 19.1) to the chunk cap; the gate rejects it (sum rule) so I reverted it (head3ae31ca93, same tree as before). Getting under 5.1 needs about 15% off the chunk, i.e. dropping behaviour (the retry onblock_changed, the per-task queue). That is kayg's call.Screenshots attached (Chromium + WebKit, 2x, light and dark, 1440 and 390; mockup
#/tasks/todayand board for comparison). Row geometry (box, title, chips, spacing, icon size) matches the mockup. Differences are from later slices (view switcher, Views section, big title) and the product's sky backdrop. Playwright WebKit shots paint no backdrop blur; real Safari was not checked.Not done: Not run yet: Mac VM Safari blur/frame check and perf ABAB x5 on the perf VMs (they need a ready PR first); light/dark 2x screenshots against the mockup are only done for #888 (see its comment).
Not marked READY FOR MERGE.
kayg referenced this pull request2026-11-08 21:57:02 +00:00
kayg referenced this pull request2026-11-08 21:57:17 +00:00
kayg referenced this pull request2026-11-08 21:57:36 +00:00
Final gates (issue #1009),
614a46723bhead
614a46723b2a44f78c66e01ffab6d9a8675c75dc, restacked on devc63a4398e(after #1014, the phone navigation; this PR's phone screens usedata-placelike Contacts).READY FOR MERGE.
perf/web.sh --bundle-only --gateHow first paint is measured. The page's script names every lazy chunk with a random hash. Hashes do not compress, and every one changes whenever anything changes, so two builds of the same code differ by 100 to 250 B (three builds of one tree are byte-identical, so a median of 3 builds cannot reduce it). The first-paint files with the hashes replaced by a constant (
-H) give the code's own bytes. devc63a4398eis 230622 B JS and 18371 B CSS this way.Typing and open-note, perf-02, Chromium with 4x CPU slowdown, 10k Home, release server (dev head,
20eab8d3a) for every arm, rounds rotated, 5 rounds.devAanddevBare the same dev build (the control). Median of the 5 per-run medians [min-max], ms:Every metric of the tip sits inside the dev-vs-dev control (the control itself differs by 4.6 ms in the flick's CPU). Two variants of the press registration (one effect per row; the press engine asked for on pointer intent) were built and measured in the same session (v1 76.4, v2 74.8 in the flick's CPU): neither beats the control, so neither is in the PRs. The earlier session (which showed +1.4 to +3.3 % on the tip) was one that the control spread covers as well.
Screenshots (2x; light and dark; 1440x900 and 390x844). Left: the approved mockup (review/calendar-2). Right: this PR.
list
list-ticked
Differences from the mockup that are later slices or not ported: the view switcher beyond List and Board, the Views section, the big title, the share and more pills on the card, the mic in the When field; the product also shows its own sky backdrop and the seeded tasks above.
kayg referenced this pull request2026-11-09 00:34:31 +00:00
kayg referenced this pull request2026-11-09 00:34:53 +00:00
Merged to dev at
2fa9e18fb(head614a46723), checked by the orchestrator: first paint +0/+0, specs green in Chromium and WebKit at 1440/390, typing/open-note ABAB inside the control spread, screenshots reviewed. Ships with the next daily train.kayg referenced this pull request2026-11-09 01:46:34 +00:00
kayg referenced this pull request2026-11-09 01:46:47 +00:00
kayg referenced this pull request2026-11-09 01:47:04 +00:00
Pull request closed