Merge train BM14d #907
Closed
kayg
wants to merge 0 commits from
train/2026-11-04-bm14d into dev
pull from: train/2026-11-04-bm14d
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!907
Loading…
Reference in a new issue
No description provided.
Delete branch "train/2026-11-04-bm14d"
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?
BM14d, based on origin/dev
41f2efa387b74175971a838f602535089d0d5fb4. Headc163abaea67b2a9b6874091b89e30c82d2e761a5. Do not merge.6eb81f62d94771b6(current head)07b6770a72eb0eb146be23e33c1d8deb8973b7e68484849c809a33c2No conflicts. Gate and perf results follow in comments. No fixes, no retries.
41f2efa3' into feat/sharing-s1-pr2 d95b705c0c6eb81f62) into train BM14d 310528dc67d94771b6) into train BM14d a4ac2d1de807b6770a) into train BM14d 15a447a5a072eb0eb1) into train BM14d 2a5f0b338d46be23e3) into train BM14d 439f86e8e23c1d8deb) into train BM14d b7172a378a8973b7e6) into train BM14d 05059def458484849c) into train BM14d e07b1385bf809a33c2) into train BM14dBM14d gates and matrix (first run, nothing retried)
Head
c163abaea67b2a9b6874091b89e30c82d2e761a5, base origin/dev41f2efa387b74175971a838f602535089d0d5fb4.CI=1,SLOT_TRAIN=1, train lock with EXIT trap on dev-01 and dev-02, on-disk TMPDIR,--workers=1 --retries=0, df before every step (dev-01 >= 190 GiB, dev-02 >= 300 GiB free). No fixes made. Perf results follow in a separate comment.bun install --frozen-lockfilecargo fmt --all --checkcargo clippy --workspace --all-targets --locked -j4 -- -D warningscargo test --workspace -j4cargo build -j4cd apps/web && bun run buildPERF_DIST=$PWD/apps/web/dist perf/web.sh --bundle-only --gatenode ci/check-case-paths.mjsnode ci/check-no-evidence.mjscd apps/web && bunx svelte-check --tsconfig ./tsconfig.jsone2e/review4-signout.spec.ts:225-226(never), which origin/dev has too (BM14c). No new error.Playwright matrix (every project, one attempt each, retries 0)
Chromium half on dev-01, WebKit half on dev-02 at the same time,
admin-setupon each, same.mtswrapper as BM14c.* The throttled projects depend on the failed
chromium-390case, so Playwright skipped them in the matrix ("10 did not run"). Their first attempts were run right after with--no-depson the same binary and dist: 8 passed, 0 failed (2 skipped by the spec).Known flakes
sidebar-edge.spec.ts:8andvim.spec.ts:387did not occur. webkit-390missing-links.spec.ts:245did occur (listed below).First-run failures (3)
Comparison on origin/dev
41f2efa3(built and run the same way,--no-deps,--repeat-each=10) and--repeat-each=10 --no-depson the train, in isolation and as the whole spec file.note-bars.spec.ts:100Attach > Divider puts a divider after the caret lineExpected "attach", Received "tools"after 5 saccent-labels.spec.ts:26accent swatch namesmissing-links.spec.ts:245renamed in the appAll three are first-run failures that do not reproduce, on the train or on origin/dev.
missing-links.spec.ts:245is on the known-flake list.accent-labels.spec.ts:26failed the same way in BM14c (first run only, 10/10 after) and is not on the known list.note-bars.spec.ts:100is new in this stack (note-bars.spec.ts comes with #850) and its first-run failure is a menu-state timeout (5 s); it passes 140/140 afterwards. I count none of them as a train defect, but they are first-run failures and the orchestrator should know.The 10 BM14c train-only failures (cover, style-sheet, note-bars, opacity, width) did not occur: #852
07b6770aholds thenoteIdfix.BM14d perf: train vs origin/dev
Train
c163abaeagainst origin/dev41f2efa3. Release binaries built on dev-01, relayed to perf-01 with matching SHA-256 (traincalternal364c9f3c…, dev789dd476…, controldev2= byte copy of dev789dd476…; the same devcalternal-perf5213cbd0…drives every arm). All measurements on perf-01, one session,~/bin/perf-lockheld on perf-01 and perf-02 (taken perf-01 first, then perf-02, held together for the whole run, released after). Seed 1, 10k Home for the browser. Every round runs all three arms (dev, train, dev2 control) in a rotating order, so each pair is interleaved and the dev-vs-dev control sits in the same session. Server: 5 rounds (each--runs 5, sizes 10k and 100k); append: 30 pairs; browser: 8 rounds. Values below are medians over rounds of the per-round p50 / p95. "control" = dev2 against dev.Server (
calternal-perf --sizes 10k,100k --runs 5 --cold-runs 0 --idle-secs 0 --storm-edits 1, ms)home.page,page_title,page_next,page_tag,page_big,first_page),search.query(prefix/typo mix): all inside the control's spread. The only p95 steps over 15% (home.first_page10k p95 +89%,page_big100k p95 +20%,open.api_get100k p95 +24%) are single outlier rounds (a p95 of 5 one-sample runs); the p50s are flat and the control shows the same size of jumps in other rows.search.first_queryat 100k: p50 4.0 -> 6.6 ms (+66%), p95 +17%. Control flat (-0%). Train rounds 6.94, 6.25, 7.47, 4.04, 6.58 ms against dev 3.69, 4.82, 3.84, 3.96, 4.19 and dev2 3.68, 3.79, 3.94, 4.14, 4.26. That is separated from both in this session (one sample per run, the first query after a start). At 10k it is flat (+11%, control +16%).Follow-up, different window, 100k only, 4 rounds x 5 runs, bisect of the backend merges (each arm = train tree up to that merge): search.first_query p50 median: dev 4.65 (runs 4.01, 5.67, 5.28, 4.03), through #829 4.21, through #835 4.24, through #905 3.95, through #899 4.24, full train 4.26 (4.23, 5.15, 4.28, 4.13). Not reproduced: every merge, and the full train, is inside the dev range there. sync.round_trip in that window: 0.211 / 0.216 / 0.211 / 0.218 / 0.213 / 0.214 (dev / #829 / #835 / #905 / #899 / train); open.note 1.049 / 1.032 / 1.116 / 1.214 / 1.067 / 1.070 (#905 alone reads +16% there and its next merge (#899) and the full train read +2%, so I take it as noise); search.query 1.689 -> 1.702.
So: a separated step in the protocol session, not reproduced in a second window and not attributable to any merge. Under the strict gate this is a regression beyond control noise; my reading is a window effect, but I cannot prove it.
200 appends (30 alternating pairs, perf-01,
CALTERNAL_NOTES_SAVE_MS=15, sameappend.pyas #792/BM14c)Browser (Chromium 4x CPU slowdown, 10k Home,
perf/boot.perf.ts,list-search.perf.ts,blaze.perf.ts, 8 rounds per arm, each arm served by its own binary and dist; WebKit is not available on the perf VMs)Cold FCP (+0.3% p50 / +0.6% p95) and first note painted (
cold_note, -0.1% / -1.5%) are flat against the control (-0.3% / +1.7%, +0.4% / +0.2%).list_search.keyp50 +0.0%, p95 +4.4% (control +3.6%).warm_tti/warm_tbtmedians are bimodal in dev itself (dev range 428-1200 ms) and the control moves as much. The BM14c cold-FCP step (+10%) is gone.Bundle bytes (brotli KB,
perf/web.sh --bundle-only, deterministic; dev built from41f2efa3the same way)index)idle-screens+10.42 (lazy)Perf verdict
Flat against the control: sync.round_trip (both sizes), open.note, notes.list pages, search.query, 200 appends, cold FCP, first note, list_search.key, first JS. Not flat:
search.first_queryat 100k in the protocol session (+66% p50, +2.6 ms, not reproduced in the follow-up window), first CSS +0.38 KB (+2.0%, deterministic), total JS +10 KB (lazy chunk).Raw data (server/browser JSON, append logs, bisect JSON) is attached as
bm14d-perf-raw.tar.gz. Perf work dirs and binaries are removed from the perf VMs.BM14d result: RED (strict reading). Do not merge. The access-control review of the #829/#835 owner fast path is still needed.
Head
c163abaea67b2a9b6874091b89e30c82d2e761a5, base origin/dev41f2efa387b74175971a838f602535089d0d5fb4. Merged--no-ffin order, heads verified: #8506eb81f62, #851d94771b6, #85207b6770a, #82972eb0eb1, #83546be23e3, #8953c1d8deb, #9058973b7e6, #8998484849c, #906809a33c2. No conflicts, no fixes, no retries.note-bars.spec.ts:100chromium-390 (spec new with #850, no baseline; 140/140 pass afterwards),accent-labels.spec.ts:26webkit-1440, and the known flakemissing-links.spec.ts:245webkit-390.accent-labels:26andnote-bars:100are not on the known list, so on a strict "first run counts" reading they keep the train from being GREEN. The 10 BM14c style failures are gone.list_search.key, 200 appends, cold FCP and first note. Open:search.first_queryat 100k +66% p50 (+2.6 ms) in the protocol session, not reproduced in a second window or in any per-merge bisect; first CSS +0.38 KB (+2.0%) and total JS +10 KB (lazy).Tables and raw data are in the two comments above.
BM14d follow-up: first CSS diet (PR #908) and
search.first_queryat 10 rounds1. First-paint CSS (brotli q11, exact bytes from
apps/web/scripts/bundle-size.mjs)41f2efa3c163abae2bb672ff)Per commit (each measured on its own build):
d9f206c9-31 B (pressed/disabled/danger/done and tall-pill rules to note-bars-lazy.css),03e9e1c3-28 B (sheet-open room rule loads with clear-sheet),93585a40-92 B (dead bar-stack/bar-line/bar-group),a0c7130a-30 B (unused .visually-hidden),2bb672ff-458 B (picker list CSS for@[[#loads after first paint, the picker's first lookup waits for it). First JS unchanged (232.8 KB).Pixel check: first note (headings, bold/italic, link, tag, list, tasks, quote, code), chromium 1440 and 390, light and dark (
&theme=), fixed clock, list pane masked (it shows wall-clock times). train vs train+diet: all four PNGs byte-identical (sha256 of the first 8: 1440 dark b197bb0e, 1440 light 82edfb27, 390 dark 745b0d97, 390 light a82606ce). A second train run is also byte-identical to the first, so the check can see real changes.Specs on the diet build (chromium+webkit, 1440+390, retries 0): link-suggest, tag-picker, glass-roots, glass, pill-room, tint, note-bars, note-bars-fit, style-sheet, sheet-geometry, bar-rest, lazy-sheet-recovery: 407 passed, 0 failed, 157 skipped (project filters). The full-suite train gate for the diet still belongs to a train.
2.
search.first_query, 10 rounds, interleavedperf-01,
~/bin/perf-lockheld on perf-01 and perf-02 for the whole run (released after). Fresh release builds on dev-01: devbd6ab4d4…(41f2efa3), train38f24b87…(c163abae), dev2 = byte copy of dev (bd6ab4d4…), onecalternal-perf(7d319e72…) for every arm. Each round runs the three arms in rotating order;calternal-perf --sizes 10k,100k --runs 5 --cold-runs 0 --idle-secs 0 --storm-edits 1, one fixture Home per arm (round 0 builds them, not counted). Cells are per-round p50 / p95 in ms.100k
10k
Train vs dev (median p50): 10k +0.7% (control -2.2%); 100k +16.8% (control -1.9%). Paired per round (train minus dev p50, 100k): median +0.27 ms, train lower in 5 of 10 rounds; 10k: median +0.06 ms, 5 of 10.
Verdict: not a regression; noise, no reproducible effect. At 10k it is flat. At 100k the medians differ (+1.0 ms) but dev itself ranges 3.99-17.30 ms across rounds (sd 3.7 ms), so the gap is a third of dev's own spread: train is lower than dev in half the rounds, high outliers hit every arm (dev 17.3, dev2 12.0, train 13.6/13.6/11.3), and the dev-vs-dev control sits on dev (-1.9%). The 100k p95 is flat or lower (27.6 vs 28.7). This agrees with the earlier per-merge bisect, where no merge moved it. The metric is one first query per fresh start, and this session was noisier than the first one (dev's p50 was 4.0 there, 5.8 here; the perf VMs share a disk with other jobs, which were queued on the same lock). I did not bisect: there is nothing to bisect. If you want a tighter read,
search.first_queryneeds more than 5 samples per round (it is one sample per run).Both perf locks released (my units
fcd-perf,fcd-holdstopped). Never merged.kayg referenced this pull request2026-11-05 23:21:11 +00:00
Landed in dev via
12103f1c97— closing.Pull request closed