port: Settings › Devices (approved mockup) #902
Open
kayg
wants to merge 17 commits from
port/devices into dev
pull from: port/devices
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/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!902
Loading…
Reference in a new issue
No description provided.
Delete branch "port/devices"
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?
Ports the approved Settings › Devices from
apps/mockup(review/calendar-2, #867) intoapps/web. Today's Settings layout is kept; only the Devices page content changes. The 3-pane Settings layout and the sidebar-foot change are not in here (not yet reviewed by kayg).What is ported
AppCard), Signed in, Apple devices, Add a device row.lib/leave-row.ts,devices/ConfirmRemove.svelte): the button grows into [Cancel · Confirm] with a clip reveal, laid out once. The row leaves one frame after the confirm (a copy layer slides out; the rows below glide up with a transform-only FLIP).chrome/SheetShell.svelte+lib/morph-glass.ts, the one glass, clip-path reveal on desktop, rise from the bottom on a phone) with its three choices (iPhone or iPad, Mac, Something else). Own lazy chunk (devices).Wired to what the server has (nothing invented)
account.installations,account.revoke.account.app-passwords,account.app-password-revoke.POST /api/v1/auth/app-passwords {name, scopes}. The server wants a recent passkey check; on a 403 the sheet runsreverifyPasskey()once and repeats.Missing server actions (left out of this PR)
.mobileconfig) and its URL: the iPhone QR and the Mac "Download profile" in the mockup need it. Every kind therefore ends on the by-hand details (server, port 443, user, password shown once).contacts: the server grantscontactsandnotes.*; Calendar/Tasks (CalDAV) and Mail (IMAP) have no scope that anything serves yet, and Notes over IMAPS is still in #873–#882. So the sheet offers Contacts only, and the mockup's "What should it sync?" step is skipped (one app).DeviceDetail): no rename or scope-edit action exists (account.app-passwordsis list + revoke only). Not part of the approved list here.Decisions
lib/device-kinds.tsand passed toIconthrough a new optionaldprop, so the shared icon set (first paint) did not grow.dimPage(body/theme-color tint) port: the sheet dims with its own scrim fade only. Rows on the sheet's glass have no grey fill (kayg 11-02 memo); the mockup's rule for that was dead CSS, the product applies it..presstint washed out Done / Install / the confirm).flow.spec.tsandpwa.spec.tsfollowed the new markup (two-step Sign out; the "Apple devices" heading made the substring query for "Devices" ambiguous).ShareSheet,contacts/SheetShell);chrome/SheetShellhere is the mockup's current glass version. Whoever lands second should fold the other onto it.Gates (details in the comment below)
e2e/review4-signout.spec.ts(same on dev). Web unit tests 96/96.e2e/devices.spec.ts--repeat-each=5CI=1 --retries=0: Chromium 1440+390 60/60 (dev-01), WebKit 1440+390 60/60 (dev-02). Neighbours (pwa, flow, admin, settings-fit/links, lazy-ui/offline, passkeys-ui) pass.perf/web.sh --bundle-only --gate): first JS 233.200 → 233.463 KB (+0.26 KB: the manifest lines for the new chunk and theIconprop; budget 240), first CSS unchanged 18.799.deviceschunk 2.879 KB (own line, 3.05), idle-screens 39.188 → 41.815 (50.5), total 353.255 → 359.036.🤖 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.Gate evidence (head
58c423d4)Functional
e2e/devices.spec.ts --repeat-each=5 CI=1 --retries=0 --workers=1: chromium-1440 + chromium-390 60/60 (dev-01); webkit-1440 + webkit-390 60/60 (dev-02).Bundle (brotli KB, base = origin/dev
41f2efa3→ head): first JS 233.200 → 233.463 (budget 240); first CSS 18.799 → 18.799; idle-screens 39.188 → 41.815 (50.5); newdeviceschunk 2.879 (budget line 3.05); total JS 353.255 → 359.036 (budget 407.25 = sum of lines).Frames, Mac VM (macos-01, rAF deltas, lock held with EXIT trap, Chromium excluded: its idle row is p50 50 ms / p95 133 ms on this VM, so it is not an instrument). WebKit, ms, run 3 of 3 (runs 1–2 look the same):
The gate (p95 ≤ 20, 0 frames > 25 ms) is NOT shown as met. The idle control fails it itself (p95 27, 22 frames > 25 ms), so the VM was noisy during all three runs (earlier today the mockup's idle row was p95 20 / max 20). Phone gestures are no worse than idle; at 1440 add open/close and the confirm glide are above the idle row and need a re-run on a quiet Mac before this merges. The probe is a throwaway spec (not committed).
Shots (product vs mockup, 1440 and 390, light and dark; list, asking, Add kinds, Add details): code:~/Developer/Worktrees/shots/port-devices/ (
product-*/mockup-*).Follow-up: first paint and Mac frames (head
49d8c000)First-paint JS (brotli KB,
perf/web.sh --bundle-only --gate) — dev41f2efa3: 233.200. This PR: 233.724 → (sharedIconreverted, device icons drawn incomponents/devices/DeviceIcon.svelte) 233.427 → (devices.svelte.ts no longer importsApiError) 233.337 now (+0.137 KB; raw index +36 B). First CSS 18.799 = dev. Not ≤ dev yet. What I found:lazy()in a module only Settings loads, so the entry is not in the first-screen module). The remaining first-screen cost is vite's__vite__mapDepsfile list, which names every lazy file in index, plus the symbol renumbering that follows: the same sources shift the brotli size by ±0.1 KB (an equivalent if/else rewrite of the sheet made it 233.436, so I reverted it). Raw index is +36 B over dev; the brotli swing is renaming noise on an 845 KB file.idle-screens(no new manifest names; costs the "own budget line").Mac frames (macos-01 WebKit, rAF deltas, lock held, no other job on the VM:
psshowed nothing but system daemons).(Run B's 1440 sign-out/remove rows did not finish: the test timed out on the VM.)
kayg referenced this pull request2026-11-05 23:21:11 +00:00
housekeeping #1009: rebased+failing, left open for review.
rebased Devices onto dev; kept current icon registry and picker groups. retained the original explicitly budgeted 3.05 KB devices chunk addition; first-paint caps unchanged.
head:
1064f17245ee57972f0e0d8c65ae04797d985eec; 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 230774 B (-3 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-902.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
1064f17245ee57972f0e0d8c65ae04797d985eecTargeted specs,
CI=1 --retries=0 --workers=1, dev-01 Chromium and dev-02 WebKit (through~/bin/slot), against a dev-head backend (cd7f84432).flowandpwa(own projects) not run.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.idle-screens53.69 vs 51.8 (+1.9 KB). First paint JS -3 B, CSS +0 B vs dev. The PR's own 3.05 KB devices chunk is not what is over: the Devices code lands inidle-screens. Moving it into its own lazy chunk (with its own budget) is the likely fix.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.
Screenshots and state (issue #1009),
026e6d4055Settings, Devices (#902). READY FOR MERGE apart from one item: the perf ABAB x5 run is queued behind Mail (the perf-02 session was cancelled when Mail went first; this page is a lazy Settings chunk, off the typing and open-note paths).
perf/web.sh --bundle-only --gateDev itself fails five phone specs at 390 (
glass:76,lazy-ui:70,preload:89x3); not this PR.Product (Chromium, 2x; the list is faked with
page.routeasdevices.spec.tsdoes) next to the approved mockup, light and dark.Differences from the mockup: the mockup has an Install Calternal card and a longer fixture list (iPad, Claude Code, named Apple devices); the product shows only the faked list; the mockup's settings sidebar and warm backdrop differ from the product's shorter sidebar. The structure (This device, Signed in, Apple devices, Add a device, the Cancel / Sign out confirm) is the same.
Screenshots (2x; light and dark; 1440x900 and 390x844). Left: the approved mockup (review/calendar-2). Right: this PR.
devices
revoke
Real Safari (Mac VM, 1x; the same fake answers
account.installationsandaccount.app-passwords, injected by a script in a copy of the dist because the page loads its lists once on mount)devices
revoke
Restacked on dev
d4b32af94, head1432d20ef: READY apart from one perf run (queued behind Mail).perf/web.sh --bundle-only --gateDev
d4b32af94itself fails 9 specs (palettepreload:118at 1440 and 390,glass:76,lazy-ui:70,preload:89x3 at 390), on Chromium and WebKit; the same ones fail on this head and none is new.Restacked on dev
661123e94, headcb251674d4ad7df041e8a0ddb4858e150f9da3c0. Not READY: first paint is +124 B over dev (plain 227125 B; normalised +79 B). CSS +0. Specs: devices 12 passed, both engines; gate passes (budget total 515.3 KiB). The overage islazybecoming an export of lazy-ui.svelte.ts (the Devices loaders sit in their own module) and the relettering that follows; the #853 credit came off the baseline, so the -78 B of the last round is gone. Perf ABAB x5 is queued behind Mail. Dev661123e94itself fails the same nine specs as before (palettepreload:118at 1440 and 390,glass:76,lazy-ui:70,preload:89x3), on both engines; none is new on this head.READY FOR MERGE: Devices (head
36181444b)Rebased on dev
9438918f3(#848/#849 in), budgets regenerated from a fresh build of this head, bundle gate clean, specs on dev-02 (idle host) withcalternal-h861, chromium and webkit at 1440 and 390 (preload, lazy-ui, lazy-offline, glass, shortcuts and this PR's own specs): 0 failed.148 passed, 44 skipped.
READY FOR MERGE: Devices (head
852fac80b)Merged dev
fe2efbf11(#1044) into the branch (it also merges cleanly with4274dafb4,git merge-tree), budgets regenerated from a fresh build, bundle gate clean, specs on dev-02 withcalternal-h861, chromium and webkit at 1440 and 390. Dev baseline onfe2efbf11: 228023 B plain / 227378 B normalised / CSS 18236.Specs (preload, lazy-ui, lazy-offline, glass, shortcuts, devices): 136 passed, 36 skipped, 0 failed. Pixel and contrast specs (x86, dev-01): the same 6
phone-barsphoto-dark specs fail on dev itself (9438918f3) and on this PR; nothing else.Handoff: head
852fac80bis pushed and READY as postedHandoff (usage limit): the x86 pixel and contrast run on dev-01 (4 projects, 15 specs) was stopped before finishing this head; I released its job. Done: dev
fe2efbf11and the earlier heads (#902, #854, rows tip, #878 base) ran there with the same 6phone-barsphoto-dark failures on dev itself and nothing new. Next step: re-runpx-d1b.sh-style pixel set on this head on dev-01 (about 1 h per head) if you want it before merging.View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.Merge
Merge the changes and update on Forgejo.Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.