Train BM3 (BM2 minus #759) #772
Closed
kayg
wants to merge 0 commits from
train/2026-10-30-bm3 into dev
pull from: train/2026-10-30-bm3
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!772
Loading…
Reference in a new issue
No description provided.
Delete branch "train/2026-10-30-bm3"
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 BM3 ships BM2’s accepted inputs without #759 private storage staging. #759 returns for a redesign because of indefinite retention after SIGKILL, inherited-descriptor races, and the disclosed upload-throughput cost of its latest fix.
Base:
d83e54dbe571b625504001a8b6add90d44ca6161. Final head:14bd77f0b9f5da7ad6de41c3b159be74db55507a.Inputs: #763
fix/flaky-sweep(628a7dd8),port/mockup-values(04a69711),port/composer(10659f25). Palette merge resolution matches BM2's UI-only resolution atd5000d47; retainsvar(--r-sheet)with the Composer layout.Independent BM2 picks:
09982195: partial cherry-pick of84cb1a4e, selecting only toast ResizeObserver/fit timing, auth v2→v3created_at,rowidtie ordering plus regression test, and shared CALTERNAL_BIN executable resolver plus unit tests/config/fixture wiring. Toast is shared UI code unchanged by #759; auth migration acts only on auth SQLite data; resolver acts only on E2E executable discovery. No private staging interfaces are used.14bd77f0: cherry-pick of3cf6ac56; resolver unit tests use a scoped filesystem mock so lint does not require a Rust binary. No storage code.9041b509was attempted and omitted: cherry-pick conflicts incrates/fsio/src/beneath.rsbecause its context includes #759'sregister_home. No conflict was forced or adapted. The conflict is retained in local evidence.Excluded: #759, all inherited-descriptor lease/guard fixes, RecordedFile append-intent, PreparedDirectory changes, #759's added sweep regression,
ca5b59c4,1ee44c4b.crates/fsioand the existing contacts sweep tests exactly match Composer input10659f25.BM2 log
d83e54db..1ee44c4band #770 reports 70275 and 70298 were read to establish this selection.Lease:
054fd612585b46e5a917401745853456. Host 02 was unreachable through both supplied DNS and NetBird IP (SSH connection timeout), so both browser halves ran sequentially on 10by32-01-std, as authorized. Host 02 was neither built on nor modified; its heartbeat could not be started. Heartbeat disclosure: the initial nohup loop was cleaned up with its tool session (file timestamp 12:04:13). This was discovered during half A at 12:32 and restored under user systemd at 12:32:14; later timestamps confirmed continued refreshes. This is a lease-heartbeat gap, not continuous coverage. Host 01 exportsCALTERNAL_BIN=/home/agent/wt/train-bm3/target/release/calternalbefore commands; the release executable is checked withtest -xbefore Playwright. Heavy commands useCALTERNAL_TRAIN=1 /usr/local/bin/build-slot.sh.Browser split uses a temporary wrapper around the unchanged repository config. Each project keeps its cases, assertions, one app worker, and zero retries. Dependency edges to projects assigned to the other half are removed. In the sequential fallback, E2E environment and admin account/session from half A are retained for half B; the admin server restarts without the setup script's destructive reset. The full primitives CI matrix runs with CI=true, including the existing WebKit toast exclusion. No repository tests were weakened.
First-run failure and attribution
All non-browser gates pass. The complete Playwright first run is NOT all green: half A has one failed case, half B and primitives pass. The failed case is
throttled-390→editor.spec.ts:59→ “no layout shift while loading, typing or switching modes (cpu ×6) @throttled”. It observed a CodeMirror content layout shift of 0.03528868939117755 at about 2188 ms, with several lines moving one line height (33.1875 px). The unchanged assertion at line 104 requires no content shifts; it was not weakened.Only that failed case was rerun three times, with one worker, zero retries and no dependency projects. All three passed (one selected case per invocation). Classification: intermittent/flaky, not reproducible on every attempt. These reruns do not replace the first-run failure.
Merge-stage attribution used the unchanged failed case three times on dev, then each successive input merge. Each stage built its own matching release server and frontend, used fresh browser harness environment, one worker and no retries. Every attempt passed. Thus this matrix does not attribute the intermittent failure to a train input and does not prove it pre-existed. No speculative product fix or test change was made because a local train-input cause was not established.
14bd77f0d83e54db87b8dc4eaf668240f95610c3Full first-run results remain in the per-project table below. There was no second full-suite run and no hidden retry.
Verification
Commands:
cargo fmt --all --check;cargo clippy --workspace --all-targets --locked -- -D warnings;cargo test --workspace --locked --no-fail-fast -- --test-threads=4; webcheck,lint,test; editorcheck,test; UItest:primitives;perf/web.sh --bundle-only --gate. Bundle results: first JS 239 KB brotli (≤240), all JS 312 KB brotli (≤315). Existing configured ignored/skipped cases are disclosed in raw output and the table.All listed gates ran on final head
14bd77f0b9f5da7ad6de41c3b159be74db55507a.Playwright first-run results
Half A SHA:
14bd77f0b9f5da7ad6de41c3b159be74db55507a. Half B SHA:14bd77f0b9f5da7ad6de41c3b159be74db55507a. Both halves ran on 10by32-01-std using the authorized sequential fallback.Gate output (verbatim)
fmt
clippy
rust-tests
web-check
web-lint
web-unit
editor-check
editor-unit
primitives-unit
bundle
No merge or deployment. Only
train/2026-10-30-bm3is pushed. Task-owned target/cache cleanup and heartbeat shutdown are recorded in local evidence. Host 02 was unreachable and could not be cleaned; this task created no files there.Diagnostic exit output (verbatim)
Final-head release build (verbatim)
Fixed the Rust CI crash/recovery failure in this train. Production Rust inputs changed; browser inputs did not. Both browser halves need a rerun against the new head. No merge or deploy was performed.
The failing job was run 560, rust, job id 63373, at
14bd77f0b9f5da7ad6de41c3b159be74db55507a. The exact failing step was Test, commandcargo test --workspace --locked. Format and Lint succeeded. The API/api/v1/repos/kayg/calternal/actions/jobs/63373/logssupplied the log; the suggested web/logsendpoint returned 404.Cause: startup recovery sets a retaining save for an unflushed recovered room.
put_retainingdurably moves the old inode to Trash before hard-linking the new image into the public note path. SIGKILL in between leaves durable typing, a pending save, and no file at the public path.room::load::settlediscarded the pending save and then treated that missing file as an outside deletion, returning NotFound/404 when the test retried its append. The crash test therefore fails intermittently according to kill timing. CI used linux/amd64 and Rust 1.99.0; this reproduction used aarch64 and Rust/clippy 1.99.0, so the architecture difference is not required. Both use the repository's four-thread test limit. The Rust tests build their own server throughCARGO_BIN_EXE_calternal; this was not a missing release binary orCALTERNAL_BINissue.Fix: for a pending save whose destination is absent, persist a valid empty CRDT file base with no file hash, then rebuild and resave from durable history. This also leaves recovery possible if the process dies again before its retry finishes. The displaced inode stays in Trash. The deterministic regression creates exactly the interrupted placement state and verifies exact recovered text, a valid persisted empty base, exact saved bytes, retained old bytes, and another reopen. It failed before the fix with
NotFound: note … was deletedand passes after it. Tests and lints were not relaxed.Classification and merge-stage attribution: the original head's five crash-suite reruns returned
0, 0, 101, 0, 0; the failed attempt reproduced the exact CI line-175 404. The corrected stage matrix below uses fresh source mtimes and a target directory isolated from final validation. Source history identifies the new move-before-publish gap and recovery retention in02c762ace5fa65f6a4e4906887161e0b0fc8b4bc, brought in by Composer mergef95610c3. Random passing stage attempts alone cannot prove absence of this race; the deterministic regression exercises its new physical placement boundary.Local build note: an initial diagnostic matrix reused the final validation target and caused stale-artifact compile/doctest failures. That matrix was discarded. The worktree target was removed and the comparisons and final gates were rerun with isolated targets and
RUSTC_WRAPPERunset. Those local artifact errors were not attributed to the product.All heavy commands on
10by32-02-stdusedCALTERNAL_TRAIN=1 /usr/local/bin/build-slot.sh. Final gates use the workflow commands andRUSTFLAGS=-D warnings,CARGO_TERM_COLOR=always, and--locked; Cargo caches/target paths are local to this host instead of the runner container's/cargo-cacheand/target. The lease heartbeat was started first withsystemd-run --userfor lease515a1007a95e40eba6dd72ba8e3c7174. The Infraternal build job was not touched.Fix commit:
cc56ef862ee28c9e8b0a36a8e780c16e78ac7e50.Original CI failure (verbatim):
Recorded exit codes (verbatim):
Gate output below is verbatim text with ANSI color escapes removed. Existing configured ignored tests remain visible.
Original-head exact local reproduction, attempt 3
Deterministic regression before the fix
Deterministic regression after the fix
cargo fmt --all --check
cargo clippy --workspace --all-targets --locked
cargo test --workspace --locked
Fixed notes_crash attempt 1
Fixed notes_crash attempt 2
Fixed notes_crash attempt 3
Fixed notes_crash attempt 4
Fixed notes_crash attempt 5
Fixed notes_crash attempt 6
Fixed notes_crash attempt 7
Fixed notes_crash attempt 8
Fixed notes_crash attempt 9
Fixed notes_crash attempt 10
The full workspace run reported 1,198 passed, 0 failed, 20 ignored across its test binaries and doctests. All ten additional fixed crash-suite runs passed.
/home/agent/wt/bm3-ci/target/(including the isolated bisect target) has been deleted, and the lease heartbeat unit has been stopped.Train BM3: WebKit half of the full Playwright suite: PASS
cc56ef86(train/2026-10-30-bm3), VMcua@calternal-dev-02-std(aarch64), Nix shell, binary built from this commit.CI=1 bunx playwright test --retries=0 --workers=1 --no-deps --project=webkit-1440 --project=webkit-390 --project=admin-setup --project=admin-webkit-1440 --project=admin-webkit-390 --project=prefs-webkit --project=sidebar-band-webkit(first run, no retries, no reruns).Notes: Chromium dependency projects (
prefs-chromium,contrast,sidebar-band-chromium) were not run here (other agent runs them on dev-01), hence--no-deps. Skips come from the specs' own viewport/project skips, not from this run's flags.No failures, so no
origin/devcomparison was needed. Log:~/bm3-webkit.log; JSON results:~/bm3-webkit-evidence/results.jsonon dev-02.Train BM3 is updated at
8e074bd8.Merge and conflicts
Merged
origin/dev(2f304154) into the train with merge commitb6e989c8; its first parent iscc56ef86, so the original train commit was preserved without rebasing. No files conflicted and no manual resolutions were needed. The incoming dev changes are limited todocs/deploy.md,scripts/deploy-prod.sh, andtests/deploy-prod.sh; no app code changed in the merge, so I used the targeted browser smoke rather than rerunning the full suites.Container build
deploy/Containerfilenow copiespackages/text/package.jsonbeforebun installand copiespackages/textbefore the web build. On dev-01, rootless Podman ascalternalbuilt the image with--format docker --no-cache;bun install --frozen-lockfilesucceeded. The image islocalhost/calternal:bm3-merge-8e074bd8, ID5740b7ece008a92f16f76ab7c97db4197f7563ec1a5d1f181a2c371c09c1f53f, withHEALTHCHECK=present. No staging deploy was performed.Gates
cargo fmt --all --check— PASS.RUSTFLAGS="-D warnings" CARGO_TERM_COLOR=always cargo clippy --workspace --all-targets --locked -j4— PASS.RUSTFLAGS="-D warnings" CARGO_TERM_COLOR=always cargo test --workspace --locked -j4— PASS: 1,198 passed, 0 failed, 20 ignored.bash tests/deploy-prod.sh— PASS.CI=1 CALTERNAL_BIN=<dev-01>/target/debug/calternal bunx playwright test e2e/served.spec.ts e2e/editor.spec.ts --project=chromium-1440 --workers=1 --retries=0— PASS: 16 passed, 0 failed.CI=1 CALTERNAL_BIN=<dev-02>/target/debug/calternal bunx playwright test e2e/served.spec.ts e2e/editor.spec.ts --project=webkit-1440 --workers=1 --retries=0— PASS: 14 passed, 2 skipped, 0 failed.The PR was not merged.
Forgejo mergeability status
Forgejo still reports
mergeable=falseandmergeable_state=nullfor this head. The pushed train contains base commit2f304154as an ancestor (git merge-base --is-ancestor origin/dev origin/train/2026-10-30-bm3passes), so Git reports no conflict. No PR merge was attempted.Merged into dev as
e283b132(git merge --no-ff of the tested head8e074bd8; dev's tree equals it exactly), on kayg's D5 approval. The API merge returned 405 "Please try again later" and Forgejo still shows mergeable=false on several cleanly-merging PRs, so its merge-check queue looks stuck. Not deployed: prod deploy needs kayg's separate yes.Deployed to prod at 2026-10-31 22:36:44 IST:
dev@e283b13231844acbe0fc8877e4f317ec5f41fffe, using the merged deploy script (--yes-prod, no--restore; 22 seconds). HTTP/healthzand https://calternal.cloud return 200; health body is{"status":"ok","version":"0.1.0"}. Post-deploy container health gate FAILED: Podman reports unhealthy because/usr/local/bin/calternal-healthzis mode 700 and returns Permission denied. My restrictive umask during source extraction caused the missing permissions; this is a build preparation error. The script exited 0 and did not automatically roll back. No retry or manual prod changes performed; stopped for handoff. Running/current image:e4b24efe7c28a22521ca861677aedfbc5346fca98abb8a1328a4f61de5e804e0; rollback correctly retains oldd83e54dbimage65337de7b94737599a7b29b5e2ffc689f1827ea50cbe683862a0c0778a9eb207. Backup:/srv/calternal-app/backup-pre-e283b132-20261031T170625681969261Z.tgz(12,303,044 bytes). Initial app logs show zero errors/warnings. Deployment must not be treated as fully verified.Closing: head
8e074bd8is already in dev (reached viae283b132); nothing left to merge. Branch kept.Pull request closed