APPLE INTEROP: exhaustive Reminders + Calendar knob matrix on the real Mac, both directions #393
Open
opened 2026-09-29 04:21:26 +00:00 by kayg
·
70 comments
No Branch/Tag specified
dev
wip/perf-1124
wip/palette2-1123
wip/palette-1093
wip/onboard2-1141
wip/onboard-1141.aborted-early
wip/onboard-1141
wip/notifloop-1194
wip/nlpchip-1127
wip/morph-1104
job/onboard-1141
wip/merge-round-7c5
wip/merge-round-7c4
wip/merge-round-7c3
wip/merge-round-7c2
wip/merge-round-7c
wip/mchrome-1084
wip/mailghost2-1094
wip/mailghost-1094
wip/kbpreview2-1118
wip/kbpreview-1118
wip/kanban-1092
wip/importhang-1121
wip/hiderev-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/delete-1119
wip/collabloss-1197
wip/cards2-1179
wip/cards2-1083
wip/cards-1179
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
job/wizchoices-1140
wip/trayicons2-1095
wip/trayicons-1095
job/perf-1124
wip/tagdnd-1187
wip/sidebar3-1094
job/tocrail-1191
wip/rev2-webperf
wip/rev2-money-ident
job/hide-1153
wip/previewcard-1098
job/notifloop-1194
job/tagdnd-1187
job/collabloss-1197
wip/wizchoices-1140
wip/restyle-1190
job/moneyfmt-1180
job/txentry-1198
job/cards-1179
wip/moneyfmt2-1180
wip/moneyfmt-1180-r
wip/moneyfmt-1180
job/tagperf-1186
job/pillglass-1189
wip/tocrail-1191
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/tagperf-1186
wip/settingsreg-1195
job/merge29
job/fu-1171
wip/merge29j
wip/fu-1171
job/fu-1166
job/adv-1202
job/directory-1199
job/segmented-1200
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#393
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?
Request (owner, 2026-09-29)
"you should try all reminder toggles and knobs instead of basic things, same for calendar events but also reminder toggles from the calendar!"
Goal
Prove every Apple Reminders and Apple Calendar option round-trips through calternal's CalDAV adapter on the real macOS 27 VM, in both directions, and fix every failure. A capture/replay fixture for each case goes into
crates/calternal-dav/tests/fixtures/macos27/.Matrix: Reminders.app (create, then edit each knob, then read back in calternal and in Reminders)
Title; notes; URL; date only; date + time; early reminder (alarm before due); repeat (daily, weekdays, weekly on days, monthly on day, yearly, custom "every 2 weeks", end date, end after N); location (arrive/leave, Home/Work/custom, radius); when messaging a person; flag; priority none/low/medium/high; tags (#tag in Reminders ↔ calternal tags); list move (between lists; to an iCloud list and back); subtasks (indent/outdent); sections; image attachment; complete; uncomplete; delete; restore; rename; "Today"/"Scheduled" smart lists; bulk complete; date-less reminder; all-day vs timed; time zone change on the Mac; very long title; emoji/RTL; 100 reminders at once.
Matrix: Calendar.app events on the Journal (and future area) calendars
All-day; timed; multi-day; cross-midnight; time zone per event; floating time; repeat rules (every kind above, plus exceptions: edit one occurrence, delete one occurrence, "this and future"); alerts (multiple, at time, before, custom, email-alert ignored); travel time; location (with structured map pin); URL; notes; invitees (should be refused or preserved, never a crash); availability busy/free; move between calendars; drag to resize; drag to another day; duplicate (⌘D) → dedupe rule from §46; copy/paste; delete; undo delete; colour change; calendar rename (display-name PROPPATCH); calendar order.
Matrix: reminders from Calendar.app
Calendar.app's "Reminder" tab in the new-item popover (seen on the VM: Event | Reminder); scheduled reminders shown in Calendar; completing a reminder from Calendar; dragging a reminder to another time.
Method
netbird ssh --no-browser --user calternal 10.69.69.21(helpers in ~: shot.sh, dclick.py, ax.py). The VM's calternal account points at a local verification server reached through a Cloudflare quick tunnel; Claude's orchestration notes describe it (server on 127.0.0.1:18088 behind the logging proxy on :18089, data in the scratchpad macverify/work2). Build the server from your branch into CARGO_TARGET_DIR and restart it in place; keep the tunnel and proxy running.docs/research/apple-caldav-matrix.mdwith a table (case → result → fixture → fix commit) and one replay test per case.Starting #393 on branch
job/reminders-sync, based ond192622807cb10f82888084895c548d7355d10f7. I am finishing the existing #358 completion 422 work first, then I will exercise and record the Apple Reminders, Calendar, and Calendar Reminder matrix on the macOS 27 VM.Progress: the completion fixture used for the #358 prerequisite now round-trips
STATUS:COMPLETED,PERCENT-COMPLETE:100, and Apple'sCOMPLETEDtimestamp, then uncompletes without leavingCOMPLETED. The first focused run exposed a test helper name collision; after correcting it, a reminder replay also showed that Apple's validPRIORITY:2was reduced to the Task priority bucket and emitted asPRIORITY:1. I retained the original RFC value in the DAV metadata while keeping the Task bucket projection.cargo test -p calternal-dav -p calternal-plugin-notesnow passes: 14 DAV unit tests, 6 DAV replay tests, and 108 Notes tests. Actual VM confirmation and the remaining matrix are pending.Progress on the real macOS 27 VM: Reminders.app emitted a valid VTODO for a Unicode/RTL title, notes, and PRIORITY:5, then a second PUT with a zoned due date and VALARM. The verification server still had an older binary and returned 422 for both. I saved the exact request bodies as
put-unicode-reminder.icsandput-timed-reminder.icsand added replay assertions; the branch server is compiling now so the VM result is not yet a branch result.Calendar.app also emitted a VEVENT with DESCRIPTION for the Journal calendar. The old server returned 403 (
property cannot be represented as a Log line). This is the existing Journal projection rule from DESIGN §30, but #393 asks for lossless preservation; I am checking the branch behavior and storage path before deciding the fix.Progress on
job/reminders-syncatcd0236e5(base includesdevat9c1524f9): captured and replayed macOS 27 Unicode/RTL, timed alarm, and date-only VTODO bodies. The branch parser tests pass. The live proxy recorded a 422 for Apple's completed date-only PUT at 07:04:56; the server process predates the latest branch build. I am rebuilding and restarting that server to isolate stale-binary behavior before changing the parser. Calendar'sDESCRIPTIONPUT received 403; DESIGN §30 says Journal edits that cannot fit a Log line must be rejected, so I am recording that conflict with this issue's lossless goal rather than silently discarding it.Live verification on the rebuilt branch server: a new date-only Reminders Task sent
DTSTART;VALUE=DATEandDUE;VALUE=DATE; its completion PUT returned 201 at 07:25:08. The Task Markdown kept both date-only fields,status: done, and a checked checkbox. Reminders reported complete after the 07:25:09 sync. Three Notes provider replays for Unicode, timed alarm, and date-only completion pass.A Task created by the earlier binary got 412 after upgrade. Its VTODO ETag changed, but the durable sync token did not, so Apple's next delta contained no changed resource. I added migration 16 to rotate the Reminders feed epoch once; the migration test and live retry are in progress. DESIGN §30 still rejects Journal Event DESCRIPTION because a Log line has no field for it; the captured Apple request is now a replay fixture.
The real Mac exposed one more interop failure: after renaming a Reminders Task, Reminders.app sent DELETE without
If-Matchat 07:57:04. The branch server returned 428 and kept the Markdown Task while Apple removed it locally. A replay first reproduced 428. The DAV route now looks up the current ETag when the header is absent, then calls the existing provider deletion check. An explicit staleIf-Matchstill gets 412. The replay is green; I am rebuilding the real server and will retry Apple's delete.Progress: #358 completion and the Apple DELETE case are now verified on the real macOS 27 VM. A date-only Task completion and uncompletion both returned 201; Markdown retained its due date and moved between
status: doneandstatus: todo, and Reminders showed the matching state after sync. After rename, Reminders sent DELETE withoutIf-Match; the branch returned 204 at 08:09:52 and the next sync REPORT at 08:09:53 showed the resource deleted. The Task moved to Trash with its Versions. The regression replay is covered inapple_replay.rs; the fix isf7a29120.I rebuilt and restarted
calternal-serverfrom this branch against the existingwork2data. I am continuing with the remaining matrix rows and will record each real-app result separately from replay-only coverage.Progress: added a real Reminders multiline-notes fixture and test (
4b04b13d), then captured a zoned timed VTODO with VALARM plus its complete/uncomplete writes (85568975). The live server returned 201 for every PUT. The Task Markdown kept the notes,Asia/Calcuttadates, alarm component and completion timestamps; after uncompletion it returned tostatus: todo. Focused replay tests pass.The Mac's AppleScript interface maps
remind me dateto the due instant in this case. The real VALARM was preserved, but this run did not prove an early alarm offset, so that matrix row remains partial. I am continuing with the other Reminders and Calendar knobs.Progress: daily and weekdays repetition are now covered by real macOS requests and replay tests (
64e3f705,78dbaaa0). Apple sentRRULE:FREQ=DAILYandRRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR; each PUT returned 201. The Task Markdown stored both rules, and the Reminders detail popover showed the selected rules after sync. Both kept the zoned due date and VALARM.The early-alert offset remains unverified because the Mac scripting interface mapped the alert to the due instant. Next I am checking custom repeat settings and the remaining calendar cases.
Progress: verified and committed
RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FRandRRULE:FREQ=WEEKLYfrom the real Mac (78dbaaa0,35929fc7). Both requests returned 201, the Task Markdown kept the recurrence, and Reminders showed the selected repeat after sync. The early-alert offset, selected custom weekdays, monthly/yearly, custom intervals and end rules remain open.Progress: Custom “every 2 weeks” now has a real Mac fixture and replay test (
fe996c6e). Reminders sentRRULE:FREQ=WEEKLY;INTERVAL=2; the branch returned 201, Task Markdown retained the interval, and the app showed “Every 2 weeks” after sync. End date and end after N remain to test.Progress: the two-week reminder repeat round-trip remains passed (Mac PUT 201; fixture and replay committed at
fe996c6e). The Calendar pass is currently blocked: the real Mac now shows a “CalDAV Password Required” alert, and the logging proxy has no Calendar event write after the 09:12 UTC PROPFIND. The CUA helper also surfaced a macOS prompt that would grant NetBird screen and system-audio capture; I have not accepted it. I created one uniquely named all-day test event by AppleScript, but there is no proxy evidence, so it is not counted as a pass. I am removing that local test item and continuing with AppleScript-only checks.Progress: generic protocol coverage now confirms that a well-formed monthly RRULE with
COUNT=4is accepted (201) and preserved in both Task Markdown and the DAV projection. The DAV replay test and Notes provider test passed. This is not Mac evidence; the real end-after-N UI case remains unverified. Commits:e3484274(test),4e2b8e77(matrix). The matrix now records the CUA screen/audio prompt and Calendar’s CalDAV password alert. DESIGN §30 still requires rejecting Journal Event fields that cannot be Log lines, while #393 asks to preserve them; I documented this conflict and kept current §30 behavior.Progress: protocol replay now covers weekly repeats with selected weekdays, monthly repeats on a day, and yearly repeats. All three PUTs returned 201 and GET returned the same RRULE. This is code-level coverage only; no macOS capture was made. The repeat-count and recurrence coverage is committed (
e3484274,a127ba47) and the matrix records that distinction (ed62df1f). AppleScript could not create a nested Reminders item because the Reminders dictionary exposes no child collection; the temporary parent was removed. No subtask round-trip is counted.Completed the reminders-sync work on
job/reminders-sync.Head:
0774df19(after the requested one-time merge fromdev).Implemented and recorded:
COUNT=4and selected weekday, monthly-day, and yearly rules. These are protocol tests, not Mac captures.docs/research/apple-caldav-matrix.md.Main files:
crates/calternal-dav/src/{protocol.rs,reminders.rs},crates/calternal-dav/tests/apple_replay.rsand its fixtures,crates/calternal-notes-core/src/tasks/{extract.rs,mod.rs},crates/plugins/notes/src/{lib.rs,store.rs,tasks_dav.rs,tasks_store.rs}, the Notes migration0016_reminder_wire_epoch.sql, and the matrix document.Real Mac verification remains partial. The CUA helper is blocked by the macOS prompt for NetBird screen and system-audio capture, which I did not grant. Calendar showed “CalDAV Password Required”; the scripted all-day event did not reach the proxy and was removed, so no all-day round-trip is counted. Subtasks and several other matrix rows remain unrun. DESIGN §30 rejects Journal Event descriptions that cannot map to a Log line, while #393 asks for lossless preservation; the current server keeps §30 behavior. Supporting those descriptions needs a data-format and Notes-provider writer change.
Decisions: preserve unrepresented recurrence fields as raw RRULE data through the Notes Markdown and DAV projection; keep the explicit DESIGN §30 Journal Event rejection pending a design and storage change.
Gates after merging
dev:cargo fmt --check: exit 0, no output.cargo clippy --all-targets -- -D warnings: exit 0; captured output:cargo test -p calternal-dav -p calternal-plugin-notes: exit 0; captured summaries:bun run checkinapps/web: exit 0; captured output:bun run testinapps/web: exit 0; captured summary:The one time-boxed adversarial round used
timeout 1500s tests/adversarial/run.shand exited 124 while compiling the server, before probes started. The captured log containsTerminated; no adversarial findings were produced. I rancargo cleanand removedapps/web/build. Worktree is clean. No explicit push was made.Adversarial finding from
job/money-md(#404), head232702c08c23063c58df9433d8512b466abaf735:The API-only adversarial run created a VTODO with
DESCRIPTION:Adversarial reminder note, completed it with a conditional PUT, then fetched it. The PUT succeeded and the GET returned HTTP 200 with completion state, but the response did not contain the description.dav_reminder_description_findingsreportedReminders response lost the VTODO description. The server remained alive at the end of the round.This finding is outside #404's Money prototype scope, so I am recording it here for the Reminders CalDAV work. No credentials or private data were used in this finding.
Progress: the macOS 27 VM and CUA helper are reachable. Calendar's current accessibility tree shows the Journal calendar. The existing logging proxy is up, but its :18088 backend is stopped. I am preserving the work2 dataset and will update the requested matrix rows from live captures.
Finding: CUA works in the current macOS 27 session. shot.sh captured a 1600x1263 desktop image (scale_factor 2.0), and ax.py Calendar find returned the Calendar controls and cached test entries. The visible macOS prompt asked whether NetBird could access files on a network volume; I chose Don't Allow. This is not the earlier screen/audio prompt. Live sync status will be checked after the verification server starts.
Data-loss finding (deploy blocker), reported by the money-md job's adversarial round on dev: the Reminders completion path loses an existing DESCRIPTION. Completing a VTODO drops the reminder's notes (evidence posted on #393). This is on dev and not yet deployed. It must be fixed, with an Apple replay regression (complete a reminder that has multi-line notes; the notes survive in Markdown and on the next GET), before the #356/#393 deploy. Job break-dav (#457) owns the fix; job mac-verify must include the scenario in its GO/NO-GO.
Running the real macOS 27 portion of #393 in the shared
job/mac-verifyworktree. The same Apple Calendar CalDAV account is connected to the old Journal collection through the local TLS logging proxy. The first five-entry area fixture is being imported into that server now; I will report each Reminder row from UI and wire evidence, and will leave unattempted rows marked not run.Resuming the real Apple client verification. Branch:
job/mac-verify; base SHA:28ac39f917f3dedd44dec2e863ee2854d64c2d5a; resume head:076cf6d776ded4bab13b790c11ae17de6fa196f5. The previous session refreshed the Mac VM access evidence and recorded that the account sync against the restarted verification server is still pending. I am continuing that upgrade-path check and the remaining requested Reminders cases.Reminders rows from the #356 macOS 27 run (details and evidence in the #356 comment and
docs/research/apple-caldav-matrix.mdonjob/mac-verify):DTSTART;TZID+DUE→scheduled/due, read back).Starting #393 on
job/mac-393, base0dc772c3697ea9bd01822c26440c32206d472715. Read CLAUDE.md, CONTEXT.md, DESIGN §30/§46/§47, the existing matrix, and #457/#428 reports. Mac SSH works; acquired the exclusive macvm.lock. Will use a local branch server, reverse SSH tunnel, throwaway lab trust, and real UI/wire evidence. Existing matrix proves mainly Mac-to-calternal rows; reverse rows remain open. C13 rejections will be recorded as intended behavior as required by this job prompt. No push or deployment.Committed
d7afa529d: optional TLS and credential-free DAV capture added to the existing local proxy; exact iCalendar bytes retained with response status and selected protocol headers. Four capture/proxy tests pass. Root ws/lib0 test dependencies are explicit (versions and MIT licenses checked with bun info). First server build ended with exit 143 (SIGTERM) without a Rust diagnostic; restarted it. Mac CUA works; fresh CA profile downloaded, not yet installed. No new matrix cell is claimed passed.Committed
3e211431f: full two-direction acceptance checklist, including every requested Reminders/Calendar control, reminders in Calendar, and webcal. All fresh cells remain Not run until paired wire/Home/UI evidence exists. Historical #356 results stay intact. C13 rejection is kept as this job explicitly requires it. Current verdict: NO-GO pending real Mac evidence; no fresh unsupported-control claim is made. Four proxy/capture tests passed (4 pass, 0 fail). First server build exit 143; retry is compiling. Mac profile download is visible in Device Management; trust/account setup is in progress.Web validation:
bun run checkpassed withsvelte-check found 0 errors and 0 warnings.bun run testhad 886 passes and one timeout (keeps glass materials in the shared role tokens, 5000 ms while scanning files; no assertion failure). No expectation changed. Isolated rerun is running. CUA reached the CA install authentication dialog. The branch server retry is still compiling; no fresh interoperability cell is claimed passed.Head
4e98d0c65: capture size-bound regression added; five proxy/capture tests pass (5 pass, 0 fail). The complete web test run had one 5000 ms timeout in the existing theme file-scan test, with 886 other tests passing. The isolated rerun of themes.test.ts passed all 73 tests without changing an expectation. Mac CUA reached the CA authentication dialog; the password helper completed without outputting private values and the lab root certificate now exists in the System keychain. Explicit TLS trust verification is next. Server build is still in progress. No fresh matrix cell is claimed passed.Lab setup finding: the CA profile imported the throwaway root into the System keychain, but
security verify-cert -c ~/mac393-tls.pem -p ssl -s localhostreportsCSSMERR_TP_NOT_TRUSTED. The sudo trust operation fails at SecTrustSettings with authorization denied, rather than a sudo/password diagnostic. Continuing with Keychain Access UI trust. No TLS/account interoperability pass is claimed. Private file contents and credential values have not been printed.Head
d7eaf387f: recorded the current lab trust evidence separately from the acceptance cells. Root fingerprint matches the local CA; OpenSSL and Mac explicit-root verification pass. Automatic Mac SSL verification fails despite Keychain's trusted-root display. Sending the full TLS chain changes curl's error from missing issuer to untrusted self-signed chain. Investigating the SSL-specific trust policy. Screenshot attached: https://git.kayg.org/attachments/0698889c-d0bd-4fb9-b978-6d56da3ed56d . No new interop pass is claimed.The production web build passed after restoring a clean isolated Bun install. Five capture/proxy tests pass on that install. Rust server build remains in progress.
Required one-time merge of origin/dev completed cleanly at
dc3325b1cd. Final web gates passed:The Rust server build and per-crate gates remain running. Mac user trust authorization completed, but SSL verification still failed. Trust settings show an explicit SSL entry without a trust result; Keychain displays SSL as “no value specified”. Correcting that policy before account provisioning. No fresh matrix acceptance cell passes yet.
Head
ccedcd3a1. Mac lab SSL trust is resolved. Native Keychain SSL policy was set to Always Trust, then the close/save operation was authorized in System Certificate Trust Settings. Evidence:The 502 is the local proxy response while the backend is not started; it is not a DAV failure. Verified Keychain state. Procedure recorded in the matrix. Build is in server linking. The capture/proxy tests passed 5/5 on a retry; the first attempt hit the unchanged existing 1-second proxy readiness bound, before any status-code assertion. Final web gates passed 887/887 with no Svelte errors or warnings. Matrix acceptance cells remain not run until the real backend starts.
Head
563b07090. The server built from merged dev sourcedc3325b1cpassed:The throwaway local server is listening. Mac curl through the locked SSH reverse tunnel and verified lab TLS now returns:
Throwaway owner and DAV app password were created through real authentication endpoints; credentials are private and setup token is redacted from the log. Proceeding with Mac account provisioning. Per-crate Rust gates are running; no fresh DAV matrix cells are claimed yet.
Real Mac Reminders edit captured:
1790756028512-00016.json, PUT 201, then REPORT 207 (00017), another PUT 201 (00019) and REPORT 207 (00020). Capture excerpt:Authenticated Notes API GET 200 confirms the same title, both prose lines and
priority: mediumin the authoritative Markdown. Mac native readback after sync confirms both lines and priority 5. API-created Task received in Reminders; Mac edit after sync. Reviewed exact 500-byte real Apple PUT now has a replay fixture and Notes provider test in progress. Existing test expectations are unchanged.DAV gates passed:
Notes/Calendar/Server gates continue. CUA now uses the visible main window rather than off-screen menu windows; Calendar was repositioned and its real Refresh Calendars menu was invoked. Calendar discovery has started through the capture proxy.
Head
3c6ffcbe3. Fixed the real reverse priority failure in atomic commit0057b7b51: a Task API priority edit returned 200, but stale Apple PRIORITY in DAV metadata overrode it on GET. The renderer now preserves exact Apple numeric priority only while it matches the authoritative Task bucket, using one shared mapping for parsing and emission. Priority removal also removes stale wire priority. The exact Mac capture drives the new regression. It failed before the fix with actual PRIORITY:5 versus expected PRIORITY:3.Post-fix DAV gates:
The fixed server rebuild and Notes capture replay are running. The matrix now records the real Mac title, multiline notes, medium priority, Unicode/RTL/emoji and completion checks, separates initial receive observations from second-sync passes, and records the priority live retest as pending. Calendar received the timed Work Log entry and its inspector shows 09:00–10:00. Remaining exhaustive cells are still not run, so NO-GO remains the release decision.
Head
deeff53c41. Native Calendar title edit produced PUT 1790758390067-00045 (204), then REPORT (207), and the real Log API returned the changed Unicode title with unchanged identity. Native Reminders uncompletion produced PUT 1790758139457-00041 (201), then REPORT (207), and the Markdown Task became unchecked with both note lines preserved.The server rebuilt with the priority fix (
0057b7b51):Finished dev profile [unoptimized + debuginfo] target(s) in 19m 58s. Its restart failed withTantivy(LockFailure(LockBusy, Some("Failed to acquire index lock..."))). No process using this job's server binary remains and fuser found no holder of its index lock files. Investigating before the live priority retest. Notes replay and the remaining per-crate gates are still running. The full option matrix remains incomplete; release verdict is NO-GO.Head
42f8de5f0. The fixed server's Task API returned High (200), DAV GET emitted PRIORITY:3, and Apple fetched it in REPORT 1790760058155-00061 (207). Native Reminders readback now returns 3 with the Unicode title and both note lines intact. Screenshot: https://git.kayg.org/attachments/a96487d6-995b-41b0-a970-dcd7fc3ffb54 . The matrix marks verified receive separately from a full second-sync pass.The real captured Notes apple_replay test passes (2 tests total), committed at
091b1f80b. Final Notes clippy passed:Finished dev profile [unoptimized + debuginfo] target(s) in 3m 47s. Full Notes tests are running, then Calendar and Server gates. Server restart failure is recorded in #505; its next start succeeded without touching Index or lock files. NO-GO remains: most option cells and Webcal are not run. Preparing lab cleanup within the four-hour job limit.Head
2be1731e3. The Mac account and lab CA profiles are removed. Both keychain certificate lookups returned not-found (44). Exported user and System trust settings contain no lab CA SHA-1 entry; verify-cert returns CSSMERR_TP_NOT_TRUSTED. The remote lab helper file list, profile count and blank Notes count are all zero. Tunnel, TLS proxy and server stopped; a new nonblocking flock succeeds.Final Notes gates completed: 126 unit tests and 2 apple_replay tests passed; clippy passed. Final Calendar clippy passed in 11m 06s. Calendar tests are rebuilding a dependency feature combination; Server clippy/test are not yet complete. Preparing the final NO-GO report within the four-hour limit. Reverse Task title and None reached the Mac and stayed after the second discovery cycle (R4), with screenshot attached in the matrix. Most options and Webcal remain Not run.
Final report for #393. Branch
job/mac-393, headd2251b6b4569c96d467d1a9586ec9652a0a5a2f6. No push, deploy or issue closure. The one required merge from origin/dev isdc3325b1cd.NO-GO for “calternaldav shipped”. This is a partial delivery, not an exhaustive acceptance result. The 102-row matrix contains 204 direction cells: 11 passed, 5 observed without full acceptance, and 188 Not run.
Built: optional TLS and bounded, credential-free DAV captures in the existing local proxy; a real macOS 27 Reminders fixture; a priority projection fix that prevents stale Apple metadata from overriding the current Task priority; and Notes apple_replay coverage. Native Mac reads confirmed the fix (High -> PRIORITY:3 / native 3; None -> no PRIORITY / native 0). Native writes also confirmed Unicode titles, multiline notes, completion/uncompletion and a Calendar title edit. The matrix links the real screenshots and records request/response IDs and API results. No UI implementation changed.
Files: crates/calternal-dav/src/reminders.rs; crates/calternal-dav/tests/fixtures/macos27/put-mac393-unicode-notes-priority.ics; crates/plugins/notes/tests/apple_replay.rs; tests/adversarial/apple-capture.mjs; tests/adversarial/apple-capture.test.mjs; tests/adversarial/editor-proxy.mjs; docs/research/apple-caldav-matrix.md; package.json; bun.lock. Five upstream UI/audit files came from the single required origin/dev merge; they are not this job's implementation.
Known gaps: the remaining Reminders controls, most Calendar controls, C13 rejection UX, crossing-midnight cases, repeat exceptions, alerts, invitees, moves/rename/delete and all Webcal cases still need real two-direction evidence. High's fixed Mac receive is verified, but its second sync was not checked before the next edit. Reverse prose editing is not tested. The server's first restart exited with Tantivy LockBusy; the next start succeeded without touching Index files. Root cause remains in #505. No full adversarial round was completed. Calendar test and Server validation status will be recorded below; unfinished gates are not passes.
Decisions: keep separate direction columns and preserve prior historical evidence; distinguish received data from a second-sync pass. Preserve an exact Apple priority number only while its decoded Task bucket still matches Markdown, then use the existing canonical values after a Task edit. Reuse the existing proxy with opt-in lab TLS/captures; exclude query URLs and non-DAV routes, allowlist headers, and bound retained body bytes at 2 MiB. C13 behavior stays as specified; no new Log data format was introduced.
Cleanup: removed the Mac account/CA profiles, both keychain CA copies and user/System lab trust entries. Certificate verification now fails with CSSMERR_TP_NOT_TRUSTED. Remote lab files and the blank lab note are absent. Stopped the tunnel/proxy/server and released macvm.lock. Local credential files and CA/TLS private keys are removed. Build cleanup will be recorded after cargo clean.
Gate output (summary lines copied verbatim):
cargo fmt --checkExit 0, no output.
cargo clippy -p calternal-dav --all-targets -- -D warningscargo test -p calternal-davcargo clippy -p calternal-plugin-notes --all-targets -- -D warningscargo test -p calternal-plugin-notescargo clippy -p calternal-plugin-calendar --all-targets -- -D warningsnode --test tests/adversarial/apple-capture.test.mjs tests/adversarial/proxy-early-response.test.mjsbun run check (apps/web)bun run test (apps/web)Unfinished gates: Calendar cargo test was interrupted while compiling (no test result); Server clippy was interrupted while compiling (exit 255 after intentional termination); Server cargo test was not started. Full workspace gates were not run; this job used the per-crate gate rule.
Server build, copied verbatim:
Build cleanup, copied verbatim:
Web build output, the throwaway Home and local credential files are removed. Worktree is clean. Screenshots and credential-free capture records remain ignored under artifacts/mac393; screenshots are attached to this issue. The matrix is docs/research/apple-caldav-matrix.md at the local head above.
Resumed round 2 on job/mac-393 at
d2251b6b4(base from round 1). Read CLAUDE.md, CONTEXT.md, DESIGN sections 29–30 and 46–47, the full acceptance matrix, and the round-1 report. No new acceptance passes are claimed. Next: check Mac access under macvm.lock, reuse capture tools, and script native batches. No push or deployment.Round-2 progress: committed
ca2a04b85, a wire-only batch report (seven capture/report tests pass). Reprocessed 82 round-1 exchanges: five writes, no stored error statuses, five incomplete records. This is not new acceptance evidence. The notes-bridge job released macvm.lock; mac-393 now holds it. macOS 27 native Swift helper compiled with no diagnostics and discovered the current local Reminders list through EventKit. The previous DAV account is absent. Branch server and production web builds are in progress. Existing proxy test first failed listener readiness, then passed unchanged on retry (1 pass, 0 fail). No acceptance cell is marked passed from helper setup.Head
358e02af8. Native helper integration check passed on macOS 27: 17 reminders, eight recurrence rules, date-only vs timed components, alarms, Unicode notes, URL, priorities, completion, clearing fields, rejection without partial save and removal. It uses a temporary local list and removes it in finally. These are helper tests, not CalDAV acceptance. Calendar EventKit access returned full access denied; Calendar AppleScript new-calendar returned AppleEvent handler failed (-10000). Investigating the native Calendar permission. The branch server build continues.Head
358e02af8. Native helper smoke passed on a local Reminders list and removed its test data. Calendar EventKit discovery returned full access denied through both SSH and a Terminal launch. AppleScript calendar creation returned AppleEvent handler failed (-10000). These are setup gaps, not server rejections. The notes-bridge worktree is waiting on macvm.lock; released the lock between batches. Server build continues. No new acceptance cells pass.Head
d4d13728bincludes the one required merge of fetched origin/dev (558457cf3). No conflict. That merge changed web/docs files, not Rust source. After merge: cargo fmt --check exited 0 with no output; capture/proxy tests passed 8/8; web check sayssvelte-check found 0 errors and 0 warnings; web tests sayTest Files 137 passed (137)andTests 888 passed (888).Branch server build finished:
Finished dev profile [unoptimized + debuginfo] target(s) in 37m 54s(the exact backticked profile line is retained in the artifact). First lab start exited NotFound because the new data directory was absent; creating that directory fixed startup. Health now returns 200. Six real Task API fixtures and Home reads are ready for reverse sync. No Mac receipt is claimed. Native batch helpers are committed and tested; Rust per-crate gates are running. mac393 is queued on macvm.lock behind notes-bridge; no unlocked Mac session was used.Account preflight finding, head recorded in the branch log: macOS rejected the loopback non-TLS profile with DAAccountValidationDomain:100. Mac health through the SSH tunnel was 200, but the capture directory has zero DAV exchanges. No profile was installed. Screenshot: https://git.kayg.org/attachments/68e822e1-6083-4849-9738-36cba0a1eccb . Switching to the issue's quick-tunnel TLS method, using Cloudflared 2026.9.3 with official SHA256 and Apache-2.0 checked. This is a lab setup failure, not a protocol option failure. No new acceptance pass is claimed. DAV clippy and 74 tests passed. Notes gates are compiling.
Round 2 reverse batch: source
d4d13728b, six real Task API writes and Notes Home reads, Apple REPORT 207 1790768172544-00021, then second discovery and equal native readback of all six. Eight reverse cells now pass: one-line notes, multiline notes, date-only, Low, Medium, High, completion, undated. Screenshot: https://git.kayg.org/attachments/218d1780-4268-40d2-b236-f565c573756d . Native prefix mismatch was a helper error, fixed at490e36ae3with red/green native coverage. Active-account smoke list writes exposed two collection DELETE 404s;29f1a03c5refuses non-local sources before mutation. Mac lock released for the waiting job. Calendar and webcal remain untested in round 2; NO-GO still applies.Resource wait: released the Mac VM lock after the reverse Reminders batch because fuser showed a waiter. The next locked session has waited about 20 minutes. fuser now lists holder flock PID 28096, its bash PID 336271, and queued flock PID 340201; the holder bash currently has no child process. No unlocked SSH or GUI calls were made. The 18-item native batch is queued behind that lock. Local input-validation round returned health 200, principal 207, malformed PROPFIND/REPORT 400, invalid calendar PUT 422 (subsequent GET 404), unauthenticated principal 401; no 5xx or resource was created by invalid input. Three real Log API writes returned 201 and a Daily note GET 200; DAV projection has Berlin TZID, UTC and cross-midnight DTEND on 20260930. These are preparation, not native acceptance passes.
The Mac lock has remained held by another session for roughly 48 minutes after I released it for a waiter. Other jobs are now also queued. No unlocked Mac operations were made. The old temporary public TLS tunnel received SIGTERM at 12:08:00 UTC; its hostname now returns DNS ENOTFOUND. R5 second-sync requests occurred at 11:51–11:53 UTC, before that shutdown, so those passes remain valid. I cancelled the queued native apply before it could run, restarted the lab tunnel in a foreground TTY, and verified the new public TLS health is 200. Only a refresh of this job’s own account profile is queued now; the write batch is not queued. Matrix remains 19 passed, 3 partial, 182 untested. If the VM cannot be reacquired within the four-hour job limit, native work and account cleanup will be reported explicitly as pending; the throwaway server/tunnel and local secrets will still be stopped/removed.
Blocking finding from real Mac captures: PUTs returned 201 for FREQ=WEEKLY;INTERVAL=2, FREQ=WEEKLY;BYDAY=MO,TH, FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR and FREQ=MONTHLY;BYMONTHDAY=15. Native EventKit cache kept them after another launch, but direct DAV GET 200 returned only FREQ=WEEKLY / FREQ=MONTHLY. The Notes writer stored RRULE syntax where the Task NLP projector expects prose, so constraints were lost in the Index projection. Four exact real capture fixtures now drive Notes apple_replay: red test failed with missing constraints, then green passed after converting through the existing formatter and enforcing an exact RRULE round trip. Minimal public addition in calternal-dav exposes that conversion; no dependency or migration added. Final per-crate gates are running. Remaining blockers: no post-fix Mac round; existing raw-RRULE Task files still need repair/reindex strategy; required performance profile and measurements are unfinished. The new forward batch does not pass release cells from its native cache alone. NO-GO remains.
Round 2 final report for #393. Branch job/mac-393, head
10fcee426fe9a26290c3ce5d463d10528f0c56b2. The one required origin/dev merge isd4d13728b. No push, deploy or issue closure.NO-GO. The 204 direction cells now contain 19 passed, 16 partial, 4 failed wire readbacks that need a post-fix Mac retest, and 165 untested. Eight reverse cells gained full second-sync evidence. The 17-item native forward batch found a real recurrence projection loss; native cache equality had hidden it.
Built: a native EventKit batch helper with exact calendar IDs, bounded input, date/time, alarm, recurrence, URL, priority and completion controls; a local smoke check and active-DAV refusal guard; a bounded wire-only capture report; safe root/well-known discovery captures; and a Notes writer fix for interval, weekdays and monthly-day constraints. Four exact real Mac captures drive a Notes apple_replay regression. It failed before the fix and passes now. The existing bare-daily Markdown assertion stays unchanged and passes.
Files owned in round 2: tests/apple/README.md, eventkit-batch.swift, eventkit-batch.plist, native-smoke.py; tests/adversarial/apple-capture-report.mjs and its test, apple-capture.mjs and its test; crates/calternal-dav/src/reminders.rs; crates/calternal-dav/tests/fixtures/macos27/put-mac393-round2-repeat-{selected-days,monthly,two-weeks,weekdays}.ics; crates/plugins/notes/src/tasks_dav.rs and tests/apple_replay.rs; docs/research/apple-caldav-matrix.md. The required upstream merge brought web/design changes; they are not this job's implementation. No UI implementation was added.
Evidence: six reverse Tasks retained their Home fields and all native fields through a second sync. Screenshot: https://git.kayg.org/attachments/218d1780-4268-40d2-b236-f565c573756d . The forward batch saved 17 native Tasks; the API and Home read 23 total. Mac PUTs returned 201. Direct GET 200 lost INTERVAL=2, BYDAY and BYMONTHDAY even though Markdown kept the full original RRULE. That caused the fix. Capture IDs, fixtures and limitations are in the matrix. No new forward cell is claimed from cached native fields alone.
Known gaps: the fixed writer has not had a fresh live Mac round; existing raw-RRULE Task files need a repair/reindex plan; the final Server cargo test was stopped during compilation (143) at the four-hour job limit. The required bench profile and average/worst-case measurements are not complete. There is no comparable DAV recurrence baseline in docs/perf/baseline.json, and no performance claim is made. Most Reminders controls, Calendar controls/permission setup, exceptions, invitees, area moves and webcal still need real two-direction evidence. One bounded local validation round passed, but the full adversarial matrix/storm was not run. Do not merge as shipped.
Decisions: use Apple's public EventKit API for batches and CUA for UI evidence. Native cache reads and protocol replay do not pass acceptance cells on their own. Convert constrained supported RRULEs through the existing Task formatter only when RRULE -> phrase -> RRULE is exact; retain rules outside that phrase grammar in per-resource metadata. Bare frequencies keep their established Markdown spelling. The small public calternal-dav helper exists for the Notes writer; no dependency or migration was added. C13 stays unchanged and no new Log format was introduced. A temporary public TLS tunnel replaced the failing loopback account setup; its hostname is lab state, not a production change.
Validation: one local input-validation round returned health 200, principal 207, malformed discovery/report XML 400, invalid calendar body 422 and subsequent target GET 404, missing credentials 401. No 5xx. The eight capture/report tests passed. The existing combined proxy run had one listener-start failure; the isolated retry passed without a code change. The native smoke passed before the account; with an active DAV account its new guard refused before any list write.
Final gate output (summary lines copied verbatim):
cargo fmt --check: exit 0, no output.calternal-dav
calternal-plugin-notes
calternal-plugin-calendar (unchanged Rust; initial round-2 gates)
calternal-server (Clippy after recurrence fix; cargo test unfinished)
Before the late recurrence fix, the initial Server test passed; this is not a completed post-fix Server gate:
Web gates after the required merge:
Cleanup: own Mac account profile and ~/mac393-round2 removed; other profiles retained. Mac lock released. Own local server, proxy, tunnel and IPv6 bridge stopped. Throwaway Home, local credentials/profiles and web build output removed. Screenshots and credential-free wire records stay ignored in artifacts/. Cargo cleanup output will be appended below.
Worktree is clean.
Resumed round 3 on job/mac-393 at
10fcee426f. Read the repository contract, glossary, DESIGN, #393 and round-2 report. Initial matrix: 19 passed, 16 partial, 4 awaiting post-fix retest, 165 untested (204 direction cells). First: recreate the cleaned lab and retest the four constraints with direct DAV readback. Then native batches and reverse API writes. No push or deployment.Round-3 setup: the cleaned lab server and production SPA are rebuilding with four cargo workers. Native batch setup is queued under macvm.lock, currently held in the notes-bridge worktree (holder flock PID 976532, shell 976567). No unlocked Mac calls. The helper omitted plain weekly recurrence; added the explicit case and one native smoke case. The 100/10,000-Task recurrence GET/full-sync/burst benchmark profile is ready; no new matrix passes yet.
Native smoke passed on macOS 27: 18 reminders and nine recurrence cases, including plain weekly. Helper fix
af0daae3d; direct-DAV verifierccd6899e5reports precisely the four round-2 RRULE losses from the saved real captures (four of eight repeat GETs differ). Calendar permission cause is now visible in System Settings: NetBird had Add Only Access. Changing it through the normal native Options sheet to Full Calendar access; no permission database edits. Live recurrence retest still waits for the branch server build.Round-3 finding, head
ccd6899e5before the benchmark commit: Calendar native read was denied because System Settings → Privacy & Security → Calendars → NetBird → Options had Add Only Access selected. Normal UI selection of Full Calendar access changed the radio state from 0 to 1 and subsequent EventKit discovery returned four calendars, including two writable local calendars. No permission database edits. Local Reminders smoke passed 18 cases / nine repeats and removed its list. Native direct-DAV comparator matches the round-2 finding: four of eight captured repeat rules lose constraints on the saved pre-fix receiving GETs. This is setup/tool validation; no new acceptance cell passes yet. The server rebuild continues.The one required fetch and merge completed without conflicts. Fetched origin/dev was
cd3cea7575; merge head is56eb9ec003. Per-crate gates are running for DAV, Notes, Calendar and Server with four workers; web checks and tests are also running after the upstream web changes. No second fetch/merge will be run. This fetched snapshot has no #471 or #500/re-parent/multiget commits in its log, and the merge diff changes no DAV or Notes writer files. Those later merge-round-3 changes are not claimed verified here. Mac profile setup remains queued behind the notes-bridge lock holder. The separate local performance Home is seeding the 10,000-Task profile; its initial generic Bearer create returned 428, corrected by If-None-Match: * in the benchmark client.Round 3 finding: the first tunnel died before profile validation, with zero DAV exchanges. A replacement foreground tunnel and a full Principal URL installed the lab account. Native discovery now finds one non-local writable Reminders list. The four recurrence retest writes start next; no acceptance cell has been promoted from this setup evidence.
Merged origin/dev once at
56eb9ec003. DAV and Notes clippy/test passed. The bounded local DAV validation round returned 200/207/400/400/422/401 and confirmed rejected invalid resources are absent.Filed #531: duplicate parsed checkbox anchors produce Notes API 500 after Home persistence. This came from local benchmark setup, not Apple wire. The benchmark uses valid unique alphanumeric anchors now; the 100-Task average GET p50/p95 is 15.43/37.69 ms, full sync 116.95/237.18 ms on this loaded local debug host. The 10,000-Task phase is in progress. No matching DAV baseline exists in docs/perf/baseline.json.
Live post-fix recurrence retest completed: four exact receiving GET rules match latest real Mac PUTs, Home stores recurrence prose, and both native reads retain the constraints. Second-sync screenshot: https://git.kayg.org/attachments/311fe0d0-bcc5-4403-a22b-0d5e3e785b83 . R7 now records four passes, so the checkpoint is 23 passed / 16 partial / 0 recurrence retests pending / 165 untested. The reverse directions remain separate.
The 17-option Reminders forward batch reached the real server (17 new PUT 201). Twenty Calendar options produced seven PUT 201 and thirteen C13 rejections (403/422); no server 5xx. Native Calendar free normalized to TRANSP:OPAQUE on the actual request, so it is not proof of free availability support. Direct GETs keep the three Calendar VALARM variants and the UTC cross-midnight end date.
Performance completed and committed at
e92ef6a1c. Exactly 10,000 distinct receiving Task UIDs were checked. Local loaded debug host: average GET p50/p95 15.43/37.69 ms; average full sync 116.95/237.18 ms; 10,000-Task full sync 4576.29/10981.30 ms; 32-request burst, concurrency 8, 10706.44/13368.84 ms; peak RSS 912068608 bytes. Baseline has no matching DAV profile. The free perf VM shared binary predates the fix, so no compile was done there; these are explicitly local measurements.A Mac lock waiter is present. Releasing the lock at this batch boundary. Remaining native screen evidence and directions will resume after reacquisition. Calendar test passed; Server gates are running. The original gate parent received SIGTERM after Calendar clippy's Finished line; remaining gates now run in a foreground TTY.
Head
d451fd949. Gate completion: fmt and per-crate clippy/test passed for calternal-dav, calternal-plugin-notes, calternal-plugin-calendar and calternal-server. Calendar clippy's explicit final exit is 0 after the earlier parent SIGTERM left its status unrecorded. Notes was rechecked after adding the Calendar captures; all four apple_replay tests pass. Web check reportssvelte-check found 0 errors and 0 warnings; web tests reportTest Files 137 passed (137)andTests 899 passed (899).Matrix counts checked from the actual direction columns: 23 passed, 38 partial, 143 not run, 204 total. C8's twenty receiving GETs and the Daily note confirm seven accepted Events and thirteen absent rejected Events. The twenty exact Calendar captures and Notes provider replay are committed at
e191ff624. No existing test expectation changed.Receiving evidence archive (explicit allowlist; no credentials): https://git.kayg.org/attachments/e0fa5496-0a27-4528-a30b-c2bb594eff9f . The full gate logs will be attached separately. The Mac reacquisition attempt timed out after twenty minutes; the second attempt is queued behind the same holder. A fifteen-option location/action batch and the 100-Reminder volume case are prepared, not applied. No acceptance claim is made for prepared inputs.
Mac resource finding: I released macvm.lock at the batch boundary at about 16:02 UTC. The same holder is still present at 17:03 UTC; two twenty-minute reacquisition attempts timed out. A bounded queued attempt remains active. No unlocked GUI or SSH action was used. The prepared location/action and 100-Reminder batches are still not applied. Remaining native screens, Calendar C13 error UI and Mac cleanup depend on this lock. Local gates and receiving checks are complete; matrix remains 23 passed / 38 partial / 143 untested, NO-GO.
Head
b2c125049adds a comparison guard against duplicate VTODO RRULEs, so equal malformed rules cannot become false acceptance. Five comparator tests pass and the nine current real recurring receiving GETs still compare equal. Production receiving screenshots cover 390/820/1440, light/dark, with zero page errors: https://git.kayg.org/attachments/7a097948-632a-4999-9093-b7f6e4e1db3f . These do not substitute for native screens.Round-3 final report for #393. Branch job/mac-393, head
5f25c2bde60c469f3db8f8277277734ba1d6419e. Required merge:56eb9ec003da27466cc7812ff60f8a35fdc2fa5d. No push, deploy or issue closure.Built: exact receiving RRULE comparison by VTODO UID, including rejection of duplicate rules and exclusion of alarm UIDs; native weekly and arrive/leave/radius batch support; a bounded 100/10,000-Task benchmark with resume validation; twenty real Calendar fixtures and a Notes provider replay. Four fresh post-fix recurrence cells passed live Mac retest.
Files: tests/apple/README.md, eventkit-batch.swift, native-smoke.py, repeat-readback.mjs, repeat-readback.test.mjs; bench/apple-reminders.mjs; crates/plugins/notes/tests/apple_replay.rs; twenty crates/calternal-dav/tests/fixtures/macos27/put-mac393-round3-event-*.ics; docs/research/apple-caldav-matrix.md; docs/perf/mac393-round3-local.json. Upstream theme/web changes came from the required merge.
Matrix checkpoint: NO-GO — 23 passed, 38 partial, 143 untested, 204 total. Four recurrence retests are complete. Native second-sync evidence for the other batches is pending. Two 20-minute and one 60-minute Mac-lock attempts timed out after releasing the lock for another job. The prepared action/volume batch never ran. Work stopped at the four-hour limit. Twenty server-generated Task deep links returned 200 through the stable-ID API.
Evidence: four post-fix Tasks, wire/Home/native reads, production web views at 390/820/1440, light/dark, full gate logs. The web views reported zero page errors. They do not replace Apple native evidence.
Performance: explicitly local, matching merged debug binary. The free perf VM shared release binary predates the fix; no compile was done there. Baseline in docs/perf/baseline.json has no matching DAV profile. Exactly 10,000 distinct receiving UIDs were verified.
Load before: 24.73 / 25.66 / 30.44. Load after: 36.73 / 29.28 / 27.41. Worst burst: 32 requests, concurrency 8. One 120-second setup request timed out after persistence; resume checked 3,100 contiguous Tasks and retained the original average samples.
Validation: one bounded local DAV input round returned health 200, principal 207, malformed discovery/report XML 400/400, invalid calendar 422 with GET 404, missing credentials 401. No 5xx occurred in that round. Benchmark setup found Notes duplicate parsed anchors returning 500 after Home persistence; filed #531.
Gate output, verbatim (fmt exited 0 with no output; every per-crate clippy/test exit is 0):
clippy-calternal-dav.log
test-calternal-dav.log
clippy-calternal-plugin-notes-final.log
test-calternal-plugin-notes-final.log
clippy-calternal-plugin-calendar-final.log
test-calternal-plugin-calendar.log
clippy-calternal-server.log
test-calternal-server.log
web-check.log
web-test.log
repeat-tests-final.log
native-location-smoke.log
Known gaps: missing native UI controls and remaining directions, C13 error screens, Calendar occurrence operations/invitees/travel/moves, Reminders list moves/iCloud/subtasks/sections/messaging/attachments/smart-list/bulk/restore/time-zone/100-item cases, and webcal. Prepared location/action and 100-Reminder batches are not applied. Existing raw-RRULE Home files still need a repair/reindex strategy. The fetched origin/dev snapshot had no additional DAV/Notes writer changes for #471/#500, so this report does not claim to validate those absent changes. #531 is filed and unfixed.
Decisions: compare receiving bytes independently of native caches; keep separate direction columns and historical evidence; retain C13 rejection instead of inventing a Log format; treat native unavailable/OPAQUE availability as a gap; retain exact pin coordinates and radius without requesting device location; use source Notes to seed the large indexed corpus through the real API; label unmatched local performance measurements without a regression verdict.
Cleanup: local tunnel, proxy and lab server stopped; private lab databases and credentials removed; web build output deleted. App Password DELETE returned 403, so no successful revoke is claimed; destruction of the disposable lab database invalidated that credential.
cargo cleanexited 0:The final 15-minute cleanup lock wait also timed out (exit 1). Mac profile
org.calternal.lab.mac393round3and helper directory~/mac393-round3remain pending removal by the next lock holder. No unlocked Mac operation was used. Full Calendar access for the helper remains enabled. The lab endpoint is stopped.Round 4 started on branch
job/mac-393.Base SHA:
cd3cea757508d9f581d00fb7d5d7973fbc0a75fd(merge base withorigin/dev). Starting HEAD:5f25c2bde60c469f3db8f8277277734ba1d6419e.I will finish the partial cases first, then sweep Reminders, Calendar, Calendar reminders, and webcal in the requested order. I will use
flock -w 3600for Mac sessions and report the updated evidence matrix and gates here. No push or deploy.Round-4 setup finding: the single required fetch brought
origin/devatcc25c441b7a974185622a1dee853cf38686d2b67; merge commit is0957cd349. The only conflict wastests/adversarial/editor-proxy.mjs; the resolution keeps #393's TLS/capture support and origin/dev's bounded 100-continue forwarding. Its six focused Node tests pass.git diff --check --cachedalso reported CRLF iCalendar fixture lines from upstream; I kept those bytes unchanged.The locked Mac preflight succeeded. The old profile
org.calternal.lab.mac393round3is absent;~/mac393-round3remains for final teardown. The merge contains Calendar feed publication and subscription routes, so Webcal can be tested on this branch. The merged server build is running locally. Cloudflared 2026.9.3 was verified against Cloudflare's published SHA256 before use.Round-4 profiling finding: CalDAV
calendar-multigetcurrently loads the User's full Task list before it filters requested hrefs (crates/calternal-dav/src/protocol.rs). I added a 100/10,000-Task multiget phase and separate response-header/body-read timing to the existing benchmark in commita40cda820; no DAV behavior changed. The production SPA build passed, and the merged server build completed in 10m 38s. The measured profile is still pending.Round 4 setup finding: the shared Mac lock was free. I installed the new throwaway CalDAV profile through System Settings → General → Device Management and verified the new profile identifier is present. EventKit can discover writable CalDAV collections. The CUA full-desktop capture reports no main display, but the documented per-window capture path works. The current app stores still contain round 3 test records; the round 4 server API initially had zero Tasks, so I am verifying which account is active before writing new Mac cases. No acceptance cells changed yet.
Round 4 finding — native Reminders refresh duplicated the throwaway batch. One EventKit apply created 17 test Tasks in the newly installed account. After a Calendar refresh, the server Task API returned 34 rows: each of the 17 titles appeared twice with different Task IDs. The wire capture contains 34 PUTs, each 201, and the native read contains 34 records. This is not a pass. Evidence is in ignored artifacts/mac393-round4/ (wire captures, native apply/read JSON, and the first-sync Reminders screenshot). I am checking whether the second writer is another installed CalDAV account or the current server projection before further Mac writes.
Clarification — the original 17-Task Reminders batch still has 34 active Task/API rows and 34 native records: the second 17 PUTs used new UIDs after Calendar refresh. A separate one-item diagnosis was accidentally submitted twice by this job while recovering the remote helper output. I moved both extra Notes to Trash through the authenticated Notes API and removed only those two native test items. The diagnosis is excluded from result counts. The two cleanup DAV DELETEs returned 404 because the server Notes were already in Trash; no other items were selected. The 34-row duplication remains unresolved and Reminders acceptance stays partial.
C8 retake status — EventKit readback on the selected Untagged calendar found the 20 retake Events and the earlier single probe. I ran one Calendar refresh and read the same calendar again. The logging proxy captured zero PUTs for the retake titles; its 37 captured PUTs remain the Reminder cases, two cleanup-diagnosis items, and the single probe, all 201. The retake therefore has native-local evidence only. I did not repeat the create batch. The 21 Calendar forward cells stay partial until a server write, Home read and second-sync evidence exist.
Webcal check — authenticated GET /api/v1/calendar/feeds returned 200. One full-feed create did not return within the 25 s client bound. The Home list then showed one new inactive definition with no usable link. The sanitized local server log records SQLite pool timeouts while waiting for a connection, including for the job worker and system cron. The same disposable instance contains the partial 3,100-Task perf corpus; this does not measure 10,000-Task REPORT or multiget latency. I did not retry the create. Webcal stays untested in the acceptance matrix; I will discard this private lab instance at teardown.
Performance update — one authenticated REPORT confirms 3,100 Tasks in the local disposable corpus. A single collection REPORT sample returned 207; header wait was 1,910.60 ms and body read was 14.70 ms for 2,726,905 bytes. A corrected 100-resource multiget slice used exact hrefs from that REPORT and validated all 100 calendar-data results. Ten local samples measured p50 415.42 ms and p95 487.65 ms; header wait p95 was 487.08 ms and body read p95 was 0.68 ms.
The first round-4 100-resource multiget measurement was invalid: synthetic hrefs fetched only the four direct DAV Tasks. I fixed the benchmark to use REPORT hrefs and reject partial multiget results. The new two-test href suite passes. The 10,000-Task setup remains incomplete, so there is no 10,000-Task REPORT/multiget split or basis for a separate 10,000-Task issue. These are local measurements.
Round 4 final report
Branch:
job/mac-393Base merged before gates:
origin/devat0957cd349Head:
42b04a72aabedb9267050f090b6cc9c425121501Direction matrix
The verdict remains NO-GO. No acceptance cell changed status.
Round 4 evidence and findings
calendar-data. The earlier synthetic-href multiget result was invalid: it returned only four direct DAV Tasks. The two href-selection tests pass.~/mac393-round3; only the system-managed profile remained. Stopped this job's server, tunnel, proxy and log reader, and removed its private profile/data directory.Files
bench/apple-reminders.mjsbench/apple-reminders-xml.mjstests/apple/apple-reminders-xml.test.mjstests/apple/README.mdtests/adversarial/setup.mjsdocs/research/apple-caldav-matrix.mddocs/perf/mac393-round4-local.jsonGates
cargo fmt --checkexited 0 with no output.Clippy output (verbatim):
These correspond, in order, to
calternal-plugin-calendar,calternal-dav, andcalternal-plugin-notes.Test result lines (verbatim):
node --checkon both benchmark modules exited 0 with no output.node --test tests/apple/apple-reminders-xml.test.mjsoutput (verbatim):python3 -m json.tool docs/perf/mac393-round4-local.jsonandgit diff --checkexited 0.cargo cleanoutput (verbatim):Decisions
The design docs do not define a fallback for an unavailable perf VM. I recorded local measurements and kept the 3,100-Task REPORT as a single sample; I did not infer a 10,000-Task server regression from it. I kept acceptance cells unchanged where the run lacked paired wire, Home/API and native evidence. No API behavior or new data model was selected.
Audit against origin/dev: the latest Round 4 report remains NO-GO. Its matrix records 23 pass, 38 partial, and 143 untested cells, including the Calendar/Reminders flows. This issue remains open until the required matrix passes.