Train BM8 #862
Closed
kayg
wants to merge 3 commits from
train/2026-11-02-bm8 into dev
pull from: train/2026-11-02-bm8
merge into: kayg:dev
kayg:main
kayg:feat/contrast
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: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: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!862
Loading…
Reference in a new issue
No description provided.
Delete branch "train/2026-11-02-bm8"
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?
Assembles all 16 requested current PR heads on dev with ordered --no-ff merges, including the corrected sharing, restart, tasks and test fixtures, plus the search palette port. Replaces #838. Mechanical conflict resolutions preserve both behaviors. No merge into dev.
Final validation report, included heads, decisions and artifacts. Artifacts live in PR comments under ADR 0003.
7b97e4d1) f8931e0d309c05d871)Assembly artifact cleanup: #831 adds two attachment flush measurement artifacts after #858. Moving their contents here under ADR 0003; only these artifacts are removed from the final train tree. No implementation changes.
docs/perf/attachment-index-flush.md
The trace run used the same arguments under:
Untraced warm run: 696 uploads; 60 save acknowledgements; p50 17.88 ms and p95
56.26 ms. This is a single dev-01 diagnostic run, not perf-VM qualification.
The matching
strace -f -tt -T -yyrun completed 465 uploads. It found 932attachment WAL syncs, 469 attachment database syncs, and 467 attachment
directory syncs: 1,868 total, or 4.017 attachment-index sync calls per upload.
Two WAL syncs, one database sync, and one directory sync occurred per new
attachment. The trace also showed a separate pending-marker sync per upload.
Traced latency is excluded from the before/after comparison.
This reproduces the inherited amplification reported in
#788 comment 73181
on current dev. The original profile at
133cf2c2is not used as the currentbaseline.
Fix and current-dev result
The implementation keeps up to 64 per-user index connections in an LRU cache.
The connection uses WAL with
synchronous=FULL, so each changed row is durablein the WAL before acknowledgement. SQLite can checkpoint after its normal
page threshold, cache eviction, or shutdown. Attachment bytes still use the
existing file and parent-directory durability barriers.
The Linux regression test measures sync syscalls between real upload action
markers under
strace. It passed with 0 attachment-index sync calls for aduplicate/no-change save and 1 WAL sync call for one new attachment. The
bounded-cache test also passed with 65 busy users: 64 cached connections and
one scoped connection.
On dev-01, the same untraced matrix cell after the change completed 1,520
uploads and 59 overlapping note saves. Save-ack p50 was 13.29 ms and p95 was
40.62 ms. Against the single baseline run, p50 improved 25.7% and p95 improved
27.8%. These shared-host samples are diagnostic only, not qualification.
The matching trace run completed 807 uploads and 60 save samples. It found
814 attachment WAL syncs, 5 database syncs, and 2 attachment-directory syncs:
821 total, or 1.017 attachment-index sync calls per upload. The seven calls
above one per upload came from SQLite checkpoints during the run. Traced
save-ack p95 was 58.37 ms and is excluded from the latency comparison.
Targeted gates on dev-01 passed:
The test result was 21 passed, 0 failed; targeted Clippy passed with warnings
denied. The current-dev binary was built from implementation commit
eef6473203e20df1be29346b8ef03ff47a269522and has SHA256196ff9b8ea473f0cf22ea0546c76056d6efb2d413317ec0a8c6063a759271bbd.Perf-01 matched comparison
On perf-01, I ran five alternating matched pairs with the same 1k-note Home,
four upload clients, 256 KiB attachments, 60-second upload window, and seed
75931004. Homes and app state were on the VM's ext4 non-rotational SSD. Thebaseline was current
origin/devat55f35fcde3bc91ca3781055577b93e93819f6cd4;the fixed binary was built from
eef6473203e20df1be29346b8ef03ff47a269522.Both were measured with the same matrix driver and unchanged budgets file
(SHA256
8feee55baeb3940c09015f37db8da85bd0cf2c5f33d5673568bd976fcf02ace3).Each run exited 0 and collected 59 or 60 save acknowledgements.
The five-pair median meets the existing #788 small all-SSD cell limits: upload
throughput at least 95% of current dev, upload response p95 at most 105%, and
overlapping save-ack p95 at most 105%. Save-ack p50 was 4.2% higher by the
median of run p50s; median run p95 fell 3.2%, and the median paired p95 ratio
was 98.8%. The first and fifth save-ack pairs were noisy and slower on the
fixed run, which is why the full five-pair table is retained. The full 18-cell
matrix still needs requalification after rebasing #788.
The unchanged
perf/budgets.jsonwas passed to--gate; it has no entry foruploads.256KiB.save_ack, so the upload comparison uses the existing relativematrix limits from #788 comment 72886.
No budget was edited. Individual JSON and Markdown outputs are retained on
perf-01. The compact per-run data is in
attachment-index-flush-perf01.json.Assembly complete. Head
4d02e704a281dda00655f45aca6d0d6744fb6357(full head recorded by gates), base55f35fcde3bc91ca3781055577b93e93819f6cd4. All requested PRs included; none excluded. Captured current heads at assembly time:7b97e4d14231be07f6a80cb9ca172d02442c487ef8931e0d3081da14f79b5639e33d16c5591b565b9c05d871a1692df46eb9e06e0e386bdf8c0bbd9cac1a23dde8ab32f7033d5b58194b7d25caa99a57f1c1aa961e169ef99e132063a97ccbd9a89a5def6e5e659044873b52d95cdca6ee6d4df765ef6a0c91a19dcf0a9cf3844861e0e6acf4318618f3ea33c3a626df5418c3b5a1d4e73e4965b0bede7ab925d455842942731aabc05474c7929597d57090a7cc807d3b6955df8b6e972fe897f9240cac2e0c4c8519071be8455d718822ba98f6b9a402c5fd345242f8268ea5f1be46a2aef2ce04efa83c6c0adcd0fe5d7b9b36cd008de78851809724c90a85d92b40a7d3f297b719c4ab851aee749d3a0e3f3737e3624accaece3dfecbe2048634fc792d7d4a2c6e31f324b2a141ea1553ddd8c8a1de197fb3bd2aa686f60e5f7d1a59776411e7f3353d0023817b43affae51e7959619d8ecf3c885d877dc3557cd52fd8eefbb6316b43e9578c3e4d2944df8df43caebc611356f7110abecb403bfc6b9e8fd9654a46892c55f6293150cce9dcceb87f23a9f346300b3336e315ff6c0c9abec9665d4009563edf380e4ae688c1ea68857e40448327a15730271d56226b898e48bcc87b2a4d49ff52c50f6bd9e750c416924783eec7e95a1932c38c3083d51f4adcf5cd76a70f1f6960b427413e00b4107c2d713204d8b09ac5f4ed54ec77077aad144e717145e35f70356f593b7c04a527e00f7b1702e53ae075e78e4b49be7881459a7ab59f4097ce85845e3d11bea351608bde7481779ba2303372e509bd556a905eac10bb1e4232655220f1b1c2429fb68ace95fae5fb05a17697a667f69b020630d1360cbcc5411190f48a955b0bd36aa7cd4aaeacf954Mechanical conflict resolutions: #824 Cargo.lock retains calternal-imap-uid and calternal-markdown-view entries in name order. #828 execute.rs retains app-password capability checks, then starts timing immediately before runtime lookup. #827 contains
91a19dcf; #828 containsfe46caf5.#831 measurement files moved to the preceding PR comment and removed in a separate cleanup commit.
Validation: first runs only, CI=1, no retries; Nix shell with strace; all heavy steps through ~/bin/slot. Full native Playwright project matrix split across dev-01 (non-WebKit) and dev-02 (WebKit plus admin-setup). Cross-half scheduling dependencies removed; within-half dependencies and admin setup retained. Failed cases will receive one origin/dev run at the same spec/project for attribution. No merge into dev.
Harness setup note: the initial detached launch on both VMs inherited the home directory, and Nix exited before entering the shell:
path "/home/{claude,cua}" does not contain a flake.nix ... could not find a flake.nix file. No install, build, gate or test executed. Corrected with an explicitcd ~/Developer/Worktrees/bm8inside the detached command; first executed gate runs remain authoritative.First executed gates so far:
CI=1 cargo fmt --all --checkPASS;CI=1 cargo clippy --workspace --all-targets --locked -j4 -- -D warningsPASS.cargo test --workspace -j4is compiling/running. Dev-02 browser prerequisitescargo build -j4andbun run buildboth PASS. Train head:4d02e704a281dda00655f45aca6d0d6744fb6357. Nix resolves strace to/nix/store/jv2wdzlnwcmizjn0y0mz80w17klicz0g-strace-7.2/bin/straceon dev-02. Origin/dev attribution baseline is55f35fcde3bc91ca3781055577b93e93819f6cd4, with only #779 flake tooling overlaid and uncommitted, no implementation changes.First-run gate results on
4d02e704a281dda00655f45aca6d0d6744fb6357(CI=1, Nix shell with strace, heavy steps through ~/bin/slot):cargo fmt --all --checkcargo clippy --workspace --all-targets --locked -j4 -- -D warningscargo test --workspace -j4cargo build -j4bun run build(apps/web)PERF_DIST="$PWD/apps/web/dist" PERF_OUT="$HOME/bm8-train/bundle" PERF_WORK="$HOME/bm8-train/bundle-work" bash perf/web.sh --bundle-only --gatenode ci/check-case-paths.mjsnode ci/check-no-evidence.mjsBundle first error:
Evidence guard first error:
ResultsList.svelteis product source from #840, so this is a new guard false positive from the broadresultspath pattern, not a captured artifact. No gate retries or implementation changes. Baseline checks for both failing commands are in progress. Full browser halves released together after these gates; final per-project tables and every first error will follow.Single-run origin/dev attribution for the two gate failures (
55f35fcde3bc91ca3781055577b93e93819f6cd4, CI=1, Nix + slot):web.bundle.all_js_brotli: 317 > 315 KiBPERF_DIST="$PWD/apps/web/dist" PERF_OUT="$HOME/bm8-baseline/bundle" PERF_WORK="$HOME/bm8-baseline/bundle-work" bash perf/web.sh --bundle-only --gate: exit 0apps/web/src/composer/ResultsList.sveltenode ci/check-no-evidence.mjs: exit 1, script absent (Cannot find module .../ci/check-no-evidence.mjs)No baseline gate was retried. The guard and the flagged product source are introduced by this train. The false positive needs a source-path allowance or narrower policy; no implementation choice was made in the train.
Browser release: WebKit/dev-02
2026-11-02 19:10:18 IST; Chromium/dev-0119:10:19 IST. Disk checks at release: 335 GB and 310 GB available, respectively. Native project selection: 2,134 Chromium-half cases and 2,113 WebKit-half cases, including skips; admin-setup included in each invocation.--workers=1 --retries=0, no retry.First browser error, recorded while the full suite continues. Attribution pending one origin/dev run; no train retry.
Origin/dev one-run attribution:
CI=1 CALTERNAL_BIN="$PWD/../../target/debug/calternal" E2E_DIST="$PWD/dist" bunx playwright test e2e/search-corpus.spec.ts --project=chromium-1440 --workers=1 --retries=0 --reporter=line,jsonon dev-01, baseline55f35fcde3bc91ca3781055577b93e93819f6cd4: 2 passed, exit 0; recall case reported 1,492 queries, 0 missed. Therefore the train chromium-1440 recall failure (miss fraction 0.7151474530831099 > 0.02) is not reproduced on origin/dev, and is classified new/unresolved, not pre-existing. This spec/project baseline will not be rerun. Full train halves continue.Origin/dev one-run attribution for both WebKit preload failures:
CI=1 CALTERNAL_BIN="$PWD/../../target/debug/calternal" E2E_DIST="$PWD/dist" bunx playwright test e2e/preload.spec.ts --project=webkit-1440 --workers=1 --retries=0 --reporter=line,jsonon dev-02: 9 passed, 3 skipped, exit 0. Both Control and Meta intent cases passed. The train failures are new/unresolved, not reproduced on baseline; this spec/project baseline will not be rerun. Full first errors will also be included in the final catalog.Single-run origin/dev attribution completed for the next two failures (CI=1, native config, same project/spec, --workers=1 --retries=0, no repeats):
vim.spec.ts,/ searches in normal mode, in the bar; in insert mode it is a slash;:nohleft 3.cm-searchMatchelements, expected 0bunx playwright test e2e/vim.spec.ts --project=chromium-1440 --workers=1 --retries=0 --reporter=line,jsonsmart-note.spec.ts, log-line note Undo; expected daily-note URL, remained on created notebunx playwright test e2e/smart-note.spec.ts --project=webkit-1440 --workers=1 --retries=0 --reporter=line,jsonBoth used the built origin/dev binary and origin/dev dist at
55f35fcde3bc91ca3781055577b93e93819f6cd4, with only Nix tooling overlay. No current browser failure has reproduced on baseline so far. Complete first-error catalogs will follow after the full halves finish.Single-run origin/dev attribution for Chromium phone failures (CI=1, native config, same project/spec, --workers=1 --retries=0):
glass.spec.ts:341, search surface shadow differs from the bar shadowbunx playwright test e2e/glass.spec.ts --project=chromium-390 --workers=1 --retries=0 --reporter=line,jsonlazy-styled.spec.ts:54, search first-frame font weights change (620↔500)bunx playwright test e2e/lazy-styled.spec.ts --project=chromium-390 --workers=1 --retries=0 --reporter=line,jsonBaseline head
55f35fcde3bc91ca3781055577b93e93819f6cd4; no baseline spec/project repeated. These are functional rendering assertions, not frame-performance measurements.Chromium interim first-error catalog, head
4d02e704a281dda00655f45aca6d0d6744fb6357. Full suite is still running. No retries. Every captured block below is the first attempt.All currently listed cases passed their same-spec/project single origin/dev runs. They are new/unresolved, not classified pre-existing. Final JSON project totals and any further first errors will follow.
Webkit interim first-error catalog, head
4d02e704a281dda00655f45aca6d0d6744fb6357. Full suite is still running. No retries. Every captured block below is the first attempt.All currently listed cases passed their same-spec/project single origin/dev runs. They are new/unresolved, not classified pre-existing. Final JSON project totals and any further first errors will follow.
Chromium/dev-01 full first run is complete on
4d02e704a281dda00655f45aca6d0d6744fb6357: 1,338 passed, 8 failed, 781 skipped, 7 did not run, exit 1. No flaky results, no retries, no global reporter errors; maximum attempts per test is 1.The four throttled cases were dependency-blocked by main project failures. The three sidebar-band cases were dependency-blocked by contrast failures. They were not rerun. Admin setup passed in this same invocation. Five main-project failures all passed their single origin/dev checks; the three palette contrast cases await the currently running one baseline spec invocation. WebKit remains active.
Command (apps/web):
CI=1 BM8_HALF=chromium CALTERNAL_BIN="$PWD/../../target/debug/calternal" E2E_DIST="$PWD/dist" bunx playwright test --config=playwright.bm8.config.ts --output="$HOME/bm8-train/test-results" --workers=1 --retries=0 --reporter=line,json.Chromium/dev-01 complete first-error catalog, all 8 failures. Head
4d02e704a281dda00655f45aca6d0d6744fb6357. Every block is the first attempt, no retries.1. chromium-390 · glass.spec.ts:341
every floating surface is the one glass
First error
2. chromium-390 · lazy-styled.spec.ts:54
lazily loaded sheets, search and menu are styled on their first frame
First error
3. chromium-1440 · search-corpus.spec.ts:44
every prefix, the full word, one-letter and two-letter typos find their note
First error
4. chromium-390 · touch-select.spec.ts:140
a scroll stays a scroll
First error
5. chromium-1440 · vim.spec.ts:341
/ searches in normal mode, in the bar; in insert mode it is a slash
First error
6. contrast · contrast.spec.ts:155
the palette keeps its contrast at every sky hour
First error
7. contrast · contrast.spec.ts:171
the palette keeps its contrast over a photo and over a page of huge words, 1440 wide
First error
8. contrast · contrast.spec.ts:171
the palette keeps its contrast over a photo and over a page of huge words, 390 wide
First error
Final Chromium attribution: origin/dev
55f35fcde3bc91ca3781055577b93e93819f6cd4, one run ofCI=1 CALTERNAL_BIN="$PWD/../../target/debug/calternal" E2E_DIST="$PWD/dist" bunx playwright test e2e/contrast.spec.ts --project=contrast --workers=1 --retries=0 --reporter=line,json: 9 passed, exit 0. All three corresponding train palette contrast failures passed on baseline. Thus all 8 Chromium failures are new/unresolved (not reproduced on baseline), 0 classified pre-existing. No spec/project baseline repeated.Additional WebKit phone attribution:
glass.spec.ts --project=webkit-3904 passed, 2 skipped;lazy-styled.spec.ts --project=webkit-3903 passed, 1 skipped;touch-select.spec.ts --project=webkit-39016 passed. Matching train failures all passed on baseline. Commands used the same CI=1, binary/dist environment, workers=1 and retries=0.WebKit has since reported a review4 sign-out timeout. Its one origin/dev
review4-signout.spec.ts --project=webkit-390run is in progress. Full train WebKit continues. Dev-01 own jobs are complete; cleanup starts there.Origin/dev single-run sign-out attribution is complete. Command:
CI=1 CALTERNAL_BIN="$PWD/../../target/debug/calternal" E2E_DIST="$PWD/dist" bunx playwright test e2e/review4-signout.spec.ts --project=webkit-390 --workers=1 --retries=0 --reporter=line,json. Baseline55f35fcde3bc91ca3781055577b93e93819f6cd4: 9 passed, 1 failed, 1 skipped, exit 1. No repeats.The exact train variant (
stuck uplink=true, BroadcastChannel=true) passed on baseline. The baseline failed the neighboringstuck uplink=false, BroadcastChannel=truevariant with the same 180-second timeout waiting for the Sign out warning. Thus this timeout family is pre-existing at the spec/signature level, but the exact train variant was not reproduced. This is not counted as a confirmed exact-case pre-existing match. All other observed train browser failures passed their matching baseline cases.Baseline first errors (diagnostic run, not another train run):
webkit-390 · review4-signout.spec.ts:131
typing during logout is refused (stuck uplink=false, BroadcastChannel=true)
Webkit full first-run failure catalog. Train head
4d02e704a281dda00655f45aca6d0d6744fb6357. No retries.1. webkit-390 · glass.spec.ts:341
every floating surface is the one glass
First error
2. webkit-390 · lazy-styled.spec.ts:54
lazily loaded sheets, search and menu are styled on their first frame
First error
3. webkit-1440 · preload.spec.ts:111
palette Control intent prepares only its own screen before idle
First error
4. webkit-1440 · preload.spec.ts:111
palette Meta intent prepares only its own screen before idle
First error
5. webkit-390 · review4-signout.spec.ts:120
typing during logout is refused (stuck uplink=true, BroadcastChannel=true)
First error
Additional error from the same first attempt
6. webkit-1440 · smart-note.spec.ts:19
→ on a log line makes a note with its times and tags, and Undo takes it back
First error
7. webkit-390 · touch-select.spec.ts:140
a scroll stays a scroll
First error
Every entry is the first attempt. Baseline attribution is in separate comments and the final table.
Each failed train case was checked in one origin/dev invocation of the same spec/project. No spec/project baseline was repeated. Baseline head
55f35fcde3bc91ca3781055577b93e93819f6cd4; only #779 Nix tooling was overlaid, uncommitted.glass.spec.ts:341lazy-styled.spec.ts:54search-corpus.spec.ts:44touch-select.spec.ts:140vim.spec.ts:341contrast.spec.ts:155contrast.spec.ts:171contrast.spec.ts:171glass.spec.ts:341lazy-styled.spec.ts:54preload.spec.ts:111preload.spec.ts:111review4-signout.spec.ts:120smart-note.spec.ts:19touch-select.spec.ts:140All 15 exact failed train cases passed their matching baseline cases. The baseline sign-out spec also failed a different parameter variant:
stuck uplink=false, BroadcastChannel=true; the train failedstuck uplink=true, BroadcastChannel=true. Both hit the 180-second wait for the Sign out warning, so the timeout family is pre-existing at spec/signature level, while exact-variant reproduction remains unconfirmed. It does not establish that every train failure is pre-existing. The full baseline error is in the diagnostic comment.Baseline invocations (all with
CI=1,CALTERNAL_BIN/E2E_DISTpointing at the origin/dev build, Nix + slot):bunx playwright test e2e/search-corpus.spec.ts --project=chromium-1440 --workers=1 --retries=0 --reporter=line,jsonbunx playwright test e2e/preload.spec.ts --project=webkit-1440 --workers=1 --retries=0 --reporter=line,jsonbunx playwright test e2e/vim.spec.ts --project=chromium-1440 --workers=1 --retries=0 --reporter=line,jsonbunx playwright test e2e/smart-note.spec.ts --project=webkit-1440 --workers=1 --retries=0 --reporter=line,jsonbunx playwright test e2e/glass.spec.ts --project=chromium-390 --workers=1 --retries=0 --reporter=line,jsonbunx playwright test e2e/lazy-styled.spec.ts --project=chromium-390 --workers=1 --retries=0 --reporter=line,jsonbunx playwright test e2e/glass.spec.ts --project=webkit-390 --workers=1 --retries=0 --reporter=line,jsonbunx playwright test e2e/lazy-styled.spec.ts --project=webkit-390 --workers=1 --retries=0 --reporter=line,jsonbunx playwright test e2e/touch-select.spec.ts --project=chromium-390 --workers=1 --retries=0 --reporter=line,jsonbunx playwright test e2e/contrast.spec.ts --project=contrast --workers=1 --retries=0 --reporter=line,jsonbunx playwright test e2e/touch-select.spec.ts --project=webkit-390 --workers=1 --retries=0 --reporter=line,jsonbunx playwright test e2e/review4-signout.spec.ts --project=webkit-390 --workers=1 --retries=0 --reporter=line,jsonFinal verdict: NOT GREEN. Never merged.
Train BM8: #862 into
dev, branchtrain/2026-11-02-bm8, head4d02e704a281dda00655f45aca6d0d6744fb6357, assembled on origin/dev55f35fcde3bc91ca3781055577b93e93819f6cd4. BM7 #838 is closed with a replacement link. All 16 requested PRs included; none excluded.Included source heads captured at assembly time, in ordered --no-ff merges:
7b97e4d14231be07f6a80cb9ca172d02442c487ef8931e0d3081da14f79b5639e33d16c5591b565b9c05d871a1692df46eb9e06e0e386bdf8c0bbd9cac1a23dde8ab32f7033d5b58194b7d25caa99a57f1c1aa961e169ef99e132063a97ccbd9a89a5def6e5e659044873b52d95cdca6ee6d4df765ef6a0c91a19dcf0a9cf3844861e0e6acf4318618f3ea33c3a626df5418c3b5a1d4e73e4965b0bede7ab925d455842942731aabc05474c7929597d57090a7cc807d3b6955df8b6e972fe897f9240cac2e0c4c8519071be8455d718822ba98f6b9a402c5fd345242f8268ea5f1be46a2aef2ce04efa83c6c0adcd0fe5d7b9b36cd008de78851809724c90a85d92b40a7d3f297b719c4ab851aee749d3a0e3f3737e3624accaece3dfecbe2048634fc792d7d4a2c6e31f324b2a141ea1553ddd8c8a1de197fb3bd2aa686f60e5f7d1a59776411e7f3353d0023817b43affae51e7959619d8ecf3c885d877dc3557cd52fd8eefbb6316b43e9578c3e4d2944df8df43caebc611356f7110abecb403bfc6b9e8fd9654a46892c55f6293150cce9dcceb87f23a9f346300b3336e315ff6c0c9abec9665d4009563edf380e4ae688c1ea68857e40448327a15730271d56226b898e48bcc87b2a4d49ff52c50f6bd9e750c416924783eec7e95a1932c38c3083d51f4adcf5cd76a70f1f6960b427413e00b4107c2d713204d8b09ac5f4ed54ec77077aad144e717145e35f70356f593b7c04a527e00f7b1702e53ae075e78e4b49be7881459a7ab59f4097ce85845e3d11bea351608bde7481779ba2303372e509bd556a905eac10bb1e4232655220f1b1c2429fb68ace95fae5fb05a17697a667f69b020630d1360cbcc5411190f48a955b0bd36aa7cd4aaeacf954Mechanical resolutions only: Cargo.lock retains both IMAP UID and markdown-view packages in name order; execute.rs retains the app-password capability/scope guard and starts runtime timing immediately after it. #827 includes
91a19dcf; #828 includesfe46caf5. The final cleanup commit moves #831 measurement artifacts into a PR comment; no implementation fixes were made during train validation.First-run gates, all with
CI=1, Nix shell including strace, heavy steps through~/bin/slot:cargo fmt --all --checkcargo clippy --workspace --all-targets --locked -j4 -- -D warningscargo test --workspace -j4cargo build -j4bun run build(apps/web)PERF_DIST="$PWD/apps/web/dist" PERF_OUT="$HOME/bm8-train/bundle" PERF_WORK="$HOME/bm8-train/bundle-work" bash perf/web.sh --bundle-only --gatenode ci/check-case-paths.mjsnode ci/check-no-evidence.mjsapps/web/src/composer/ResultsList.sveltefalsely matchesresults; origin/dev lacks this script, so the same command gives module-not-found, not this failureThe bundle excess is 2,372 bytes over budget. First-paint JS (235.316 KiB < 240 KiB) and opt-in plugin JS (37.894 KiB < 45 KiB) pass. The two gate first errors are in the gate comment, with one-run baseline results. The evidence-guard failure is a new integration false positive, not an actual captured artifact.
Full first Playwright suite, Chromium/dev-01 and WebKit/dev-02 released together at 19:10:19 IST and 19:10:18 IST, respectively:
Both admin-setup cases passed, each in the same invocation as its dependent admin projects. Both JSON reports have zero flaky results, zero global reporter errors and at most one attempt per test. The four Chromium throttled cases were blocked by main-project failures; three sidebar-band-chromium cases were blocked by contrast failures. No blocked case was rerun. Native @perf/SHOTS_DIR and platform skips remain visible in the table.
Every first error is preserved in the complete catalogs: all 8 Chromium failures, all 7 WebKit failures.
Per-failure baseline attribution and all 12 exact baseline commands: all 15 exact failed train cases passed their matching origin/dev cases. Fourteen are new/unresolved with no baseline failure signature. The sign-out timeout family also occurred on origin/dev, but in
stuck uplink=false, BroadcastChannel=true; the train failed thetrue,truevariant, which passed on baseline. The family is pre-existing at the spec/signature level; an exact-variant match is unconfirmed. The complete baseline first errors are posted separately. This does not establish every failure as pre-existing, so the verdict cannot be green. No failure was excused merely because another case in the same file failed.Exact full-browser command in apps/web (WebKit uses
BM8_HALF=webkit):The throwaway split config imports the native config, retains all non-WebKit projects on dev-01, and WebKit projects plus admin-setup on dev-02. Only dependencies assigned to the other half are removed; same-half dependencies remain. Its contents were:
Preparation:
bun install --frozen-lockfileat each worktree root. Rust usedCARGO_PROFILE_DEV_DEBUG=0 CARGO_PROFILE_TEST_DEBUG=0 CARGO_INCREMENTAL=0. Detached jobs used 10800-second unit limits and~/bin/slot /nix/var/nix/profiles/default/bin/nix develop -c bash <script>. Dev-02 ran binary/web prerequisites only, then its full browser half. No build or test ran on the control host. The initial Nix working-directory setup error occurred before any gate executed and is explicitly recorded; no executed gate or test was retried.Disk checks before heavy preparation and browser release exceeded 50 GB available (310 GB dev-01, 335 GB dev-02 at release). All own test/build/diagnostic jobs have finished. Own targets, dist copies, temporary test Homes and trace/results directories were cleaned on both VMs. Small logs/JSON remain outside the repo; review artifacts are in PR comments. No settings or source PR branches were changed; dev was never merged into or modified.
Superseded by Train BM9: #869 . Closing BM8 as requested; no merge.
Pull request closed