port: note bars + Style sheet replacing the Inspector (approved mockup) #850
Closed
kayg
wants to merge 0 commits from
port/style into dev
pull from: port/style
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: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!850
Loading…
Reference in a new issue
No description provided.
Delete branch "port/style"
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?
port: note bars and Style sheet (approved mockup) — slice 1 of 3
Replays the stale
origin/port/note(21 commits, 10-23) onto current dev (merge, conflicts resolved) and replaces the old Inspector.What ships
Inspector.svelte;lazy-uiloads it fromidle-screens.noteCard,note-card.css) and the palette rewrite.calternal-frame: off(documented inediting.svelte.ts; round-trips, only written when off).Decisions
idle-screens(warmed after first paint). The chip morph uses the Composer'sLineMorphinstead of torph (torph was 25 KB raw in the bar).Gates (CI=1 --retries=0, through ~/bin/slot)
~/Developer/Worktrees/shots/port-style/{mockup,product-pr1,product-pr2}oncode.Not ported / open
lib/attachments/attach.tswill collide withlib/attach.tshere (trivial).🤖 Generated with Claude Code
Gate results (heads: PR1
7a6d5adf). Targeted specs, CI=1 --retries=0 via ~/bin/slot: chromium-1440 83/83, chromium-390 all pass (earlier toast-bar:121 fixed in spec), webkit-1440/390 pass except load flakes (toast-bar:40, touch-select:226, editor:44) that pass in isolation. Shots:code:~/Developer/Worktrees/shots/port-style/{mockup,product-pr1,product-pr2}(rest, typing, Style tabs at 1440 and 390; mockup pairs).BM10 follow-up (new head
de991727). What caused what, found at a local merge of origin/dev + #840 + this stack:Product fixes
preload.specpalette intent (#840's Palette chunk importedLineMorphfrom theidle-screenschunk because the typing strip shared it): the strip's chip now has its own tiny word-in (.nb-word), nothing shared with the Composer; modifier intent fetches only Palette again.prefs-offline): a note now always has its bar at first paint, and Morph drew it at its empty size for one frame; Morph now measures the first contents before first paint.note-bars-motion, 212/114 ms against <250 now): the room under a phone's Style sheet was a custom property on:root(restyled the whole page every frame); it lives on the note's scroller now. Only the showing tab is built when the sheet opens; the others on intent at the tab strip or after 2.5 s.Specs updated because they asserted the OLD Inspector/Info/bar design (same behaviour, the new design's controls; no limit loosened):
preload.spec: on a phone the rest bar has Style (not Note info) so the on-demand check opens Style and expects.style-sheet; first-DOM-update test opens Insert/Info by address on a phone and uses the strip's Link tool for the note picker;.inspectoris.style-sheet.trash.spec,trash-search.spec: Note info is opened by its address (a phone's rest bar has no Info button).day.spec: "Log the time" is the typing strip's "Log time" tool on a phone (mockup TB4), the tools button on a desktop.tree.spec:377: tree lines are on the Style sheet's Text tab (tab=text), reset by its name.Not caused by this stack:
sidebar-edge:8,vim:380(pre-existing; both passed at the merge), andlazy-styled:54on webkit-1440 ("search: unstyled on its first frame") fails identically on origin/dev + #840 alone.BM14 follow-up at
dee3e961(integrated pinned dev41f2efa3first, retaining the pull hint and 23 lazy imports).Merged-tree reproduction,
--workers=1 --repeat-each=10 --retries=0:editor.spec.ts:57, cpu x6: 1 pass / 9 failures.glass.spec.ts:76: 10/10 pass; original page crash not reproduced.pill-room.spec.ts:210, note/light: 10/10 pass; original target closure not reproduced.review4-signout.spec.ts:120, stuck uplink=true / BroadcastChannel=true: 9 pass / 1 failure during the initial save-state precondition, before logout. This repeat failed without the original explicit “Page crashed” message.The new source toggle helper in #850 opens the palette; the old test used the former toolbar button. Captured shifts include the palette preview: it retains the last note while search changes/clears, but looked up metadata from the requested id. Clearing results removed the visible note's metadata row and moved its text by 36px. Fix: metadata follows the note actually drawn (
shown). The helper now waits for palette closure and the actual editor mode before returning. The layout observer and zero-shift requirement are unchanged.The WebKit save assertion failed about 92ms after it began despite advertising a 5s timeout, with a blank internal matcher error (trace shows
_Frame.expect/ExpectError), so this is not evidence of a 5s save delay. The setup now polls the samedata-saveattribute from the runner with the same default 5s deadline. No durability condition changes. This is a test wait-path fix; the original WebKit crash remains unproven.The glass test's fixed 450ms/1800ms settling sleeps now wait on its existing finite-animation settling condition; the Settings step also waits for its selected-tab state. Pill-room already waits for state and is unchanged. No perf/layout threshold is loosened. After repeats are running on dev-01 (Chromium) and dev-02 (WebKit), with WebKit browser-process diagnostics enabled. Evidence and any remaining failures will follow; no full train or merge into dev.
Further WebKit evidence: pinned dev
41f2efa3, its own binary and dist, passed all three exact WebKit cases 10/10 each. Afterdee3e961, merged-tree glass and sign-out passed 10/10 each, but pill-room failed 1/10. A separate pill-room --repeat-each=10 diagnostic run failed 1/10 and produced a native core.The core is from
WPEWebProcess, terminated by SIGSEGV inside the packagedlibWPEWebKit-2.0.so.1; this is a real renderer failure, not evidence thatstill()needs a longer timeout. The stripped build has no function names for the faulting frames. GDB shows repeated native frames at0xfffff2bfda14,0xfffff2c0035c, and0xfffff2c01e84, with the fault at0xfffff5c07b2c. Core inspection used Nix GDB on dev-02; only the small backtrace is retained after cleanup.Earlier sign-out's blank internal assertion failure is therefore not enough to establish a separate Playwright matcher bug; it may also reflect renderer failure. The runner-side state poll retains exactly the same attribute and default 5s deadline. No crash is treated as a successful test.
Two diagnostic ideas did not remove the pill-room failure: keeping the toolbar mask layer stable, and
WEBKIT_SKIA_CPU_PAINTING_THREADS=1. They are not being shipped. An isolated change removing only the newly introduced word-chip blur is being tested; its fade and 3px rise remain. Final results will follow. The existing pill ink-spacing/no-word-movement checks, glass checks and layout/perf thresholds remain intact.Pushed follow-up
1812cc5e: the newly added toolbar word-chip blur is removed; its fade, 3px rise, duration, reduced-motion behavior, and all geometry remain. With only that CSS change afterdee3e961, pill-room passed 30/30 (--repeat-each=30 --workers=1 --retries=0) on the merged tree, using the original browser environment, with no renderer/thread flags.This isolates a reproducible WPE rendering failure triggered by the transient word-chip filter during toolbar transitions. Before removing it, two separate ten-repeat runs each failed once and one yielded the native renderer SIGSEGV. The mask and serial-raster experiments failed and were reverted. The exact native function remains unknown because the packaged library is stripped; I am not claiming a symbol-level engine diagnosis.
Final exact-case ten-repeat WebKit matrix (glass, pill note/light, sign-out stuck/BroadcastChannel) and final Chromium x6 editor repeat are running against both pushed fixes. No assertion, spacing, layout or perf budget has been weakened. Final totals and cleanup will follow.
Final targeted BM14 follow-up. Fixes are pushed only to owning branches:
feat/sharing-s1-pr2:97d790f692.port/style:1812cc5e10(includesdee3e961, preview/wait fix).Pass counts, before → final:
owner_unshared_admission_is_cached_until_a_grant_and_never_after97d790f6.replay_authorization_waits_for_the_per_note_writer_lock97d790f6.editor.spec.ts:57, cpu x6dee3e961.glass.spec.ts:761812cc5e) and replace fixed settling sleeps with state waits (dee3e961).pill-room.spec.ts:210, note/light1812cc5e.review4-signout.spec.ts:120, stuck uplink=true / BroadcastChannel=truedee3e961,1812cc5e. The original sign-out crash itself was not independently core-diagnosed.The two Rust after results come from 30 complete auth-library runs, 64 tests each, with normal parallel test threads on the BM14 merged tree plus the fix. Before: 62 passed / 2 failed per run. Each loop overlapped one ordinary slot build on dev-01. They are not claims of 30 complete workspace/train runs. Exact Rust commands/load details: #829 (comment).
Browser commands, inside Nix/normal slots, CI=1, workers=1, retries=0, original browser environment:
The wrappers import the repository config, select only the named native project (throttled-1440 or webkit-390), remove project dependencies, and set absolute testDir/webServer.cwd. They do not change thresholds or browser options.
CALTERNAL_BINandE2E_DISTpoint at the merged-tree build. Pinned dev41f2efa3with its own binary/dist passed all three WebKit cases 10/10 each.Additional checks: production builds PASS;
cargo fmt --all --checkPASS;cargo clippy -p calternal-auth --lib --tests -j4 -- -D warningsPASS; localgit diff --checkPASS.bun run checkremains blocked by pre-existing generated action-type drift (also reproduced directly on pinned dev). Directbunx svelte-check --tsconfig ./tsconfig.jsonreports two existinglogoutStatusnarrowing errors in unchangedreview4-signout.spec.ts:225-226, plus 16 warnings; that file is byte-identical between pinned dev and BM14. No new diagnostics point at the changed preview/CSS.Limits: the packaged WPE library is stripped, so the exact native faulting function is unknown. The blur trigger is isolated by repeated before/after runs and a native core; the original glass/sign-out crashes do not each have their own core. The mask-layer and serial-raster probes failed and were reverted. No timeout, access assertion, layout/ink-spacing threshold, or perf limit was relaxed. No Linux frame-rate claims are made. No full train was run and no PR was merged.
cleanup complete: no own bm14-fix units remain active. removed both VM throwaway worktrees, build targets, temporary homes, baseline binaries, and the large native core. retained only small diagnostic logs/JSON outside the repository. owning control-host worktrees are clean.
Pushed two e2e fixes to this branch (
3744b595,d252a902), from the BM14b repeat-each study (full table on #891):glass.spec.ts:dee3e961made the flash check start with 15–19 screencast frames instead of 40+, soframes > 20failed 20/20 on the train head. Now it waits for frames (>24) after the caret step. Train head + fix: 20/20 plain, 20/20 under load.editor.spec.ts: the throttled layout-shift test is split in two (loading+typing, switching modes). It ran ~18 s of a 30 s limit at 6x and hit it whenever the host was busy. Train head + fix: 20/20 in all four (1440/390 × typing/modes), plain and under load, slowest 18.4 s.Still open here:
note-bars-motion.spec.ts:71(Style sheet) fails ~1/40 under load because the sheet mounts in one task of ~150–260 ms at 6x against the 250 ms budget. Needs an app change or a decision on the budget; see #891.Style sheet open: task timings before / after (6x CPU, throttled-390, dev-01)
Cause (trace of
note-bars-motion.spec.ts:71): the tap opened the sheet in one task of 150–300 ms: Svelte mounted the whole sheet (strip + Page tab) in the tap's frame,Selectoraskeddocument.fonts.ready(a getter that forces a style recalc, ~39 ms at 6x),scrollLeft = index * clientWidthforced a layout, and the first pointer press of a page flippeddata-last-input, which a*selector depends on (whole-page restyle, ~70 ms at 6x, in the pointerdown listener).Fix (#850, commits
fdddc714,e2146619,3764d0b9,bcd5ef36,af6fb861):Selectorasksfonts.readyonly while a font is still loading.data-last-inputis written only when entering or leaving "keyboard" (the only value CSS reads), so the first tap costs no restyle.Longest main-thread task,
rest to Style sheet(there), spec's own trace:d252a902)--repeat-each=20e2146619only)Probe of one open at 6x (task, ms): click task 239–263 → 75–82; the Playwright pointerdown listener's forced recalc 71 → gone from the page's side; next tasks are the strip frame (~55) and the page frame (~60).
Host load average of other agents was 2–10 during these runs; the 263 outlier was one run with main-thread totals 2x its neighbours (host contention), but I cannot rule out a slow tail of ~1 in 40.
Look: frames at 1x (CDP screencast, 390 phone) before / after: the morph ends in the identical sheet; in the first 2–3 frames of the growth the capsule is empty for ~35–50 ms longer, then the strip and page fade in (no layout jump: the room is held).
Gates (dev-01,
~/bin/slot): bundle budgetsperf/web.sh --bundle-only --gateok (first JS 233.5 / 240 KB brotli);packages/ui test:primitives55 pass,apps/web test96 pass; 16 Style/bar/glass/sheet specs on chromium-390 (336 pass, 24 skipped), chromium-1440 (67 pass), throttled-390 (2 pass).apps/web checkfails onsrc/lib/actions.gen.ts is out of date with contracts/actions.json(not touched by this work; present on the base).Stack: #851 now has
994278bb(merge of the new #850 head; this stack mergesport/stylerather than rebasing) +d94771b6(held room measured for its taller Page tab: 362 / 451 px) and #852 has656b61bf(merge of #851; lazy-ui import count 25 = pull hint + covers).note-bars-motion.spec.tsStyle sheet on both: 6 / 6 pass (longest 75–100 and 83–184 ms).BM14c: the red Style-stack cases came from #852's merge (a dropped
noteIdprop on<PageTab />, and the Page tab's held room shrinking mid-build). Fixed on #852 (f757dc1e,fed76ea1,07b6770a); nothing needed on this PR. Details and 20x numbers: #897 and #852.Perf fix pushed (head
6eb81f62):note-bars-lazy.cssholds the block bar, typing strip, chip and fade rules (5.4 of 8.5 KB), imported byBlockBar/Strip(idle-screens chunk, resolved after its CSS) instead ofmain.ts. First CSS raw 115.2 → 112.3 KB, brotli train 19.6 → 19.2 KB (dev 18.8).Method: release binaries built on dev-01, relayed to the perf VMs with matching sha256 (dev
de99cfbf…, train+fixes68dd30a0…, same devcalternal-perffor every run). Every run under~/bin/perf-lock, seed 1, 10k Home, alternating pairs. Medians of per-run p50 / p95, [min–max of p50]. The perf VMs were shared with other agents' long lock holds, so runs spread over several windows; dev-vs-dev spread alone is 0.20–0.37 ms on round trip.Browser (Chromium 4x CPU, 10k Home;
boot.perf.ts,list-search.perf.ts)Pooled, interleaved dev / #850 / #851 / #852 / #852+CSS-split runs across three windows (D n=21, #850 n=7, #851 n=5, #852 n=14, split n=7):
bundle-size.mjs): first CSS dev 18.8 → train 19.6 → with split 19.2; first JS 233.2 → 233.9 → 233.6. The remaining +0.4 KB CSS is the rest bar's own rules, needed by the first note screen.kayg referenced this pull request2026-11-04 19:06:52 +00:00
kayg referenced this pull request2026-11-05 23:21:11 +00:00
Content landed in dev via
12103f1c97— closing.Pull request closed