Bug bash round 3: interop #1400

Open
opened 2026-10-07 19:01:40 +00:00 by kayg · 8 comments
Owner

AREA: Sync and interop with real clients on this host. CalDAV/CardDAV with vdirsyncer plus khal/khard (install in a venv if missing), WebDAV with rclone and curl, any MCP/WebMCP endpoint the repo exposes. Round trip: create on the client and see it in the UI; edit in the UI and see it on the client; concurrent edits; ETags and If-Match; large collections; Unicode names; deletes; renames. Check RFC 4791, 6352 and 4918 behaviour and use web search for client quirks. Fix server bugs inside the DAV plugin crates only; file anything in core.

Tracking issue for the 2026-10-08 night bug bash round 3. Every bug found gets its own issue, linked here.

AREA: Sync and interop with real clients on this host. CalDAV/CardDAV with vdirsyncer plus khal/khard (install in a venv if missing), WebDAV with rclone and curl, any MCP/WebMCP endpoint the repo exposes. Round trip: create on the client and see it in the UI; edit in the UI and see it on the client; concurrent edits; ETags and If-Match; large collections; Unicode names; deletes; renames. Check RFC 4791, 6352 and 4918 behaviour and use web search for client quirks. Fix server bugs inside the DAV plugin crates only; file anything in core. Tracking issue for the 2026-10-08 night bug bash round 3. Every bug found gets its own issue, linked here.
Author
Owner

Starting job/bash3-interop at 0419170fe4. Reading prior #1221 coverage and known findings. Prior gaps: simultaneous external-client/UI writes and five-minute resource soak. Shared prebuilt server REV d395b6e25 is available; isolated Home and evidence will stay under this worktree. No Honcho MCP tools are available in this session.

Starting job/bash3-interop at 0419170fe456b58614befcb12d9c9d255118f1c0. Reading prior #1221 coverage and known findings. Prior gaps: simultaneous external-client/UI writes and five-minute resource soak. Shared prebuilt server REV d395b6e25 is available; isolated Home and evidence will stay under this worktree. No Honcho MCP tools are available in this session.
Author
Owner

Filed major #1435: live CalDAV REPORT omits a 09:00–11:00 event from a 10:00–10:30 time range (201 create, 207 empty query). Evidence: artifacts/bash3-interop/overlap-response.xml. Simultaneous conditional writes to CalDAV and WebDAV each returned exactly one 204 and one 412; conditional WebDAV MOVE and DELETE succeeded. Fix and focused regression underway in calternal-dav.

Filed major #1435: live CalDAV REPORT omits a 09:00–11:00 event from a 10:00–10:30 time range (201 create, 207 empty query). Evidence: artifacts/bash3-interop/overlap-response.xml. Simultaneous conditional writes to CalDAV and WebDAV each returned exactly one 204 and one 412; conditional WebDAV MOVE and DELETE succeeded. Fix and focused regression underway in calternal-dav.
Author
Owner

Committed #1435 as 6529c449d. cargo clippy -p calternal-dav --all-targets -- -D warnings: Finished dev profile [unoptimized + debuginfo] target(s) in 42.19s. cargo test -p calternal-dav: 63 unit tests and 39 replay tests passed. Filed #1436 for ignored query predicates; RFC 4791 permits a supported-filter precondition when a predicate is unsupported, so a bounded rejection is the simplest bug fix. Real client create → Calendar and Calendar edit → vdirsyncer/khal now pass. Rclone copy hit the 90-second fixture deadline (164/300 byte checks passed); this is an incomplete load-limited run, not a product failure.

Committed #1435 as 6529c449d. cargo clippy -p calternal-dav --all-targets -- -D warnings: Finished `dev` profile [unoptimized + debuginfo] target(s) in 42.19s. cargo test -p calternal-dav: 63 unit tests and 39 replay tests passed. Filed #1436 for ignored query predicates; RFC 4791 permits a supported-filter precondition when a predicate is unsupported, so a bounded rejection is the simplest bug fix. Real client create → Calendar and Calendar edit → vdirsyncer/khal now pass. Rclone copy hit the 90-second fixture deadline (164/300 byte checks passed); this is an incomplete load-limited run, not a product failure.
Author
Owner

Committed #1436 as 321f1bc3a: unsupported component/property/parameter/Reminder time filters now return HTTP 403 with the CalDAV supported-filter precondition before provider IO. This preserves the supported collection and VEVENT time-range queries. The new regression failed with 207 before the fix. Rclone resumed the bounded interrupted upload in 77.905 s, then byte-checked 300 files with 0 differences in 14.206 s. The five-minute browser soak ended with TargetClosedError and has no valid final sample; retaining that failed evidence and continuing the coverage matrix.

Committed #1436 as 321f1bc3a: unsupported component/property/parameter/Reminder time filters now return HTTP 403 with the CalDAV supported-filter precondition before provider IO. This preserves the supported collection and VEVENT time-range queries. The new regression failed with 207 before the fix. Rclone resumed the bounded interrupted upload in 77.905 s, then byte-checked 300 files with 0 differences in 14.206 s. The five-minute browser soak ended with TargetClosedError and has no valid final sample; retaining that failed evidence and continuing the coverage matrix.
Author
Owner

Current head 321f1bc3a8. Both live fixes pass on the branch-built server with a verified 1,000-resource collection: overlap query 1,000, exact end-boundary query 0, unsupported filters 403. Hostile malformed/oversized PUT: 422/413; hostile XML: 400; duplicate create: 201 then 412; delete: 204 then 404. Local debug warm reads (15 samples): p50 172.021 ms, p95/max 414.876 ms; 5.73 server CPU seconds over 3.149 wall seconds; RSS 215,728 KiB. Eight-client burst: all 207 with full resource count, max 489.039 ms. Load 16.71/24.00/23.58; not comparable to the 50k release/perf baselines. bun run check: svelte-check found 0 errors and 4 warnings in 2 files. bun run test --maxWorkers=2: Test Files 297 passed (297); Tests 2116 passed (2116). Server gates and the five-minute soak are still running.

Current head 321f1bc3a8d3f62de5454ba722c4a45696318121. Both live fixes pass on the branch-built server with a verified 1,000-resource collection: overlap query 1,000, exact end-boundary query 0, unsupported filters 403. Hostile malformed/oversized PUT: 422/413; hostile XML: 400; duplicate create: 201 then 412; delete: 204 then 404. Local debug warm reads (15 samples): p50 172.021 ms, p95/max 414.876 ms; 5.73 server CPU seconds over 3.149 wall seconds; RSS 215,728 KiB. Eight-client burst: all 207 with full resource count, max 489.039 ms. Load 16.71/24.00/23.58; not comparable to the 50k release/perf baselines. bun run check: svelte-check found 0 errors and 4 warnings in 2 files. bun run test --maxWorkers=2: Test Files 297 passed (297); Tests 2116 passed (2116). Server gates and the five-minute soak are still running.
Author
Owner

Compatibility refinement for #1436: vdirsyncer 0.21.0 issues separate VTODO and VEVENT queries when date limits are configured (installed storage/dav.py lines 816–838). A known component absent from a collection now returns an empty 207, while unsupported predicates return 403. Only the new #1436 regression expectations changed; no baseline test expectation changed. The bounded five-minute read/browser soak completed: browser heap stayed 17,100,000 bytes; server RSS 319,420 → 158,688 KiB; CPU 32.23 seconds. Observed browser long tasks: 5177, 1498, 1056, 1024 and 795 ms; checking existing Calendar performance issues before filing a duplicate.

Compatibility refinement for #1436: vdirsyncer 0.21.0 issues separate VTODO and VEVENT queries when date limits are configured (installed storage/dav.py lines 816–838). A known component absent from a collection now returns an empty 207, while unsupported predicates return 403. Only the new #1436 regression expectations changed; no baseline test expectation changed. The bounded five-minute read/browser soak completed: browser heap stayed 17,100,000 bytes; server RSS 319,420 → 158,688 KiB; CPU 32.23 seconds. Observed browser long tasks: 5177, 1498, 1056, 1024 and 795 ms; checking existing Calendar performance issues before filing a duplicate.
Author
Owner

Both fixes are committed: #1435 at 6529c449d; #1436 at 3aaf87fbe (replaces the earlier local filter commit). DAV tests pass: 63 unit + 40 replay. Server tests pass: 272 unit, 12 ignored, plus both integration tests; clippy passes for DAV and server. Web check has 0 errors / 4 warnings and full web tests pass 297 files / 2116 tests with 2 workers. Final matching-build vdirsyncer date-filter replay and six macOS-emulated captures are in progress. Coverage and local performance evidence are being assembled in artifacts/bash3-interop/report.md.

Both fixes are committed: #1435 at 6529c449d; #1436 at 3aaf87fbe (replaces the earlier local filter commit). DAV tests pass: 63 unit + 40 replay. Server tests pass: 272 unit, 12 ignored, plus both integration tests; clippy passes for DAV and server. Web check has 0 errors / 4 warnings and full web tests pass 297 files / 2116 tests with 2 workers. Final matching-build vdirsyncer date-filter replay and six macOS-emulated captures are in progress. Coverage and local performance evidence are being assembled in artifacts/bash3-interop/report.md.
Author
Owner

Round 3 interop report for #1400. Branch: job/bash3-interop. Head: 3aaf87fbefa0c5b8454e75bef14d567bc6ee8b34. Base: 0419170fe456b58614befcb12d9c9d255118f1c0; fetched and merged origin/dev once at d395b6e25. No push, deploy, or merge to dev.

Changes and findings

Issue Symptom Severity Result
#1435 Partial CalDAV queries omit events that start before the requested range major Fixed in 6529c449d: positive-duration overlap, exact boundaries, overnight and DST regression tests
#1436 CalDAV ignores component and UID predicates and returns unrelated entries major Fixed in 3aaf87fbe: empty results for absent supported components; explicit supported-filter errors for unsupported predicates
#1305 Decomposed WebDAV upload name returns a canonical Location; original name reads 404 minor, known Reconfirmed; core ownership, no duplicate issue or edit
#1232 Busy Calendar has long browser tasks with 1,000 entries SLOW, existing performance issue Added local evidence; UI ownership, no edit and no claim of a new regression

Only crates/calternal-dav/src/protocol.rs and crates/calternal-dav/tests/apple_replay.rs changed. Module and helper comments state the RFC rules and issue numbers. No baseline test expectation changed. Each bug has its own commit and regression test. Both new tests failed before the fixes. A malformed XML string in the new filter fixture was corrected; the final regression uses valid XML.

Coverage

Round-one tracker #1221 and its filed issues were read first. Issue search found no separate round-two interop tracker. The round started with its concurrency and soak gaps. All runs used isolated data, never production data.

Flow Tested Clients / widths / themes / inputs Result and limits
CalDAV client create → UI yes vdirsyncer 0.21.0, khal 0.14.1; real production SPA Unicode event appears in Calendar; final date-filtered vdirsyncer check also covers overlap
UI edit → client yes Composer pointer edit, vdirsyncer, khal Client reads the edited title
Concurrent edits yes, partly Two conditional CalDAV writers; stale Composer versus external writer; two WebDAV writers Exactly one conditional writer wins; stale UI save does not overwrite external edit. Two simultaneous UI-tab edits not tested
ETags / If-Match yes CalDAV, WebDAV, curl Winning write 204; stale write 412; double create 201 then 412; conditional MOVE succeeds
Large collections yes 1,000 indexed CalDAV entries; 300 rclone files Count asserted before timing; rclone check: 300 matches, zero differences
Unicode names yes Hebrew, emoji ZWJ, combining accents, NFC/NFD, curl/rclone/khal Round trips pass; known #1305 remains
Deletes yes CalDAV, curl, rclone DELETE 204 then GET 404; rclone file deletion passes
Renames yes WebDAV MOVE, rclone moveto Current ETag MOVE 201; client rename succeeds. Calendar has no separate client filename rename operation tested
CardDAV / khard no endpoint khard 0.22.0 installed; CardDAV home-set PROPFIND 207 without addressbook home-set. Contacts is not built under DESIGN §49 I5; no feature added
MCP yes HTTP production endpoint, default desktop 307 tools; create succeeds; malformed id rejected 400. First probe omitted required clientCapabilities and correctly received 400; corrected probe passes
WebMCP yes, partly Actual registered callbacks in production SPA, pointer confirmation Cancel causes no write; confirmed create yields real visible Note. Browser modelContext stub captures registration; no native browser agent. Width/theme confirmation matrix not repeated
UI item visibility yes 390 / 820 / 1440, light and dark, macOS platform emulation, 1x Real client item visible at every size; dark captures use reduced motion
Keyboard / touch / navigation yes, partly Tab, Shift+F10, Escape, 390px touch, pointer, back/forward Focus visible after Tab; menus expose Copy link; touch selection and stable link reload work. Clipboard readback and full accessible-role/name audit not completed
Slow / offline / reload yes, partly Offline then online; 100ms latency / 125KB/s; stable item deep link Recovery passes; slow reload to visible content 3,008.98ms. Reload during a pending mutation and rich paste/cancel matrix not completed
Hostile protocol / burst yes Local fixed server, malformed XML/iCal, depth limit, 2MiB payload, 8 readers 400 / 422 / 413 as applicable; all burst reads 207 with correct count; no crash or accepted hostile write observed

The full width/theme/input combination for every flow was not exhausted. There is no claim of complete accessibility or native Apple-client coverage. Real Apple-client checks are outside this host-client round. The existing unnamed Calendar file-input issue #1302 was not re-filed.

Local performance

Fixed server debug build, production web assets, shared busy host; these are local diagnostics, not perf VM or release baseline measurements. The existing indexed read remains O(N) events plus response serialization. The overlap check adds constant clock conversion per event; it adds no file scan or IO.

Measurement Result
Warm 2-event shared-release query, 15 samples p50 6.015ms; p95 12.812ms
Warm 1,000-event fixed query, 15 samples p50 172.021ms; p95/max 414.876ms
Eight-reader burst, 1,000 events all 207 with 1,000 entries; max 489.039ms
Warm profile server CPU / RSS 5.73 CPU seconds in 3.149 wall seconds; RSS 215,728KiB; load 16.71 / 24.00 / 23.58
Five-minute read/browser soak RSS initial 319,420KiB, peak sampled 342,304KiB, final 158,688KiB; CPU 32.23 seconds
Browser heap samples 17,100,000 bytes at each minute; browser-reported coarse measurement
Browser long tasks 5,177 / 1,498 / 1,056 / 1,024 / 795ms; added to #1232
rclone 300-file copy Initial bounded 90-second attempt incomplete; one resume 77.905s; byte check 14.206s, no differences

docs/perf/caldav-scale-573.md records 50,000-event p95 values of 1.846s and 4.806s on different runs. Dataset, build type and load differ, so these numbers do not prove a baseline regression. An early query ran before the 1,000-event seed was indexed and returned zero; its timings are discarded. The final profile asserts the full indexed count first.

Decisions

RFC 4791 §9.9 defines duration overlap and instant boundaries. Each overnight clock is converted independently so DST transitions are correct. Existing floating-clock UTC query behavior is preserved.

The adapter does not implement arbitrary property/parameter/alarm predicates or Reminder time predicates. It now returns the RFC supported-filter precondition (403) rather than silently returning all items. Known VEVENT/VTODO components absent from the collection return empty 207; installed vdirsyncer issues both for a date-filtered sync. This is the smallest compatibility fix; no design feature was added.

Evidence and review

Evidence is under artifacts/bash3-interop/: results.json, protocol-extra.json, rclone-resume.json, ui-mcp.json, mcp.json, surfaces.json, final-live.json, compat-final.json, gate logs, and probe scripts. Clean final captures are final-calendar-{390,820,1440}-{light,dark}.png, real data, macOS emulation, scale 1. Earlier calendar-* captures are invalid and must not be reviewed. There is no visual code change, so before/after visual-fix pairs do not apply. Claude remains the visual reviewer. The fj comment interface has no attachment option; images remain in the worktree for the orchestrator to attach. No artifact is committed.

UX gaps closed: filtered client sync no longer loses overlapping events or accepts ignored predicates. Gaps left: CardDAV unavailable; known core NFD name behavior; existing busy Calendar performance; incomplete UI input/accessibility matrix above.

For the merge round

Run bash tests/adversarial/run-split.sh on the combined branch to verify cross-User authorization and full protocol robustness. This round already ran focused malformed/oversized/depth/conflict/burst probes against its real fixed server; the combined matrix is additional coverage.

Gate output (verbatim)

Rust commands used CARGO_PROFILE_DEV_DEBUG=line-tables-only CARGO_INCREMENTAL=0 CARGO_BUILD_JOBS=4 TMPDIR=$PWD/target/tmp and the preset job target /home/kayg/build/targets/bash3-interop. cargo fmt --check exited 0 with no output. Gates ran after the one origin/dev merge. Full web tests used two workers after the default-worker run ended with signal 143; no assertions were weakened.

bun run check

perf-lint: PASS; 0 violations; 22544 scoped exceptions
svelte-check found 0 errors and 4 warnings in 2 files

bun run test -- --maxWorkers=2

 Test Files  297 passed (297)
      Tests  2116 passed (2116)
   Duration  590.82s (environment 27%, transform 26%, import 22%, tests 18%, setup 6%)

cargo clippy -p calternal-dav --all-targets -- -D warnings

    Finished `dev` profile [unoptimized + debuginfo] target(s) in 47.07s

cargo test -p calternal-dav -- --test-threads=4

test result: ok. 63 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 8.53s
test result: ok. 40 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.12s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

cargo clippy -p calternal-server --all-targets -- -D warnings

    Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 23s

cargo test -p calternal-server -- --test-threads=4

test result: ok. 272 passed; 0 failed; 12 ignored; 0 measured; 0 filtered out; finished in 207.05s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 48.61s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.20s

Final compatibility replay: compat-final.json reports commit 3aaf87fbef. Date-filtered real vdirsyncer downloaded exactly one overlapping event; absent VTODO time query returned empty 207. All six final captures completed. Matching final production web build and server build passed. The earlier soak server was built from this branch but exposed the earlier web build ID; its binary hash is retained in server-binary.sha256.

Cleanup: cargo clean completed; own web build output and temporary isolated User data/client credential files were removed. Evidence remains under artifacts. Git worktree is clean.

Round 3 interop report for #1400. Branch: `job/bash3-interop`. Head: `3aaf87fbefa0c5b8454e75bef14d567bc6ee8b34`. Base: `0419170fe456b58614befcb12d9c9d255118f1c0`; fetched and merged `origin/dev` once at `d395b6e25`. No push, deploy, or merge to dev. ## Changes and findings | Issue | Symptom | Severity | Result | | --- | --- | --- | --- | | #1435 | Partial CalDAV queries omit events that start before the requested range | major | Fixed in `6529c449d`: positive-duration overlap, exact boundaries, overnight and DST regression tests | | #1436 | CalDAV ignores component and UID predicates and returns unrelated entries | major | Fixed in `3aaf87fbe`: empty results for absent supported components; explicit supported-filter errors for unsupported predicates | | #1305 | Decomposed WebDAV upload name returns a canonical Location; original name reads 404 | minor, known | Reconfirmed; core ownership, no duplicate issue or edit | | #1232 | Busy Calendar has long browser tasks with 1,000 entries | SLOW, existing performance issue | Added local evidence; UI ownership, no edit and no claim of a new regression | Only `crates/calternal-dav/src/protocol.rs` and `crates/calternal-dav/tests/apple_replay.rs` changed. Module and helper comments state the RFC rules and issue numbers. No baseline test expectation changed. Each bug has its own commit and regression test. Both new tests failed before the fixes. A malformed XML string in the new filter fixture was corrected; the final regression uses valid XML. ## Coverage Round-one tracker #1221 and its filed issues were read first. Issue search found no separate round-two interop tracker. The round started with its concurrency and soak gaps. All runs used isolated data, never production data. | Flow | Tested | Clients / widths / themes / inputs | Result and limits | | --- | --- | --- | --- | | CalDAV client create → UI | yes | vdirsyncer 0.21.0, khal 0.14.1; real production SPA | Unicode event appears in Calendar; final date-filtered vdirsyncer check also covers overlap | | UI edit → client | yes | Composer pointer edit, vdirsyncer, khal | Client reads the edited title | | Concurrent edits | yes, partly | Two conditional CalDAV writers; stale Composer versus external writer; two WebDAV writers | Exactly one conditional writer wins; stale UI save does not overwrite external edit. Two simultaneous UI-tab edits not tested | | ETags / If-Match | yes | CalDAV, WebDAV, curl | Winning write 204; stale write 412; double create 201 then 412; conditional MOVE succeeds | | Large collections | yes | 1,000 indexed CalDAV entries; 300 rclone files | Count asserted before timing; rclone check: 300 matches, zero differences | | Unicode names | yes | Hebrew, emoji ZWJ, combining accents, NFC/NFD, curl/rclone/khal | Round trips pass; known #1305 remains | | Deletes | yes | CalDAV, curl, rclone | DELETE 204 then GET 404; rclone file deletion passes | | Renames | yes | WebDAV MOVE, rclone moveto | Current ETag MOVE 201; client rename succeeds. Calendar has no separate client filename rename operation tested | | CardDAV / khard | no endpoint | khard 0.22.0 installed; CardDAV home-set PROPFIND | 207 without addressbook home-set. Contacts is not built under DESIGN §49 I5; no feature added | | MCP | yes | HTTP production endpoint, default desktop | 307 tools; create succeeds; malformed id rejected 400. First probe omitted required clientCapabilities and correctly received 400; corrected probe passes | | WebMCP | yes, partly | Actual registered callbacks in production SPA, pointer confirmation | Cancel causes no write; confirmed create yields real visible Note. Browser modelContext stub captures registration; no native browser agent. Width/theme confirmation matrix not repeated | | UI item visibility | yes | 390 / 820 / 1440, light and dark, macOS platform emulation, 1x | Real client item visible at every size; dark captures use reduced motion | | Keyboard / touch / navigation | yes, partly | Tab, Shift+F10, Escape, 390px touch, pointer, back/forward | Focus visible after Tab; menus expose Copy link; touch selection and stable link reload work. Clipboard readback and full accessible-role/name audit not completed | | Slow / offline / reload | yes, partly | Offline then online; 100ms latency / 125KB/s; stable item deep link | Recovery passes; slow reload to visible content 3,008.98ms. Reload during a pending mutation and rich paste/cancel matrix not completed | | Hostile protocol / burst | yes | Local fixed server, malformed XML/iCal, depth limit, 2MiB payload, 8 readers | 400 / 422 / 413 as applicable; all burst reads 207 with correct count; no crash or accepted hostile write observed | The full width/theme/input combination for every flow was not exhausted. There is no claim of complete accessibility or native Apple-client coverage. Real Apple-client checks are outside this host-client round. The existing unnamed Calendar file-input issue #1302 was not re-filed. ## Local performance Fixed server debug build, production web assets, shared busy host; these are local diagnostics, not perf VM or release baseline measurements. The existing indexed read remains O(N) events plus response serialization. The overlap check adds constant clock conversion per event; it adds no file scan or IO. | Measurement | Result | | --- | --- | | Warm 2-event shared-release query, 15 samples | p50 6.015ms; p95 12.812ms | | Warm 1,000-event fixed query, 15 samples | p50 172.021ms; p95/max 414.876ms | | Eight-reader burst, 1,000 events | all 207 with 1,000 entries; max 489.039ms | | Warm profile server CPU / RSS | 5.73 CPU seconds in 3.149 wall seconds; RSS 215,728KiB; load 16.71 / 24.00 / 23.58 | | Five-minute read/browser soak | RSS initial 319,420KiB, peak sampled 342,304KiB, final 158,688KiB; CPU 32.23 seconds | | Browser heap samples | 17,100,000 bytes at each minute; browser-reported coarse measurement | | Browser long tasks | 5,177 / 1,498 / 1,056 / 1,024 / 795ms; added to #1232 | | rclone 300-file copy | Initial bounded 90-second attempt incomplete; one resume 77.905s; byte check 14.206s, no differences | `docs/perf/caldav-scale-573.md` records 50,000-event p95 values of 1.846s and 4.806s on different runs. Dataset, build type and load differ, so these numbers do not prove a baseline regression. An early query ran before the 1,000-event seed was indexed and returned zero; its timings are discarded. The final profile asserts the full indexed count first. ## Decisions RFC 4791 §9.9 defines duration overlap and instant boundaries. Each overnight clock is converted independently so DST transitions are correct. Existing floating-clock UTC query behavior is preserved. The adapter does not implement arbitrary property/parameter/alarm predicates or Reminder time predicates. It now returns the RFC supported-filter precondition (403) rather than silently returning all items. Known VEVENT/VTODO components absent from the collection return empty 207; installed vdirsyncer issues both for a date-filtered sync. This is the smallest compatibility fix; no design feature was added. ## Evidence and review Evidence is under `artifacts/bash3-interop/`: `results.json`, `protocol-extra.json`, `rclone-resume.json`, `ui-mcp.json`, `mcp.json`, `surfaces.json`, `final-live.json`, `compat-final.json`, gate logs, and probe scripts. Clean final captures are `final-calendar-{390,820,1440}-{light,dark}.png`, real data, macOS emulation, scale 1. Earlier `calendar-*` captures are invalid and must not be reviewed. There is no visual code change, so before/after visual-fix pairs do not apply. Claude remains the visual reviewer. The fj comment interface has no attachment option; images remain in the worktree for the orchestrator to attach. No artifact is committed. UX gaps closed: filtered client sync no longer loses overlapping events or accepts ignored predicates. Gaps left: CardDAV unavailable; known core NFD name behavior; existing busy Calendar performance; incomplete UI input/accessibility matrix above. ## For the merge round Run `bash tests/adversarial/run-split.sh` on the combined branch to verify cross-User authorization and full protocol robustness. This round already ran focused malformed/oversized/depth/conflict/burst probes against its real fixed server; the combined matrix is additional coverage. ## Gate output (verbatim) Rust commands used `CARGO_PROFILE_DEV_DEBUG=line-tables-only CARGO_INCREMENTAL=0 CARGO_BUILD_JOBS=4 TMPDIR=$PWD/target/tmp` and the preset job target `/home/kayg/build/targets/bash3-interop`. `cargo fmt --check` exited 0 with no output. Gates ran after the one origin/dev merge. Full web tests used two workers after the default-worker run ended with signal 143; no assertions were weakened. bun run check ```text perf-lint: PASS; 0 violations; 22544 scoped exceptions svelte-check found 0 errors and 4 warnings in 2 files ``` bun run test -- --maxWorkers=2 ```text Test Files 297 passed (297) Tests 2116 passed (2116) Duration 590.82s (environment 27%, transform 26%, import 22%, tests 18%, setup 6%) ``` cargo clippy -p calternal-dav --all-targets -- -D warnings ```text Finished `dev` profile [unoptimized + debuginfo] target(s) in 47.07s ``` cargo test -p calternal-dav -- --test-threads=4 ```text test result: ok. 63 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 8.53s test result: ok. 40 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.12s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s ``` cargo clippy -p calternal-server --all-targets -- -D warnings ```text Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 23s ``` cargo test -p calternal-server -- --test-threads=4 ```text test result: ok. 272 passed; 0 failed; 12 ignored; 0 measured; 0 filtered out; finished in 207.05s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 48.61s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.20s ``` Final compatibility replay: compat-final.json reports commit 3aaf87fbefa0c5b8454e75bef14d567bc6ee8b34. Date-filtered real vdirsyncer downloaded exactly one overlapping event; absent VTODO time query returned empty 207. All six final captures completed. Matching final production web build and server build passed. The earlier soak server was built from this branch but exposed the earlier web build ID; its binary hash is retained in server-binary.sha256. Cleanup: cargo clean completed; own web build output and temporary isolated User data/client credential files were removed. Evidence remains under artifacts. Git worktree is clean.
Commenting is not possible because the repository is archived.
No labels
No milestone
No project
No assignees
1 participant
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-v0#1400
No description provided.