Workspace Rust gate enables incompatible vendored IMAP runtimes #463

Closed
opened 2026-09-29 15:41:58 +00:00 by kayg · 12 comments
Owner

Reproduction

On merged dev 02be0946 plus #457 DAV probe commits, run cargo clippy --workspace --all-targets -- -D warnings with Rust 1.98.1. The workspace feature union enables both runtime-async-std and runtime-tokio in crates/plugins/mail/vendor/async-imap. That crate stops at src/lib.rs:83 with only one of 'runtime-async-std' or 'runtime-tokio' features must be enabled; duplicate runtime imports and a poll_read type mismatch follow. Full workspace gates cannot finish in this configuration. The issue predates the #457 DAV changes; per-crate calternal-fs, calternal-dav, and calternal-server Clippy gates passed.

Expected

The workspace gate compiles one compatible IMAP runtime feature set, or the vendored crate is excluded from the workspace gate with a documented separate gate. Resolve this in the Mail Plugin build design. Do not suppress the crate's runtime conflict check.

## Reproduction On merged dev 02be0946 plus #457 DAV probe commits, run `cargo clippy --workspace --all-targets -- -D warnings` with Rust 1.98.1. The workspace feature union enables both `runtime-async-std` and `runtime-tokio` in `crates/plugins/mail/vendor/async-imap`. That crate stops at `src/lib.rs:83` with `only one of 'runtime-async-std' or 'runtime-tokio' features must be enabled`; duplicate runtime imports and a `poll_read` type mismatch follow. Full workspace gates cannot finish in this configuration. The issue predates the #457 DAV changes; per-crate `calternal-fs`, `calternal-dav`, and `calternal-server` Clippy gates passed. ## Expected The workspace gate compiles one compatible IMAP runtime feature set, or the vendored crate is excluded from the workspace gate with a documented separate gate. Resolve this in the Mail Plugin build design. Do not suppress the crate's runtime conflict check.
Author
Owner

Starting #463 on branch job/small-bugs-4 at base 369ab6a2f9. I will inspect the workspace feature union for the vendored IMAP crate and adjust only manifests/features so workspace Clippy selects one runtime without changing Mail behavior.

Starting #463 on branch job/small-bugs-4 at base 369ab6a2f9fc673e3564b94857fbecfeb04df404. I will inspect the workspace feature union for the vendored IMAP crate and adjust only manifests/features so workspace Clippy selects one runtime without changing Mail behavior.
Author
Owner

Finding: crates/plugins/mail/Cargo.toml already sets default-features = false, features = ["runtime-tokio"] for the vendored crate. Cargo was also treating the nested path dependency as a workspace member, where its runtime-async-std default feature joined Mail's Tokio feature. I have added the vendor path to root workspace exclude; the dependency remains available to Mail. Workspace Clippy is running now.

Finding: `crates/plugins/mail/Cargo.toml` already sets `default-features = false, features = ["runtime-tokio"]` for the vendored crate. Cargo was also treating the nested path dependency as a workspace member, where its `runtime-async-std` default feature joined Mail's Tokio feature. I have added the vendor path to root workspace `exclude`; the dependency remains available to Mail. Workspace Clippy is running now.
Author
Owner

Starting this fix on job/small-bugs-4. The branch starts at 369ab6a2f9fc673e3564b94857fbecfeb04df404 (merge base with origin/dev); origin/dev is currently 55a2f90feb8a52d91f8bbc1347889b509af02260, 165 commits ahead. I will reproduce the reported behavior, add a regression probe, and keep this issue's implementation in its own commit.

Starting this fix on `job/small-bugs-4`. The branch starts at `369ab6a2f9fc673e3564b94857fbecfeb04df404` (merge base with `origin/dev`); `origin/dev` is currently `55a2f90feb8a52d91f8bbc1347889b509af02260`, 165 commits ahead. I will reproduce the reported behavior, add a regression probe, and keep this issue's implementation in its own commit.
Author
Owner

cargo metadata --no-deps --format-version 1 still lists crates/plugins/mail/vendor/async-imap in workspace_members after the root exclude edit. The exclusion therefore does not resolve the feature union in this repository. The Mail dependency already disables defaults and enables Tokio, so I am checking the vendored package default that Cargo enables when it is selected as a workspace package.

`cargo metadata --no-deps --format-version 1` still lists `crates/plugins/mail/vendor/async-imap` in `workspace_members` after the root `exclude` edit. The exclusion therefore does not resolve the feature union in this repository. The Mail dependency already disables defaults and enables Tokio, so I am checking the vendored package default that Cargo enables when it is selected as a workspace package.
Author
Owner

cargo tree --workspace -e features -i async-imap confirms the workspace package's default feature enables runtime-async-std while calternal-plugin-mail enables runtime-tokio. This is exactly the incompatible feature union in #463. The vendored package default must match Tokio for workspace builds; Mail already selects it explicitly.

`cargo tree --workspace -e features -i async-imap` confirms the workspace package's `default` feature enables `runtime-async-std` while `calternal-plugin-mail` enables `runtime-tokio`. This is exactly the incompatible feature union in #463. The vendored package default must match Tokio for workspace builds; Mail already selects it explicitly.
Author
Owner

Starting work on job/small-bugs-4 at 369ab6a2f9. origin/dev was dfb5964a2f at start.

Starting work on job/small-bugs-4 at 369ab6a2f9fc673e3564b94857fbecfeb04df404. origin/dev was dfb5964a2fcf13dc8b9a50a319eee09bc386f322 at start.
Author
Owner

Finding: cargo clippy --workspace --all-targets -- -D warnings still compiled vendored async-imap with both runtime features after the root exclusion. The build failed at vendor/async-imap/src/lib.rs:83 with the crate's mutually exclusive runtime error and duplicate runtime imports. I will correct the feature selection in Cargo manifests and rerun the gate.

Finding: cargo clippy --workspace --all-targets -- -D warnings still compiled vendored async-imap with both runtime features after the root exclusion. The build failed at vendor/async-imap/src/lib.rs:83 with the crate's mutually exclusive runtime error and duplicate runtime imports. I will correct the feature selection in Cargo manifests and rerun the gate.
Author
Owner

Post-merge gate finding: cargo test -p async-imap compiled with the new Tokio default and ran 70 unit tests; 69 passed and client::tests::test_parsing_error failed at src/client.rs:2724 because the displayed parse error did not contain the expected SMTP greeting. I did not change the test expectation or Mail behavior, per the issue scope. Workspace clippy still passes. I am continuing the #464 and #459 real-server probes; this test failure will remain documented unless the probes or further evidence show it is caused by the feature change.

Post-merge gate finding: `cargo test -p async-imap` compiled with the new Tokio default and ran 70 unit tests; 69 passed and `client::tests::test_parsing_error` failed at `src/client.rs:2724` because the displayed parse error did not contain the expected SMTP greeting. I did not change the test expectation or Mail behavior, per the issue scope. Workspace clippy still passes. I am continuing the #464 and #459 real-server probes; this test failure will remain documented unless the probes or further evidence show it is caused by the feature change.
Author
Owner

Finished #463.

Head: c5654f5589c54fe581daf4c621bfd470d623807e.

Set the vendored async-imap default feature to runtime-tokio. Mail already selects Tokio with default-features = false; this aligns the vendored workspace member's default with Mail and stops workspace feature unification from selecting both runtime features. No Mail source behavior changed.

The workspace feature tree showed only Tokio:

async-imap feature "runtime-tokio"
async-imap feature "runtime-tokio" (*)

The required workspace clippy gate passed:

Finished `dev` profile [unoptimized + debuginfo] target(s) in 3m 42s

cargo test -p async-imap compiled and ran, but one vendored test failed:

---- client::tests::test_parsing_error stdout ----
assertion failed: session.noop().await.unwrap_err().to_string().contains("220 mail.example.org ESMTP Postcow")
test result: FAILED. 69 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.90s

I left the Mail code and test expectation unchanged, as required by the issue scope.

File: crates/plugins/mail/vendor/async-imap/Cargo.toml.

Decision: default the vendored crate to Tokio because the Mail plugin explicitly uses Tokio, and the workspace must compile a single runtime feature.

Known gap: client::tests::test_parsing_error fails on its expected error text; the behavior and assertion need owner review outside this manifest-only change.

Finished #463. Head: `c5654f5589c54fe581daf4c621bfd470d623807e`. Set the vendored `async-imap` default feature to `runtime-tokio`. Mail already selects Tokio with `default-features = false`; this aligns the vendored workspace member's default with Mail and stops workspace feature unification from selecting both runtime features. No Mail source behavior changed. The workspace feature tree showed only Tokio: ``` async-imap feature "runtime-tokio" async-imap feature "runtime-tokio" (*) ``` The required workspace clippy gate passed: ``` Finished `dev` profile [unoptimized + debuginfo] target(s) in 3m 42s ``` `cargo test -p async-imap` compiled and ran, but one vendored test failed: ``` ---- client::tests::test_parsing_error stdout ---- assertion failed: session.noop().await.unwrap_err().to_string().contains("220 mail.example.org ESMTP Postcow") test result: FAILED. 69 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.90s ``` I left the Mail code and test expectation unchanged, as required by the issue scope. File: `crates/plugins/mail/vendor/async-imap/Cargo.toml`. Decision: default the vendored crate to Tokio because the Mail plugin explicitly uses Tokio, and the workspace must compile a single runtime feature. Known gap: `client::tests::test_parsing_error` fails on its expected error text; the behavior and assertion need owner review outside this manifest-only change.
Author
Owner

All five branches are committed on job/merge-round-2. Validation remains incomplete at the four-hour limit.
Head: 84d4258f130ebebe748a9b3a08f03c8741d01c45. Base: 6c87f5ff9442cd658572139bc536d018fd5222a4.
No push, deploy, or change to dev. No branch was dropped: no included branch produced a Rust code/test failure; unfinished validation is listed below.

Included: job/location (#391), job/webcal-431 (#431), job/small-bugs-4 (#459/#463/#464), job/photos-470 (#470), job/perf-367 (#367). All five heads are ancestors. The required final fetch and origin/dev merge returned Already up to date.

Integration fixes and files:

  • Settings canonical links preserve Maintenance query state and stable Saved place UUID fragments (apps/web/src/routes/settings/[...path]/+page.svelte, registry tests).
  • Authenticated Location routing coexists with public Calendar feeds (crates/calternal-server/src/wire.rs).
  • Mail fixtures retain MIME reader regressions and the full-history profile (crates/plugins/mail/src/sync.rs). Calendar benchmarks use the canonical Daily note first, then search only that User's Home (apps/web/e2e/calendar-perf.mjs).
  • Location uses shared leading and shape tokens (apps/web/src/routes/settings/account/LocationGroup.svelte).
  • Location operations and Saved place identities have explicit fail-closed classifications with regression tests (tests/adversarial/authz_matrix.py, xuser_matrix.py, test_xuser_classification.py).
  • Updated the shared capture harness and its regression tests (apps/web/e2e/harness.mjs, harness.test.mjs, appearance-review.mjs). Earlier failing capture output is preserved; no existing numeric assertion was weakened.
  • Regenerated contracts/openapi.json, packages/api-client/src/generated.ts, and docs/parity-*. No generated files were hand-merged.
  • Reviewed module/function comments were updated with the merge fixes. Imported feature files remain in the five branch histories. The complete changed-file list is artifacts/merge-round-2/files.txt.

Migrations: no duplicate numeric prefixes in any migrations folder. Notes adds 0020 after origin/dev's 0019; Calendar adds 0004 after origin/dev's 0003. Notes bridge is excluded.

Decisions:

  • Keep the existing API adapters' scope. Record the new Location/Calendar adapter gaps in the generated parity inventory rather than invent new CLI/MCP/WebMCP behavior in this merge.
  • Keep both Mail fixture behaviors in one helper. Keep the Calendar fallback scoped to the current User's Home.
  • Preserve dev's existing test expectations. The two web failures were timeouts and were rerun alone. Restore the exact 16-family theme expectation from dev; count dark variant submenu parents as families and use the existing keyboard submenu interaction.
  • In the capture harness, check the saved Auto/System preference separately from its rendered Light/Dark CSS phase. Eight regressions verify both phases and reject wrong persistence or rendering.
  • Seed the review's initial preference through the real API before SPA navigation. Wait for hydration before choosing a mode, and await persistence with bounded API reads on the host. Playwright 1.63 treats the former async predicate as truthy before its Promise resolves.

Known gaps:

  • calternal-server tests were stopped during compilation at the approximately four-hour limit (exit -15). Server clippy passed. No server test assertion result was produced. Run cargo test -p calternal-server before merge.
  • Standalone vendored async-imap clippy/test were initially cancelled while waiting for the build lock and were not completed before the limit. Mail clippy and tests checked/exercised its Tokio dependency path.
  • The ignored large Mail history and worst-case performance profiles were not rerun. The requested local one-item Photos smoke completed; the imported baseline remains unchanged.
  • The live hostile-input and race adversarial round was not run under this session's safety limits. Offline classification and probe-helper tests do not replace it. This branch is not certified ready to merge until that round is completed.
  • Static parity records 188 actions with adapter gaps. New Location operations lack CLI/MCP/WebMCP adapters; Calendar feeds/subscriptions lack MCP adapters. These imported scope gaps remain documented.
  • The official generated-check wrapper returned 143 after its build/generation output. The equivalent OpenAPI generation, client generation, unique-operation check, and clean generated diff were rerun explicitly and all returned 0.
  • The local one-photo debug smoke is not comparable with the 5,000-photo baseline; no regression verdict was made. Its JSON commit field is unknown.

Browser evidence: Calendar feeds passed with 36 screenshots. Location passed with six screenshots, including stable Saved place link restoration and cap-height assertions. The full Appearance review passed with 71 screenshots. Notes, Photos and the Log with its Saved place passed with 18 more screenshots. All required surface matrices cover 390/820/1440 px and light/dark. The additional Unsplash previews use third-party test fixtures; ordinary Notes/Photos/Location/Calendar data comes from the real local API. The production app supplied the screenshots; visual quality review remains with the orchestrator.
Appearance, Notes, Photos and Log matrix. Location full matrix. Calendar full matrix.

Local performance smoke (photos-perf.mjs --items 1 --home-only): server start 1101 ms; all indexed 4060 ms; rebuild requested 2582 ms; mean/peak RSS 350938740/432443392 bytes; mean/peak CPU 25.24/132.98%; CPU 23.74 s. Load after: 33.2/38.3/40.6. Baseline docs/perf/baseline.json, commit 369ab6a2f9fc673e3564b94857fbecfeb04df404, 5000 photos: server start 290 ms; indexed 63230 ms; rebuild 719 ms; mean/peak RSS 360533602/495759360 bytes; mean/peak CPU 63.05/235.82%; CPU 113.24 s. Different dataset and environment: these numbers show the smoke completed, not a regression comparison.

Gate outputs follow. Full logs are under artifacts/merge-round-2/ in the worktree; screenshots and logs are not committed.

Required environment: CARGO_PROFILE_DEV_DEBUG=line-tables-only CARGO_INCREMENTAL=0 CARGO_BUILD_JOBS=4 TMPDIR=$PWD/target/tmp; the preset CARGO_TARGET_DIR was retained. Rust gates ran per crate.

cargo fmt --check: exit 0, no output. git diff --check: exit 0, no output.

Per-crate exit statuses, verbatim:

calternal-cli	clippy	0
calternal-cli	test	0
calternal-dav	clippy	0
calternal-dav	test	0
calternal-location	clippy	0
calternal-location	test	0
calternal-notes-core	clippy	0
calternal-notes-core	test	0
calternal-plugin	clippy	0
calternal-plugin	test	0
calternal-plugin-calendar	clippy	0
calternal-plugin-calendar	test	0
calternal-plugin-files	clippy	0
calternal-plugin-files	test	0
calternal-plugin-mail	clippy	0
calternal-plugin-mail	test	0
calternal-plugin-notes	clippy	0
calternal-plugin-notes	test	0
calternal-plugin-photos	clippy	0
calternal-plugin-photos	test	0
calternal-server	clippy	0
calternal-server	test	-15

calternal-cli clippy:

    Finished `dev` profile [unoptimized + debuginfo] target(s) in 16m 25s

calternal-cli test:

    Finished `test` profile [unoptimized + debuginfo] target(s) in 57m 13s
test result: ok. 27 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.76s
test result: ok. 15 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.09s

calternal-dav clippy:

    Finished `dev` profile [unoptimized + debuginfo] target(s) in 12m 25s

calternal-dav test:

    Finished `test` profile [unoptimized + debuginfo] target(s) in 6m 06s
test result: ok. 41 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.46s
test result: ok. 33 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.10s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

calternal-location clippy:

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

calternal-location test:

    Finished `test` profile [unoptimized + debuginfo] target(s) in 57.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.47s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

calternal-notes-core clippy:

    Finished `dev` profile [unoptimized + debuginfo] target(s) in 2m 29s

calternal-notes-core test:

    Finished `test` profile [unoptimized + debuginfo] target(s) in 2m 31s
test result: ok. 506 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.74s
test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.47s
test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s
test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.53s
test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

calternal-plugin clippy:

    Finished `dev` profile [unoptimized + debuginfo] target(s) in 9m 55s

calternal-plugin test:

    Finished `test` profile [unoptimized + debuginfo] target(s) in 4m 21s
test result: ok. 23 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 8.05s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

calternal-plugin-calendar clippy:

    Finished `dev` profile [unoptimized + debuginfo] target(s) in 29m 42s

calternal-plugin-calendar test:

    Finished `test` profile [unoptimized + debuginfo] target(s) in 10m 46s
test result: ok. 79 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 8.33s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.24s
test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.23s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

calternal-plugin-files clippy:

    Finished `dev` profile [unoptimized + debuginfo] target(s) in 4m 08s

calternal-plugin-files test:

    Finished `test` profile [unoptimized + debuginfo] target(s) in 6m 35s
test result: ok. 129 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 220.28s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

calternal-plugin-mail clippy:

    Finished `dev` profile [unoptimized + debuginfo] target(s) in 3m 36s

calternal-plugin-mail test:

    Finished `test` profile [unoptimized + debuginfo] target(s) in 3m 49s
test result: ok. 35 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 1.17s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

calternal-plugin-notes clippy:

    Finished `dev` profile [unoptimized + debuginfo] target(s) in 5m 36s

calternal-plugin-notes test:

    Finished `test` profile [unoptimized + debuginfo] target(s) in 7m 40s
test result: ok. 130 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 223.97s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.83s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

calternal-plugin-photos clippy:

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

calternal-plugin-photos test:

    Finished `test` profile [unoptimized + debuginfo] target(s) in 6m 06s
test result: ok. 44 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 25.16s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

calternal-server clippy:

    Finished `dev` profile [unoptimized + debuginfo] target(s) in 18m 02s

Server test run: cancelled during compilation; no test result. Last compiler output, verbatim:

   Compiling calternal-plugin-money v0.0.1 (/home/kayg/Developer/calternal-wt/merge-web/crates/plugins/money)
   Compiling rmcp v3.5.0
   Compiling calternal-plugin-files v0.0.1 (/home/kayg/Developer/calternal-wt/merge-web/crates/plugins/files)
   Compiling calternal-collab v0.0.1 (/home/kayg/Developer/calternal-wt/merge-web/crates/calternal-collab)
   Compiling calternal-plugin-calendar v0.0.1 (/home/kayg/Developer/calternal-wt/merge-web/crates/plugins/calendar)
   Compiling calternal-plugin-ai v0.0.1 (/home/kayg/Developer/calternal-wt/merge-web/crates/plugins/ai)
   Compiling calternal-plugin-photos v0.0.1 (/home/kayg/Developer/calternal-wt/merge-web/crates/plugins/photos)
   Compiling calternal-plugin-video v0.0.1 (/home/kayg/Developer/calternal-wt/merge-web/crates/plugins/video)
   Compiling calternal-plugin-notifications v0.0.1 (/home/kayg/Developer/calternal-wt/merge-web/crates/plugins/notifications)
   Compiling calternal-plugin-analytics v0.0.1 (/home/kayg/Developer/calternal-wt/merge-web/crates/plugins/analytics)

Web, contract, classification, parity, offline helper and browser output excerpts follow verbatim. Full output, including earlier failures and isolated reruns, is in the attached log archive.

bun-install.log

Checked 631 installs across 749 packages (no changes) [25.76s]

web-check-final.log

Text sizes and UI shape values use shared role tokens.
svelte-check found 0 errors and 0 warnings

web-test.log

 ❯ |component| src/lib/components/KeyboardShortcutsCard.svelte.test.ts (1 test | 1 failed) 5696ms
 ❯ |unit| src/lib/calendar/zones.test.ts (21 tests | 1 failed) 6881ms
⎯⎯⎯⎯⎯⎯⎯ Failed Tests 2 ⎯⎯⎯⎯⎯⎯⎯
Error: Test timed out in 5000ms.
If this is a long-running test, pass a timeout value as the last argument or configure it globally with "testTimeout".
Error: Test timed out in 5000ms.
If this is a long-running test, pass a timeout value as the last argument or configure it globally with "testTimeout".
 Test Files  2 failed | 137 passed (139)
      Tests  2 failed | 897 passed (899)
   Duration  416.06s (transform 66%, import 12%, environment 12%, tests 7%, setup 3%)

web-zones-alone.log

 Test Files  1 passed (1)
      Tests  21 passed (21)
   Duration  88.80s (transform 94%, import 6%)

web-shortcuts-alone.log

 Test Files  1 passed (1)
      Tests  1 passed (1)
   Duration  126.01s (transform 79%, environment 11%, import 5%, setup 3%, tests 2%)

settings-alone.log

 Test Files  1 passed (1)
      Tests  8 passed (8)
   Duration  6.85s (transform 85%, import 10%, tests 4%)

api-client-tests.log

(pass) apiFetch > keeps a typed failure body that is not an error envelope [0.23ms]
 9 pass
 0 fail
 31 expect() calls

bench-tests.log

............
----------------------------------------------------------------------
Ran 12 tests in 1.213s

OK

dav-probe-contract-tests.log

.......
----------------------------------------------------------------------
Ran 7 tests in 0.029s

OK

appearance-probe-contract-tests.log

....
----------------------------------------------------------------------
Ran 4 tests in 0.008s

OK

classification-final-tests.log

....
----------------------------------------------------------------------
Ran 4 tests in 0.284s

OK

classify-final.log

Cross-User classification gate: 328 operations classified

parity-final.log

Parity matrix: 206 web API actions, 113 shortcuts, 2 static commands, 131 menu actions, 33 settings groups, 188 actions with adapter gaps

generated-check-confirmed.log

$ /mnt/hdd/targets/jobs/merge-round-2/debug/calternal-server openapi
exit=0
$ bun run --cwd packages/api-client generate
$ bunx --package openapi-typescript@7.13.0 openapi-typescript ../../contracts/openapi.json -o src/generated.ts
✨ openapi-typescript 7.13.0
🚀 ../../contracts/openapi.json → src/generated.ts [3s]
exit=0
$ git diff --exit-code -- contracts/openapi.json packages/api-client/src/generated.ts
exit=0
OpenAPI operation IDs: 328 unique

calendar-feeds.log

Calendar feeds proof passed; screenshots: /home/kayg/Developer/calternal-wt/merge-web/artifacts/merge-round-2/calendar-feeds

location-review.log

PASS appearance review captures: 6 screenshots in /home/kayg/Developer/calternal-wt/merge-web/artifacts/location

photos-home-local.log

  indexed: {
{"items":1,"commit":"unknown","recordedAt":"2026-09-30T10:14:15.246Z","homeOnly":true,"environment":{"host":"calternal-dev","platform":"linux","architecture":"x64"},"homeFixtures":{"photos":1,"photoDays":1,"files":0,"folderItems":0,"notes":0,"logEntries":0,"dailyNotes":0,"largeNoteBytes":0},"homeFixtureWriteMs":10277,"indexing":{"serverUpMs":1101,"allIndexedMs":4060,"photoRebuildRequestedMs":2582,"indexed":{"photos":1,"folderItems":0,"restItems":0,"notes":0,"logEntries":0}},"homeRenders":{"cpuThrottle":4,"runs":3,"order":[["files5k","analyticsYear","note1MiB"],["analyticsYear","note1MiB","files5k"],["note1MiB","files5k","analyticsYear"]],"files5k":{"skipped":true},"analyticsYear":{"skipped":true},"note1MiB":{"skipped":true}},"loadAverageAfter":[33.2,38.3,40.6],"homeResources":{"meanRssBytes":350938740,"peakRssBytes":432443392,"meanCpuPercent":25.24,"peakCpuPercent":132.98,"cpuSeconds":23.74,"samples":186}}

harness-test-final.log:


 8 pass
 0 fail
Ran 8 tests across 1 file. [474.00ms]

appearance-review-awaited.log:

PASS appearance review captures: 71 screenshots in /home/kayg/Developer/calternal-wt/merge-web/artifacts/location

reconcile-review-normal-note.log:

PASS Notes and Photos review: 18 production screenshots, 390/820/1440 px, light/dark

cargo-clean.log:

     Removed 23900 files, 14.0GiB total

migrations.log:

crates/calternal-auth/migrations: 10 numbered migrations; no duplicates
crates/calternal-db/src/migrations: 6 numbered migrations; no duplicates
crates/calternal-plugin/migrations: 1 numbered migrations; no duplicates
crates/calternal-search/migrations: 3 numbered migrations; no duplicates
crates/calternal-tags/migrations: 2 numbered migrations; no duplicates
crates/plugins/ai/migrations: 4 numbered migrations; no duplicates
crates/plugins/analytics/migrations: 2 numbered migrations; no duplicates
crates/plugins/calendar/migrations: 4 numbered migrations; no duplicates
crates/plugins/files/migrations: 15 numbered migrations; no duplicates
crates/plugins/mail/migrations: 8 numbered migrations; no duplicates
crates/plugins/notes/migrations: 20 numbered migrations; no duplicates
crates/plugins/notifications/migrations: 4 numbered migrations; no duplicates
crates/plugins/photos/migrations: 6 numbered migrations; no duplicates
crates/plugins/video/migrations: 1 numbered migrations; no duplicates
PASS: 14 migration folders have unique numeric prefixes

bun run build: exit 0. Output, verbatim:

✓ built in 2m 29s
✓ built in 527ms
✓ built in 4m 52s
> Using @sveltejs/adapter-static

Official generated-check wrapper exit: 143. Confirmed equivalent generation/uniqueness/diff steps: all exit 0, quoted above.
Standalone vendor attempt statuses, verbatim:

async-imap	clippy	-15
async-imap	test	-15

Cleanup: cargo clean exit 0; web build and Svelte build output deleted. Screenshots and logs remain uncommitted. Final git status is clean.

Full gate output, earlier failures, isolated reruns, performance smoke and changed-file manifest.

All five branches are committed on `job/merge-round-2`. Validation remains incomplete at the four-hour limit. Head: `84d4258f130ebebe748a9b3a08f03c8741d01c45`. Base: `6c87f5ff9442cd658572139bc536d018fd5222a4`. No push, deploy, or change to dev. No branch was dropped: no included branch produced a Rust code/test failure; unfinished validation is listed below. Included: `job/location` (#391), `job/webcal-431` (#431), `job/small-bugs-4` (#459/#463/#464), `job/photos-470` (#470), `job/perf-367` (#367). All five heads are ancestors. The required final fetch and origin/dev merge returned `Already up to date.` Integration fixes and files: - Settings canonical links preserve Maintenance query state and stable Saved place UUID fragments (`apps/web/src/routes/settings/[...path]/+page.svelte`, registry tests). - Authenticated Location routing coexists with public Calendar feeds (`crates/calternal-server/src/wire.rs`). - Mail fixtures retain MIME reader regressions and the full-history profile (`crates/plugins/mail/src/sync.rs`). Calendar benchmarks use the canonical Daily note first, then search only that User's Home (`apps/web/e2e/calendar-perf.mjs`). - Location uses shared leading and shape tokens (`apps/web/src/routes/settings/account/LocationGroup.svelte`). - Location operations and Saved place identities have explicit fail-closed classifications with regression tests (`tests/adversarial/authz_matrix.py`, `xuser_matrix.py`, `test_xuser_classification.py`). - Updated the shared capture harness and its regression tests (`apps/web/e2e/harness.mjs`, `harness.test.mjs`, `appearance-review.mjs`). Earlier failing capture output is preserved; no existing numeric assertion was weakened. - Regenerated `contracts/openapi.json`, `packages/api-client/src/generated.ts`, and `docs/parity-*`. No generated files were hand-merged. - Reviewed module/function comments were updated with the merge fixes. Imported feature files remain in the five branch histories. The complete changed-file list is `artifacts/merge-round-2/files.txt`. Migrations: no duplicate numeric prefixes in any migrations folder. Notes adds 0020 after origin/dev's 0019; Calendar adds 0004 after origin/dev's 0003. Notes bridge is excluded. Decisions: - Keep the existing API adapters' scope. Record the new Location/Calendar adapter gaps in the generated parity inventory rather than invent new CLI/MCP/WebMCP behavior in this merge. - Keep both Mail fixture behaviors in one helper. Keep the Calendar fallback scoped to the current User's Home. - Preserve dev's existing test expectations. The two web failures were timeouts and were rerun alone. Restore the exact 16-family theme expectation from dev; count dark variant submenu parents as families and use the existing keyboard submenu interaction. - In the capture harness, check the saved Auto/System preference separately from its rendered Light/Dark CSS phase. Eight regressions verify both phases and reject wrong persistence or rendering. - Seed the review's initial preference through the real API before SPA navigation. Wait for hydration before choosing a mode, and await persistence with bounded API reads on the host. Playwright 1.63 treats the former async predicate as truthy before its Promise resolves. Known gaps: - `calternal-server` tests were stopped during compilation at the approximately four-hour limit (exit -15). Server clippy passed. No server test assertion result was produced. Run `cargo test -p calternal-server` before merge. - Standalone vendored `async-imap` clippy/test were initially cancelled while waiting for the build lock and were not completed before the limit. Mail clippy and tests checked/exercised its Tokio dependency path. - The ignored large Mail history and worst-case performance profiles were not rerun. The requested local one-item Photos smoke completed; the imported baseline remains unchanged. - The live hostile-input and race adversarial round was not run under this session's safety limits. Offline classification and probe-helper tests do not replace it. This branch is not certified ready to merge until that round is completed. - Static parity records 188 actions with adapter gaps. New Location operations lack CLI/MCP/WebMCP adapters; Calendar feeds/subscriptions lack MCP adapters. These imported scope gaps remain documented. - The official generated-check wrapper returned 143 after its build/generation output. The equivalent OpenAPI generation, client generation, unique-operation check, and clean generated diff were rerun explicitly and all returned 0. - The local one-photo debug smoke is not comparable with the 5,000-photo baseline; no regression verdict was made. Its JSON commit field is `unknown`. Browser evidence: Calendar feeds passed with 36 screenshots. Location passed with six screenshots, including stable Saved place link restoration and cap-height assertions. The full Appearance review passed with 71 screenshots. Notes, Photos and the Log with its Saved place passed with 18 more screenshots. All required surface matrices cover 390/820/1440 px and light/dark. The additional Unsplash previews use third-party test fixtures; ordinary Notes/Photos/Location/Calendar data comes from the real local API. The production app supplied the screenshots; visual quality review remains with the orchestrator. [Appearance, Notes, Photos and Log matrix](https://git.kayg.org/attachments/2a0c2168-6199-4d45-9ff2-ad676518e88e). [Location full matrix](https://git.kayg.org/attachments/6078bc47-ceb1-4566-9b5e-63ef5c52b9a1). [Calendar full matrix](https://git.kayg.org/attachments/03f5976a-28a3-4384-9aae-a995bac45409). Local performance smoke (`photos-perf.mjs --items 1 --home-only`): server start 1101 ms; all indexed 4060 ms; rebuild requested 2582 ms; mean/peak RSS 350938740/432443392 bytes; mean/peak CPU 25.24/132.98%; CPU 23.74 s. Load after: 33.2/38.3/40.6. Baseline `docs/perf/baseline.json`, commit `369ab6a2f9fc673e3564b94857fbecfeb04df404`, 5000 photos: server start 290 ms; indexed 63230 ms; rebuild 719 ms; mean/peak RSS 360533602/495759360 bytes; mean/peak CPU 63.05/235.82%; CPU 113.24 s. Different dataset and environment: these numbers show the smoke completed, not a regression comparison. Gate outputs follow. Full logs are under `artifacts/merge-round-2/` in the worktree; screenshots and logs are not committed. Required environment: `CARGO_PROFILE_DEV_DEBUG=line-tables-only CARGO_INCREMENTAL=0 CARGO_BUILD_JOBS=4 TMPDIR=$PWD/target/tmp`; the preset CARGO_TARGET_DIR was retained. Rust gates ran per crate. `cargo fmt --check`: exit 0, no output. `git diff --check`: exit 0, no output. Per-crate exit statuses, verbatim: ```text calternal-cli clippy 0 calternal-cli test 0 calternal-dav clippy 0 calternal-dav test 0 calternal-location clippy 0 calternal-location test 0 calternal-notes-core clippy 0 calternal-notes-core test 0 calternal-plugin clippy 0 calternal-plugin test 0 calternal-plugin-calendar clippy 0 calternal-plugin-calendar test 0 calternal-plugin-files clippy 0 calternal-plugin-files test 0 calternal-plugin-mail clippy 0 calternal-plugin-mail test 0 calternal-plugin-notes clippy 0 calternal-plugin-notes test 0 calternal-plugin-photos clippy 0 calternal-plugin-photos test 0 calternal-server clippy 0 calternal-server test -15 ``` calternal-cli clippy: ```text Finished `dev` profile [unoptimized + debuginfo] target(s) in 16m 25s ``` calternal-cli test: ```text Finished `test` profile [unoptimized + debuginfo] target(s) in 57m 13s test result: ok. 27 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.76s test result: ok. 15 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.09s ``` calternal-dav clippy: ```text Finished `dev` profile [unoptimized + debuginfo] target(s) in 12m 25s ``` calternal-dav test: ```text Finished `test` profile [unoptimized + debuginfo] target(s) in 6m 06s test result: ok. 41 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.46s test result: ok. 33 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.10s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s ``` calternal-location clippy: ```text Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 05s ``` calternal-location test: ```text Finished `test` profile [unoptimized + debuginfo] target(s) in 57.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.47s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s ``` calternal-notes-core clippy: ```text Finished `dev` profile [unoptimized + debuginfo] target(s) in 2m 29s ``` calternal-notes-core test: ```text Finished `test` profile [unoptimized + debuginfo] target(s) in 2m 31s test result: ok. 506 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.74s test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.47s test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.53s test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s ``` calternal-plugin clippy: ```text Finished `dev` profile [unoptimized + debuginfo] target(s) in 9m 55s ``` calternal-plugin test: ```text Finished `test` profile [unoptimized + debuginfo] target(s) in 4m 21s test result: ok. 23 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 8.05s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s ``` calternal-plugin-calendar clippy: ```text Finished `dev` profile [unoptimized + debuginfo] target(s) in 29m 42s ``` calternal-plugin-calendar test: ```text Finished `test` profile [unoptimized + debuginfo] target(s) in 10m 46s test result: ok. 79 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 8.33s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.24s test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.23s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s ``` calternal-plugin-files clippy: ```text Finished `dev` profile [unoptimized + debuginfo] target(s) in 4m 08s ``` calternal-plugin-files test: ```text Finished `test` profile [unoptimized + debuginfo] target(s) in 6m 35s test result: ok. 129 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 220.28s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s ``` calternal-plugin-mail clippy: ```text Finished `dev` profile [unoptimized + debuginfo] target(s) in 3m 36s ``` calternal-plugin-mail test: ```text Finished `test` profile [unoptimized + debuginfo] target(s) in 3m 49s test result: ok. 35 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 1.17s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s ``` calternal-plugin-notes clippy: ```text Finished `dev` profile [unoptimized + debuginfo] target(s) in 5m 36s ``` calternal-plugin-notes test: ```text Finished `test` profile [unoptimized + debuginfo] target(s) in 7m 40s test result: ok. 130 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 223.97s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.83s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s ``` calternal-plugin-photos clippy: ```text Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 48s ``` calternal-plugin-photos test: ```text Finished `test` profile [unoptimized + debuginfo] target(s) in 6m 06s test result: ok. 44 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 25.16s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s ``` calternal-server clippy: ```text Finished `dev` profile [unoptimized + debuginfo] target(s) in 18m 02s ``` Server test run: cancelled during compilation; no test result. Last compiler output, verbatim: ```text Compiling calternal-plugin-money v0.0.1 (/home/kayg/Developer/calternal-wt/merge-web/crates/plugins/money) Compiling rmcp v3.5.0 Compiling calternal-plugin-files v0.0.1 (/home/kayg/Developer/calternal-wt/merge-web/crates/plugins/files) Compiling calternal-collab v0.0.1 (/home/kayg/Developer/calternal-wt/merge-web/crates/calternal-collab) Compiling calternal-plugin-calendar v0.0.1 (/home/kayg/Developer/calternal-wt/merge-web/crates/plugins/calendar) Compiling calternal-plugin-ai v0.0.1 (/home/kayg/Developer/calternal-wt/merge-web/crates/plugins/ai) Compiling calternal-plugin-photos v0.0.1 (/home/kayg/Developer/calternal-wt/merge-web/crates/plugins/photos) Compiling calternal-plugin-video v0.0.1 (/home/kayg/Developer/calternal-wt/merge-web/crates/plugins/video) Compiling calternal-plugin-notifications v0.0.1 (/home/kayg/Developer/calternal-wt/merge-web/crates/plugins/notifications) Compiling calternal-plugin-analytics v0.0.1 (/home/kayg/Developer/calternal-wt/merge-web/crates/plugins/analytics) ``` Web, contract, classification, parity, offline helper and browser output excerpts follow verbatim. Full output, including earlier failures and isolated reruns, is in the attached log archive. ### bun-install.log ```text Checked 631 installs across 749 packages (no changes) [25.76s] ``` ### web-check-final.log ```text Text sizes and UI shape values use shared role tokens. svelte-check found 0 errors and 0 warnings ``` ### web-test.log ```text ❯ |component| src/lib/components/KeyboardShortcutsCard.svelte.test.ts (1 test | 1 failed) 5696ms ❯ |unit| src/lib/calendar/zones.test.ts (21 tests | 1 failed) 6881ms ⎯⎯⎯⎯⎯⎯⎯ Failed Tests 2 ⎯⎯⎯⎯⎯⎯⎯ Error: Test timed out in 5000ms. If this is a long-running test, pass a timeout value as the last argument or configure it globally with "testTimeout". Error: Test timed out in 5000ms. If this is a long-running test, pass a timeout value as the last argument or configure it globally with "testTimeout". Test Files 2 failed | 137 passed (139) Tests 2 failed | 897 passed (899) Duration 416.06s (transform 66%, import 12%, environment 12%, tests 7%, setup 3%) ``` ### web-zones-alone.log ```text Test Files 1 passed (1) Tests 21 passed (21) Duration 88.80s (transform 94%, import 6%) ``` ### web-shortcuts-alone.log ```text Test Files 1 passed (1) Tests 1 passed (1) Duration 126.01s (transform 79%, environment 11%, import 5%, setup 3%, tests 2%) ``` ### settings-alone.log ```text Test Files 1 passed (1) Tests 8 passed (8) Duration 6.85s (transform 85%, import 10%, tests 4%) ``` ### api-client-tests.log ```text (pass) apiFetch > keeps a typed failure body that is not an error envelope [0.23ms] 9 pass 0 fail 31 expect() calls ``` ### bench-tests.log ```text ............ ---------------------------------------------------------------------- Ran 12 tests in 1.213s OK ``` ### dav-probe-contract-tests.log ```text ....... ---------------------------------------------------------------------- Ran 7 tests in 0.029s OK ``` ### appearance-probe-contract-tests.log ```text .... ---------------------------------------------------------------------- Ran 4 tests in 0.008s OK ``` ### classification-final-tests.log ```text .... ---------------------------------------------------------------------- Ran 4 tests in 0.284s OK ``` ### classify-final.log ```text Cross-User classification gate: 328 operations classified ``` ### parity-final.log ```text Parity matrix: 206 web API actions, 113 shortcuts, 2 static commands, 131 menu actions, 33 settings groups, 188 actions with adapter gaps ``` ### generated-check-confirmed.log ```text $ /mnt/hdd/targets/jobs/merge-round-2/debug/calternal-server openapi exit=0 $ bun run --cwd packages/api-client generate $ bunx --package openapi-typescript@7.13.0 openapi-typescript ../../contracts/openapi.json -o src/generated.ts ✨ openapi-typescript 7.13.0 🚀 ../../contracts/openapi.json → src/generated.ts [3s] exit=0 $ git diff --exit-code -- contracts/openapi.json packages/api-client/src/generated.ts exit=0 OpenAPI operation IDs: 328 unique ``` ### calendar-feeds.log ```text Calendar feeds proof passed; screenshots: /home/kayg/Developer/calternal-wt/merge-web/artifacts/merge-round-2/calendar-feeds ``` ### location-review.log ```text PASS appearance review captures: 6 screenshots in /home/kayg/Developer/calternal-wt/merge-web/artifacts/location ``` ### photos-home-local.log ```text indexed: { {"items":1,"commit":"unknown","recordedAt":"2026-09-30T10:14:15.246Z","homeOnly":true,"environment":{"host":"calternal-dev","platform":"linux","architecture":"x64"},"homeFixtures":{"photos":1,"photoDays":1,"files":0,"folderItems":0,"notes":0,"logEntries":0,"dailyNotes":0,"largeNoteBytes":0},"homeFixtureWriteMs":10277,"indexing":{"serverUpMs":1101,"allIndexedMs":4060,"photoRebuildRequestedMs":2582,"indexed":{"photos":1,"folderItems":0,"restItems":0,"notes":0,"logEntries":0}},"homeRenders":{"cpuThrottle":4,"runs":3,"order":[["files5k","analyticsYear","note1MiB"],["analyticsYear","note1MiB","files5k"],["note1MiB","files5k","analyticsYear"]],"files5k":{"skipped":true},"analyticsYear":{"skipped":true},"note1MiB":{"skipped":true}},"loadAverageAfter":[33.2,38.3,40.6],"homeResources":{"meanRssBytes":350938740,"peakRssBytes":432443392,"meanCpuPercent":25.24,"peakCpuPercent":132.98,"cpuSeconds":23.74,"samples":186}} ``` harness-test-final.log: ```text 8 pass 0 fail Ran 8 tests across 1 file. [474.00ms] ``` appearance-review-awaited.log: ```text PASS appearance review captures: 71 screenshots in /home/kayg/Developer/calternal-wt/merge-web/artifacts/location ``` reconcile-review-normal-note.log: ```text PASS Notes and Photos review: 18 production screenshots, 390/820/1440 px, light/dark ``` cargo-clean.log: ```text Removed 23900 files, 14.0GiB total ``` migrations.log: ```text crates/calternal-auth/migrations: 10 numbered migrations; no duplicates crates/calternal-db/src/migrations: 6 numbered migrations; no duplicates crates/calternal-plugin/migrations: 1 numbered migrations; no duplicates crates/calternal-search/migrations: 3 numbered migrations; no duplicates crates/calternal-tags/migrations: 2 numbered migrations; no duplicates crates/plugins/ai/migrations: 4 numbered migrations; no duplicates crates/plugins/analytics/migrations: 2 numbered migrations; no duplicates crates/plugins/calendar/migrations: 4 numbered migrations; no duplicates crates/plugins/files/migrations: 15 numbered migrations; no duplicates crates/plugins/mail/migrations: 8 numbered migrations; no duplicates crates/plugins/notes/migrations: 20 numbered migrations; no duplicates crates/plugins/notifications/migrations: 4 numbered migrations; no duplicates crates/plugins/photos/migrations: 6 numbered migrations; no duplicates crates/plugins/video/migrations: 1 numbered migrations; no duplicates PASS: 14 migration folders have unique numeric prefixes ``` `bun run build`: exit 0. Output, verbatim: ```text ✓ built in 2m 29s ✓ built in 527ms ✓ built in 4m 52s > Using @sveltejs/adapter-static ``` Official generated-check wrapper exit: 143. Confirmed equivalent generation/uniqueness/diff steps: all exit 0, quoted above. Standalone vendor attempt statuses, verbatim: ```text async-imap clippy -15 async-imap test -15 ``` Cleanup: cargo clean exit 0; web build and Svelte build output deleted. Screenshots and logs remain uncommitted. Final git status is clean. [Full gate output, earlier failures, isolated reruns, performance smoke and changed-file manifest](https://git.kayg.org/attachments/bd32de61-0a7d-4999-b66c-134546087c66).
Author
Owner

Standalone async-imap 0.11.3 gates: Clippy passed. cargo test --manifest-path crates/plugins/mail/vendor/async-imap/Cargo.toml reported 69 passed and one failed (client::tests::test_parsing_error); the same test failed when rerun alone.

Evidence: the test expects the error string to contain the raw SMTP greeting 220 mail.example.org ESMTP Postcow. ImapStream::decode maps an unparseable response to io::Error::other("malformed IMAP response"), and Error::Io displays that generic message. The assertion and code therefore disagree. I did not change the existing expectation, per the owner rule. This is separate from the runtime feature conflict described by this issue; the merged runtime gate itself compiled. The merge report will retain this as a gate failure for review.

Standalone async-imap 0.11.3 gates: Clippy passed. `cargo test --manifest-path crates/plugins/mail/vendor/async-imap/Cargo.toml` reported 69 passed and one failed (`client::tests::test_parsing_error`); the same test failed when rerun alone. Evidence: the test expects the error string to contain the raw SMTP greeting `220 mail.example.org ESMTP Postcow`. `ImapStream::decode` maps an unparseable response to `io::Error::other("malformed IMAP response")`, and `Error::Io` displays that generic message. The assertion and code therefore disagree. I did not change the existing expectation, per the owner rule. This is separate from the runtime feature conflict described by this issue; the merged runtime gate itself compiled. The merge report will retain this as a gate failure for review.
Author
Owner

Merged into dev and deployed to calternal.cloud at aa372eef6 via merge round 2 (server tests 93 passed, web 914/914, live location/webcal/WebDAV/Settings-Photos/two-User probes passed).

Merged into dev and deployed to calternal.cloud at aa372eef6 via merge round 2 (server tests 93 passed, web 914/914, live location/webcal/WebDAV/Settings-Photos/two-User probes passed).
kayg closed this issue 2026-09-30 17:20:54 +00:00
Sign in to join this conversation.
No labels
No milestone
No project
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#463
No description provided.