Train BM4 #810
Closed
kayg
wants to merge 0 commits from
train/2026-11-01-bm4 into dev
pull from: train/2026-11-01-bm4
merge into: kayg:dev
kayg:main
kayg:feat/style-sheet-fixes
kayg:storage/wal-checkpoint-off-save-1051
kayg:feat/contrast
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: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!810
Loading…
Reference in a new issue
No description provided.
Delete branch "train/2026-11-01-bm4"
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?
Train BM4 into dev. Head
9b623c8don base dev133cf2c2. Not ready to merge: 2 first-run failures (below).Included (first-parent order)
c61c91d38c066c7389438634a59f782eNot included: #756 (BM1), see the comment.
Results (first run, no retries)
~/bm4-dev01-rust-final.log)~/bm4-dev01-bundle-final.log)Failures
[passkeys] e2e/passkeys.spec.ts:52list, add, rename and remove passkeys... Clicking "Add a passkey" leaves 1 row, expected 2 (line 83). The 4 "did not run" follow it.Diagnostic (single spec, once each): passes on origin/dev
133cf2c2, fails on the train build. Looks like a regression from #782 (v9 migration addsassertion_at, so sessions not made by a sign-in assertion no longer count as fresh). Not confirmed by a code read.[webkit-390] e2e/swipe-rows.spec.ts:621swiped plain row keeps its colour (light, photo, Rosewood). Card transform stayed 0, expected < -33.Diagnostic (single spec, once each): passes on origin/dev and passes on the train build. Load-sensitive in the full run; not a train regression as far as one run shows.
🤖 Generated with Claude Code
Why #756 (BM1) is not in this train: it is open and not merged into dev. It is a 30-file product/UI train (bundle trim, phone frost cards, Trash read-only and bulk Undo), not docs or harness. A test merge into this train conflicts in
apps/web/src/lib/editing.svelte.ts,crates/fsio/src/swap.rsand a modify/delete onapps/web/src/lib/lazy.ts. It needs a rebase before any later train. This train is unchanged.Diagnostic runs were done on dev-02: origin/dev in worktree
bm4-diag-dev, train inbm4-gates. Each spec ran once.BM4 passkey regression fixed and targeted gates passed
Feature #782:
850e604774(feat/dav-app-passwords). Rebuilt train #810:29175e3782(train/2026-11-01-bm4), including the updated feature branch. Both pushed. No merge into dev and no full train run started.Cause and behavior
Confirmed by reading setup redemption and reproducing
e2e/passkeys.spec.tson the original BM4 build: after Add a passkey, the list stayed at one row. Setup verified a registration but created its session with no assertion_at. The new Rust setup-add regression also failed before the fix.A completed registration now records assertion_at in the redemption transaction. Add-start, add-finish and remove require recent browser/native passkey proof. Stale/missing proof returns a distinct 403
passkey_reverification_requiredwith “Verify with your passkey to continue.” Settings offers a passkey check, then retries the operation. Cancellation keeps the session and offers another try. Re-check requires the current account's passkey; another account's key cannot replace the session.App-password minting keeps its sign-in-only rule. Additive auth.db v10 records registration_session so registration proof alone cannot mint. Existing v9 proof timestamps are preserved and old sessions are not assigned new proof. Recovery/invite redemption also performs registration in this implementation, so its completed ceremony counts for passkey management; sessions with no ceremony do not. Rust tests cover setup, recovery, invite, missing/stale proof, sign-in, mint restrictions, current-account re-check, and migration.
Verification
On calternal-dev-01-compute02, Nix dev shell, through
~/bin/slot bash ~/bm4-passkey-train-gates.sh, worktree~/Developer/Worktrees/bm4-passkey-web. Log: ~/bm4-passkey-train.log, ending BM4_PASSKEY_TRAIN_EXIT=0. VM worktree is clean at the train head above. Rust sources were unchanged by the last merge, which only switched the e2e timestamp helper to Nix's sqlite3.All passed:
Browser result: 5 passed, zero retries. Chromium exercised real setup/add/rename/remove, stale removal with cancellation and retry, and stale add with verification followed by successful registration. Chromium/WebKit UI tests cover the stale-session prompt and a failed re-check with another attempt. WebKit has no virtual WebAuthn authenticator, so the real ceremony remains in the Chromium
passkeysproject. Svelte check: 0 errors, 14 warnings in 8 existing files; clippy clean.One earlier feature-suite run failed
counter_concurrent_mutations_drift_and_restart(16577 vs 16440). The final rebuilt-train suite passed it. No quota code changed. Existing ignored performance tests remain ignored. The full train rerun, including the previously reported WebKit swipe case, is left to the orchestrator.BM4 first-run rerun on
833c3aacMerged current
origin/dev(a55521f94ef7337f0793037ae2cb2c27266d5720, including #811 and the case-path guard) intotrain/2026-11-01-bm4with--no-ff. No conflicts. Pushed833c3aaccb4e0039505c32109018a13c71032000. This PR remains open and was not merged.Rust and web gates on dev-01
cargo fmt --all -- --checkcargo clippy -j4 --workspace --locked --all-targets -- -D warningscargo test -j4 --workspace --lockednode ci/check-case-paths.mjsbun run buildfromapps/webbun scripts/bundle-size.mjs --jsonplus 240/315 KiB checksFirst-paint JS: 243,078 bytes (237.381/240 KiB). All JS: 317,912 bytes (310.461/315 KiB). The previously intermittent
counter_concurrent_mutations_drift_and_restarttest passed on its first run.Playwright first-run counts
Both full-suite runs used
CI=1,--retries=0, and--workers=1. Chromium ran on dev-01 withplaywright.bm4-chromium.config.ts; WebKit ran on dev-02 with--no-deps, after the separateadmin-setupprelude.Chromium total: 1,257 passed, 0 failed, 0 flaky, 755 skipped; exit 0. WebKit suite total: 1,207 passed, 18 failed, 0 flaky, 765 skipped; exit 1. The separate WebKit-side
admin-setupprelude passed 1 test.WebKit failures and origin/dev diagnostic
The 18 failures are the same 9 cases in each admin WebKit project:
e2e/admin.spec.ts:13,:30,:42,:64,:109,:128e2e/admin-contrast.spec.ts:54(light and dark)e2e/sheet-geometry.spec.ts:222Evidence: the expected
PeopleorGroupsheading was not found within 5 seconds after navigation. I ran those three specs once onorigin/devata55521f94ef7337f0793037ae2cb2c27266d5720, with the same admin-setup prelude, projects, no retries, and one worker. The diagnostic reproduced all 9 failures in each admin WebKit project, so these failures also occur on current dev.Logs:
~/bm4-20261101-dev01-gates.log~/bm4-20261101-chromium.log~/bm4-20261101-webkit.log~/bm4-20261101-origin-dev-admin-diag.logCorrected WebKit run on
833c3aaccb4eConfiguration correction
The earlier WebKit run executed
admin-setupseparately from the WebKit projects; the WebKit invocation used--no-deps. Each Playwright invocation loads a fresh config, creates newE2E_ADM_DATAandE2E_ADM_STATEpaths, and starts fresh web servers. These paths are underos.tmpdir():calternal-adm-*/dataandcalternal-adm-state-*/admin.json.admin-setupreads the first admin token fromE2E_ADM_DATA/token.txt, completes passkey sign-in, and writes the session toE2E_ADM_STATE. The admin WebKit projects depend onadmin-setupand load that state. The second invocation therefore used a new server and state path without running setup. The earlierorigin/devdiagnostic used the same split pattern, so it did not distinguish a train issue from this setup issue.Corrected invocation
Ran on dev-02 via
~/bin/slotinnix develop, withCI=1,--workers=1, and--retries=0:The wrapper retained the
admin-setupdependency and removed only the Chromium prerequisites forprefs-webkitandsidebar-band-webkit. No--no-depswas used.The unit received SIGTERM (exit 143) at
1840/1991, before the admin setup and admin projects ran. The log ends inwebkit-390ate2e/tint.spec.ts:313. No final Playwright per-project summary was emitted.webkit-1440webkit-390admin-setupadmin-webkit-1440admin-webkit-390prefs-webkitsidebar-band-webkitConclusion: this corrected run is inconclusive about the admin WebKit failures because it stopped before those projects. The split-invocation results do not establish whether the failures reproduce on
origin/dev. No rerun was started.dev-01: complete first WebKit run
verdict: WebKit half not green. the admin setup correction worked:
admin-setupand both admin WebKit projects passed. the full invocation completed normally, with 1,224 passed, 2 failed, 765 skipped, no retries, no flaky tests, and no tests left unrun. exit 1; no outside signal or rerun.host:
claude@calternal-dev-01-compute02, via NetBird SSH. train head:833c3aaccb4e0039505c32109018a13c71032000. debug build completed successfully in the train's Nix devshell via~/bin/slot cargo build --locked -j4 -p calternal. dependencies installed with~/bin/slot bun install --frozen-lockfile.exact invocation
one script:
/home/claude/bm4-webkit-dev01.sh, invoked once in train mode:inside that Nix shell, from
/home/claude/Developer/Worktrees/bm4-gates/apps/web:the wrapper imports the unmodified
playwright.config.ts, selects the seven projects above, and filters each project's dependencies to those seven names. this preservesadmin-setupfor both admin projects while removing only the Chromium prerequisite chains for prefs and sidebar. no--no-deps, no separate setup invocation.failures and origin/dev comparison
[webkit-1440] e2e/composer-tasks.spec.ts:43, “Enter makes a tracked task line in the journal with a link to its note; Undo takes both back”. first error line:Error: expect(received).toContain(expected) // indexOf. the snippet assertion at line 63 timed out after 25,000 ms: expectedcall plumberculng, received an empty string. does not reproduce on origin/dev in the one spec run: the matching test passed, and all 3 tests in this project passed.[webkit-390] e2e/composer-tasks.spec.ts:43, same test. first error line:Error: expect(received).toContain(expected) // indexOf. the same line-63 assertion timed out after 25,000 ms: expectedcall plumberxm7kb, received the earlier desktop test'scall plumberculng. does not reproduce on origin/dev in the one spec run: the matching test passed, and all 3 tests in this project passed.comparison baseline was fetched
origin/devata55521f94ef7337f0793037ae2cb2c27266d5720, built in Nix with the same debug build command, in detached worktree/home/claude/Developer/Worktrees/bm4-webkit-dev01-baseline. the train invocation had already ended before the baseline build. one invocation selected only the failing spec and both failing projects, with no retries. 6 passed, exit 0. this isolated comparison does not establish the cause of the full-suite failures or prove a train regression.baseline used the same script in
baselinemode underbm4-webkit-dev01-baseline.service. exact Playwright command from itsapps/webdirectory (the shared Cargo target directory held the freshly built baseline binary):logs on dev-01:
/home/claude/bm4-webkit-dev01.log,/home/claude/bm4-webkit-dev01-baseline.log. JSON reports and per-project summaries:/home/claude/bm4-webkit-dev01/. no merge performed.BM4: composer-tasks WebKit failure, cause and fix
Cause: a test bug, not a train regression and not an app bug.
composer-tasks.spec.ts:43read the list snippet withdaily.open {}, which is the server's UTC day. The rest of the test used the browser's zone (journal()passestz). The full WebKit run started at 23:50 UTC. The webkit-1440 test started at 23:53 UTC, which is 00:53 CET. The task landed in the browser's day (Nov 1) and the snippet poll read the server's day (Oct 31), so it saw an empty note and timed out. That test failed before its Undo, so its line stayed first in Nov 1's note. webkit-390 ran at 01:00 UTC, when both days matched, and read that leftover line (hence the other test's name). The same code passes whenever it runs outside the hour after local midnight.Evidence (dev-01, Nix devshell,
~/bin/slot, WebKit,CI=1 --workers=1 --retries=0):833c3aac,--repeat-each=20, both projects: 120 passed (so not a spec-alone fault).TZ=America/Los_Angeles(browser day differs from server's UTC day): 4 failed, 8 passed (--repeat-each=2). New spec, same zone: 30 passed (--repeat-each=5).Fix:
0cb78a2e, pushed to the train branchtrain/2026-11-01-bm4(no responsible PR; the spec is from dev). The test now asksdaily.openfor the browser's today in both places (today(page)helper). Test-only, one file:apps/web/e2e/composer-tasks.spec.ts. No timeout was changed.Gate:
composer-open,composer-tasks,composerspecs, webkit-1440 and webkit-390,--repeat-each=20: 600 passed, 0 failed, 0 flaky, exit 0, 44.8 min. Log:~/bm4-ct-gate.logon dev-01.Train head is now
0cb78a2eaa1e77cd8b9d2a4a02f052ae2af652d8. The rest of the833c3aacfull WebKit run was green (1222 other tests). A full-suite rerun on the new head was not done. Nothing merged.deployed BM4 to prod on 2026-11-01 at 13:04 IST via
scripts/deploy-prod.sh --yes-prod, after its dry run. version 0.1.0 (unchanged app version string), gitd0a2819ab2. no rollback or deploy retry.image archive sha256:
66ef11196e8c411d77857be6109dce40c9f5758b9ea86831d962710e5ce3ed49(118,227,968 bytes). built on dev-01 with Nix/slot, rootless Podman, clean source archive/umask 022 and unchangeddeploy/Containerfile, docker format/no cache; sha256 matched after the documented relay to the control host. prod architecture checked first: x86_64. running/current/tag image ID matches24c4e363534ea873309a0ac3b6e339a4e7e47083008863c022f1425556f0ec23.migration: yes, additive
auth.dbv7 → v10: DAV scopes/triggers, assertion timestamps, registration-session tracking. deployed without--restore.checks:
/healthz200/version 0.1.0; Podman healthy; unit active/0 restarts; first 120 seconds of container logs: 120 lines, 0 errors, 0 warnings. public app 200; Chromium renders#/signin, title Calternal, visible “Sign in with your passkey”; auth status 200. browser recorded one HTTP 401 console entry. shared browser unavailable due host libraries, so used existing Playwright in dev-01's Nix shell.DAV smoke failed: unauthenticated
PROPFIND https://calternal.cloud/dav/returns 405, not 401, confirmed from dev-01 and control. #782 adds the auth gate but explicitly leaves DAV route mounting to D4; BM4 does not mount it. reporting this limitation, with no further prod changes.backup:
/srv/calternal-app/backup-pre-d0a2819a-20261101T073355247806641Z.tgz(mode 600, 12,544,087 bytes). all build/slot jobs stopped.Closing: head
0cb78a2eis already in dev (reached viad0a2819a); nothing left to merge. Branch kept.Pull request closed