Bulk import: semantic index queue full and job worker crash on SQLITE_BUSY #1157
Open
opened 2026-10-05 15:31:26 +00:00 by kayg
·
18 comments
No Branch/Tag specified
dev
wip/mailghost-1094
wip/kbpreview2-1118
wip/kbpreview-1118
wip/kanban-1092
wip/importhang-1121
wip/hiderev-1153
wip/hide5-1153
wip/hide4-1153
wip/hide3-1153
wip/hide2-1153
wip/hide-1153
wip/editreg-1132
wip/editorrail3-1113
wip/editorrail2-1113
wip/editorrail-1113
wip/e2e-b2-1071
wip/e2e-b-1071
wip/draw4-1101
wip/draw3-1101
wip/draw2-1101
wip/draw-1101
wip/directory-1199-r
wip/directory-1199
job/hide-1153
wip/delete-1119
wip/cards2-1083
wip/cards-1083
wip/canvas-visual
wip/canvasvis2-976
wip/calhdr-1112
wip/calcards-1115
wip/browserfix
wip/blocks-1125
wip/allday-1107
wip/agenda-decks
wip/agenda-1086
wip/adv7c-1105
wip/txentry-1198
wip/trayicons2-1095
wip/trayicons-1095
wip/tagperf-1186
wip/sidebar3-1094
job/collabloss-1197
wip/rev2-webperf
wip/rev2-money-ident
wip/restyle-search-r
wip/restyle-search
wip/restyle-files
wip/previewcard-1098
job/restyle-mailmoney
wip/palette2-1123
wip/palette-1093
wip/nlpchip-1127
wip/morph-1104
wip/merge-round-7c5
wip/merge-round-7c4
job/restyle-files
wip/merge-round-7c3
wip/merge-round-7c2
wip/merge-round-7c
wip/mchrome-1084
wip/mailghost2-1094
job/restyle-settings
wip/collabrev-1197
wip/collabloss2-1197
wip/collabloss-1197
job/onboard-1141
wip/onboard2-1141
wip/onboard-1141.aborted-early
wip/onboard-1141
job/tagperf-1186
job/adv-1202
job/restyle-search
job/segmented-1200
wip/segmented-1200
wip/restyle-mailmoney
job/fmtbar-1210
job/merge30
job/notestatus-1209
job/sidebarblur-1208
job/restyle-notes
job/notifloop-1194
job/toastmorph-1201
wip/restyle-notes
wip/notifloop-1194
job/txentry-1198
job/perf-1124
job/perf2-1124
job/tocrail-1191
wip/restyle-settings
job/tagdnd-1187
job/cards-1179
wip/cards2-1179
wip/cards-1179
wip/tocrail-1191
wip/tagdnd-1187
wip/perf-1124
wip/merge30j
job/wizchoices-1140
wip/wizchoices-1140
wip/restyle-1190
job/moneyfmt-1180
wip/moneyfmt2-1180
wip/moneyfmt-1180-r
wip/moneyfmt-1180
job/pillglass-1189
job/flags-1181
wip/flags-1181
job/restyle-1190
job/settingsreg-1195
job/wizard-1140
site/website
wip/wizardrev2-1140
wip/wizardrev-1140
wip/wizard5-1140
wip/wizard4-1140
wip/wizard3-1140
wip/wizard2-1140
wip/wizard-1140
wip/pillglass-1189
wip/settingsreg-1195
job/merge29
job/fu-1171
wip/merge29j
wip/fu-1171
job/fu-1166
job/directory-1199
job/proflog-1204
job/txresearch-1188
wip/fu-1166
job/merge28
job/search-1066
wip/search-1066
wip/merge28j
job/gateslot-1182
job/bulkimport-1157
job/mailnet-1160
wip/mailnetrev-1160
wip/mailnet-1160
wip/bulkrev-1157
wip/bulkimport-1157
job/startup-1161
wip/startup-1161
job/merge27
job/linkcards-1151
wip/linkcards3-1151
wip/linkcards2-1151
wip/linkcards-1151
job/traydate-1144
wip/traydate3-1144
wip/traydate2-1144
wip/traydate-1144
job/draw-1101
wip/merge27j
job/blockpill-1152
wip/blockpill3-1152
wip/blockpill2-1152
wip/blockpill-1152
job/minihover-1149
wip/minihover2-1149
wip/minihover-1149
job/merge25
wip/merge25-r
wip/merge25b
wip/merge25
job/inspector-1129
job/tags-1110
wip/inspector3-1129
wip/inspector2-1129
wip/inspector-1129
wip/tagsrev-1110
wip/tags2-1110
wip/tags-1110
job/dates-1148
wip/datesrev-1148
wip/dates2-1148
wip/dates-1148
job/licence-1145
wip/licence2-1145
wip/licence-1145
job/selfhost-1156
job/merge23
wip/merge23
job/tagfilter-1109
wip/tagfilter2-1109
wip/tagfilter-1109
job/kbd-1134
wip/kbd2-1134
wip/kbd-1134
job/palfoot-1137
wip/selfhost-1156
wip/palfoot2-1137
wip/palfoot-1137
job/toggle-1158
wip/toggle-1158
job/kbpreview-1118
job/docratchet-1155
job/perflint-1133
job/devtests-1159
wip/docratchet-1155
wip/devtests-1159
job/segv-1136
wip/toast-1142
wip/segv-1136
job/toast-1142
job/blockreload-1147
wip/blockreload-1147
job/font-1150
wip/font-1150
job/importui-1120
job/minimonth-1149
wip/importui-1120
wip/minimonth-1149
job/depcheck-1146
wip/perflint-1133
wip/depcheck-1146
job/calcards-1115
job/blocks-1125
job/plus-1128
job/shift-1138
wip/plus2-1128
wip/plus-1128
wip/shift-1138
job/moneyfid-1130
job/editorrail-1113
wip/moneyrev-1130
wip/moneyfid-1130
job/noext-851
wip/noext-851
wip/noext3-851
wip/noext2-851
job/week-1135
wip/week-1135
job/editreg-1132
job/smoke-1122
wip/smoke-1122
job/docs-1143
job/palette2-1123
job/calhdr-1112
job/nlpchip-1127
job/mailghost-1094
job/reconnect-1131
wip/reconnect-1131
job/trayicons-1095
job/delete-1119
job/importhang-1121
job/cards-1083
job/palette-1093
job/mchrome-1084
job/e2e-a-1071
job/canvas-visual
job/previewcard-1098
job/allday-1107
wip/e2e-a2-1071
wip/e2e-a-1071
job/e2e-b-1071
job/adv7c-1105
job/kanban-1092
job/agenda-1086
job/merge-round-7c
job/morph-1104
wip/surfaces-p2
job/merge-round-9
wip/merge-round-9
job/7cfix-small
wip/7cfix-small
job/mailui-1078
job/merge-round-8
wip/merge-round-8
wip/mailui-1078
job/mailround-1038
job/applemail-accept
wip/settitle-1068
wip/mailround2-1038
wip/mailround-1038
wip/e2e-7b
job/crash-1069
wip/crash-1069
job/searchlost-1066
wip/searchlost-1066
job/7b-reconcile
job/flake-1065
wip/flake-1065
wip/merge-round-7b7
wip/merge-round-7b6
wip/merge-round-7b5
wip/merge-round-7b4
wip/7b-reconcile
job/appupdate-1059
job/nfd-1044
wip/appupdate-1059
job/e2e-7b
job/loop-1062
wip/loop-1062
job/pdfprev-1045
job/invtoggle-1053
wip/pdfprev-1045
wip/nfd-1044
wip/invtoggle-1053
job/7bfix-e2e
job/mailstress-b
wip/7bfix-e2e
wip/mailstress-b
job/7bfix-adv
wip/7bfix-adv
job/mailstress-a
job/stack-1054
wip/stack-1054
wip/mailstress-a
job/mailstress-1038
wip/mailstress-1038
job/upload500-1051
wip/upload500-1051
job/share-1034
wip/share-1034
job/syncerr-1037
job/7bfix-photos
wip/7bfix-photos
job/paste-1036
job/setside-1039
wip/setside-1039
wip/paste-1036
job/lease-1042
wip/syncerr-1037
wip/lease-1042
job/7bfix-data
job/passkeybind-1043
wip/apprevoke-1041
job/invite-1035
wip/invite-1035
job/merge-round-7b2
wip/merge-round-7b2
job/mailproxy-486
job/apprevoke-1041
job/rebuild-1033
job/pillborder-1029
wip/pillborder-1029
wip/mailproxy-486
wip/applemail-486
job/headless-998
wip/headless-998
job/groups-1028
wip/groups-1028
job/rebuildwarn-1016
wip/rebuildwarn-1016
job/startup-1011
wip/startup-1011
job/monthpill-1009
job/bgthumb-1025
job/sharetitle-1012
wip/monthpill-1009
wip/bgthumb-1025
wip/sharetitle-1012
job/canvas-cards-977
wip/canvas-cards-977
job/canvas-pencil-978
job/canvas-sketch-990
wip/canvas-sketch-990
wip/canvas-pencil-978
job/canvas-files-989
wip/canvas-files-989
job/canvas-collab-991
wip/canvas-collab-991
job/weekscroll-1018
wip/weekscroll-1018
wip/canvas-core-976
job/canvas-core-976
job/round-drag
wip/round-drag
job/round-settings
job/browserfix
wip/oapi-974
job/oapi-974
job/hist2-integrate
job/mailhtml-726
wip/mailhtml-726
wip/hist2-integrate
job/moneyfu-984
job/drag-1015
wip/drag-1015
job/rename-1017
wip/rename-1017
job/hist2-api
wip/hist2-api
job/oneacct-1014
wip/oneacct-1014
wip/moneyfu-984
job/hist2-bench
job/hist2-restore
wip/hist2-bench
job/hist2-write
job/hotfix-724
wip/hotfix-724
wip/hist2-write
wip/hist2-restore
job/hist2-store
job/hist2-ui
wip/hist2-ui
wip/hist2-store
job/searchstarve-965
job/shutdown-963
wip/shutdown-963
wip/pubedit-981
job/pubedit-981
job/analytics-973
wip/searchstarve-965
job/authflash-850
job/weeklane-969
job/pvtitle-1004
job/hist-975
wip/authflash-850
job/voicepill-617
wip/pvtitle-1004
job/headring-1003
wip/weeklane-969
wip/voicepill-617
wip/headring-1003
wip/analytics-973
job/agentscope-980
wip/thumbsandbox-988
job/thumbsandbox-988
wip/hist-975
job/links-856
wip/links-856
job/davetag-966
wip/davetag-966
job/filesstorm-1000
job/hoverpad-725
wip/filesstorm-1000
job/ffmpegblas-993
job/merge-round-7a
wip/hoverpad-725
wip/ffmpegblas-993
job/nowdot-1002
wip/verify-7a
job/noteid-857
wip/nowdot-1002
wip/noteid-857
wip/merge-round-7a
wip/agentscope-980
job/imapedge
job/a11yfix2
wip/imapedge-941
wip/imapedge
wip/a11yfix2
job/notetask-986
job/logheading
wip/logheading-998
job/textthumb-652
job/photolive-987
wip/photolive-987
job/davactive-983
job/savefix-985
job/tabicons-607
wip/davactive-983
wip/tabicons-607
wip/notetask-986
wip/savefix-985
job/dirid-627
job/buildspeed-1007
wip/dirid-627
job/agenda-decks
job/perfguards-impl
job/undo-a11y
wip/undo-a11y
job/mailperf
job/wal-824
wip/settings-50
job/settings-50
job/notesfilter-606
wip/notesfilter-606
job/surfaces-p2
wip/wal-824
job/maillayouts
wip/mailperf
wip/maillayouts
job/taskmeta-659
job/money-ident
wip/money-ident
wip/taskmeta-659
job/errstates
wip/perfguards-impl
job/headings-881
wip/headings-881
wip/errstates
job/voice-619
job/gaps-827
job/notesperf
wip/notesperf
wip/voice-619
job/hddsql-549
job/perf-stream-668
wip/perf-stream-668
wip/deeplinks-fix
job/deeplinks-fix
job/authfix
job/docsfix-rust
wip/docsfix-rust
job/webperf
job/docsfix-web
job/datafix2
job/webdav-lock-476
job/copyfix
wip/copyfix
wip/webperf
job/focus-658
wip/protofix
job/mediafix
job/protofix
wip/mediafix
job/agentfix
job/hhmm-724
wip/agentfix
job/undo-722
job/reuse
wip/webdav-lock-476
wip/reuse
job/scopefix
job/datafix
wip/hhmm-724
wip/undo-722
job/surfaces-p1
wip/hddsql-549
job/voicememos-618
wip/datafix2
wip/surfaces-p1
job/fix-940
wip/fix-940
job/blaze-surfaces
wip/datafix
wip/blaze-surfaces
job/taskday-655
job/linknav-639
wip/linknav-639
wip/gaps-827
job/isolation-707
job/audiophotos-720
wip/audiophotos-720
job/advfind-664
wip/voicememos-618
wip/taskday-655
wip/isolation-707
wip/advfind-664
wip/scopefix
wip/focus-658
job/testgaps
wip/testgaps
job/overscroll-718
wip/authfix
job/deps
wip/overscroll-718
job/rev2-agentfix
job/rev2-money-ident
job/rev2-mailperf
wip/deps
job/hardening-728
wip/hardening-728
job/searchgen-832
wip/searchgen-832
job/photopw-849
job/mailsql-825
wip/photopw-849
job/sharefix
wip/sharefix
job/rev2-mailhtml-726
job/rev2-perfguards
job/copyval-723
job/lightglass-r2
wip/lightglass-r2
wip/docsfix-web
job/copy-audit
job/macinterop-staging-r2
job/design-sync
job/rev2-taskmeta-659
job/rev2-webperf
job/docs-audit
job/rev2-advfind-664
job/rev2-mailproxy-486
job/states-audit
job/rev2-datafix
job/design-drift
job/test-gaps
job/rev2-voicememos-618
job/rev2-mediafix
job/rev2-deps
job/rev2-datafix2
job/licence-audit
job/issue-hygiene
job/rev2-protofix
job/rev2-voice-619
job/rev2-isolation-707
job/rev2-surfaces-p1
job/deeplink-audit2
job/rev2-audiophotos-720
wip/test-gaps
job/rev2-overscroll-718
job/rev2-undo-722
wip/states-audit
job/rev2-dropmd-719
job/rev2-linknav-639
job/merge-7b-plan
wip/merge-7b-plan
job/rev2-taskday-655
wip/mailsql-825
job/rev2-webdav-lock-476
job/rev2-browserfix
wip/design-drift
job/rev2-hddsql-549
wip/deeplink-audit2
job/rev2-scopefix
job/rev2-authfix
job/rev2-hardening-728
job/rev2-wal-824
job/rev2-sharefix
job/calsidebar-638
job/chrome-audit
job/ioperf
wip/ioperf
wip/chrome-audit
wip/calsidebar-638
job/dropmd-719
wip/dropmd-719
job/ocr-build
wip/ocr-build
job/blaze-settings
wip/copyval-723
job/toastring-721
wip/toastring-721
job/deployfix-732
wip/deployfix-732
wip/blaze-settings
job/money-import-recheck
job/rev-a11y
job/perf-arch-db
job/rev-7b-data
wip/textthumb-652
wip/perf-arch-db
job/sec-protocols
job/sidehdr-660
job/rev-7b-security
job/research-surfaces
job/rev-design-gaps
job/rev-mcp-api
wip/sidehdr-660
job/perf-arch-memory
wip/sec-protocols
job/perf-arch-bundle
job/snapedge-714
wip/rev-mcp-api
job/sec-supplychain
wip/research-surfaces
job/perf-arch-sync
job/rev-consistency
job/perf-arch-server
wip/perf-arch-server
wip/perf-arch-memory
job/perf-arch-io
job/perf-arch-client
job/sec-fs
job/sec-mcp-scopes
job/sec-sharing
job/perf-guards
job/sec-browser
job/sec-admin-deploy
job/sec-auth
wip/snapedge-714
job/bgpicker-717
wip/perf-arch-bundle
wip/money-import-recheck
job/advsetup-654
wip/bgpicker-717
wip/advsetup-654
job/burst-709
job/kbdcaps-710
job/app-pw-chooser
wip/burst-709
wip/app-pw-chooser
job/imaptest-625
wip/kbdcaps-710
job/fix-499
wip/fix-499
job/perf-mut-667
job/calimg-589
job/perf-snap-666
wip/calimg-589
wip/perf-snap-666
wip/perf-mut-667
job/perf-cache-665
wip/perf-cache-665
job/voicefiles-620
wip/voicefiles-620
job/admin-burst-705
wip/admin-burst-705
job/voicememos-review
wip/voicememos-review
wip/ryw-653
job/ryw-653
job/writeonopen-661
job/instant-663
wip/writeonopen-661
job/money-import-review
wip/money-import-review
wip/importjs-610
review/integrations-407-round6
wip/integrations-review
job/dragghost-612
wip/dragghost-612
job/integrations
wip/integrations
job/decider-656
job/merge-round-6
job/perf-rerun
wip/merge-round-6
job/integrations-review-round5
job/selalign-576
wip/selalign-576
job/mcp-events-491
job/files-631
job/cal-e2e-569
wip/cal-e2e-569
job/reload-423
wip/reload-423
wip/mcp-events-491
wip/files-631
job/notesbridge-644
wip/notesbridge-644
job/editor-series
job/calcard-series
wip/calcard-series
job/mcp-events-review-491
wip/mcp-events-review
wip/editor-series
job/quirks-546
job/integrations-recheck
job/tocrail-636
wip/tocrail-636
wip/quirks-546
wip/reminders-643
job/reminders-643
wip/davscale-573
job/davscale-573
job/integrations-review
wip/ocr-eval-584
job/ocr-eval-584
job/esc-537
wip/esc-537
job/toastname-586
wip/toastname-586
job/submenu-579
wip/submenu-579
job/tasks-mode
wip/tasks-mode
job/agentdocs-630
job/dupwrite-634
wip/agentdocs-630
wip/dupwrite-634
job/lightglass-588
wip/lightglass-588
job/tabswitch-549
job/ghosttask-623
wip/ghosttask-623
job/toaststack-616
job/weekstate-609
job/mailsync-613
wip/mailsync-613
wip/weekstate-609
job/maildup-626
wip/tabswitch-549
wip/maildup-626
wip/toaststack-616
job/motion-611
wip/motion-611
job/tlstest-601
wip/tlstest-601
job/perf-495
job/floating-sheet
wip/floating-sheet
job/remdup-585
wip/remdup-585
job/fix-502
wip/fix-502
job/attachplay-622
job/perf-batch
wip/perf-batch-563
wip/perf-495
hotfix/mail-sync-diag
job/mail-m3
wip/mail-m3
job/attach-poof-603
job/calhover-608
job/editorbar-604
job/mentions-605
job/merge-round-4
job/allday-514
wip/merge-round-4
wip/allday-514
job/merge-round-4a
wip/merge-round-4a
job/sharestack-580
job/fix-501
wip/sharestack-580
wip/fix-501
job/perf-batch-563
job/apw-cache-review
wip/apw-cache-review
job/probe-520
wip/probe-520
job/mac-393
wip/mac-393
job/header-571
job/flake-513
wip/flake-513
job/docs-thumb-547
wip/header-571
job/webcal-572
wip/webcal-572
wip/shortcuts-542
job/shortcuts-542
wip/docs-thumb-547
job/caldav-stress
wip/caldav-stress
wip/sweep-478
job/apw-cache-512
wip/apw-cache-512
job/money-empty-540
wip/restart-505
wip/money-empty-540
wip/fix-510
job/restart-505
job/fix-503
job/perf-496
wip/perf-496
job/fix-498
wip/fix-498
job/info-inspector-465
wip/info-inspector-465
job/fix-510
job/fix-507
wip/fix-507
wip/fix-503
job/fix-493
job/money-kinds
wip/money-kinds
job/hygiene-548
job/merge-round-3
wip/fix-493
job/drag-snap-536
wip/merge-round-3
wip/merge-round-0930
wip/drag-snap-536
job/align-538
wip/align-538
job/bg-flash
wip/bg-flash
job/money-import
job/search-count-544
wip/search-count-544
wip/money-import
job/settings-key-541
wip/settings-key-541
job/toast-539
job/preview-421
wip/preview-421
wip/toast-539
job/tasks-500-531
job/title-plain-526
wip/title-plain-526
wip/tasks-500-531
job/notes-bridge
wip/parity-484
job/parity-484
job/files-slow
job/crash-525
wip/notes-bridge
wip/files-slow
wip/crash-525
job/kbd-motion-527
wip/bg-422
job/analytics-504
wip/analytics-504
wip/kbd-motion-527
job/upload-pill-523
wip/upload-pill-523
wip/tray-order
job/tray-order
wip/overflow-mid
wip/merge-round-2
job/perf-494
wip/perf-494
wip/mcp-fast-492
wip/motion-477
wip/asr-ab-489
wip/theme-variants-506
wip/overflow-511
wip/week-header-508
wip/attach-427
job/dav-delete-471
job/iso-435
wip/iso-435
wip/files-sel-keys
wip/dav-delete-471
job/align-253
job/siwc-490
wip/siwc-490
job/money-kinds-review
wip/align-253
wip/money-kinds-review
job/small-bugs-3
wip/overlay-title-487
wip/multiget-500
wip/hidden-420
wip/webcal-ui
wip/webcal-431
job/perf-367
job/location
wip/small-bugs-3
wip/location
wip/perf-367
wip/admin-deny-483
job/tag-unicode-473
wip/tag-unicode-473
job/blur-436
wip/photos-470
wip/blur-436
wip/small-bugs-4
wip/hunt-20260930
wip/settings-hdr-482
wip/chips-416
job/dedup-375
wip/dedup-375
job/doc-stack
wip/doc-stack
job/tokens-literals
wip/tokens-literals
job/jobs-leftovers
wip/send-fast
wip/paste-467
wip/money-numbers
job/money-plugin
wip/money-plugin
job/break-dav
wip/merge-batch
wip/crossday-469
wip/mac-verify
wip/mail-m2
wip/break-dav
wip/money-review2
job/money-md
job/modes-424
wip/money-md
wip/jobs-leftovers
job/agenda-413
wip/agenda-413
wip/modes-424
job/recog-417
wip/recog-417
wip/bounce-425
wip/ab-384-luna
job/webdav-perf
wip/webdav-perf
job/toast-ring
wip/toast-ring
job/money-review
wip/money-review
wip/micro-motion
wip/settings-card
wip/minical
job/notes-imap-428
job/least-priv
wip/ui-small-2
wip/flaky-426
wip/drag-end-418
job/jank
wip/jank
wip/least-priv
wip/docs-site
job/agenda
job/sec-batch
wip/sec-batch
wip/per-user-index
job/area-calendars
wip/area-calendars
job/parity
wip/parity
job/documents-research
wip/documents-research
job/test-infra
job/reminders-sync
wip/small-bugs-2
wip/reminders-sync
wip/gestures
job/google-oauth
wip/tags-merge
wip/tags
job/e2e-theme
wip/e2e-theme
job/icon-align
wip/test-infra
wip/select-align
wip/editor-385
job/voice
wip/webdav
job/webdav
job/app-pw-ui
job/editor-integrity
wip/editor-integrity
wip/voice
wip/quota
wip/cal-followups
wip/icon-align
job/composer-scale
wip/composer-scale
job/jobs-page
wip/jobs-page
job/hig-type
wip/hig-type
wip/app-pw-ui
job/motion-spring
job/mcp
wip/motion-spring
wip/mcp
job/small-bugs
wip/push-hosts
job/profile-sign
wip/touch-369
wip/profile-sign
job/mobile-focus
wip/mobile-focus
wip/ui-polish-354
wip/small-bugs
wip/dup-task
job/toast-polish
job/app-pw-scopes
wip/toast-polish
wip/app-pw-scopes
wip/cli-agent
wip/selection-pills
job/preview-attach
wip/preview-attach
job/dav-proppatch
wip/dav-proppatch
wip/cal-switcher
job/atomic-race
wip/atomic-race
job/photos-shared
wip/photos-shared
wip/cal-grid
wip/note-rewrite
wip/search-rebuild
job/mail-m1
job/paperless-import
wip/paperless-import
wip/mail-m1
wip/hidden-activity
wip/search-d
wip/pricing-research
wip/cursors
wip/auto-scheme
job/single-pills
wip/single-pills
wip/xuser-matrix
wip/money-format
wip/app-pw-setup
wip/purge-dos
wip/vault-health
wip/caldav-apple
wip/xuser-audit
wip/e2e-green
wip/tabbar
wip/adv-harness
wip/maple-mono
job/search-fix
wip/search-fix
wip/search-perf-c
job/adv-harness
wip/sidebar-headers
job/glass
wip/temp-index
job/polish
wip/polish
wip/file-protocols
wip/money-research
wip/glass
wip/voice-models
wip/collab-redo
job/voice-research
wip/hunt-20260928
wip/notes-actions-research
wip/search-pad
wip/search-perf
wip/search-sticky
wip/editor-undo
wip/chrome-rules
wip/motion
wip/appearance-research
wip/appearance
wip/audit-bugs
wip/cal-glass
wip/block-actions
wip/authz-order
wip/event-stripes
wip/chrome-sidebar
wip/auth-flaky
wip/robust-2
wip/gate-fix
wip/menu-blur
wip/import-calternaljs
wip/tray-fix
job/import-calternaljs
wip/index-order
wip/audit-fixes
wip/search-chevrons
research/mail
wip/phone-chrome
wip/dedup-break
wip/csp
wip/ui-audit
wip/select-toast
wip/perf
wip/flat-layout
wip/fonts
wip/event-tint
wip/sync-converge
wip/data-split
wip/glass-audit
wip/robustness
wip/sync-chaos
wip/search-thumbs
wip/fuzz
wip/menu-icons
wip/search-pill
wip/sync-changing
wip/heading-links
wip/date-formats
wip/a11y
wip/break-editor
wip/e2e-fix
wip/settings-sections
wip/sync-root-guard
wip/search-palette
wip/share-edit
job/toasts
wip/toasts
wip/cont-analytics
wip/authz-review
wip/popovers
wip/overlay-glass
wip/change-feed
wip/editor-modes
wip/composer-align
wip/cont-agenda
wip/agenda-merge
job/agent-conventions
wip/agent-conventions
wip/backend-misc
job/route-audit
wip/route-audit
wip/ui-batch
wip/heif-hardening
wip/grid-resize
wip/ask-page
wip/webmcp
job/deeplink-audit
wip/deeplinks
wip/shortcuts
wip/cont-tz-days
main
No results found.
Labels
Clear labels
No items
No 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#1157
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Found while seeding the website showcase instance (#1143) on 2026-10-05. Build:
dev04afb00, server image from the root Containerfile (with the #1143 fixes), arm64, OrbStack.The seed uploads about 300 photos and about 480 files through WebDAV and the API in a few minutes, as a new User would on a first import.
Server log during the burst:
Expected:
Not checked yet: whether search and Notes recovered after the burst. Repro:
apps/website/shotson branchsite/showcase-seed(bun run seed --reset).Starting #1157 on
job/bulkimport-1157ata493c314edfd40027a72e0d7fc1cb97fa69b1eb9. The worktree tracksorigin/devand is six commits behind at start; I will merge the updatedorigin/devbefore final gates as required. I am tracing semantic notification overflow, Notes Index transactions, and the worker's SQLite error handling before making changes.Trace finding:
Db::connectopens separate ordinary and authority writer connections to the same WAL Index, each with a 5 s busy timeout.crates/plugins/files/src/index.rscallsNotes::refresh_target_pathafter Files Index changes;crates/plugins/notes/src/store.rsstarts that operation with deferredbegin(), reads within the transaction, then writes. A commit from the other writer pool can stale the WAL snapshot, so the read-to-write upgrade returnsSQLITE_BUSY_SNAPSHOT; a longer busy timeout cannot wait out that case.JobQueue::failhas the same deferred read-then-write shape, whileWorker::wait_for_writerretries only pool checkout timeouts. Separately,SemanticIndexer::notify_changed/notify_removedreturnQueueFullontry_send, and the caller logs it; the five-minute reconcile is the only recovery. I will reserve the writer before these read-modify-write transactions, retry complete transient operations, keep worker queue calls alive through BUSY, and turn semantic overflow into one coalesced catch-up scan.The first focused adversarial run built and started the real server, then stopped before uploads. The runner uses
runpy.run_path("bulk_import_1157.py"), so__file__was relative;pathlib.Path(__file__).parents[2]raisedIndexErrorwhile opening the JPEG fixture. I am updating the probe to resolve its own file path before locating the fixture, then I will rerun the focused burst. This attempt produced no product finding because the upload probe did not start.The full probe ran against the real server. With 24 upload workers, the 780 requests finished their first attempts in 90.96 s, but the API returned
429 too_many_requestsfor active upload admission and several requests timed out. After the 300 s index wait, only 119 import files were on disk and in Files Index; Notes Index, semantic Index and Search had 0 bulk-import paths. The worker restart count was 0 and dropped semantic-change warnings were 0. Host load average was 18.50 before and 24.23 after. The probe exceeded the Files upload admission capacity, so this run does not establish the full import result. I am lowering concurrent uploads and adding bounded retry for explicit 429 admission responses before the next focused run.The backpressured real-server probe uploaded all 300 Photos and 480 Markdown files. Disk, Files Index, Notes Index and semantic Index matched the expected paths. The import took 487.596 s and all Indexes were ready at 514.526 s; upload p50/p95 were 3366.38/16240.13 ms, sampled server CPU was 205.01 s, mean/peak RSS was 588398135/700784640 bytes, and host load average was 19.06 before and 13.43 after. The run had 0 upload 429 retries, 0 job-worker restarts and 0 dropped semantic-change warnings. The Files Search assertion returned 0 expected hits out of 780. I am checking whether the probe uses the current Search hit identity/query contract or found a product indexing defect.
Finding: the prior real-server burst had 0/780 probe Search hits, but its request set
semantic=false. Incrates/calternal-server/src/main.rs, that mode filters providers toplugin_id == "search"; it excludes the Files provider. The expected Files hit was therefore not part of the request contract. The burst had already passed the exact disk, Files Index, Notes Index, and semantic Index checks, with 0 worker restarts and 0 dropped-change warnings. I updated the probe to use the normal hybrid Search route (the default), which queries the Files provider, and am rerunning the burst against the real server.Finding from the corrected 300 Photo + 480 Markdown live-server run: disk, Files Index, Notes Index and semantic Index reached the expected paths; worker restarts and dropped-change warnings were both 0. On this shared host, load average was 42.9 before the run and 30.3 after it. The probe issued 780 simultaneous Search requests against the route's 200 ms provider deadline; all 780 returned
timed_out=truewith no hits, and one upload client timed out after the server persisted the item. This is a load-sensitive verification failure, not an index mismatch. I am changing the probe to search the exact filename set in small stable-prefix groups through the normal Search route, so it checks every path without creating a second 780-request storm.Finding in the third real-server burst: after the 300 Photo uploads completed, three expected paths were absent from both disk and Files Index:
Photos/BulkImport1157/bulk1157-photos-045.jpg,...-053.jpg, and...-265.jpg. Notes and semantic Index counts reached 480. The server log still has zerodatabase is locked, worker-restart, semantic-drop, and upload-admission warnings. I am waiting for the probe's captured HTTP outcomes before attributing these three missing items.The third live-server run returned three HTTP 503 responses on upload creation. Two had empty bodies; one said
Authentication database is busy; retry shortly. Those three requests correspond exactly to the three Photo paths absent from disk and Files Index. The probe profile completed the other indexes, with 0 worker restarts and 0 dropped semantic-change warnings. This narrows the remaining contention to transient SQLite BUSY during request authentication, which currently becomes a client-visible 503. I am tracing the AuthStore request path and will add a bounded retry plus a regression test before the next verification pass.Completed: #1157 bulk-import contention and index recovery
Head:
b0265619929917f9f9e195e4f2f900f403ce7749What changed
BUSYfor that snapshot upgrade without waiting forbusy_timeout. Read-modify-write paths now reserve the writer withBEGIN IMMEDIATEbefore reading.Real-server burst
The probe uploaded 300 Photos and 480 Markdown files through API Tus and File WebDAV, then compared disk, Files Search, Notes Index, and semantic Index paths. Result:
The host was shared and load rose during the run, so these are local measurements, not a controlled comparison with the perf-test baseline. Twenty grouped Search requests reported provider timeouts; the probe retried timed-out or incomplete groups and found all 780 expected paths.
Gates
cargo fmt --checkpassed with no output.The Notes, DB, Embed, and Auth test commands also reported passing doc tests (zero doc tests in each applicable binary). The four Svelte warnings are existing empty/unused CSS selectors.
Files
crates/calternal-db/src/{db,jobs,sqlite,worker}.rscrates/plugins/notes/src/{lib,store,tasks_store}.rscrates/calternal-embed/src/store.rscrates/calternal-auth/src/api.rstests/adversarial/{bulk_import_1157.py,run.sh,setup.mjs,webdav.py}bench/bulk-import-1157.pycontracts/perf/{exceptions,adoption-1058}.jsonDecisions and gaps
cargo cleanremoved 20,422 files (16.2 GiB); web build output was removed. No push, deploy, or merge was performed.Independent review started on job/bulkimport-1157, head
b026561992; origin/devd0061ec3df. Reviewing recovery, transaction boundaries and retry idempotency; adding regression tests and running the real-server burst and 700-Note reconcile. Finding: semantic recovery uses only an in-memory watch bit and waits for an empty queue. Restart loses the bit and sustained arrivals delay recovery. No push or deploy.Review findings at
b02656199: runtime-only semantic marker, queue-empty recovery starvation, stale queued deletion after a missed recreate, and swallowed file preparation/second-fingerprint-race failures. Fixes add one permanent synced recovery witness through minimal calternal-fs Root hooks, alternate scan/bounded queue work, reconcile deletes from current disk, and return incomplete-batch errors. First accepted event persists the witness once; subsequent events do no filesystem write. Rust gates are compiling in the fresh job target. The 700-Note test source uses direct reconcile calls with no test-only retry. Live probe now samples ordinary authenticated Files reads during uploads.Safety fix committed as
fc6e3c7c8(Root hookafeabc3b7). The real pinned-model regression passed in 33.53 s: continuous overflow reaches both current files; an old delete hint preserves a recreated file; preparation SQL errors return failure; cold restart repairs changed bytes with no notification; one failed private Index does not starve another Home. Ordinary Embed tests: 42 passed, 5 ignored (the added real-model test was then run explicitly and passed). calternal-fs clippy passed; its test binaries passed 94, 1, 1, 48 and 2 tests. calternal-db clippy passed; its test binaries passed 38, 7, 1, 1, 6, 21 and 1 tests. A notification-count assertion is now in focused verification. Full web attempt: 265 files passed, one unchanged InfoPanel test hit its existing 5000 ms timeout; no assertion failure. Preserved logs; one focused confirmation and one full confirmation use maxWorkers=2. Real server build and 700-Note check remain in progress.The #1163 700-Note regression passed once with its unchanged direct reconcile calls and no test-only retry:
It retains 700 initial per-source notices and silence on unchanged repair. Full web confirmation also passed after the initial 5000 ms InfoPanel timeout (the focused file passed unchanged):
Current head
24a90faf03. The patched real-server build and one time-boxed import burst remain.Additional review finding:
configurein crates/plugins/notes/src/lib.rs acquiredlock_user(&user)outsideretry_notes_index_until_ready. That helper can retain BUSY work across arbitrarily many batches and sleeps 500 ms between exhausted batches. The Notes User writer guard therefore stayed held through the outer sleeps. This is separate from the SQLite writer pool, which the earlier settlement test proved is released. Fix in progress: scope the User guard to each adoption/target-refresh pass and re-read disk on the next pass; retain the existing bounded inner projection retries. A new regression holds the authority transaction, waits for a failed pass, checks a foreground Notes writer can take its User lock before SQLite is released, then checks one repaired Note row. Full Notes clippy/test are queued; the live profile now alternates normal Notes creation and Files folder creation alongside ordinary Files reads.Independent review progress at
c766ce589(base author headb0265619929917f9f9e195e4f2f900f403ce7749; merged origin/devd0061ec3df127d81c86729d07d899b0bf2b6de91once).Fixed recovery defects: lost restart marker, queue-empty starvation, stale deletion after recreation, swallowed partial-scan errors, and failed first witness write without runtime repair. Added a confined synced restart witness and real-model overflow/recreation/restart regression. Also moved the Notes User writer guard inside each retained retry pass so outer backoff releases it.
Evidence: FS, DB, Embed and Notes clippy/tests pass. Notes:
test result: ok. 289 passed; 0 failed; 3 ignored; 0 measured; 0 filtered out; finished in 387.81s, including the 700-Note reconcile without a test-only retry. Latest Embed:test result: ok. 43 passed; 0 failed; 5 ignored; 0 measured; 0 filtered out; finished in 60.88s. Explicit real-model regression passed in 33.53s. DB regressions check one settled outcome/notification, writer-pool release during BUSY, and immediate missing-schema failure.Full web suite passed: 266 files / 1830 tests, after one unchanged InfoPanel timeout on the shared host; focused InfoPanel and full confirmation both passed without changing expectations. Web check: zero errors, four existing warnings.
The real-server 300-Photo + 480-Markdown burst is running now, with ordinary Files reads, Files writes and Notes writes sampled during upload. Final verdict waits for its disk/Index/Search comparisons and restart/drop counters. Decisions and findings are in
review-1157.md.The independent live burst passed on code head
c766ce589: 300 Photos + 480 Markdown files through API Tus and WebDAV, eight upload workers. Search returned all 780 paths. Disk and Index sets matched; a separate read-only row check found 480 Note rows, zero duplicate Note paths, 780 Files rows, and 480 semantic document rows. Note identity/title mismatches: 0. Worker restarts: 0. Dropped-change warnings: 0.Ordinary requests during upload all succeeded. Files reads: 458 samples, p50 145.33 ms / p95 1860.73 ms. Files folder writes: 25 samples, p50 1028.16 ms / p95 5236.82 ms. Notes writes: 25 samples, p50 223.96 ms / p95 842.89 ms. Upload elapsed: 398.815 s; all Indexes current: 448.079 s. Upload p50/p95: 2620.76 / 14082.41 ms. Server CPU: 260.81 s; mean/peak RSS: 587157014 / 655114240 bytes. Shared-host load average rose from 10.09 to 27.76; gate compilation also ran during the burst. These are local debug-server measurements, not a controlled baseline comparison.
Reference in
docs/perf/baseline.json:search_100k.freshness_storm, perf-test, 1000 writes, upload elapsed 373.45 s, p50/p95 13643.83 / 15972.65 ms, mean/peak RSS 952356266 / 983887872 bytes. Fixture sizes and hosts differ.One reporting defect found: Search latency samples were not sorted before percentile lookup. Fixed separately at
378ea4358. The completed run's Search percentile pair is invalid and is excluded from evidence. Its 780-path assertions and all ordinary-request/upload percentiles are valid. Search logged 32 timed-out first requests but bounded Search retries reached every file. No test expectation changed; no second burst was run.Auth clippy/tests passed (124 tests). Server crate gates are still running; the final verdict follows them. The review and regression evidence are retained locally in
review-1157.mdand ignoredartifacts/.Independent review verdict: SAFE TO MERGE — yes.
Branch:
job/bulkimport-1157HEAD:
a82f2e5679d6795b287924fe465f027dbfe4b655Merged origin/dev once:
d0061ec3df127d81c86729d07d899b0bf2b6de91Independent data-safety review of #1157
Reviewed input head:
b0265619929917f9f9e195e4f2f900f403ce7749.The branch merged current
origin/devonce before review gates.Findings
The semantic recovery marker was only in memory. A restart with no new
upsert did not request model loading or an immediate scan. Fixed: a fixed,
private, synced
.system/semantic-recoverywitness arms recovery on restart.The first accepted event persists it; later events do no filesystem write.
The witness stays after successful repair. This also covers queued events
interrupted by a crash, and avoids a disk clear race with a new request.
Recovery waited for an empty queue. Continuous arrivals could defer it.
Fixed: alternate a recovery pass and one bounded incremental batch when
both are pending. A scan clears only the runtime bit before it starts.
An old queued deletion could erase a recreated file after a full scan,
when its new upsert had overflowed. Fixed: loaded workers reconcile both
event types from current disk. Before model readiness, an existing target
requests recovery instead of deleting its vectors.
File preparation errors were logged inside
index_filesbut returnedsuccess. A second fingerprint race also cleared vectors and returned success.
Fixed: report an incomplete batch after applying its other files. Catch-up
retains failed work without needing a second watcher event.
Worker and Notes event retries have bounded batches, but no total attempt
limit for BUSY. This retains durable work through contention. Other Index
errors return. A missing-schema test checks that worker errors surface.
The Files event consumer held the Notes User writer lock across outer
retries and sleeps. Fixed: take that lock inside each retry pass. A failed
pass releases it before the next outer pause. A focused test checks that a
foreground editor can take it while SQLite remains busy, then repair stores
one Note projection after authority releases SQLite.
A failed first recovery witness write returned before runtime repair was
armed. Fixed: surface the filesystem error, set the coalesced runtime bit,
and request the model. A confined I/O failure regression checks all three.
The Search latency reporter used unsorted samples. Fixed: sort them before
percentile lookup. The completed burst has valid ordinary-request and upload
percentiles, but its Search percentile pair is not used as evidence.
Decisions
Keep one permanent restart witness after the first accepted semantic event.
Restart scans are conservative; successful live scans clear only the runtime
bit. No disk write is needed per event after the witness has been synced.
This adds a small confined Root hook; no other filesystem behavior changes.
Alternate a full scan with one bounded event batch when both are pending.
Continue other batches and Homes after a partial error, but do not prune an
incomplete scan. Surface failed witness writes and arm runtime recovery.
Release the Notes User guard between retained retry passes. Keep existing
bounded projection retries inside a pass so its disk view stays consistent.
Retain durable background work across bounded BUSY batches; do not apply that
open-ended policy to HTTP request retries.
Verification
The local real-server burst passed with 300 Photos and 480 Markdown files,
through API Tus and WebDAV, with eight upload workers. Search found all 780
paths. Disk, Notes, Files and semantic Index path sets matched. Note identities
and titles matched the final disk bytes. Worker restarts and dropped-change
warnings were zero. A separate read-only check found 480 Note rows, zero
duplicate Note paths, 780 Files rows and 480 semantic document rows.
The 700-Note reconcile test passed in isolation and in the full Notes suite.
Its direct reconcile calls remain unchanged. No test-only retry was added.
The real-model regression passed. It covered continuous overflow, stale
removal after recreation, duplicate vector checks, cold restart without a new
notification, and recovery of another Home after a partial failure.
Worker tests check one stored outcome and one committed notification, writer
pool release during BUSY, and immediate error return for a missing schema.
Only BUSY and pool checkout timeouts are retained by the Worker. Each retry
batch is bounded, with capped jittered delay. Durable background work has no
total BUSY attempt limit. Other errors return. This policy prevents lost work
and Worker restarts during temporary contention.
The new
BEGIN IMMEDIATEsites contain Index reads and writes. File reads,model inference and Note preparation happen outside these transactions. No
network or heavy filesystem work was added inside them. Notes source-change
notifications check the committed revision. Link-health notifications publish
changed resolutions after commit.
Local performance evidence
The server used the current Rust debug build and a production web build.
The host was shared. Gate compilation ran during the burst. Load average rose
from 10.09 to 27.76. These numbers are not a controlled baseline comparison.
Upload elapsed: 398.815 s. All Indexes were current at 448.079 s. Upload p50
and p95 were 2620.76 and 14082.41 ms. Server CPU was 260.81 s. Mean and peak
sampled RSS were 587157014 and 655114240 bytes. No upload retry was needed.
Search had 32 timed-out first requests. Bounded Search retries found all files.
The Search percentile pair from this run is invalid because its samples were
not sorted; the separate reporter fix sorts future samples. The ordinary and
upload percentile samples were sorted and are valid. One burst was run.
The closest reference in
docs/perf/baseline.jsonissearch_100k.freshness_storm: perf-test, 1000 writes, upload elapsed 373.45 s,upload p50/p95 13643.83/15972.65 ms, mean/peak RSS 952356266/983887872 bytes.
The reference has a different data set, host and build profile. It does not
establish a regression for the ordinary request figures above.
Files changed by this review
crates/calternal-fs/src/root.rs: fixed, private, synced recovery witness.crates/calternal-embed/src/store.rs: restart recovery, scan fairness,current-disk deletion handling, partial-error propagation and regressions.
crates/calternal-db/src/worker.rs: fatal-error, writer-release and singleoutcome/notification regression tests.
crates/plugins/notes/src/lib.rs: User lock scope and regression.tests/adversarial/bulk_import_1157.py: ordinary request profile, Notemetadata comparison and ordered Search percentile reporting.
review-1157.md: findings, decisions and verification evidence.No dependency, migration, route or UI screen was added by this review.
All changed doc comments were read again before this report.
Known gaps
No unresolved data-safety finding remains in the completed scenarios.
The Search latency reporter fix was syntax checked after the single burst;
that burst's invalid Search percentile pair was not reused. Existing ignored
model tests were not all run; the new real-model regression was run explicitly.
Web check has four warnings in three files. An unchanged InfoPanel test hit
its existing five-second timeout on the first full web run. Its focused test
and the full confirmation passed without changes to expectations.
No UI screen changed, so UX walkthroughs and screenshots do not apply.
The first server suite invocation passed units and the performance guard, but
cleanup removed its last integration executable before it could run. The
missing target passed after rebuild. The full per-crate command was then run
again to obtain one complete zero-exit gate. This was a cleanup error, not a
changed test expectation or a product failure.
Gate output (verbatim)
cargo fmt --checkexited 0 with no output.calternal-fs
calternal-db
DB single-notice regression
calternal-embed
real-model regression
calternal-plugin-notes
700-Note reconcile
calternal-auth
cd apps/web && bun run checkcd apps/web && bun run test --maxWorkers=2ADVERSARIAL_BULK_IMPORT_1157_ONLY=1 ADVERSARIAL_SERVER_BIN="$CARGO_TARGET_DIR/debug/calternal-server" ADVERSARIAL_SKIP_WEB_BUILD=1 ADVERSARIAL_KEEP_WORK_DIR=1 timeout --signal=TERM --kill-after=75s 1800s bash tests/adversarial/run.shProbe and benchmark JSON, row checks and gate logs are in ignored
artifacts/.cargo clippy -p calternal-server --all-targets -- -D warningscargo test -p calternal-server -- --test-threads=4(complete invocation, exit 0)Final
cargo fmt --checkexited 0 with no output. Finalcargo cleanexited 0:Web build and
.svelte-kit/outputwere removed after all gates completed.The disposable live-server data was removed after retaining its profile,
row checks and redacted log. The final worktree has only committed changes.
Verdict
SAFE TO MERGE: yes. The input branch had clear recovery defects. The review
fixed them with separate commits and regression tests. The real-model recovery
round, forced-BUSY worker tests, 700-Note reconcile and live mixed burst passed.
All six reviewed Rust crates passed clippy and tests. Web check and the full
web suite passed. No data loss, duplicate projection, Worker restart or dropped
change warning was found in the completed final scenarios.
Behavior tested at
c766ce589; the reporting-only Search percentile fix is378ea4358. Later commits only record review evidence. No push or deploy wasmade. The required merge from
origin/devwas done once before gates.