PROCESS: browser smoke suite of real User flows over a throttled network (deploy gate) #1122

Closed
opened 2026-10-05 07:59:11 +00:00 by kayg · 98 comments
Owner

Owner decisions (2026-10-05 process grill) + "more things need to be tested with browser-use"

Build the per-deploy browser smoke suite: real flows driven in a real browser like a User (Playwright, Chromium + WebKit, iPhone-size and desktop), against a production build with realistic data, over a throttled network path (e.g. 2 MB/s, 80 ms latency proxy) so uploads and slow responses behave like the internet + edge.

First ~15 flows (each asserts what the User sees, with a screenshot kept as a baseline):

  1. Log entry from the Composer (Send all with 3 queued) appears in Day view and Agenda.
  2. Agenda newest first; scroll to the bottom without jumps; completed Tasks do not repeat.
  3. Tasks Board: drag a Task through every column, including Blocked and Waiting; persists after reload.
  4. Money: import a realistic ~15 MB Actual ZIP through the UI over the throttled path; review; import; budget shows.
  5. Note: create, type, paste an image, reload, content intact.
  6. Draw: insert a Drawing, draw, Done, reload.
  7. Share a Note with a second User; recipient sees it under Shared.
  8. Mail columns: open a message; switch messages; sidebar collapse leaves nothing behind.
  9. Search palette: rows have readable labels (contrast check), open a result.
  10. Settings sidebar hierarchy; Apps & Devices sheet title while scrolling.
  11. Mode tray: every Tab icon at the icon size token, selected label not clipped (390/1440, light/dark).
  12. Files: upload a 50 MB file over the throttled path, preview, delete with Undo.
  13. Photos: an extensionless HEIC appears with a thumbnail.
  14. Tag click filters the current view; tag rename/merge with Undo.
  15. Long pull to update on phone size; update toast after a server build change.

Run: before every production deploy (gate, ~20–30 min) and nightly on dev. Output: pass/fail per flow plus screenshots; failures block the deploy. Keep it fast and stable (no fixed sleeps; wait on visible state).

## Owner decisions (2026-10-05 process grill) + "more things need to be tested with browser-use" Build the per-deploy browser smoke suite: real flows driven in a real browser like a User (Playwright, Chromium + WebKit, iPhone-size and desktop), against a production build with realistic data, over a throttled network path (e.g. 2 MB/s, 80 ms latency proxy) so uploads and slow responses behave like the internet + edge. First ~15 flows (each asserts what the User sees, with a screenshot kept as a baseline): 1. Log entry from the Composer (Send all with 3 queued) appears in Day view and Agenda. 2. Agenda newest first; scroll to the bottom without jumps; completed Tasks do not repeat. 3. Tasks Board: drag a Task through every column, including Blocked and Waiting; persists after reload. 4. Money: import a realistic ~15 MB Actual ZIP through the UI over the throttled path; review; import; budget shows. 5. Note: create, type, paste an image, reload, content intact. 6. Draw: insert a Drawing, draw, Done, reload. 7. Share a Note with a second User; recipient sees it under Shared. 8. Mail columns: open a message; switch messages; sidebar collapse leaves nothing behind. 9. Search palette: rows have readable labels (contrast check), open a result. 10. Settings sidebar hierarchy; Apps & Devices sheet title while scrolling. 11. Mode tray: every Tab icon at the icon size token, selected label not clipped (390/1440, light/dark). 12. Files: upload a 50 MB file over the throttled path, preview, delete with Undo. 13. Photos: an extensionless HEIC appears with a thumbnail. 14. Tag click filters the current view; tag rename/merge with Undo. 15. Long pull to update on phone size; update toast after a server build change. Run: before every production deploy (gate, ~20–30 min) and nightly on dev. Output: pass/fail per flow plus screenshots; failures block the deploy. Keep it fast and stable (no fixed sleeps; wait on visible state).
Author
Owner

Starting smoke suite work on branch job/smoke-1122, based on dev at 4a8e22609e. I’m checking the existing e2e harness and design decisions before adding the runner.

Starting smoke suite work on branch job/smoke-1122, based on dev at 4a8e22609e51f53b037d1296dc757e8f0e2b833a. I’m checking the existing e2e harness and design decisions before adding the runner.
Author
Owner

Tags finding for #1122: the server already provides POST /api/v1/tags/rename/preview and POST /api/v1/tags/rename (crates/calternal-tags/src/lib.rs), but the production Tags route currently exposes Tag links and Copy link actions only (apps/web/src/routes/tags/+page.svelte). The requested rename/merge Undo has no visible UI action. The smoke flow verifies the server merge and restores its fixture through the same writer, then reports this missing UI action as a failure.

Tags finding for #1122: the server already provides `POST /api/v1/tags/rename/preview` and `POST /api/v1/tags/rename` (`crates/calternal-tags/src/lib.rs`), but the production Tags route currently exposes Tag links and Copy link actions only (`apps/web/src/routes/tags/+page.svelte`). The requested rename/merge Undo has no visible UI action. The smoke flow verifies the server merge and restores its fixture through the same writer, then reports this missing UI action as a failure.
Author
Owner

After merging origin/dev as required, bun run check reaches perf-lint and fails with this finding:

perf-lint: INVALID: ('render.bound', 'apps/web/src/lib/components/app-sidebar.svelte', 'apps/web/src/lib/components/app-sidebar.svelte#each:10a1aaf3137a2426:1'): unused or changed exception

The error is in the merged #1094 sidebar change and its contracts/perf/exceptions.json entry. The gate stops before the storage, token, and Svelte checks. The smoke work does not change the sidebar or performance contracts.

After merging `origin/dev` as required, `bun run check` reaches perf-lint and fails with this finding: ``` perf-lint: INVALID: ('render.bound', 'apps/web/src/lib/components/app-sidebar.svelte', 'apps/web/src/lib/components/app-sidebar.svelte#each:10a1aaf3137a2426:1'): unused or changed exception ``` The error is in the merged #1094 sidebar change and its `contracts/perf/exceptions.json` entry. The gate stops before the storage, token, and Svelte checks. The smoke work does not change the sidebar or performance contracts.
Author
Owner

The first bun run test:smoke attempt exited before running flows because the shared smoke harness did not re-export playwrightEntry, which the runner imports. I added the re-export in commit 5e000669c; syntax checks, the runner helper export check, and imports for all 15 flow files now pass. I am rerunning the suite after this startup fix.

The first `bun run test:smoke` attempt exited before running flows because the shared smoke harness did not re-export `playwrightEntry`, which the runner imports. I added the re-export in commit `5e000669c`; syntax checks, the runner helper export check, and imports for all 15 flow files now pass. I am rerunning the suite after this startup fix.
Author
Owner

The next setup attempt reached the real signed-in /today route but timed out because smoke readiness accepted only light or dark. Diagnostic state was rootMode=system, rootTheme=mono, route content mounted, with no page or console errors. system is a valid preference, so commit 451629cd5 now accepts it when a theme is present; screenshot capture still sets explicit light and dark themes.

The next setup attempt reached the real signed-in `/today` route but timed out because smoke readiness accepted only `light` or `dark`. Diagnostic state was `rootMode=system`, `rootTheme=mono`, route content mounted, with no page or console errors. `system` is a valid preference, so commit `451629cd5` now accepts it when a theme is present; screenshot capture still sets explicit light and dark themes.
Author
Owner

The real Chromium Agenda flow loaded the next history page and measured the visible boundary day at 623.4 px before and 745.4 px after the load. The 122.0 px shift violates the flow's stable-scroll assertion; the smoke check remains strict and will report this failure.

The real Chromium Agenda flow loaded the next history page and measured the visible boundary day at 623.4 px before and 745.4 px after the load. The 122.0 px shift violates the flow's stable-scroll assertion; the smoke check remains strict and will report this failure.
Author
Owner

The first real flow completed its Composer actions, then screenshot capture failed because waiting for fonts after a local-only theme change let the mounted System preference repaint. Commit 36ee86b47 now waits for fonts before the explicit screenshot theme. A focused production capture passed at 390, 820, and 1440 px in both light and dark on Chromium.

The first real flow completed its Composer actions, then screenshot capture failed because waiting for fonts after a local-only theme change let the mounted System preference repaint. Commit `36ee86b47` now waits for fonts before the explicit screenshot theme. A focused production capture passed at 390, 820, and 1440 px in both light and dark on Chromium.
Author
Owner

Full-run evidence (Chromium + WebKit, 1,428 s, exit 1): the runner omitted its session object when calling each flow. That left Share and Mail without their fixture state and caused TypeErrors in both engines. The first pass also exposed fixture/navigation defects: current-date data is Oct 5 while Agenda waits for history dates, Money checks proxy bytes before the upload finishes, and the Files/Photos selectors did not become visible. I am fixing harness defects and will retain explicit failures for product behavior.

Full-run evidence (Chromium + WebKit, 1,428 s, exit 1): the runner omitted its `session` object when calling each flow. That left Share and Mail without their fixture state and caused TypeErrors in both engines. The first pass also exposed fixture/navigation defects: current-date data is Oct 5 while Agenda waits for history dates, Money checks proxy bytes before the upload finishes, and the Files/Photos selectors did not become visible. I am fixing harness defects and will retain explicit failures for product behavior.
Author
Owner

Diagnostic subset evidence: after passing the runner's session context, Share and Mail passed in Chromium (29,347 ms and 27,363 ms). Files accepted the 50 MiB upload and rendered it as chromium-50mb.png; the fixture had been saved under that basename while the assertion expected Smoke chromium 50 MB.png, so the fixture path now uses the expected name. Money showed non-zero receive progress but did not reach its review dialog within 180 s, so the flow now reports this as #1121 with received-byte and status details and uses a 30 s completion bound to protect the suite budget.

Diagnostic subset evidence: after passing the runner's session context, Share and Mail passed in Chromium (29,347 ms and 27,363 ms). Files accepted the 50 MiB upload and rendered it as `chromium-50mb.png`; the fixture had been saved under that basename while the assertion expected `Smoke chromium 50 MB.png`, so the fixture path now uses the expected name. Money showed non-zero receive progress but did not reach its review dialog within 180 s, so the flow now reports this as `#1121` with received-byte and status details and uses a 30 s completion bound to protect the suite budget.
Author
Owner

Production smoke finding for #06 Drawing insert: Chromium shows the Draw alert “The Draw could not be saved. Your drawing is still here; try again.” after the User draws a rectangle and presses Done. The Drawing stays in Draw, and the Note has no Canvas preview. WebKit closes Draw but also does not show the preview. The flow now reports this as #1102 in both engines; I will attach the failure screenshots with the final result.

Production smoke finding for #06 Drawing insert: Chromium shows the Draw alert “The Draw could not be saved. Your drawing is still here; try again.” after the User draws a rectangle and presses Done. The Drawing stays in Draw, and the Note has no Canvas preview. WebKit closes Draw but also does not show the preview. The flow now reports this as #1102 in both engines; I will attach the failure screenshots with the final result.
Author
Owner

Focused production smoke findings:

  • #02 Agenda scroll: the oldest seeded Log is present in the Calendar range. Loading the next history page moved the visible anchor from 623.5 px to 945.6 px; the smoke threshold is under 48 px. This reproduces the history-load jump in Chromium.
  • #03 Task Board: the status menu changes the Task through Done and the no-cache API confirms the persisted state. After a page reload, the Board does not show that Task in the Done column within 15 seconds.

Both checks stay strict in the final suite. The screenshots will be attached with the final report.

Focused production smoke findings: - #02 Agenda scroll: the oldest seeded Log is present in the Calendar range. Loading the next history page moved the visible anchor from 623.5 px to 945.6 px; the smoke threshold is under 48 px. This reproduces the history-load jump in Chromium. - #03 Task Board: the status menu changes the Task through Done and the no-cache API confirms the persisted state. After a page reload, the Board does not show that Task in the Done column within 15 seconds. Both checks stay strict in the final suite. The screenshots will be attached with the final report.
Author
Owner

The completed focused matrix adds these results:

  • #01 Composer batch: WebKit saved all three Journal entries and showed them in Agenda, but the Calendar Day view did not render “Smoke webkit-01 batch one” within 15 seconds.
  • #02 Agenda scroll: after the seeded Log appears in the Calendar API, WebKit does not show the 14-day history boundary after the User selects More days.
  • #03 Task Board: Chromium confirms each status in the no-cache Tasks API, but the persisted Done Task is missing from the Done lane after reload. WebKit does not persist the keyboard status change within 15 seconds.
  • #13 Photos: Chromium and WebKit both fail to find the uploaded extensionless HEIC in the Photos timeline after 60 seconds.

Tab Bar passed its shared-size and selected-label checks in both engines. The full smoke run will report every flow and engine.

The completed focused matrix adds these results: - #01 Composer batch: WebKit saved all three Journal entries and showed them in Agenda, but the Calendar Day view did not render “Smoke webkit-01 batch one” within 15 seconds. - #02 Agenda scroll: after the seeded Log appears in the Calendar API, WebKit does not show the 14-day history boundary after the User selects More days. - #03 Task Board: Chromium confirms each status in the no-cache Tasks API, but the persisted Done Task is missing from the Done lane after reload. WebKit does not persist the keyboard status change within 15 seconds. - #13 Photos: Chromium and WebKit both fail to find the uploaded extensionless HEIC in the Photos timeline after 60 seconds. Tab Bar passed its shared-size and selected-label checks in both engines. The full smoke run will report every flow and engine.
Author
Owner

Production smoke finding for #04 Money import: Chromium uploaded the full generated archive through the throttled proxy (15,055,637 bytes observed). After 30 seconds, import remained at “Aggregating Actual source totals · 189,440 of 560,000 transactions” and never reached the review dialog. The flow fails with #1121 and keeps the real progress check intact.

Production smoke finding for #04 Money import: Chromium uploaded the full generated archive through the throttled proxy (15,055,637 bytes observed). After 30 seconds, import remained at “Aggregating Actual source totals · 189,440 of 560,000 transactions” and never reached the review dialog. The flow fails with #1121 and keeps the real progress check intact.
Author
Owner

The first unfiltered run stopped in WebKit after flow #05, before the runner could print its full table. Flow #06's Draw UI creates a blob: preview; the shared routeCurrentBuild handler attempted route.fetch() for that browser-owned URL, and Playwright failed with Protocol "blob:" not supported. I added an HTTP(S)-only route matcher and scoped the Drawing open action to its dedicated preview button. I will rerun the complete matrix after this fix.

The first unfiltered run stopped in WebKit after flow #05, before the runner could print its full table. Flow #06's Draw UI creates a `blob:` preview; the shared `routeCurrentBuild` handler attempted `route.fetch()` for that browser-owned URL, and Playwright failed with `Protocol "blob:" not supported`. I added an HTTP(S)-only route matcher and scoped the Drawing open action to its dedicated preview button. I will rerun the complete matrix after this fix.
Author
Owner

Finished — Forgejo #1122

Branch: job/smoke-1122
Head: 961eed317ab50348e6206b7f1097cc7e1cca3fbb
READY FOR MERGE: no. The complete suite found production-flow failures, and bun run check stops on an existing perf-lint exception in app-sidebar.svelte.

What I built

  • Added 15 production browser flows under apps/web/e2e/smoke/, with a real local server, production web build, realistic disposable data, Chromium and WebKit, Mac platform emulation, and screenshots at 390×844, 820×900 and 1440×900 in light and dark themes.
  • Added a streaming upload proxy capped at 2 MiB/s with 80 ms added latency. The deterministic Actual generator creates a 560,000-transaction archive of about 15 MB without real User data.
  • Added the root bun run test:smoke command and deploy/smoke-gate.sh <server-binary>. The normal runner executes all flows and exits non-zero if any flow fails; CALTERNAL_SMOKE_FLOWS is available for focused diagnosis.
  • Updated apps/web/e2e/harness.mjs so browser-owned blob: URLs bypass HTTP interception. The Drawing flow scopes its Open action to the preview button. Added a failure screenshot at the App Update stale-notice assertion.

Files: apps/web/e2e/smoke/01-composer-batch.mjs through 15-app-update.mjs, flow-utils.mjs, harness.mjs, run.mjs, generate-actual-fixture.py; apps/web/e2e/harness.mjs; apps/web/e2e/app-update-1059.mjs; deploy/smoke-gate.sh; root package.json.

Full-suite result

The complete run took 1,423 seconds (23m 43s), within the 25-minute target. The runner returned exit code 1 because it preserves and reports failed flows. Output:

SMOKE RESULTS
  PASS Chromium 36653 ms
  FAIL WebKit 45664 ms — waitFor: Timeout 15000ms exceeded.
FAIL 01-composer-batch 82317 ms — WebKit: waitFor: Timeout 15000ms exceeded.
  FAIL Chromium 52746 ms — waitFor: Timeout 15000ms exceeded.
  FAIL WebKit 86353 ms — waitFor: Timeout 15000ms exceeded.
FAIL 02-agenda-scroll 139099 ms — Chromium: waitFor: Timeout 15000ms exceeded.
  FAIL Chromium 40590 ms — waitFor: Timeout 15000ms exceeded.
  FAIL WebKit 40374 ms — waitFor: Timeout 15000ms exceeded.
FAIL 03-task-board 80964 ms — Chromium: waitFor: Timeout 15000ms exceeded.
  FAIL Chromium 57815 ms — #1121: the 15 MB Actual import did not reach review in 30 s (received 15055637 bytes; status: Aggregating Actual source totals · 114,688 of 560,000 transactions)
  FAIL WebKit 64254 ms — #1121: the 15 MB Actual import did not reach review in 30 s (received 15055635 bytes; status: Aggregating Actual source totals · 136,192 of 560,000 transactions)
FAIL 04-money-actual 122069 ms — Chromium: #1121: the 15 MB Actual import did not reach review in 30 s (received 15055637 bytes; status: Aggregating Actual source totals · 114,688 of 560,000 transactions) | WebKit: #1121: the 15 MB Actual import did not reach review in 30 s (received 15055635 bytes; status: Aggregating Actual source totals · 136,192 of 560,000 transactions)
  PASS Chromium 40707 ms
  PASS WebKit 22291 ms
PASS 05-note-paste-image 62998 ms
  FAIL Chromium 59055 ms — #1102: production Draw could not save the Drawing: The Draw could not be saved. Your drawing is still here; try again.
  FAIL WebKit 60288 ms — waitFor: Timeout 20000ms exceeded.
FAIL 06-drawing-insert 119343 ms — Chromium: #1102: production Draw could not save the Drawing: The Draw could not be saved. Your drawing is still here; try again. | WebKit: waitFor: Timeout 20000ms exceeded.
  PASS Chromium 47094 ms
  PASS WebKit 25884 ms
PASS 07-share-note 72978 ms
  PASS Chromium 23874 ms
  PASS WebKit 13789 ms
PASS 08-mail-columns 37663 ms
  FAIL Chromium 30752 ms — the result label has at least 4.5:1 text contrast
  PASS WebKit 15931 ms
FAIL 09-search-result 46683 ms — Chromium: the result label has at least 4.5:1 text contrast
  FAIL Chromium 31521 ms — the anchored phone sheet keeps its Apps & Devices title while scrolling
  PASS WebKit 36381 ms
FAIL 10-settings-devices 67902 ms — Chromium: the anchored phone sheet keeps its Apps & Devices title while scrolling
  PASS Chromium 21291 ms
  PASS WebKit 23753 ms
PASS 11-tab-bar 45044 ms
  PASS Chromium 68701 ms
  PASS WebKit 48247 ms
PASS 12-files-upload 116948 ms
  FAIL Chromium 49391 ms — Photos indexes the extensionless HEIC in its timeline did not reach its expected state within 30000 ms
  FAIL WebKit 38916 ms — Photos indexes the extensionless HEIC in its timeline did not reach its expected state within 30000 ms
FAIL 13-photos-heic 88307 ms — Chromium: Photos indexes the extensionless HEIC in its timeline did not reach its expected state within 30000 ms | WebKit: Photos indexes the extensionless HEIC in its timeline did not reach its expected state within 30000 ms
  FAIL Chromium 21501 ms — Tag rename/merge has no visible Undo action in the production UI; the smoke flow cannot verify the requested Undo affordance.
  FAIL WebKit 26953 ms — Tag rename/merge has no visible Undo action in the production UI; the smoke flow cannot verify the requested Undo affordance.
FAIL 14-tag-actions 48454 ms — Chromium: Tag rename/merge has no visible Undo action in the production UI; the smoke flow cannot verify the requested Undo affordance. | WebKit: Tag rename/merge has no visible Undo action in the production UI; the smoke flow cannot verify the requested Undo affordance.
  FAIL WebKit 45174 ms — #1059: the stale-build update flow clears the reload notice after the production refresh
FAIL 15-app-update 45174 ms — WebKit: #1059: the stale-build update flow clears the reload notice after the production refresh
TOTAL 1423 s; upload proxy 2 MiB/s + 80 ms; screenshots /home/kayg/Developer/calternal-wt/smoke-1122/artifacts/smoke

The full run's App Update result came from a stale local server binary: its build ID was 0582c41e0b6ce4a1f2807de0e527ffc899bcb68a, while the production web build was 05e0ecb863eb5139638f94ab43f1650223934b0e. After rebuilding calternal-server from this head, the focused App Update flow passed in 75,222 ms and captured all 18 responsive/theme screenshots:

BUILD_IDS old=0000000 current=05e0ecb863eb5139638f94ab43f1650223934b0e
REPLAY previous Log=201 Event=201
LONG_PULL {"oldRequests":131,"latestRequests":20}
SCREENSHOTS phone-390-light
SCREENSHOTS phone-390-dark
SCREENSHOTS tablet-820-light
SCREENSHOTS tablet-820-dark
SCREENSHOTS desktop-1440-light
SCREENSHOTS desktop-1440-dark
PASS 15-app-update [WebKit] 75222 ms
SMOKE RESULTS
PASS 15-app-update 75222 ms
TOTAL 167 s; upload proxy 2 MiB/s + 80 ms; screenshots /home/kayg/Developer/calternal-wt/smoke-1122/artifacts/smoke

Other gates

cargo fmt --check passed with no output. cargo build -p calternal-server passed after refreshing the build ID. bash -n deploy/smoke-gate.sh passed with no output. No Rust source changed, so Rust clippy/test gates were not run.

bun run check returned exit code 2. Verbatim output:

$ ../../scripts/perf-lint --check && node scripts/check-user-storage.mjs && node scripts/check-glass-tokens.mjs && node scripts/check-type-tokens.mjs && node scripts/check-focus-tokens.mjs && node scripts/check-motion-tokens.mjs && svelte-kit sync && svelte-check --tsconfig ./tsconfig.json
perf-lint: parse Rust product sources
perf-lint: parse browser product sources
perf-lint: validate coverage and architecture
perf-lint: INVALID: ('render.bound', 'apps/web/src/lib/components/app-sidebar.svelte', 'apps/web/src/lib/components/app-sidebar.svelte#each:10a1aaf3137a2426:1'): unused or changed exception

UX gaps

UX gaps closed: the suite exercises real primary actions and state persistence in the covered flows, keeps known-bug cases as hard failures, and captures the Mac rendering across the three widths and two themes. No production UI code changed.

UX gaps left: the full run found Composer batch visibility in WebKit; Agenda targets missing in both engines; Board Done cards missing in both engines; Actual import #1121 stuck while aggregating after the complete upload; Drawing save #1102 in Chromium and missing Canvas preview in WebKit; Search result contrast below 4.5:1 in Chromium; the Apps & Devices phone sheet title not staying visible in Chromium; extensionless HEIC indexing in both engines; and no visible Tag Undo in either engine. The focused App Update rerun passed with a current matching server. The whole matrix should be rerun on a matching server during the merge round.

Decisions not covered by DESIGN.md

  • Reuse the production E2E harness and the real local server, with one seeded User shared by Chromium and WebKit.
  • Keep all generated files below target/tmp; generate the 560,000-row Actual archive from invented deterministic values.
  • Capture six Mac-profile screenshot states per regular flow (three widths × two themes); the dedicated App Update flow keeps its existing WebKit touch path.
  • Keep a focused-flow environment variable for diagnosis while leaving the default command unfiltered.

Screenshot bundles

01 Composer batch · 02 Agenda scroll · 03 Task Board · 04 Money Actual · 05 Note paste image · 06 Drawing insert · 07 Share Note · 08 Mail columns · 09 Search result · 10 Settings devices · 11 Tab Bar · 12 Files upload · 13 Photos HEIC · 14 Tag actions · 15 App Update

## Finished — Forgejo #1122 Branch: `job/smoke-1122` Head: `961eed317ab50348e6206b7f1097cc7e1cca3fbb` READY FOR MERGE: **no**. The complete suite found production-flow failures, and `bun run check` stops on an existing perf-lint exception in `app-sidebar.svelte`. ### What I built - Added 15 production browser flows under `apps/web/e2e/smoke/`, with a real local server, production web build, realistic disposable data, Chromium and WebKit, Mac platform emulation, and screenshots at 390×844, 820×900 and 1440×900 in light and dark themes. - Added a streaming upload proxy capped at 2 MiB/s with 80 ms added latency. The deterministic Actual generator creates a 560,000-transaction archive of about 15 MB without real User data. - Added the root `bun run test:smoke` command and `deploy/smoke-gate.sh <server-binary>`. The normal runner executes all flows and exits non-zero if any flow fails; `CALTERNAL_SMOKE_FLOWS` is available for focused diagnosis. - Updated `apps/web/e2e/harness.mjs` so browser-owned `blob:` URLs bypass HTTP interception. The Drawing flow scopes its Open action to the preview button. Added a failure screenshot at the App Update stale-notice assertion. Files: `apps/web/e2e/smoke/01-composer-batch.mjs` through `15-app-update.mjs`, `flow-utils.mjs`, `harness.mjs`, `run.mjs`, `generate-actual-fixture.py`; `apps/web/e2e/harness.mjs`; `apps/web/e2e/app-update-1059.mjs`; `deploy/smoke-gate.sh`; root `package.json`. ### Full-suite result The complete run took 1,423 seconds (23m 43s), within the 25-minute target. The runner returned exit code 1 because it preserves and reports failed flows. Output: ```text SMOKE RESULTS PASS Chromium 36653 ms FAIL WebKit 45664 ms — waitFor: Timeout 15000ms exceeded. FAIL 01-composer-batch 82317 ms — WebKit: waitFor: Timeout 15000ms exceeded. FAIL Chromium 52746 ms — waitFor: Timeout 15000ms exceeded. FAIL WebKit 86353 ms — waitFor: Timeout 15000ms exceeded. FAIL 02-agenda-scroll 139099 ms — Chromium: waitFor: Timeout 15000ms exceeded. FAIL Chromium 40590 ms — waitFor: Timeout 15000ms exceeded. FAIL WebKit 40374 ms — waitFor: Timeout 15000ms exceeded. FAIL 03-task-board 80964 ms — Chromium: waitFor: Timeout 15000ms exceeded. FAIL Chromium 57815 ms — #1121: the 15 MB Actual import did not reach review in 30 s (received 15055637 bytes; status: Aggregating Actual source totals · 114,688 of 560,000 transactions) FAIL WebKit 64254 ms — #1121: the 15 MB Actual import did not reach review in 30 s (received 15055635 bytes; status: Aggregating Actual source totals · 136,192 of 560,000 transactions) FAIL 04-money-actual 122069 ms — Chromium: #1121: the 15 MB Actual import did not reach review in 30 s (received 15055637 bytes; status: Aggregating Actual source totals · 114,688 of 560,000 transactions) | WebKit: #1121: the 15 MB Actual import did not reach review in 30 s (received 15055635 bytes; status: Aggregating Actual source totals · 136,192 of 560,000 transactions) PASS Chromium 40707 ms PASS WebKit 22291 ms PASS 05-note-paste-image 62998 ms FAIL Chromium 59055 ms — #1102: production Draw could not save the Drawing: The Draw could not be saved. Your drawing is still here; try again. FAIL WebKit 60288 ms — waitFor: Timeout 20000ms exceeded. FAIL 06-drawing-insert 119343 ms — Chromium: #1102: production Draw could not save the Drawing: The Draw could not be saved. Your drawing is still here; try again. | WebKit: waitFor: Timeout 20000ms exceeded. PASS Chromium 47094 ms PASS WebKit 25884 ms PASS 07-share-note 72978 ms PASS Chromium 23874 ms PASS WebKit 13789 ms PASS 08-mail-columns 37663 ms FAIL Chromium 30752 ms — the result label has at least 4.5:1 text contrast PASS WebKit 15931 ms FAIL 09-search-result 46683 ms — Chromium: the result label has at least 4.5:1 text contrast FAIL Chromium 31521 ms — the anchored phone sheet keeps its Apps & Devices title while scrolling PASS WebKit 36381 ms FAIL 10-settings-devices 67902 ms — Chromium: the anchored phone sheet keeps its Apps & Devices title while scrolling PASS Chromium 21291 ms PASS WebKit 23753 ms PASS 11-tab-bar 45044 ms PASS Chromium 68701 ms PASS WebKit 48247 ms PASS 12-files-upload 116948 ms FAIL Chromium 49391 ms — Photos indexes the extensionless HEIC in its timeline did not reach its expected state within 30000 ms FAIL WebKit 38916 ms — Photos indexes the extensionless HEIC in its timeline did not reach its expected state within 30000 ms FAIL 13-photos-heic 88307 ms — Chromium: Photos indexes the extensionless HEIC in its timeline did not reach its expected state within 30000 ms | WebKit: Photos indexes the extensionless HEIC in its timeline did not reach its expected state within 30000 ms FAIL Chromium 21501 ms — Tag rename/merge has no visible Undo action in the production UI; the smoke flow cannot verify the requested Undo affordance. FAIL WebKit 26953 ms — Tag rename/merge has no visible Undo action in the production UI; the smoke flow cannot verify the requested Undo affordance. FAIL 14-tag-actions 48454 ms — Chromium: Tag rename/merge has no visible Undo action in the production UI; the smoke flow cannot verify the requested Undo affordance. | WebKit: Tag rename/merge has no visible Undo action in the production UI; the smoke flow cannot verify the requested Undo affordance. FAIL WebKit 45174 ms — #1059: the stale-build update flow clears the reload notice after the production refresh FAIL 15-app-update 45174 ms — WebKit: #1059: the stale-build update flow clears the reload notice after the production refresh TOTAL 1423 s; upload proxy 2 MiB/s + 80 ms; screenshots /home/kayg/Developer/calternal-wt/smoke-1122/artifacts/smoke ``` The full run's App Update result came from a stale local server binary: its build ID was `0582c41e0b6ce4a1f2807de0e527ffc899bcb68a`, while the production web build was `05e0ecb863eb5139638f94ab43f1650223934b0e`. After rebuilding `calternal-server` from this head, the focused App Update flow passed in 75,222 ms and captured all 18 responsive/theme screenshots: ```text BUILD_IDS old=0000000 current=05e0ecb863eb5139638f94ab43f1650223934b0e REPLAY previous Log=201 Event=201 LONG_PULL {"oldRequests":131,"latestRequests":20} SCREENSHOTS phone-390-light SCREENSHOTS phone-390-dark SCREENSHOTS tablet-820-light SCREENSHOTS tablet-820-dark SCREENSHOTS desktop-1440-light SCREENSHOTS desktop-1440-dark PASS 15-app-update [WebKit] 75222 ms SMOKE RESULTS PASS 15-app-update 75222 ms TOTAL 167 s; upload proxy 2 MiB/s + 80 ms; screenshots /home/kayg/Developer/calternal-wt/smoke-1122/artifacts/smoke ``` ### Other gates `cargo fmt --check` passed with no output. `cargo build -p calternal-server` passed after refreshing the build ID. `bash -n deploy/smoke-gate.sh` passed with no output. No Rust source changed, so Rust clippy/test gates were not run. `bun run check` returned exit code 2. Verbatim output: ```text $ ../../scripts/perf-lint --check && node scripts/check-user-storage.mjs && node scripts/check-glass-tokens.mjs && node scripts/check-type-tokens.mjs && node scripts/check-focus-tokens.mjs && node scripts/check-motion-tokens.mjs && svelte-kit sync && svelte-check --tsconfig ./tsconfig.json perf-lint: parse Rust product sources perf-lint: parse browser product sources perf-lint: validate coverage and architecture perf-lint: INVALID: ('render.bound', 'apps/web/src/lib/components/app-sidebar.svelte', 'apps/web/src/lib/components/app-sidebar.svelte#each:10a1aaf3137a2426:1'): unused or changed exception ``` ### UX gaps UX gaps closed: the suite exercises real primary actions and state persistence in the covered flows, keeps known-bug cases as hard failures, and captures the Mac rendering across the three widths and two themes. No production UI code changed. UX gaps left: the full run found Composer batch visibility in WebKit; Agenda targets missing in both engines; Board Done cards missing in both engines; Actual import #1121 stuck while aggregating after the complete upload; Drawing save #1102 in Chromium and missing Canvas preview in WebKit; Search result contrast below 4.5:1 in Chromium; the Apps & Devices phone sheet title not staying visible in Chromium; extensionless HEIC indexing in both engines; and no visible Tag Undo in either engine. The focused App Update rerun passed with a current matching server. The whole matrix should be rerun on a matching server during the merge round. ### Decisions not covered by DESIGN.md - Reuse the production E2E harness and the real local server, with one seeded User shared by Chromium and WebKit. - Keep all generated files below `target/tmp`; generate the 560,000-row Actual archive from invented deterministic values. - Capture six Mac-profile screenshot states per regular flow (three widths × two themes); the dedicated App Update flow keeps its existing WebKit touch path. - Keep a focused-flow environment variable for diagnosis while leaving the default command unfiltered. ### Screenshot bundles [01 Composer batch](https://git.kayg.org/attachments/6e6ccced-7e9a-4e2b-97db-13fb1faaba93) · [02 Agenda scroll](https://git.kayg.org/attachments/b576cdaf-0181-45e7-8ca7-39be4930c0b4) · [03 Task Board](https://git.kayg.org/attachments/0278c2e2-bfdd-4170-92c2-c33b9c8a9e18) · [04 Money Actual](https://git.kayg.org/attachments/bece17b6-ea19-4042-a060-e217c39c6817) · [05 Note paste image](https://git.kayg.org/attachments/ebcb8cec-ad29-4300-b886-a3c72de1e242) · [06 Drawing insert](https://git.kayg.org/attachments/cfcba5f2-c7d3-4979-a5b0-47f94dfeb110) · [07 Share Note](https://git.kayg.org/attachments/0d94dd9b-7523-49a5-890e-9113dad013e6) · [08 Mail columns](https://git.kayg.org/attachments/7bbf077a-7350-43f1-b200-14d46503671e) · [09 Search result](https://git.kayg.org/attachments/e000c10e-da27-48e7-b3c1-61bf681ca1a1) · [10 Settings devices](https://git.kayg.org/attachments/fc9e82b9-6250-41cc-b89f-21c072a0a938) · [11 Tab Bar](https://git.kayg.org/attachments/2a50daf2-c48f-4ecf-92de-d7f36f0d3668) · [12 Files upload](https://git.kayg.org/attachments/71d44385-8324-41b7-b5d3-b4dcfc4cc45b) · [13 Photos HEIC](https://git.kayg.org/attachments/810f20c5-6d41-4880-ba30-d440c20c5862) · [14 Tag actions](https://git.kayg.org/attachments/325a2992-90f5-4862-82a8-83815cf63e99) · [15 App Update](https://git.kayg.org/attachments/3913686a-0cff-4896-b028-68cac3d653a9)
Author
Owner

Started merge round 31 on job/merge31, base ff53d7b8b4. Will merge the 14 named branches in order, preserve both ModeHeader changes, refresh exact perf source pins, and run the requested gates. No push, deploy, adversarial matrix or e2e sweep.

Started merge round 31 on job/merge31, base ff53d7b8b4da5a21f862d57dcc3496f8c019f647. Will merge the 14 named branches in order, preserve both ModeHeader changes, refresh exact perf source pins, and run the requested gates. No push, deploy, adversarial matrix or e2e sweep.
Author
Owner

All 14 branches merged in the requested order; origin/dev fetched and already included. Resolved shared StatusPill to retain inline live feedback and compact size, kept both Money wizard progress and summary metrics through shared MetricCard, retained both Search regression groups, and combined Hidden item presentation with shared Task Card props. ModeHeader retains bounded sidebar blur and separator fade. Notifications migration 0008 collided with the existing Money completion migration: preserved 0008_money_import and assigned new toast-category/cleanup/clear-Undo migrations 0009/0010/0011. Gates are running; exact source pins still being reconciled.

All 14 branches merged in the requested order; origin/dev fetched and already included. Resolved shared StatusPill to retain inline live feedback and compact size, kept both Money wizard progress and summary metrics through shared MetricCard, retained both Search regression groups, and combined Hidden item presentation with shared Task Card props. ModeHeader retains bounded sidebar blur and separator fade. Notifications migration 0008 collided with the existing Money completion migration: preserved 0008_money_import and assigned new toast-category/cleanup/clear-Undo migrations 0009/0010/0011. Gates are running; exact source pins still being reconciled.
Author
Owner

Gate finding: the combined #1190 design guard rejected two #1153 Show hidden native buttons, a Task Card opacity override, and the changed accessible name of an existing Calendar drag row. Replaced the two actions with shared Pill, added shared Card dimmed with a token and regression test, and documented the existing grid-row behavior exception. Focused MetricCard/StatusPill tests passed (3 files, 9 tests). Web production build passed. Rust dependency compilation continues.

Gate finding: the combined #1190 design guard rejected two #1153 Show hidden native buttons, a Task Card opacity override, and the changed accessible name of an existing Calendar drag row. Replaced the two actions with shared Pill, added shared Card dimmed with a token and regression test, and documented the existing grid-row behavior exception. Focused MetricCard/StatusPill tests passed (3 files, 9 tests). Web production build passed. Rust dependency compilation continues.
Author
Owner

Latest gates: production web build exit 0; focused integration suite: Test Files 4 passed (4), Tests 12 passed (12); bun run check exit 0 with svelte-check found 0 errors and 1 warning in 1 file. The merged exact performance ledger was refreshed with scripts/perf-lint --adopt-7c; bundle budgets and source rules are unchanged. Full Vitest is running with maxWorkers=2; Clippy is still compiling dependencies; cargo test --workspace -- --test-threads=4 is queued behind the same target lock. No e2e or adversarial sweeps are running.

Latest gates: production web build exit 0; focused integration suite: Test Files 4 passed (4), Tests 12 passed (12); bun run check exit 0 with svelte-check found 0 errors and 1 warning in 1 file. The merged exact performance ledger was refreshed with scripts/perf-lint --adopt-7c; bundle budgets and source rules are unchanged. Full Vitest is running with maxWorkers=2; Clippy is still compiling dependencies; cargo test --workspace -- --test-threads=4 is queued behind the same target lock. No e2e or adversarial sweeps are running.
Author
Owner

Full web suite passed with maxWorkers=2: Test Files 287 passed (287); Tests 2032 passed (2032); Duration 397.26s. The Money review now combines #1179 six grouped shared summary cards with #1140 date range/account details; publishing retains live phases. Its focused regression passed: Test Files 2 passed (2), Tests 11 passed (11). Latest source pins: perf-lint: PASS; 0 violations; 22548 scoped exceptions. Final web rebuild/check running. Rust gates still compiling dependencies.

Full web suite passed with maxWorkers=2: Test Files 287 passed (287); Tests 2032 passed (2032); Duration 397.26s. The Money review now combines #1179 six grouped shared summary cards with #1140 date range/account details; publishing retains live phases. Its focused regression passed: Test Files 2 passed (2), Tests 11 passed (11). Latest source pins: perf-lint: PASS; 0 violations; 22548 scoped exceptions. Final web rebuild/check running. Rust gates still compiling dependencies.
Author
Owner

Final web verification is complete: bun run build exit 0; bun run check exit 0 (svelte-check found 0 errors and 1 warning in 1 file); full web suite 287 files / 2032 tests passed. Corrected the optional account-check test type in separate commit e0d77a5e7; the focused fixture suite also passed (4 tests). Rust gates remain active on the shared host; no source errors yet. Working tree is clean.

Final web verification is complete: bun run build exit 0; bun run check exit 0 (svelte-check found 0 errors and 1 warning in 1 file); full web suite 287 files / 2032 tests passed. Corrected the optional account-check test type in separate commit e0d77a5e7; the focused fixture suite also passed (4 tests). Rust gates remain active on the shared host; no source errors yet. Working tree is clean.
Author
Owner

The last integration correction makes compact date values retain wrapping inside narrow MetricCard containers (shared CSS selector; no layout reads). Focused regression passed; committed 6c680c387. Final bun run check passed: svelte-check found 0 errors and 1 warning in 1 file. Running the final full web suite/build at that commit while Rust gates continue. No existing numeric per-site perf limit grew versus ff53d7b8b (comparison found 0 increases); current exact ledger has 22548 entries.

The last integration correction makes compact date values retain wrapping inside narrow MetricCard containers (shared CSS selector; no layout reads). Focused regression passed; committed 6c680c387. Final bun run check passed: svelte-check found 0 errors and 1 warning in 1 file. Running the final full web suite/build at that commit while Rust gates continue. No existing numeric per-site perf limit grew versus ff53d7b8b (comparison found 0 increases); current exact ledger has 22548 entries.
Author
Owner

Rust gate infrastructure finding: Clippy stopped in xmp_toolkit native compilation after the shared sccache service reset a connection: "sccache: caused by: Connection reset by peer (os error 104)". Preserved the failed log. Stopped only this worktree’s queued/test process group and will retry Rust gates with direct CC/CXX and no Rust cache wrapper; no product-code failure has been identified.

Rust gate infrastructure finding: Clippy stopped in xmp_toolkit native compilation after the shared sccache service reset a connection: "sccache: caused by: Connection reset by peer (os error 104)". Preserved the failed log. Stopped only this worktree’s queued/test process group and will retry Rust gates with direct CC/CXX and no Rust cache wrapper; no product-code failure has been identified.
Author
Owner

Source gate finding: #1066 private Search generation regression still called query::search with four arguments; #1153 added show_hidden. Added false to preserve default visibility of the visible fixture and kept all original assertions. Running its focused Rust regression and Clippy. Final full web suite passed: Test Files 287 passed (287); Tests 2034 passed (2034); Duration 835.18s.

Source gate finding: #1066 private Search generation regression still called query::search with four arguments; #1153 added show_hidden. Added false to preserve default visibility of the visible fixture and kept all original assertions. Running its focused Rust regression and Clippy. Final full web suite passed: Test Files 287 passed (287); Tests 2034 passed (2034); Duration 835.18s.
Author
Owner

Search merge fix verified: cargo clippy -p calternal-search --all-targets -- -D warnings passed; private_hits_survive_concurrent_commits_and_overflow_during_rebuild passed with default show_hidden=false and unchanged assertions. Committed the signature/doc correction separately. Running the complete Rust gates again; web build/check and all 2034 web tests passed.

Search merge fix verified: cargo clippy -p calternal-search --all-targets -- -D warnings passed; private_hits_survive_concurrent_commits_and_overflow_during_rebuild passed with default show_hidden=false and unchanged assertions. Committed the signature/doc correction separately. Running the complete Rust gates again; web build/check and all 2034 web tests passed.
Author
Owner

Source gate finding: the #1181 Admin feature-catalog fixture initialized AppState.startup_progress with StartupProgress::ready, but the merged #1156 health state is a router Extension and AppState has no startup field. Removed that stale test-only field and documented the current ownership; all catalog/access assertions remain unchanged. Focused server Clippy/regression queued behind workspace test compilation.

Source gate finding: the #1181 Admin feature-catalog fixture initialized AppState.startup_progress with StartupProgress::ready, but the merged #1156 health state is a router Extension and AppState has no startup field. Removed that stale test-only field and documented the current ownership; all catalog/access assertions remain unchanged. Focused server Clippy/regression queued behind workspace test compilation.
Author
Owner

Rust integration finding: workspace Clippy caught the Feature flag catalog test using the superseded AppState.startup_progress field and StartupProgress::ready constructor. Current startup health uses a router Extension (#1156). Removed only the stale fixture field; catalog assertions are unchanged. The Search merge fix is committed as df07956e6 after focused Clippy and its concurrent rebuild regression passed. Web final gates pass: 287 test files, 2034 tests; check has 0 errors and one existing AttachmentDeck CSS warning; production build compressed 917 static variants. Workspace Rust tests are compiling; the focused server check is queued behind the build lock.

Rust integration finding: workspace Clippy caught the Feature flag catalog test using the superseded AppState.startup_progress field and StartupProgress::ready constructor. Current startup health uses a router Extension (#1156). Removed only the stale fixture field; catalog assertions are unchanged. The Search merge fix is committed as df07956e6 after focused Clippy and its concurrent rebuild regression passed. Web final gates pass: 287 test files, 2034 tests; check has 0 errors and one existing AttachmentDeck CSS warning; production build compressed 917 static variants. Workspace Rust tests are compiling; the focused server check is queued behind the build lock.
Author
Owner

Workspace Rust tests compiled, then stopped at two calternal-collab timing failures. edit_during_timer_flush_is_saved_without_another_edit: session.rs:4894, "edit made during the timer flush was never saved: Elapsed(())" (8-second deadline). external_reconcile_waits_for_a_fresh_live_snapshot_to_persist: session.rs:4774, "external reconcile and its flush completed: Elapsed(())" (5-second deadline). Binary result: 90 passed; 2 failed; finished in 49.55s. No content assertion failed. These are SLOW deadline findings on the loaded host; no deadlines or assertions were changed. The next workspace invocation will use --no-fail-fast to complete all remaining binaries instead of stopping at the first failed binary.

Workspace Rust tests compiled, then stopped at two calternal-collab timing failures. edit_during_timer_flush_is_saved_without_another_edit: session.rs:4894, "edit made during the timer flush was never saved: Elapsed(())" (8-second deadline). external_reconcile_waits_for_a_fresh_live_snapshot_to_persist: session.rs:4774, "external reconcile and its flush completed: Elapsed(())" (5-second deadline). Binary result: 90 passed; 2 failed; finished in 49.55s. No content assertion failed. These are SLOW deadline findings on the loaded host; no deadlines or assertions were changed. The next workspace invocation will use --no-fail-fast to complete all remaining binaries instead of stopping at the first failed binary.
Author
Owner

Server fixture fix committed as 139d4378ef. cargo fmt --check passed. cargo clippy -p calternal-server --all-targets -- -D warnings passed: Finished dev profile [unoptimized + debuginfo] target(s) in 29m 14s (includes the build-lock wait). The focused regression was run from the freshly compiled workspace test binary to avoid compiling a separate feature set: test tests::plugins_returns_admin_feature_flag_catalog ... ok; test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 283 filtered out; finished in 1.07s. Existing catalog assertions were preserved. Final full Clippy and a workspace --no-fail-fast test invocation are running.

Server fixture fix committed as 139d4378ef974c9ea3e253f59cf23c02db2bab73. cargo fmt --check passed. cargo clippy -p calternal-server --all-targets -- -D warnings passed: Finished `dev` profile [unoptimized + debuginfo] target(s) in 29m 14s (includes the build-lock wait). The focused regression was run from the freshly compiled workspace test binary to avoid compiling a separate feature set: test tests::plugins_returns_admin_feature_flag_catalog ... ok; test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 283 filtered out; finished in 1.07s. Existing catalog assertions were preserved. Final full Clippy and a workspace --no-fail-fast test invocation are running.
Author
Owner

Final gate progress at head 139d4378ef: cargo fmt --check PASS; full cargo clippy --all-targets -- -D warnings PASS (Finished dev profile [unoptimized + debuginfo] target(s) in 30.63s); final scripts/perf-lint --check PASS (0 violations; 22548 scoped exceptions). The unchanged collaboration unit binary now passes all 92 tests in 15.90s, so the earlier two Elapsed(()) deadline findings did not repeat. The final cargo test --workspace --no-fail-fast -- --test-threads=4 run has passed Notes (314 tests), Files (260), Notifications, Photos, Mail and the completed Money/Search tests. Search's 3000-file overflow-recovery test is still active; no failures have appeared in this final workspace invocation. All web gates remain passing, including 287 Vitest files / 2034 tests.

Final gate progress at head 139d4378ef974c9ea3e253f59cf23c02db2bab73: cargo fmt --check PASS; full cargo clippy --all-targets -- -D warnings PASS (Finished `dev` profile [unoptimized + debuginfo] target(s) in 30.63s); final scripts/perf-lint --check PASS (0 violations; 22548 scoped exceptions). The unchanged collaboration unit binary now passes all 92 tests in 15.90s, so the earlier two Elapsed(()) deadline findings did not repeat. The final cargo test --workspace --no-fail-fast -- --test-threads=4 run has passed Notes (314 tests), Files (260), Notifications, Photos, Mail and the completed Money/Search tests. Search's 3000-file overflow-recovery test is still active; no failures have appeared in this final workspace invocation. All web gates remain passing, including 287 Vitest files / 2034 tests.
Author
Owner

Head: 139d4378ef
Branch: job/merge31
Base: ff53d7b8b4

Merge round 31 integrates all 14 requested branches in order on job/merge31. origin/dev was fetched once and was already included. No push, deployment, adversarial matrix or e2e sweep ran.

Built: the browser smoke gate; follow-up fixes for Files/Notes and Settings; shared glass controls and metric cards; temporary Feature flags; Search isolation regression coverage; Notifications inline Undo and persistence policy; bounded sidebar blur and Note header status fade; Hidden item support; performance evidence/profiles.

Merge fixes: preserve both StatusPill inline feedback and compact sizing; combine Money summary cards with persistent wizard progress, dates and account checks; use shared Pill for Show hidden and shared Card dimming; retain both Search regression groups; preserve startup helpers and Feature flag tests; keep both ModeHeader changes.

Decisions: Review uses six grouped MetricCards; publishing uses live phase MetricCards. MetricCard owns optional progress/account content with value first and label last. Card owns hidden-item dimming. The existing Calendar drag row has a documented design exception for its extended accessible name. Notifications keeps existing migration 0008_money_import; the new category, cleanup and clear-Undo migrations are 0009, 0010 and 0011. No existing deployed migration was renumbered. Performance source pins were generated by scripts/perf-lint --adopt-7c; existing numeric per-site limits were unchanged and guard rules were not weakened. The ratchet equals the exact live ledger: 22,548 exceptions, down from 22,615 on the base.

UX gaps closed: the two new Show hidden actions now use shared controls; Money keeps the date range and expandable account checks with shared metrics; all imported ModeHeader behavior remains combined; compact dates wrap without runtime layout reads; import progress uses one shared numeric animation and exposes progress state immediately.

Known gaps / for the orchestrator: run the browser smoke suite, visual evidence and adversarial matrices separately, as requested in this job. One existing Svelte warning remains: empty .attachment-row:focus ruleset in packages/ui/src/components/calendar/AttachmentDeck.svelte. This merge job does not add a user-visible operation beyond integrating those branches; the metric work is bounded by six summary cards or the fixed set of import phases plus at most 100 account checks. No new perf VM measurement ran in this merge/gates job.

Files: full merged file inventory is artifacts/merge31/files.txt. Integration fixes are in packages/ui/src/components/{StatusPill,MetricCard,Card,ModeHeader}.svelte, packages/ui/src/tokens.css, packages/ui/README.md, the Money import and Notes/Tasks consumers, Calendar MonthGrid, affected focused tests, the Money profiles, notification migrations/store, server upgrade/startup tests, and generated contracts/API client.

Gate fixes: Search isolation tests now pass the explicit default Hidden visibility argument. The Feature flag catalog test uses the current AppState without the removed startup watch field. Both fixes preserve the existing assertions. Shared native sccache failed with Connection reset by peer; native compilers were used for the retry.

Requested branch order: smoke-1122, fu-1166, fu-1171, settingsreg-1195, pillglass-1189, flags-1181, search-1066, restyle-1190, cards-1179, perf-1124, notifloop-1194, sidebarblur-1208, notestatus-1209, hide-1153. Each has its own --no-ff merge commit.

Timing evidence: the first workspace run stopped at two calternal-collab Elapsed(()) deadlines (8 seconds and 5 seconds). The unchanged 92-test collaboration unit suite passed in 15.90s during the final --no-fail-fast workspace run. The final full Clippy gate passed in 30.63s.

Generated OpenAPI verification: the compiled merged server generated a contract equal to contracts/openapi.json (346 paths). No correction was needed.

Shared controls used: Pill for Show hidden; Card for Hidden task dimming; MetricCard for Money summary and progress; StatusPill for inline feedback; ModeHeader for the combined blur and separator fade. Expected metric cost: six summary cards or the fixed import phases, plus at most 100 account checks. One numeric animation runs per changed metric.

Final gates passed. The Rust workspace command used --no-fail-fast to complete every binary after the earlier timing failures stopped the first run. No assertions or deadlines were weakened. Verbatim output excerpts follow; full logs remain in artifacts/merge31/.

cargo fmt --check

(No output; exit 0.)

cargo clippy --all-targets -- -D warnings

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

cd apps/web && bun install

bun install v1.4.2 (744846f84)
911 packages installed [7.44s]

cd apps/web && bun run build

✓ built in 2m 37s
✓ built in 987ms
✓ built in 4m 56s
Compressed 917 static variants; saved 21486494 bytes.

cd apps/web && bun run check

perf-lint: PASS; 0 violations; 22548 scoped exceptions
svelte-check found 0 errors and 1 warning in 1 file

cd apps/web && bun run test --maxWorkers=2

 Test Files  287 passed (287)
      Tests  2034 passed (2034)
   Duration  835.18s (transform 45%, import 22%, environment 18%, tests 11%, setup 3%)

scripts/perf-lint --check

perf-lint: PASS; 0 violations; 22548 scoped exceptions

cargo test --workspace --no-fail-fast -- --test-threads=4

    Finished `test` profile [unoptimized + debuginfo] target(s) in 2m 24s
     Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/async_imap-40507562faaceecb)
test result: ok. 70 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s
     Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_api-ca50343249628629)
test result: ok. 23 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.09s
     Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_auth-26bcb2d74397eccf)
test result: ok. 135 passed; 0 failed; 3 ignored; 0 measured; 0 filtered out; finished in 104.88s
     Running unittests src/main.rs (/home/kayg/build/targets/merge31/debug/deps/calternal-fb9eab06231eb5ac)
test result: ok. 52 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.89s
     Running tests/output_contract.rs (/home/kayg/build/targets/merge31/debug/deps/output_contract-b8d944a898dde14e)
test result: ok. 17 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.10s
     Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_collab-9e757eed78f87188)
test result: ok. 92 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 15.90s
     Running tests/agent_turn_order.rs (/home/kayg/build/targets/merge31/debug/deps/agent_turn_order-6b766c9a0009ec2c)
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.08s
     Running tests/block_apply_property.rs (/home/kayg/build/targets/merge31/debug/deps/block_apply_property-a8d166fe74a751e2)
test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.51s
     Running tests/canvas_shares.rs (/home/kayg/build/targets/merge31/debug/deps/canvas_shares-bd5640fab05bc72b)
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.37s
     Running tests/cross_language.rs (/home/kayg/build/targets/merge31/debug/deps/cross_language-c4368cdbb8f90881)
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 59.23s
     Running tests/dav_etag.rs (/home/kayg/build/targets/merge31/debug/deps/dav_etag-50265fcb9b46fe6e)
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.81s
     Running tests/history_restore.rs (/home/kayg/build/targets/merge31/debug/deps/history_restore-359e5bb9907765f2)
test result: ok. 15 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.54s
     Running tests/hostile_clients.rs (/home/kayg/build/targets/merge31/debug/deps/hostile_clients-0eb61a64b08bada2)
test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 11.05s
     Running tests/journal_race.rs (/home/kayg/build/targets/merge31/debug/deps/journal_race-0b39f3435fd24e47)
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 10.51s
     Running tests/restart_epoch.rs (/home/kayg/build/targets/merge31/debug/deps/restart_epoch-d6abaf8ab2888b5f)
test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.44s
     Running tests/shared_notes.rs (/home/kayg/build/targets/merge31/debug/deps/shared_notes-a045f3a8096abfb4)
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 11.95s
     Running tests/two_clients.rs (/home/kayg/build/targets/merge31/debug/deps/two_clients-0d1891a9b75b0dae)
test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.72s
     Running tests/untouched_bytes.rs (/home/kayg/build/targets/merge31/debug/deps/untouched_bytes-def7fc3aecd3fbf6)
test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 104.47s
     Running tests/vector_bridge.rs (/home/kayg/build/targets/merge31/debug/deps/vector_bridge-99eaa267ab54fc01)
test result: ok. 15 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.20s
     Running tests/voice_memos_review.rs (/home/kayg/build/targets/merge31/debug/deps/voice_memos_review-b35355d1d59e08b9)
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.17s
     Running tests/wiki_embeds.rs (/home/kayg/build/targets/merge31/debug/deps/wiki_embeds-48b580ad14aed758)
test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 23.31s
     Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_dav-bd6ef2361e098dff)
test result: ok. 61 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 7.49s
     Running tests/apple_replay.rs (/home/kayg/build/targets/merge31/debug/deps/apple_replay-b3e39ed741d76d82)
test result: ok. 38 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.10s
     Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_db-d65ad44dd115f0d9)
test result: ok. 38 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 9.12s
     Running tests/checkpoint.rs (/home/kayg/build/targets/merge31/debug/deps/checkpoint-38e5547bedbfced0)
test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.98s
     Running tests/groups.rs (/home/kayg/build/targets/merge31/debug/deps/groups-fc24a831ffdd366f)
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.14s
     Running tests/mailstress_restart.rs (/home/kayg/build/targets/merge31/debug/deps/mailstress_restart-7975c3911ab25756)
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.22s
     Running tests/mutations.rs (/home/kayg/build/targets/merge31/debug/deps/mutations-2071b1e4837a0a26)
test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.37s
     Running tests/queue.rs (/home/kayg/build/targets/merge31/debug/deps/queue-a7fe6daa9edd82bc)
test result: ok. 21 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 1.12s
     Running tests/sqlite_limits.rs (/home/kayg/build/targets/merge31/debug/deps/sqlite_limits-8ff2028b1cdcaab2)
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s
     Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_embed-2d0ebb9a5a101948)
test result: ok. 43 passed; 0 failed; 5 ignored; 0 measured; 0 filtered out; finished in 38.77s
     Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_fs-08afd700c04158d8)
test result: ok. 98 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 30.97s
     Running tests/legacy_kernel_permissions.rs (/home/kayg/build/targets/merge31/debug/deps/legacy_kernel_permissions-467139e9d1a841a9)
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.21s
     Running tests/private_permissions.rs (/home/kayg/build/targets/merge31/debug/deps/private_permissions-91f4239a646f03c6)
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.04s
     Running tests/storage.rs (/home/kayg/build/targets/merge31/debug/deps/storage-88e523ca95146e13)
test result: ok. 52 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 12.68s
     Running tests/voice_memos_review.rs (/home/kayg/build/targets/merge31/debug/deps/voice_memos_review-5e8ef49242dee736)
test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.08s
     Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_imap-a9439af8e34b7d1c)
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
     Running tests/mail.rs (/home/kayg/build/targets/merge31/debug/deps/mail-003765dca0157a2f)
test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.04s
     Running tests/mailboxes.rs (/home/kayg/build/targets/merge31/debug/deps/mailboxes-f8f398921b0e2994)
test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s
     Running tests/mime.rs (/home/kayg/build/targets/merge31/debug/deps/mime-0ceea22d4ac21481)
test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
     Running tests/projection.rs (/home/kayg/build/targets/merge31/debug/deps/projection-ea2f26ccd06e38c7)
test result: ok. 30 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.24s
     Running tests/session.rs (/home/kayg/build/targets/merge31/debug/deps/session-3230d06c93c25e41)
test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.10s
     Running tests/submission.rs (/home/kayg/build/targets/merge31/debug/deps/submission-0b44547b30878689)
test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s
     Running tests/wire.rs (/home/kayg/build/targets/merge31/debug/deps/wire-5a6df671bf373bc1)
test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
     Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_location-d255027df1fd10ee)
test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
     Running tests/places.rs (/home/kayg/build/targets/merge31/debug/deps/places-f9972808a39f38a2)
test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.50s
     Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_media-ebc4c73accac9ae9)
test result: ok. 24 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
     Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_money-10071d59811f519c)
test result: ok. 16 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s
     Running tests/account_kinds.rs (/home/kayg/build/targets/merge31/debug/deps/account_kinds-3004111b7fcf5d45)
test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.08s
     Running tests/import.rs (/home/kayg/build/targets/merge31/debug/deps/import-0f1cbe697ae2191e)
test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 11.64s
     Running tests/properties.rs (/home/kayg/build/targets/merge31/debug/deps/properties-9ba218fd0775a34f)
test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.64s
     Running tests/ready_to_assign_adjustment.rs (/home/kayg/build/targets/merge31/debug/deps/ready_to_assign_adjustment-e2d2986adaffbd21)
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s
     Running tests/review_984.rs (/home/kayg/build/targets/merge31/debug/deps/review_984-2b7fa578f9b0a4b4)
test result: ok. 4 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 3.34s
     Running tests/vectors.rs (/home/kayg/build/targets/merge31/debug/deps/vectors-0117cefdf2277801)
test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.59s
     Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_notes_core-23cad5e6b3bb7cc5)
test result: ok. 589 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.13s
     Running tests/hide_review_1153.rs (/home/kayg/build/targets/merge31/debug/deps/hide_review_1153-1331c6c7300df6a5)
test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s
     Running tests/log_rewrite.rs (/home/kayg/build/targets/merge31/debug/deps/log_rewrite-35f64f0573596621)
test result: ok. 19 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 8.13s
     Running tests/parser_properties.rs (/home/kayg/build/targets/merge31/debug/deps/parser_properties-b5973e4a74858646)
test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s
     Running tests/unicode_titles.rs (/home/kayg/build/targets/merge31/debug/deps/unicode_titles-42da1068c171d7ac)
test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.75s
     Running tests/vector_parity.rs (/home/kayg/build/targets/merge31/debug/deps/vector_parity-d7b7a853738139e6)
test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.31s
     Running tests/voice_memos_review.rs (/home/kayg/build/targets/merge31/debug/deps/voice_memos_review-481badf590a1f3f2)
test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s
     Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_path-8b57f655dc48c97e)
test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
     Running tests/path_properties.rs (/home/kayg/build/targets/merge31/debug/deps/path_properties-89c5a6015b06dd71)
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
     Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_plugin-6480545125410d95)
test result: ok. 61 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 11.19s
     Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_plugin_ai-9e9a33363d09f2b6)
test result: ok. 24 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.82s
     Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_plugin_analytics-381f6605978b8716)
test result: ok. 34 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.05s
     Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_plugin_calendar-92674d2e8be6e3dd)
test result: ok. 104 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 10.37s
     Running tests/cache.rs (/home/kayg/build/targets/merge31/debug/deps/cache-f29ed7e636585bd7)
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.54s
     Running tests/protocol.rs (/home/kayg/build/targets/merge31/debug/deps/protocol-f61af85e0b4e751e)
test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.31s
     Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_plugin_files-3dd248f4c8cc2280)
test result: ok. 260 passed; 0 failed; 4 ignored; 0 measured; 0 filtered out; finished in 293.07s
     Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_plugin_mail-81e455bc4adbb477)
test result: ok. 128 passed; 0 failed; 6 ignored; 0 measured; 0 filtered out; finished in 25.75s
     Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_plugin_money-cc1de8ff0f66843e)
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 124 filtered out; finished in 37.16s
test result: ok. 123 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 98.05s
     Running tests/import_review.rs (/home/kayg/build/targets/merge31/debug/deps/import_review-a92567b371c1b039)
test result: ok. 27 passed; 0 failed; 3 ignored; 0 measured; 0 filtered out; finished in 8.42s
     Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_plugin_notes-e1b186aebc87513b)
test result: ok. 314 passed; 0 failed; 4 ignored; 0 measured; 0 filtered out; finished in 488.73s
     Running tests/apple_replay.rs (/home/kayg/build/targets/merge31/debug/deps/apple_replay-f9a2a1d4f2a541bb)
test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.01s
     Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_plugin_notifications-8dd04a7deb8e3c89)
test result: ok. 44 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.02s
     Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_plugin_photos-821135b6e442ab1a)
test result: ok. 58 passed; 0 failed; 4 ignored; 0 measured; 0 filtered out; finished in 12.00s
     Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_plugin_video-9d0aff69616d7c6f)
test result: ok. 16 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.60s
     Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_search-6f7e82e3e41b9b30)
test result: ok. 60 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 22.96s
     Running tests/ask_evaluation.rs (/home/kayg/build/targets/merge31/debug/deps/ask_evaluation-41d9057fbefd739f)
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.94s
     Running tests/citations.rs (/home/kayg/build/targets/merge31/debug/deps/citations-9f9973a33b7d63b0)
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s
     Running tests/indexer.rs (/home/kayg/build/targets/merge31/debug/deps/indexer-f8108f168e30a83c)
test result: ok. 29 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 515.87s
     Running tests/operators.rs (/home/kayg/build/targets/merge31/debug/deps/operators-c8c92459ff1b8ee6)
test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
     Running tests/query_properties.rs (/home/kayg/build/targets/merge31/debug/deps/query_properties-ce570cb0a16e55a0)
test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s
     Running tests/relevance.rs (/home/kayg/build/targets/merge31/debug/deps/relevance-42b69a49344db8aa)
test result: ok. 1 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 3.35s
     Running tests/retrieval.rs (/home/kayg/build/targets/merge31/debug/deps/retrieval-c008c0bb594d4493)
test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
     Running unittests src/main.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_server-461a33a6a83778f3)
test result: ok. 272 passed; 0 failed; 12 ignored; 0 measured; 0 filtered out; finished in 215.11s
     Running tests/perf_guards.rs (/home/kayg/build/targets/merge31/debug/deps/perf_guards-7fa6e94ce82e9a6a)
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 36.87s
     Running tests/private_index_permissions.rs (/home/kayg/build/targets/merge31/debug/deps/private_index_permissions-42280df60b77991f)
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 109.78s
     Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_sync-91f30d310aba4f9d)
test result: ok. 60 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.21s
     Running unittests src/bin/calternald.rs (/home/kayg/build/targets/merge31/debug/deps/calternald-7a2670341386e59b)
test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
     Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_tags-23e8cdce206794de)
test result: ok. 51 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 36.56s
   Doc-tests async_imap
test result: ok. 1 passed; 0 failed; 6 ignored; 0 measured; 0 filtered out; finished in 0.10s
   Doc-tests calternal_api
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
   Doc-tests calternal_auth
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
   Doc-tests calternal_collab
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
   Doc-tests calternal_dav
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
   Doc-tests calternal_db
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
   Doc-tests calternal_embed
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
   Doc-tests calternal_fs
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
   Doc-tests calternal_imap
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
   Doc-tests calternal_location
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
   Doc-tests calternal_media
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
   Doc-tests calternal_money
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
   Doc-tests calternal_notes_core
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
   Doc-tests calternal_path
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
   Doc-tests calternal_plugin
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
   Doc-tests calternal_plugin_ai
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
   Doc-tests calternal_plugin_analytics
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
   Doc-tests calternal_plugin_calendar
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
   Doc-tests calternal_plugin_files
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
   Doc-tests calternal_plugin_mail
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
   Doc-tests calternal_plugin_money
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
   Doc-tests calternal_plugin_notes
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
   Doc-tests calternal_plugin_notifications
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
   Doc-tests calternal_plugin_photos
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
   Doc-tests calternal_plugin_video
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
   Doc-tests calternal_search
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
   Doc-tests calternal_sync
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
   Doc-tests calternal_tags
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

Focused regression output (verbatim):

test indexer::tests::private_hits_survive_concurrent_commits_and_overflow_during_rebuild ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 60 filtered out; finished in 13.34s
test tests::plugins_returns_admin_feature_flag_catalog ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 283 filtered out; finished in 1.07s

Known gaps: visual screenshots, browser smoke/e2e sweeps, adversarial matrices and deployment remain with the orchestrator, per this job prompt. No perf VM measurement ran. The existing empty AttachmentDeck .attachment-row:focus ruleset produces one Svelte warning. No new gate failure remains. No push or deployment ran.

Files (merged inventory):

289 files
.forgejo/workflows/ci.yml
.forgejo/workflows/feature-flag-lifecycle.yml
Cargo.lock
apps/web/e2e/analytics-overlay-973.mjs
apps/web/e2e/app-update-1059.mjs
apps/web/e2e/calendar-perf.mjs
apps/web/e2e/feature-flags-1181.mjs
apps/web/e2e/harness.mjs
apps/web/e2e/harness.test.mjs
apps/web/e2e/hide-1153.mjs
apps/web/e2e/money.mjs
apps/web/e2e/notes.mjs
apps/web/e2e/notifications-1194.mjs
apps/web/e2e/photos-perf.mjs
apps/web/e2e/route-perf.mjs
apps/web/e2e/search-scale-palette.mjs
apps/web/e2e/settings-overlay-1195.mjs
apps/web/e2e/sidebar-header-blur-1208.mjs
apps/web/e2e/smoke/01-composer-batch.mjs
apps/web/e2e/smoke/02-agenda-scroll.mjs
apps/web/e2e/smoke/03-task-board.mjs
apps/web/e2e/smoke/04-money-actual.mjs
apps/web/e2e/smoke/05-note-paste-image.mjs
apps/web/e2e/smoke/06-drawing-insert.mjs
apps/web/e2e/smoke/07-share-note.mjs
apps/web/e2e/smoke/08-mail-columns.mjs
apps/web/e2e/smoke/09-search-result.mjs
apps/web/e2e/smoke/10-settings-devices.mjs
apps/web/e2e/smoke/11-tab-bar.mjs
apps/web/e2e/smoke/12-files-upload.mjs
apps/web/e2e/smoke/13-photos-heic.mjs
apps/web/e2e/smoke/14-tag-actions.mjs
apps/web/e2e/smoke/15-app-update.mjs
apps/web/e2e/smoke/flow-utils.mjs
apps/web/e2e/smoke/generate-actual-fixture.py
apps/web/e2e/smoke/harness.mjs
apps/web/e2e/smoke/run.mjs
apps/web/e2e/tags-1110-1111.mjs
apps/web/package.json
apps/web/scripts/design-rules.test.mjs
apps/web/src/calternal-app.css
apps/web/src/lib/calendar/agenda.svelte.test.ts
apps/web/src/lib/calendar/data.test.ts
apps/web/src/lib/calendar/data.ts
apps/web/src/lib/calendar/edits.test.ts
apps/web/src/lib/calendar/edits.ts
apps/web/src/lib/calendar/event-tint.test.ts
apps/web/src/lib/calendar/journal.ts
apps/web/src/lib/canvas/CanvasView.svelte
apps/web/src/lib/canvas/create.ts
apps/web/src/lib/components/Card.svelte.test.ts
apps/web/src/lib/components/ItemActionMenu.svelte
apps/web/src/lib/components/KeyboardShortcutsCard.svelte
apps/web/src/lib/components/MetricCard.svelte.test.ts
apps/web/src/lib/components/NoteList.svelte
apps/web/src/lib/components/NoteList.svelte.test.ts
apps/web/src/lib/components/Pill.svelte.test.ts
apps/web/src/lib/components/StatusPill.svelte.test.ts
apps/web/src/lib/components/TagEditor.svelte
apps/web/src/lib/components/TagRow.svelte
apps/web/src/lib/components/TagRow.svelte.test.ts
apps/web/src/lib/components/analytics/ActivityCard.svelte
apps/web/src/lib/components/analytics/ActivityCard.svelte.test.ts
apps/web/src/lib/components/analytics/HabitsCard.svelte
apps/web/src/lib/components/analytics/widgets/StatRow.svelte
apps/web/src/lib/components/analytics/widgets/StatRow.svelte.test.ts
apps/web/src/lib/components/money/MoneyImport.svelte
apps/web/src/lib/components/money/MoneyImportMetrics.svelte
apps/web/src/lib/components/money/MoneyImportMetrics.svelte.test.ts
apps/web/src/lib/components/money/MonthSwitcher.svelte
apps/web/src/lib/components/search-dialog.svelte
apps/web/src/lib/composer/Composer.svelte
apps/web/src/lib/editor/blockMenu.test.ts
apps/web/src/lib/editor/blockMenu.ts
apps/web/src/lib/editor/format/BlockHoverActions.svelte
apps/web/src/lib/editor/format/BlockHoverActions.svelte.test.ts
apps/web/src/lib/featureFlags.test.ts
apps/web/src/lib/featureFlags.ts
apps/web/src/lib/files/FilesBrowser.svelte
apps/web/src/lib/files/InfoPanel.svelte.test.ts
apps/web/src/lib/files/ShareDialog.svelte
apps/web/src/lib/files/TrashView.svelte
apps/web/src/lib/files/UploadToast.svelte
apps/web/src/lib/files/api.test.ts
apps/web/src/lib/files/api.ts
apps/web/src/lib/files/model.ts
apps/web/src/lib/files/prefs.svelte.test.ts
apps/web/src/lib/files/prefs.svelte.ts
apps/web/src/lib/files/transfer.ts
apps/web/src/lib/mail/MailMorphCard.svelte
apps/web/src/lib/modeHeader.svelte.test.ts
apps/web/src/lib/notes/NoteEditorSurface.svelte
apps/web/src/lib/notes/NoteRoute.svelte
apps/web/src/lib/notes/NoteView.svelte
apps/web/src/lib/notes/NotesExplorer.svelte
apps/web/src/lib/notes/api.ts
apps/web/src/lib/notes/newActions.ts
apps/web/src/lib/notes/noteIndex.svelte.ts
apps/web/src/lib/notes/noteIndex.test.ts
apps/web/src/lib/notes/notes.test.ts
apps/web/src/lib/notes/paths.ts
apps/web/src/lib/notifications/InboxPanel.svelte
apps/web/src/lib/notifications/inbox.svelte.test.ts
apps/web/src/lib/notifications/inbox.svelte.ts
apps/web/src/lib/notifications/model.test.ts
apps/web/src/lib/notifications/model.ts
apps/web/src/lib/photos/PhotoTimeline.svelte
apps/web/src/lib/photos/PhotoViewer.svelte
apps/web/src/lib/photos/PhotosView.svelte
apps/web/src/lib/photos/api.ts
apps/web/src/lib/photos/timeline.svelte.ts
apps/web/src/lib/photos/timeline.test.ts
apps/web/src/lib/search/SearchPreview.svelte
apps/web/src/lib/search/SearchResultRow.svelte
apps/web/src/lib/search/providers.test.ts
apps/web/src/lib/search/providers.ts
apps/web/src/lib/search/registry.ts
apps/web/src/lib/search/saved.svelte.ts
apps/web/src/lib/search/savedUndo.ts
apps/web/src/lib/search/search-units.test.ts
apps/web/src/lib/search/server.ts
apps/web/src/lib/shortcuts/registry.test.ts
apps/web/src/lib/shortcuts/registry.ts
apps/web/src/lib/stores/tagRewrite.svelte.ts
apps/web/src/lib/stores/toast-policy.test.ts
apps/web/src/lib/stores/toasts.svelte.test.ts
apps/web/src/lib/stores/toasts.svelte.ts
apps/web/src/lib/tags/tagResultPresentation.test.ts
apps/web/src/lib/tags/tagResultPresentation.ts
apps/web/src/lib/tasks/TaskCard.svelte
apps/web/src/lib/tasks/TaskColumn.svelte
apps/web/src/lib/tasks/TaskList.svelte
apps/web/src/lib/tasks/TaskList.svelte.test.ts
apps/web/src/lib/tasks/TaskSection.svelte
apps/web/src/lib/tasks/TasksWorkspace.svelte
apps/web/src/lib/tasks/api.test.ts
apps/web/src/lib/tasks/api.ts
apps/web/src/lib/tasks/index.svelte.ts
apps/web/src/lib/themes.test.ts
apps/web/src/lib/tooltip/tooltip.test.ts
apps/web/src/routes/+layout.svelte
apps/web/src/routes/analytics/[period]/[date]/+page.svelte
apps/web/src/routes/calendar/[view]/[date]/+page.svelte
apps/web/src/routes/money/[budget]/[month]/+page.svelte
apps/web/src/routes/money/[budget]/accounts/[[account]]/+page.svelte
apps/web/src/routes/notes/+page.svelte
apps/web/src/routes/settings/[...path]/+page.svelte
apps/web/src/routes/settings/admin/ConfigGroup.svelte
apps/web/src/routes/settings/files/FilesSection.svelte
apps/web/src/routes/settings/parts/AccountList.svelte
apps/web/src/routes/settings/plugins/PluginsSection.svelte
apps/web/src/routes/settings/sections.test.ts
apps/web/src/routes/settings/sections.ts
apps/web/src/routes/tag/[tag]/+page.svelte
bench/feature-flags-1181.mjs
bench/hidden-1153.mjs
bench/money-import-462.mjs
bench/money-import-actual-462.mjs
bench/money-import-actual-fixture.py
bench/notes-editor-series.mjs
bench/notifications-inbox-1194.mjs
bench/settings-shortcut.mjs
bench/tag-results-1166.mjs
contracts/action-authority.json
contracts/action-policy.json
contracts/actions.json
contracts/feature-flags.json
contracts/openapi.json
contracts/perf/adoption-1058.json
contracts/perf/exceptions.json
contracts/perf/ratchet.json
contracts/perf/registry.json
crates/calternal-api/src/lib.rs
crates/calternal-dav/src/reminders.rs
crates/calternal-dav/tests/apple_replay.rs
crates/calternal-fs/src/file_ops.rs
crates/calternal-fs/src/lib.rs
crates/calternal-notes-core/src/canvas.rs
crates/calternal-notes-core/src/dayfile.rs
crates/calternal-notes-core/src/frontmatter.rs
crates/calternal-notes-core/src/lib.rs
crates/calternal-notes-core/src/links.rs
crates/calternal-notes-core/src/notes_index.rs
crates/calternal-notes-core/src/tasks/extract.rs
crates/calternal-notes-core/src/tasks/frontmatter.rs
crates/calternal-notes-core/src/tasks/line.rs
crates/calternal-notes-core/src/tasks/mod.rs
crates/calternal-notes-core/src/tasks/model.rs
crates/calternal-notes-core/tests/hide_review_1153.rs
crates/calternal-plugin/migrations/0003_feature_flag_state.sql
crates/calternal-plugin/src/feature_flag_admin.rs
crates/calternal-plugin/src/feature_flags.rs
crates/calternal-plugin/src/lib.rs
crates/calternal-plugin/src/state.rs
crates/calternal-plugin/src/user_settings.rs
crates/calternal-search/src/index.rs
crates/calternal-search/src/indexer.rs
crates/calternal-search/src/operators.rs
crates/calternal-search/src/plugin.rs
crates/calternal-search/src/query.rs
crates/calternal-search/src/semantic.rs
crates/calternal-search/tests/indexer.rs
crates/calternal-search/tests/operators.rs
crates/calternal-server/src/main.rs
crates/calternal-server/src/upgrade_tests.rs
crates/calternal-server/src/wire.rs
crates/calternal-tags/Cargo.toml
crates/calternal-tags/src/index.rs
crates/calternal-tags/src/lib.rs
crates/calternal-tags/src/source.rs
crates/plugins/calendar/src/client/mod.rs
crates/plugins/calendar/src/view.rs
crates/plugins/files/src/dav.rs
crates/plugins/files/src/lib.rs
crates/plugins/files/src/listing.rs
crates/plugins/files/src/lookup.rs
crates/plugins/files/src/preferences.rs
crates/plugins/files/src/shares.rs
crates/plugins/notes/migrations/0036_note_visibility.sql
crates/plugins/notes/migrations/0037_user_hidden_items.sql
crates/plugins/notes/src/lib.rs
crates/plugins/notes/src/reminders_tests.rs
crates/plugins/notes/src/store.rs
crates/plugins/notes/src/tasks_api.rs
crates/plugins/notes/src/tasks_store.rs
crates/plugins/notifications/migrations/0009_toast_category_ids.sql
crates/plugins/notifications/migrations/0010_cleanup_notification_management_toasts.sql
crates/plugins/notifications/migrations/0011_inbox_clear_undo.sql
crates/plugins/notifications/src/routes.rs
crates/plugins/notifications/src/store.rs
crates/plugins/photos/Cargo.toml
crates/plugins/photos/src/routes.rs
crates/plugins/photos/src/search.rs
deploy/smoke-gate.sh
docs/DESIGN.md
docs/perf/2026-10-06-1124.md
docs/perf/baseline.json
docs/perf/runs/2026-10-06-1124-actual-import-ab.json
docs/perf/runs/2026-10-06-1124-actual-import-budget-month-hdd.json
docs/perf/runs/2026-10-06-1124-actual-import-flamegraph.json
docs/perf/runs/2026-10-06-1124-actual-import-initial.json
docs/perf/runs/2026-10-06-1124-actual-import-profile.json
docs/perf/runs/2026-10-06-1124-calendar-1440.chrome-trace.json.gz
docs/perf/runs/2026-10-06-1124-calendar-month-1440.chrome-trace.json.gz
docs/perf/runs/2026-10-06-1124-calendar-week-month.json
docs/perf/runs/2026-10-06-1124-files-route-cold.json
docs/perf/runs/2026-10-06-1124-hdd-q1.json
docs/perf/runs/2026-10-06-1124-hdd-q16.json
docs/perf/runs/2026-10-06-1124-hdd-qualification.json
docs/perf/runs/2026-10-06-1124-photos-home.json
docs/perf/runs/2026-10-06-1124-photos-scroll-ab.json
docs/perf/runs/2026-10-06-1124-photos-scroll-baseline.chrome-trace.json.gz
docs/perf/runs/2026-10-06-1124-photos-scroll-candidate.chrome-trace.json.gz
docs/perf/runs/2026-10-06-1124-route-warm-failure.json
package.json
packages/api-client/src/generated.ts
packages/editor/src/extensions.dragHandle.test.ts
packages/editor/src/extensions.ts
packages/ui/README.md
packages/ui/src/components/Card.svelte
packages/ui/src/components/CopyLink.svelte
packages/ui/src/components/Inspector.svelte
packages/ui/src/components/MetricCard.svelte
packages/ui/src/components/ModeHeader.svelte
packages/ui/src/components/OverlaySurface.svelte
packages/ui/src/components/Pill.svelte
packages/ui/src/components/PrimaryPill.svelte
packages/ui/src/components/StatusPill.svelte
packages/ui/src/components/calendar/AgendaList.svelte
packages/ui/src/components/calendar/CalendarTools.svelte
packages/ui/src/components/calendar/GridColumn.svelte
packages/ui/src/components/calendar/ItemPreview.svelte
packages/ui/src/components/calendar/MiniMonth.svelte
packages/ui/src/components/calendar/MonthGrid.svelte
packages/ui/src/components/calendar/model.ts
packages/ui/src/components/files/FileCollection.svelte
packages/ui/src/components/tooltip/tip.ts
packages/ui/src/components/viewer/QuickLook.svelte
packages/ui/src/index.ts
packages/ui/src/tags.ts
packages/ui/src/tokens.css
review-1153.md
scripts/feature_flag_lifecycle.py
scripts/perf_guards/rules.py
scripts/test_feature_flag_lifecycle.py
tests/adversarial/authz_matrix.py
tests/adversarial/hide-1153-byte-contracts.rs
tests/adversarial/run.sh
tests/adversarial/toast_notifications.mjs

Cleanup: cargo clean completed (verbatim):

     Removed 23735 files, 26.5GiB total

The preset Cargo target directory, worktree target/tmp and web build output were removed. The working tree is clean.

Head: 139d4378ef974c9ea3e253f59cf23c02db2bab73 Branch: job/merge31 Base: ff53d7b8b4da5a21f862d57dcc3496f8c019f647 Merge round 31 integrates all 14 requested branches in order on job/merge31. origin/dev was fetched once and was already included. No push, deployment, adversarial matrix or e2e sweep ran. Built: the browser smoke gate; follow-up fixes for Files/Notes and Settings; shared glass controls and metric cards; temporary Feature flags; Search isolation regression coverage; Notifications inline Undo and persistence policy; bounded sidebar blur and Note header status fade; Hidden item support; performance evidence/profiles. Merge fixes: preserve both StatusPill inline feedback and compact sizing; combine Money summary cards with persistent wizard progress, dates and account checks; use shared Pill for Show hidden and shared Card dimming; retain both Search regression groups; preserve startup helpers and Feature flag tests; keep both ModeHeader changes. Decisions: Review uses six grouped MetricCards; publishing uses live phase MetricCards. MetricCard owns optional progress/account content with value first and label last. Card owns hidden-item dimming. The existing Calendar drag row has a documented design exception for its extended accessible name. Notifications keeps existing migration 0008_money_import; the new category, cleanup and clear-Undo migrations are 0009, 0010 and 0011. No existing deployed migration was renumbered. Performance source pins were generated by scripts/perf-lint --adopt-7c; existing numeric per-site limits were unchanged and guard rules were not weakened. The ratchet equals the exact live ledger: 22,548 exceptions, down from 22,615 on the base. UX gaps closed: the two new Show hidden actions now use shared controls; Money keeps the date range and expandable account checks with shared metrics; all imported ModeHeader behavior remains combined; compact dates wrap without runtime layout reads; import progress uses one shared numeric animation and exposes progress state immediately. Known gaps / for the orchestrator: run the browser smoke suite, visual evidence and adversarial matrices separately, as requested in this job. One existing Svelte warning remains: empty .attachment-row:focus ruleset in packages/ui/src/components/calendar/AttachmentDeck.svelte. This merge job does not add a user-visible operation beyond integrating those branches; the metric work is bounded by six summary cards or the fixed set of import phases plus at most 100 account checks. No new perf VM measurement ran in this merge/gates job. Files: full merged file inventory is artifacts/merge31/files.txt. Integration fixes are in packages/ui/src/components/{StatusPill,MetricCard,Card,ModeHeader}.svelte, packages/ui/src/tokens.css, packages/ui/README.md, the Money import and Notes/Tasks consumers, Calendar MonthGrid, affected focused tests, the Money profiles, notification migrations/store, server upgrade/startup tests, and generated contracts/API client. Gate fixes: Search isolation tests now pass the explicit default Hidden visibility argument. The Feature flag catalog test uses the current AppState without the removed startup watch field. Both fixes preserve the existing assertions. Shared native sccache failed with Connection reset by peer; native compilers were used for the retry. Requested branch order: smoke-1122, fu-1166, fu-1171, settingsreg-1195, pillglass-1189, flags-1181, search-1066, restyle-1190, cards-1179, perf-1124, notifloop-1194, sidebarblur-1208, notestatus-1209, hide-1153. Each has its own --no-ff merge commit. Timing evidence: the first workspace run stopped at two calternal-collab Elapsed(()) deadlines (8 seconds and 5 seconds). The unchanged 92-test collaboration unit suite passed in 15.90s during the final --no-fail-fast workspace run. The final full Clippy gate passed in 30.63s. Generated OpenAPI verification: the compiled merged server generated a contract equal to contracts/openapi.json (346 paths). No correction was needed. Shared controls used: Pill for Show hidden; Card for Hidden task dimming; MetricCard for Money summary and progress; StatusPill for inline feedback; ModeHeader for the combined blur and separator fade. Expected metric cost: six summary cards or the fixed import phases, plus at most 100 account checks. One numeric animation runs per changed metric. Final gates passed. The Rust workspace command used --no-fail-fast to complete every binary after the earlier timing failures stopped the first run. No assertions or deadlines were weakened. Verbatim output excerpts follow; full logs remain in artifacts/merge31/. cargo fmt --check ```text (No output; exit 0.) ``` cargo clippy --all-targets -- -D warnings ```text Finished `dev` profile [unoptimized + debuginfo] target(s) in 30.63s ``` cd apps/web && bun install ```text bun install v1.4.2 (744846f84) 911 packages installed [7.44s] ``` cd apps/web && bun run build ```text ✓ built in 2m 37s ✓ built in 987ms ✓ built in 4m 56s Compressed 917 static variants; saved 21486494 bytes. ``` cd apps/web && bun run check ```text perf-lint: PASS; 0 violations; 22548 scoped exceptions svelte-check found 0 errors and 1 warning in 1 file ``` cd apps/web && bun run test --maxWorkers=2 ```text Test Files 287 passed (287) Tests 2034 passed (2034) Duration 835.18s (transform 45%, import 22%, environment 18%, tests 11%, setup 3%) ``` scripts/perf-lint --check ```text perf-lint: PASS; 0 violations; 22548 scoped exceptions ``` cargo test --workspace --no-fail-fast -- --test-threads=4 ```text Finished `test` profile [unoptimized + debuginfo] target(s) in 2m 24s Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/async_imap-40507562faaceecb) test result: ok. 70 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_api-ca50343249628629) test result: ok. 23 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.09s Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_auth-26bcb2d74397eccf) test result: ok. 135 passed; 0 failed; 3 ignored; 0 measured; 0 filtered out; finished in 104.88s Running unittests src/main.rs (/home/kayg/build/targets/merge31/debug/deps/calternal-fb9eab06231eb5ac) test result: ok. 52 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.89s Running tests/output_contract.rs (/home/kayg/build/targets/merge31/debug/deps/output_contract-b8d944a898dde14e) test result: ok. 17 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.10s Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_collab-9e757eed78f87188) test result: ok. 92 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 15.90s Running tests/agent_turn_order.rs (/home/kayg/build/targets/merge31/debug/deps/agent_turn_order-6b766c9a0009ec2c) test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.08s Running tests/block_apply_property.rs (/home/kayg/build/targets/merge31/debug/deps/block_apply_property-a8d166fe74a751e2) test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.51s Running tests/canvas_shares.rs (/home/kayg/build/targets/merge31/debug/deps/canvas_shares-bd5640fab05bc72b) test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.37s Running tests/cross_language.rs (/home/kayg/build/targets/merge31/debug/deps/cross_language-c4368cdbb8f90881) test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 59.23s Running tests/dav_etag.rs (/home/kayg/build/targets/merge31/debug/deps/dav_etag-50265fcb9b46fe6e) test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.81s Running tests/history_restore.rs (/home/kayg/build/targets/merge31/debug/deps/history_restore-359e5bb9907765f2) test result: ok. 15 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.54s Running tests/hostile_clients.rs (/home/kayg/build/targets/merge31/debug/deps/hostile_clients-0eb61a64b08bada2) test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 11.05s Running tests/journal_race.rs (/home/kayg/build/targets/merge31/debug/deps/journal_race-0b39f3435fd24e47) test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 10.51s Running tests/restart_epoch.rs (/home/kayg/build/targets/merge31/debug/deps/restart_epoch-d6abaf8ab2888b5f) test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.44s Running tests/shared_notes.rs (/home/kayg/build/targets/merge31/debug/deps/shared_notes-a045f3a8096abfb4) test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 11.95s Running tests/two_clients.rs (/home/kayg/build/targets/merge31/debug/deps/two_clients-0d1891a9b75b0dae) test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.72s Running tests/untouched_bytes.rs (/home/kayg/build/targets/merge31/debug/deps/untouched_bytes-def7fc3aecd3fbf6) test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 104.47s Running tests/vector_bridge.rs (/home/kayg/build/targets/merge31/debug/deps/vector_bridge-99eaa267ab54fc01) test result: ok. 15 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.20s Running tests/voice_memos_review.rs (/home/kayg/build/targets/merge31/debug/deps/voice_memos_review-b35355d1d59e08b9) test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.17s Running tests/wiki_embeds.rs (/home/kayg/build/targets/merge31/debug/deps/wiki_embeds-48b580ad14aed758) test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 23.31s Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_dav-bd6ef2361e098dff) test result: ok. 61 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 7.49s Running tests/apple_replay.rs (/home/kayg/build/targets/merge31/debug/deps/apple_replay-b3e39ed741d76d82) test result: ok. 38 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.10s Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_db-d65ad44dd115f0d9) test result: ok. 38 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 9.12s Running tests/checkpoint.rs (/home/kayg/build/targets/merge31/debug/deps/checkpoint-38e5547bedbfced0) test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.98s Running tests/groups.rs (/home/kayg/build/targets/merge31/debug/deps/groups-fc24a831ffdd366f) test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.14s Running tests/mailstress_restart.rs (/home/kayg/build/targets/merge31/debug/deps/mailstress_restart-7975c3911ab25756) test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.22s Running tests/mutations.rs (/home/kayg/build/targets/merge31/debug/deps/mutations-2071b1e4837a0a26) test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.37s Running tests/queue.rs (/home/kayg/build/targets/merge31/debug/deps/queue-a7fe6daa9edd82bc) test result: ok. 21 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 1.12s Running tests/sqlite_limits.rs (/home/kayg/build/targets/merge31/debug/deps/sqlite_limits-8ff2028b1cdcaab2) test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_embed-2d0ebb9a5a101948) test result: ok. 43 passed; 0 failed; 5 ignored; 0 measured; 0 filtered out; finished in 38.77s Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_fs-08afd700c04158d8) test result: ok. 98 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 30.97s Running tests/legacy_kernel_permissions.rs (/home/kayg/build/targets/merge31/debug/deps/legacy_kernel_permissions-467139e9d1a841a9) test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.21s Running tests/private_permissions.rs (/home/kayg/build/targets/merge31/debug/deps/private_permissions-91f4239a646f03c6) test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.04s Running tests/storage.rs (/home/kayg/build/targets/merge31/debug/deps/storage-88e523ca95146e13) test result: ok. 52 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 12.68s Running tests/voice_memos_review.rs (/home/kayg/build/targets/merge31/debug/deps/voice_memos_review-5e8ef49242dee736) test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.08s Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_imap-a9439af8e34b7d1c) test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Running tests/mail.rs (/home/kayg/build/targets/merge31/debug/deps/mail-003765dca0157a2f) test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.04s Running tests/mailboxes.rs (/home/kayg/build/targets/merge31/debug/deps/mailboxes-f8f398921b0e2994) test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s Running tests/mime.rs (/home/kayg/build/targets/merge31/debug/deps/mime-0ceea22d4ac21481) test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s Running tests/projection.rs (/home/kayg/build/targets/merge31/debug/deps/projection-ea2f26ccd06e38c7) test result: ok. 30 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.24s Running tests/session.rs (/home/kayg/build/targets/merge31/debug/deps/session-3230d06c93c25e41) test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.10s Running tests/submission.rs (/home/kayg/build/targets/merge31/debug/deps/submission-0b44547b30878689) test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s Running tests/wire.rs (/home/kayg/build/targets/merge31/debug/deps/wire-5a6df671bf373bc1) test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_location-d255027df1fd10ee) test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Running tests/places.rs (/home/kayg/build/targets/merge31/debug/deps/places-f9972808a39f38a2) test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.50s Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_media-ebc4c73accac9ae9) test result: ok. 24 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_money-10071d59811f519c) test result: ok. 16 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s Running tests/account_kinds.rs (/home/kayg/build/targets/merge31/debug/deps/account_kinds-3004111b7fcf5d45) test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.08s Running tests/import.rs (/home/kayg/build/targets/merge31/debug/deps/import-0f1cbe697ae2191e) test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 11.64s Running tests/properties.rs (/home/kayg/build/targets/merge31/debug/deps/properties-9ba218fd0775a34f) test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.64s Running tests/ready_to_assign_adjustment.rs (/home/kayg/build/targets/merge31/debug/deps/ready_to_assign_adjustment-e2d2986adaffbd21) test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s Running tests/review_984.rs (/home/kayg/build/targets/merge31/debug/deps/review_984-2b7fa578f9b0a4b4) test result: ok. 4 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 3.34s Running tests/vectors.rs (/home/kayg/build/targets/merge31/debug/deps/vectors-0117cefdf2277801) test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.59s Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_notes_core-23cad5e6b3bb7cc5) test result: ok. 589 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.13s Running tests/hide_review_1153.rs (/home/kayg/build/targets/merge31/debug/deps/hide_review_1153-1331c6c7300df6a5) test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s Running tests/log_rewrite.rs (/home/kayg/build/targets/merge31/debug/deps/log_rewrite-35f64f0573596621) test result: ok. 19 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 8.13s Running tests/parser_properties.rs (/home/kayg/build/targets/merge31/debug/deps/parser_properties-b5973e4a74858646) test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s Running tests/unicode_titles.rs (/home/kayg/build/targets/merge31/debug/deps/unicode_titles-42da1068c171d7ac) test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.75s Running tests/vector_parity.rs (/home/kayg/build/targets/merge31/debug/deps/vector_parity-d7b7a853738139e6) test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.31s Running tests/voice_memos_review.rs (/home/kayg/build/targets/merge31/debug/deps/voice_memos_review-481badf590a1f3f2) test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_path-8b57f655dc48c97e) test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s Running tests/path_properties.rs (/home/kayg/build/targets/merge31/debug/deps/path_properties-89c5a6015b06dd71) test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_plugin-6480545125410d95) test result: ok. 61 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 11.19s Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_plugin_ai-9e9a33363d09f2b6) test result: ok. 24 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.82s Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_plugin_analytics-381f6605978b8716) test result: ok. 34 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.05s Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_plugin_calendar-92674d2e8be6e3dd) test result: ok. 104 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 10.37s Running tests/cache.rs (/home/kayg/build/targets/merge31/debug/deps/cache-f29ed7e636585bd7) test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.54s Running tests/protocol.rs (/home/kayg/build/targets/merge31/debug/deps/protocol-f61af85e0b4e751e) test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.31s Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_plugin_files-3dd248f4c8cc2280) test result: ok. 260 passed; 0 failed; 4 ignored; 0 measured; 0 filtered out; finished in 293.07s Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_plugin_mail-81e455bc4adbb477) test result: ok. 128 passed; 0 failed; 6 ignored; 0 measured; 0 filtered out; finished in 25.75s Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_plugin_money-cc1de8ff0f66843e) test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 124 filtered out; finished in 37.16s test result: ok. 123 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 98.05s Running tests/import_review.rs (/home/kayg/build/targets/merge31/debug/deps/import_review-a92567b371c1b039) test result: ok. 27 passed; 0 failed; 3 ignored; 0 measured; 0 filtered out; finished in 8.42s Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_plugin_notes-e1b186aebc87513b) test result: ok. 314 passed; 0 failed; 4 ignored; 0 measured; 0 filtered out; finished in 488.73s Running tests/apple_replay.rs (/home/kayg/build/targets/merge31/debug/deps/apple_replay-f9a2a1d4f2a541bb) test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.01s Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_plugin_notifications-8dd04a7deb8e3c89) test result: ok. 44 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.02s Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_plugin_photos-821135b6e442ab1a) test result: ok. 58 passed; 0 failed; 4 ignored; 0 measured; 0 filtered out; finished in 12.00s Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_plugin_video-9d0aff69616d7c6f) test result: ok. 16 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.60s Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_search-6f7e82e3e41b9b30) test result: ok. 60 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 22.96s Running tests/ask_evaluation.rs (/home/kayg/build/targets/merge31/debug/deps/ask_evaluation-41d9057fbefd739f) test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.94s Running tests/citations.rs (/home/kayg/build/targets/merge31/debug/deps/citations-9f9973a33b7d63b0) test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s Running tests/indexer.rs (/home/kayg/build/targets/merge31/debug/deps/indexer-f8108f168e30a83c) test result: ok. 29 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 515.87s Running tests/operators.rs (/home/kayg/build/targets/merge31/debug/deps/operators-c8c92459ff1b8ee6) test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s Running tests/query_properties.rs (/home/kayg/build/targets/merge31/debug/deps/query_properties-ce570cb0a16e55a0) test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s Running tests/relevance.rs (/home/kayg/build/targets/merge31/debug/deps/relevance-42b69a49344db8aa) test result: ok. 1 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 3.35s Running tests/retrieval.rs (/home/kayg/build/targets/merge31/debug/deps/retrieval-c008c0bb594d4493) test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Running unittests src/main.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_server-461a33a6a83778f3) test result: ok. 272 passed; 0 failed; 12 ignored; 0 measured; 0 filtered out; finished in 215.11s Running tests/perf_guards.rs (/home/kayg/build/targets/merge31/debug/deps/perf_guards-7fa6e94ce82e9a6a) test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 36.87s Running tests/private_index_permissions.rs (/home/kayg/build/targets/merge31/debug/deps/private_index_permissions-42280df60b77991f) test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 109.78s Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_sync-91f30d310aba4f9d) test result: ok. 60 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.21s Running unittests src/bin/calternald.rs (/home/kayg/build/targets/merge31/debug/deps/calternald-7a2670341386e59b) test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Running unittests src/lib.rs (/home/kayg/build/targets/merge31/debug/deps/calternal_tags-23e8cdce206794de) test result: ok. 51 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 36.56s Doc-tests async_imap test result: ok. 1 passed; 0 failed; 6 ignored; 0 measured; 0 filtered out; finished in 0.10s Doc-tests calternal_api test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests calternal_auth test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests calternal_collab test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests calternal_dav test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests calternal_db test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests calternal_embed test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests calternal_fs test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests calternal_imap test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests calternal_location test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests calternal_media test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests calternal_money test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests calternal_notes_core test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests calternal_path test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests calternal_plugin test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests calternal_plugin_ai test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests calternal_plugin_analytics test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests calternal_plugin_calendar test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests calternal_plugin_files test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests calternal_plugin_mail test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests calternal_plugin_money test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests calternal_plugin_notes test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests calternal_plugin_notifications test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests calternal_plugin_photos test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests calternal_plugin_video test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests calternal_search test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests calternal_sync test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests calternal_tags test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s ``` Focused regression output (verbatim): ```text test indexer::tests::private_hits_survive_concurrent_commits_and_overflow_during_rebuild ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 60 filtered out; finished in 13.34s test tests::plugins_returns_admin_feature_flag_catalog ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 283 filtered out; finished in 1.07s ``` Known gaps: visual screenshots, browser smoke/e2e sweeps, adversarial matrices and deployment remain with the orchestrator, per this job prompt. No perf VM measurement ran. The existing empty AttachmentDeck .attachment-row:focus ruleset produces one Svelte warning. No new gate failure remains. No push or deployment ran. Files (merged inventory): <details><summary>289 files</summary> ```text .forgejo/workflows/ci.yml .forgejo/workflows/feature-flag-lifecycle.yml Cargo.lock apps/web/e2e/analytics-overlay-973.mjs apps/web/e2e/app-update-1059.mjs apps/web/e2e/calendar-perf.mjs apps/web/e2e/feature-flags-1181.mjs apps/web/e2e/harness.mjs apps/web/e2e/harness.test.mjs apps/web/e2e/hide-1153.mjs apps/web/e2e/money.mjs apps/web/e2e/notes.mjs apps/web/e2e/notifications-1194.mjs apps/web/e2e/photos-perf.mjs apps/web/e2e/route-perf.mjs apps/web/e2e/search-scale-palette.mjs apps/web/e2e/settings-overlay-1195.mjs apps/web/e2e/sidebar-header-blur-1208.mjs apps/web/e2e/smoke/01-composer-batch.mjs apps/web/e2e/smoke/02-agenda-scroll.mjs apps/web/e2e/smoke/03-task-board.mjs apps/web/e2e/smoke/04-money-actual.mjs apps/web/e2e/smoke/05-note-paste-image.mjs apps/web/e2e/smoke/06-drawing-insert.mjs apps/web/e2e/smoke/07-share-note.mjs apps/web/e2e/smoke/08-mail-columns.mjs apps/web/e2e/smoke/09-search-result.mjs apps/web/e2e/smoke/10-settings-devices.mjs apps/web/e2e/smoke/11-tab-bar.mjs apps/web/e2e/smoke/12-files-upload.mjs apps/web/e2e/smoke/13-photos-heic.mjs apps/web/e2e/smoke/14-tag-actions.mjs apps/web/e2e/smoke/15-app-update.mjs apps/web/e2e/smoke/flow-utils.mjs apps/web/e2e/smoke/generate-actual-fixture.py apps/web/e2e/smoke/harness.mjs apps/web/e2e/smoke/run.mjs apps/web/e2e/tags-1110-1111.mjs apps/web/package.json apps/web/scripts/design-rules.test.mjs apps/web/src/calternal-app.css apps/web/src/lib/calendar/agenda.svelte.test.ts apps/web/src/lib/calendar/data.test.ts apps/web/src/lib/calendar/data.ts apps/web/src/lib/calendar/edits.test.ts apps/web/src/lib/calendar/edits.ts apps/web/src/lib/calendar/event-tint.test.ts apps/web/src/lib/calendar/journal.ts apps/web/src/lib/canvas/CanvasView.svelte apps/web/src/lib/canvas/create.ts apps/web/src/lib/components/Card.svelte.test.ts apps/web/src/lib/components/ItemActionMenu.svelte apps/web/src/lib/components/KeyboardShortcutsCard.svelte apps/web/src/lib/components/MetricCard.svelte.test.ts apps/web/src/lib/components/NoteList.svelte apps/web/src/lib/components/NoteList.svelte.test.ts apps/web/src/lib/components/Pill.svelte.test.ts apps/web/src/lib/components/StatusPill.svelte.test.ts apps/web/src/lib/components/TagEditor.svelte apps/web/src/lib/components/TagRow.svelte apps/web/src/lib/components/TagRow.svelte.test.ts apps/web/src/lib/components/analytics/ActivityCard.svelte apps/web/src/lib/components/analytics/ActivityCard.svelte.test.ts apps/web/src/lib/components/analytics/HabitsCard.svelte apps/web/src/lib/components/analytics/widgets/StatRow.svelte apps/web/src/lib/components/analytics/widgets/StatRow.svelte.test.ts apps/web/src/lib/components/money/MoneyImport.svelte apps/web/src/lib/components/money/MoneyImportMetrics.svelte apps/web/src/lib/components/money/MoneyImportMetrics.svelte.test.ts apps/web/src/lib/components/money/MonthSwitcher.svelte apps/web/src/lib/components/search-dialog.svelte apps/web/src/lib/composer/Composer.svelte apps/web/src/lib/editor/blockMenu.test.ts apps/web/src/lib/editor/blockMenu.ts apps/web/src/lib/editor/format/BlockHoverActions.svelte apps/web/src/lib/editor/format/BlockHoverActions.svelte.test.ts apps/web/src/lib/featureFlags.test.ts apps/web/src/lib/featureFlags.ts apps/web/src/lib/files/FilesBrowser.svelte apps/web/src/lib/files/InfoPanel.svelte.test.ts apps/web/src/lib/files/ShareDialog.svelte apps/web/src/lib/files/TrashView.svelte apps/web/src/lib/files/UploadToast.svelte apps/web/src/lib/files/api.test.ts apps/web/src/lib/files/api.ts apps/web/src/lib/files/model.ts apps/web/src/lib/files/prefs.svelte.test.ts apps/web/src/lib/files/prefs.svelte.ts apps/web/src/lib/files/transfer.ts apps/web/src/lib/mail/MailMorphCard.svelte apps/web/src/lib/modeHeader.svelte.test.ts apps/web/src/lib/notes/NoteEditorSurface.svelte apps/web/src/lib/notes/NoteRoute.svelte apps/web/src/lib/notes/NoteView.svelte apps/web/src/lib/notes/NotesExplorer.svelte apps/web/src/lib/notes/api.ts apps/web/src/lib/notes/newActions.ts apps/web/src/lib/notes/noteIndex.svelte.ts apps/web/src/lib/notes/noteIndex.test.ts apps/web/src/lib/notes/notes.test.ts apps/web/src/lib/notes/paths.ts apps/web/src/lib/notifications/InboxPanel.svelte apps/web/src/lib/notifications/inbox.svelte.test.ts apps/web/src/lib/notifications/inbox.svelte.ts apps/web/src/lib/notifications/model.test.ts apps/web/src/lib/notifications/model.ts apps/web/src/lib/photos/PhotoTimeline.svelte apps/web/src/lib/photos/PhotoViewer.svelte apps/web/src/lib/photos/PhotosView.svelte apps/web/src/lib/photos/api.ts apps/web/src/lib/photos/timeline.svelte.ts apps/web/src/lib/photos/timeline.test.ts apps/web/src/lib/search/SearchPreview.svelte apps/web/src/lib/search/SearchResultRow.svelte apps/web/src/lib/search/providers.test.ts apps/web/src/lib/search/providers.ts apps/web/src/lib/search/registry.ts apps/web/src/lib/search/saved.svelte.ts apps/web/src/lib/search/savedUndo.ts apps/web/src/lib/search/search-units.test.ts apps/web/src/lib/search/server.ts apps/web/src/lib/shortcuts/registry.test.ts apps/web/src/lib/shortcuts/registry.ts apps/web/src/lib/stores/tagRewrite.svelte.ts apps/web/src/lib/stores/toast-policy.test.ts apps/web/src/lib/stores/toasts.svelte.test.ts apps/web/src/lib/stores/toasts.svelte.ts apps/web/src/lib/tags/tagResultPresentation.test.ts apps/web/src/lib/tags/tagResultPresentation.ts apps/web/src/lib/tasks/TaskCard.svelte apps/web/src/lib/tasks/TaskColumn.svelte apps/web/src/lib/tasks/TaskList.svelte apps/web/src/lib/tasks/TaskList.svelte.test.ts apps/web/src/lib/tasks/TaskSection.svelte apps/web/src/lib/tasks/TasksWorkspace.svelte apps/web/src/lib/tasks/api.test.ts apps/web/src/lib/tasks/api.ts apps/web/src/lib/tasks/index.svelte.ts apps/web/src/lib/themes.test.ts apps/web/src/lib/tooltip/tooltip.test.ts apps/web/src/routes/+layout.svelte apps/web/src/routes/analytics/[period]/[date]/+page.svelte apps/web/src/routes/calendar/[view]/[date]/+page.svelte apps/web/src/routes/money/[budget]/[month]/+page.svelte apps/web/src/routes/money/[budget]/accounts/[[account]]/+page.svelte apps/web/src/routes/notes/+page.svelte apps/web/src/routes/settings/[...path]/+page.svelte apps/web/src/routes/settings/admin/ConfigGroup.svelte apps/web/src/routes/settings/files/FilesSection.svelte apps/web/src/routes/settings/parts/AccountList.svelte apps/web/src/routes/settings/plugins/PluginsSection.svelte apps/web/src/routes/settings/sections.test.ts apps/web/src/routes/settings/sections.ts apps/web/src/routes/tag/[tag]/+page.svelte bench/feature-flags-1181.mjs bench/hidden-1153.mjs bench/money-import-462.mjs bench/money-import-actual-462.mjs bench/money-import-actual-fixture.py bench/notes-editor-series.mjs bench/notifications-inbox-1194.mjs bench/settings-shortcut.mjs bench/tag-results-1166.mjs contracts/action-authority.json contracts/action-policy.json contracts/actions.json contracts/feature-flags.json contracts/openapi.json contracts/perf/adoption-1058.json contracts/perf/exceptions.json contracts/perf/ratchet.json contracts/perf/registry.json crates/calternal-api/src/lib.rs crates/calternal-dav/src/reminders.rs crates/calternal-dav/tests/apple_replay.rs crates/calternal-fs/src/file_ops.rs crates/calternal-fs/src/lib.rs crates/calternal-notes-core/src/canvas.rs crates/calternal-notes-core/src/dayfile.rs crates/calternal-notes-core/src/frontmatter.rs crates/calternal-notes-core/src/lib.rs crates/calternal-notes-core/src/links.rs crates/calternal-notes-core/src/notes_index.rs crates/calternal-notes-core/src/tasks/extract.rs crates/calternal-notes-core/src/tasks/frontmatter.rs crates/calternal-notes-core/src/tasks/line.rs crates/calternal-notes-core/src/tasks/mod.rs crates/calternal-notes-core/src/tasks/model.rs crates/calternal-notes-core/tests/hide_review_1153.rs crates/calternal-plugin/migrations/0003_feature_flag_state.sql crates/calternal-plugin/src/feature_flag_admin.rs crates/calternal-plugin/src/feature_flags.rs crates/calternal-plugin/src/lib.rs crates/calternal-plugin/src/state.rs crates/calternal-plugin/src/user_settings.rs crates/calternal-search/src/index.rs crates/calternal-search/src/indexer.rs crates/calternal-search/src/operators.rs crates/calternal-search/src/plugin.rs crates/calternal-search/src/query.rs crates/calternal-search/src/semantic.rs crates/calternal-search/tests/indexer.rs crates/calternal-search/tests/operators.rs crates/calternal-server/src/main.rs crates/calternal-server/src/upgrade_tests.rs crates/calternal-server/src/wire.rs crates/calternal-tags/Cargo.toml crates/calternal-tags/src/index.rs crates/calternal-tags/src/lib.rs crates/calternal-tags/src/source.rs crates/plugins/calendar/src/client/mod.rs crates/plugins/calendar/src/view.rs crates/plugins/files/src/dav.rs crates/plugins/files/src/lib.rs crates/plugins/files/src/listing.rs crates/plugins/files/src/lookup.rs crates/plugins/files/src/preferences.rs crates/plugins/files/src/shares.rs crates/plugins/notes/migrations/0036_note_visibility.sql crates/plugins/notes/migrations/0037_user_hidden_items.sql crates/plugins/notes/src/lib.rs crates/plugins/notes/src/reminders_tests.rs crates/plugins/notes/src/store.rs crates/plugins/notes/src/tasks_api.rs crates/plugins/notes/src/tasks_store.rs crates/plugins/notifications/migrations/0009_toast_category_ids.sql crates/plugins/notifications/migrations/0010_cleanup_notification_management_toasts.sql crates/plugins/notifications/migrations/0011_inbox_clear_undo.sql crates/plugins/notifications/src/routes.rs crates/plugins/notifications/src/store.rs crates/plugins/photos/Cargo.toml crates/plugins/photos/src/routes.rs crates/plugins/photos/src/search.rs deploy/smoke-gate.sh docs/DESIGN.md docs/perf/2026-10-06-1124.md docs/perf/baseline.json docs/perf/runs/2026-10-06-1124-actual-import-ab.json docs/perf/runs/2026-10-06-1124-actual-import-budget-month-hdd.json docs/perf/runs/2026-10-06-1124-actual-import-flamegraph.json docs/perf/runs/2026-10-06-1124-actual-import-initial.json docs/perf/runs/2026-10-06-1124-actual-import-profile.json docs/perf/runs/2026-10-06-1124-calendar-1440.chrome-trace.json.gz docs/perf/runs/2026-10-06-1124-calendar-month-1440.chrome-trace.json.gz docs/perf/runs/2026-10-06-1124-calendar-week-month.json docs/perf/runs/2026-10-06-1124-files-route-cold.json docs/perf/runs/2026-10-06-1124-hdd-q1.json docs/perf/runs/2026-10-06-1124-hdd-q16.json docs/perf/runs/2026-10-06-1124-hdd-qualification.json docs/perf/runs/2026-10-06-1124-photos-home.json docs/perf/runs/2026-10-06-1124-photos-scroll-ab.json docs/perf/runs/2026-10-06-1124-photos-scroll-baseline.chrome-trace.json.gz docs/perf/runs/2026-10-06-1124-photos-scroll-candidate.chrome-trace.json.gz docs/perf/runs/2026-10-06-1124-route-warm-failure.json package.json packages/api-client/src/generated.ts packages/editor/src/extensions.dragHandle.test.ts packages/editor/src/extensions.ts packages/ui/README.md packages/ui/src/components/Card.svelte packages/ui/src/components/CopyLink.svelte packages/ui/src/components/Inspector.svelte packages/ui/src/components/MetricCard.svelte packages/ui/src/components/ModeHeader.svelte packages/ui/src/components/OverlaySurface.svelte packages/ui/src/components/Pill.svelte packages/ui/src/components/PrimaryPill.svelte packages/ui/src/components/StatusPill.svelte packages/ui/src/components/calendar/AgendaList.svelte packages/ui/src/components/calendar/CalendarTools.svelte packages/ui/src/components/calendar/GridColumn.svelte packages/ui/src/components/calendar/ItemPreview.svelte packages/ui/src/components/calendar/MiniMonth.svelte packages/ui/src/components/calendar/MonthGrid.svelte packages/ui/src/components/calendar/model.ts packages/ui/src/components/files/FileCollection.svelte packages/ui/src/components/tooltip/tip.ts packages/ui/src/components/viewer/QuickLook.svelte packages/ui/src/index.ts packages/ui/src/tags.ts packages/ui/src/tokens.css review-1153.md scripts/feature_flag_lifecycle.py scripts/perf_guards/rules.py scripts/test_feature_flag_lifecycle.py tests/adversarial/authz_matrix.py tests/adversarial/hide-1153-byte-contracts.rs tests/adversarial/run.sh tests/adversarial/toast_notifications.mjs ``` </details> Cleanup: cargo clean completed (verbatim): ```text Removed 23735 files, 26.5GiB total ``` The preset Cargo target directory, worktree target/tmp and web build output were removed. The working tree is clean.
Author
Owner

Starting merge32 on job/merge32 at base 3601719b8. The worktree is clean. I will merge the 14 listed branches in order, preserve opt-in shared component changes and all migrations, regenerate exact performance pins without changing limits, and run the requested gates and four focused browser flows. No push, deploy, adversarial matrix or screenshot sweep.

Starting merge32 on job/merge32 at base 3601719b8. The worktree is clean. I will merge the 14 listed branches in order, preserve opt-in shared component changes and all migrations, regenerate exact performance pins without changing limits, and run the requested gates and four focused browser flows. No push, deploy, adversarial matrix or screenshot sweep.
Author
Owner

All 14 requested branches are merged in the requested order. Required git fetch origin and git merge origin/dev reports Already up to date (3601719b8). No migrations were added. Conflict resolutions preserve hidden Notes, task editor geometry, source fixture options, watcher cleanup and public-password tests, and all shared Card/Pill/OverlaySurface opt-in props. Integration checks found duplicate primitive definitions and a leftover StatusPill conflict fragment; these are corrected and the combined primitive regression tests are running. cargo fmt --check exited 0 with no output. Full clippy, production web build and exact source-pin regeneration are running. The four stopped area runners have been identified from the restyle report and a detached origin/dev baseline is prepared.

All 14 requested branches are merged in the requested order. Required git fetch origin and git merge origin/dev reports Already up to date (3601719b8). No migrations were added. Conflict resolutions preserve hidden Notes, task editor geometry, source fixture options, watcher cleanup and public-password tests, and all shared Card/Pill/OverlaySurface opt-in props. Integration checks found duplicate primitive definitions and a leftover StatusPill conflict fragment; these are corrected and the combined primitive regression tests are running. cargo fmt --check exited 0 with no output. Full clippy, production web build and exact source-pin regeneration are running. The four stopped area runners have been identified from the restyle report and a detached origin/dev baseline is prepared.
Author
Owner

Integration fixes are committed separately: 6a4b0db49 consolidates shared primitive variants and restores the unchanged Card theme contract; bbdc4f600 adds the missing Money production-asset override and consolidates Notes fixture documentation. Focused primitive gate output, verbatim: Test Files 4 passed (4); Tests 65 passed (65). Combined primitive/theme regression output, verbatim: Test Files 3 passed (3); Tests 117 passed (117). Source pin regeneration uses the repository parser and validator: 1,338 hash refreshes, no limit increases. One obsolete ActivityStack material scope was removed and its ratchet lowered by one. Full gates are running; host load average reached 84.50. Baseline Mail has passed its initial interactions and is progressing through the full reader probe.

Integration fixes are committed separately: 6a4b0db49 consolidates shared primitive variants and restores the unchanged Card theme contract; bbdc4f600 adds the missing Money production-asset override and consolidates Notes fixture documentation. Focused primitive gate output, verbatim: Test Files 4 passed (4); Tests 65 passed (65). Combined primitive/theme regression output, verbatim: Test Files 3 passed (3); Tests 117 passed (117). Source pin regeneration uses the repository parser and validator: 1,338 hash refreshes, no limit increases. One obsolete ActivityStack material scope was removed and its ratchet lowered by one. Full gates are running; host load average reached 84.50. Baseline Mail has passed its initial interactions and is progressing through the full reader probe.
Author
Owner

Integration fixes are committed at 9721d29995.

  • be7c3fe8a: ActivityStack inherits size and uses three CSS depths. The focused component regression passes: Test Files 1 passed (1) / Tests 2 passed (2). The generated pin refresh reports Unmatched scopes: 0. No budget increased.
  • 9721d2999: Money e2e now opens Import through the real button before asserting /money/import. The assertion is unchanged.
  • Origin/dev Calendar header passes tab selection, then fails the stale #549 Today range assertion. The loader explicitly implements the later fourteen-day forward contract. Filed #1313; no existing assertion changed.
  • Origin/dev Mail and Money stop earlier in Playwright timeouts on the loaded host, so the specific original image/route failures remain unconfirmed on baseline. The baseline Agenda runner is active.
  • Production build passed before the small CSS depth fix. Rebuild and final web check are running. Full Rust clippy/test and full web tests remain active. Initial web check had zero Svelte errors but one perf pin violation; that dynamic style has been removed rather than increasing the ratchet.

No push, deploy, adversarial matrix or screenshot sweep has run.

Integration fixes are committed at 9721d29995974242afaf33085117ac77bf780189. - be7c3fe8a: ActivityStack inherits size and uses three CSS depths. The focused component regression passes: `Test Files 1 passed (1)` / `Tests 2 passed (2)`. The generated pin refresh reports `Unmatched scopes: 0`. No budget increased. - 9721d2999: Money e2e now opens Import through the real button before asserting `/money/import`. The assertion is unchanged. - Origin/dev Calendar header passes tab selection, then fails the stale #549 Today range assertion. The loader explicitly implements the later fourteen-day forward contract. Filed #1313; no existing assertion changed. - Origin/dev Mail and Money stop earlier in Playwright timeouts on the loaded host, so the specific original image/route failures remain unconfirmed on baseline. The baseline Agenda runner is active. - Production build passed before the small CSS depth fix. Rebuild and final web check are running. Full Rust clippy/test and full web tests remain active. Initial web check had zero Svelte errors but one perf pin violation; that dynamic style has been removed rather than increasing the ratchet. No push, deploy, adversarial matrix or screenshot sweep has run.
Author
Owner

Head: 5569ecdeee. Working tree clean.

Completed gates (verbatim excerpts):

# cargo fmt --check
# exit 0; no output

# cargo clippy --all-targets -- -D warnings
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 38m 39s

# bun run build
Compressed 914 static variants; saved 21486029 bytes.

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

# bun run test --maxWorkers=2
 Test Files  4 failed | 286 passed (290)
      Tests  5 failed | 2074 passed (2079)
   Duration  1591.25s (transform 42%, import 21%, environment 16%, tests 15%, setup 6%)

# one focused run of all four failed files plus ActivityStack
 Test Files  5 passed (5)
      Tests  95 passed (95)
   Duration  115.80s (transform 66%, tests 13%, import 10%, environment 9%, setup 2%)

All five full-suite failures were Error: Test timed out in 5000ms. The focused run keeps the original timeouts and assertions, confirming SLOW-only host timing failures. The full suite was not repeated.

Current Calendar reproduces the same initial Today range assertion as origin/dev; tab selection passes on both (#1313). Current Mail passes the layout interactions, then reproduces the prepared-image timeout; the exact baseline result is unconfirmed because baseline stopped earlier in a theme timeout (#1316). Origin/dev Agenda reaches the reported hidden Day fan (#1314). Current Money and Agenda comparisons and the full Rust workspace tests remain active.

No test expectation or fixture has been weakened. No push, deploy, adversarial matrix or screenshot sweep.

Head: 5569ecdeeede743664df2ea6d23adaf1d57ae896. Working tree clean. Completed gates (verbatim excerpts): ``` # cargo fmt --check # exit 0; no output # cargo clippy --all-targets -- -D warnings Finished `dev` profile [unoptimized + debuginfo] target(s) in 38m 39s # bun run build Compressed 914 static variants; saved 21486029 bytes. # bun run check perf-lint: PASS; 0 violations; 22547 scoped exceptions svelte-check found 0 errors and 4 warnings in 2 files # bun run test --maxWorkers=2 Test Files 4 failed | 286 passed (290) Tests 5 failed | 2074 passed (2079) Duration 1591.25s (transform 42%, import 21%, environment 16%, tests 15%, setup 6%) # one focused run of all four failed files plus ActivityStack Test Files 5 passed (5) Tests 95 passed (95) Duration 115.80s (transform 66%, tests 13%, import 10%, environment 9%, setup 2%) ``` All five full-suite failures were `Error: Test timed out in 5000ms.` The focused run keeps the original timeouts and assertions, confirming SLOW-only host timing failures. The full suite was not repeated. Current Calendar reproduces the same initial Today range assertion as origin/dev; tab selection passes on both (#1313). Current Mail passes the layout interactions, then reproduces the prepared-image timeout; the exact baseline result is unconfirmed because baseline stopped earlier in a theme timeout (#1316). Origin/dev Agenda reaches the reported hidden Day fan (#1314). Current Money and Agenda comparisons and the full Rust workspace tests remain active. No test expectation or fixture has been weakened. No push, deploy, adversarial matrix or screenshot sweep.
Author
Owner

Correction to the Money setup finding: the first empty-state visit already opens Import automatically (apps/web/src/routes/money/+page.svelte, !moneyImportSession.hasOpened). The manual click in 9721d2999 raced that navigation and timed out after its button detached. That was my setup error.

1f05912e0 replaces the manual click with waitForURL('**/money/import'), then runs the unchanged route assertion. This waits for the existing first-visit behavior rather than assuming the URL changed synchronously with the empty-state paint. Node syntax check passes. Money will run once more after the active Agenda comparison. The initial failing run is retained in the logs.

Correction to the Money setup finding: the first empty-state visit already opens Import automatically (`apps/web/src/routes/money/+page.svelte`, `!moneyImportSession.hasOpened`). The manual click in 9721d2999 raced that navigation and timed out after its button detached. That was my setup error. 1f05912e0 replaces the manual click with `waitForURL('**/money/import')`, then runs the unchanged route assertion. This waits for the existing first-visit behavior rather than assuming the URL changed synchronously with the empty-state paint. Node syntax check passes. Money will run once more after the active Agenda comparison. The initial failing run is retained in the logs.
Author
Owner

Starting reconcile-c1 on job/deploy-c1 at 6a63934d67. Investigating exact performance pins and the durable Money Undo failure; each fix will be committed separately, followed by the requested full gates. No push or deploy.

Starting reconcile-c1 on job/deploy-c1 at 6a63934d67132a8031daa054993a821f964bbff7. Investigating exact performance pins and the durable Money Undo failure; each fix will be committed separately, followed by the requested full gates. No push or deploy.
Author
Owner

The corrected Money rerun exposed a second setup mismatch: its first-visit Import URL includes ?step=source&format=actual-zip (the restoration grammar from MoneyImportSession.link()), so a glob ending exactly in /money/import never matches. 5b2825e6c waits for url.pathname === '/money/import', then runs the existing pathname assertion. This preserves query restoration and every assertion. Node syntax check passes; the full Money runner is active once more for this focused correction. Initial failed attempts remain in the logs.

Both current and origin/dev Agenda reproduce the same hidden Day fan (#1314). Current and origin/dev Calendar reproduce the same range contract mismatch (#1313). Current Mail's prepared-image timeout is filed as #1316; baseline stopped earlier in a theme timeout, so exact baseline reproduction is unconfirmed.

The corrected Money rerun exposed a second setup mismatch: its first-visit Import URL includes `?step=source&format=actual-zip` (the restoration grammar from `MoneyImportSession.link()`), so a glob ending exactly in `/money/import` never matches. 5b2825e6c waits for `url.pathname === '/money/import'`, then runs the existing pathname assertion. This preserves query restoration and every assertion. Node syntax check passes; the full Money runner is active once more for this focused correction. Initial failed attempts remain in the logs. Both current and origin/dev Agenda reproduce the same hidden Day fan (#1314). Current and origin/dev Calendar reproduce the same range contract mismatch (#1313). Current Mail's prepared-image timeout is filed as #1316; baseline stopped earlier in a theme timeout, so exact baseline reproduction is unconfirmed.
Author
Owner

Finding: the focused Money Undo matrix fails at durable_import_tests.rs:683. Comparing payload fields without logging contents shows only paths changes: the startup cleanup worker reclaims private import sources after the test snapshots the receipt. Money source is identical on merge31, collabloss-1197 and deploy-c1. The fix drains the existing cleanup in test setup before the snapshot; all assertions remain unchanged. The 111 performance findings are confined to hidden_items (78) and shared retry_when (33), introduced by the visibility retry call graph. Refreshing exact tested capability proofs will keep the existing rule and debt ceilings unchanged.

Finding: the focused Money Undo matrix fails at durable_import_tests.rs:683. Comparing payload fields without logging contents shows only paths changes: the startup cleanup worker reclaims private import sources after the test snapshots the receipt. Money source is identical on merge31, collabloss-1197 and deploy-c1. The fix drains the existing cleanup in test setup before the snapshot; all assertions remain unchanged. The 111 performance findings are confined to hidden_items (78) and shared retry_when (33), introduced by the visibility retry call graph. Refreshing exact tested capability proofs will keep the existing rule and debt ceilings unchanged.
Author
Owner

Committed 9f7df52c7: restore exact hidden_items proofs after #1293 and add exact bounded retry proofs backed by existing isolation/lock-retry/attempt-limit tests. New guard regression proves a retry proof cannot hide provider IO in its caller closure. Regenerated pins with scripts/perf-lint --adopt-7c: perf-lint: PASS; 0 violations; 22536 scoped exceptions. Ratchet shrank from 22548 to 22536; no guard rule or limit increased. scripts/perf-lint test: Ran 137 tests in 0.101s; OK. Requested web production build and cargo fmt --check passed; branch comparison and Rust gates continue.

Committed 9f7df52c7: restore exact hidden_items proofs after #1293 and add exact bounded retry proofs backed by existing isolation/lock-retry/attempt-limit tests. New guard regression proves a retry proof cannot hide provider IO in its caller closure. Regenerated pins with scripts/perf-lint --adopt-7c: perf-lint: PASS; 0 violations; 22536 scoped exceptions. Ratchet shrank from 22548 to 22536; no guard rule or limit increased. scripts/perf-lint test: Ran 137 tests in 0.101s; OK. Requested web production build and cargo fmt --check passed; branch comparison and Rust gates continue.
Author
Owner

Branch comparisons (same target directory, no changes to either worktree): the unchanged Undo refusal matrix passed on job/merge31 at 139d4378e and job/collabloss-1197 at 69976d30d, each 1 passed / 0 failed. The candidate previously failed at line 683 with only paths changed. These outcomes fit the independent startup reclamation race, not date-dependent arithmetic or a change to Money calculations. Existing Money assertions remain unchanged. Per-crate clippy passed; full Money tests and the requested full clippy gate are running.

Branch comparisons (same target directory, no changes to either worktree): the unchanged Undo refusal matrix passed on job/merge31 at 139d4378e and job/collabloss-1197 at 69976d30d, each 1 passed / 0 failed. The candidate previously failed at line 683 with only paths changed. These outcomes fit the independent startup reclamation race, not date-dependent arithmetic or a change to Money calculations. Existing Money assertions remain unchanged. Per-crate clippy passed; full Money tests and the requested full clippy gate are running.
Author
Owner

All four requested area comparisons are now resolved at head 5b2825e6cd.

  • Calendar: merged and origin/dev both pass tab selection, then fail the stale Today range contract (#1313).
  • Agenda: both reach the same hidden Day fan (#1314).
  • Mail: merged passes the layout interactions, then reaches the prepared-image timeout (#1316). The full baseline had a SLOW theme timeout. A focused baseline probe (omit only capture matrix; keep all setup/assertions/fixtures) fails with unknown fixture action: prepared-images. Baseline has that update but falls through to the independent seed/else chain; the merged tree keeps the elif dispatch fix and proceeds further. Both fail, at different steps; the same image failure is not established on baseline.
  • Money: the full baseline had a SLOW navigation timeout. A focused one-width/scheme baseline probe reproduces the original /money vs /money/import assertion. The merged runner now waits for the Import pathname with its query and passes this step. It reaches CSV Review, then fails the unchanged four-check assertion's obsolete Totals checked list selector (#1318). Both source trees use Check groups Cards; exact baseline CSV runtime reproduction is not claimed.

Focused baseline runner diffs are retained under artifacts/merge32/baseline-probe.diff. No assertion or fixture was weakened; no product source changed in baseline. Full Rust workspace tests are still compiling. All other gate results remain as reported.

All four requested area comparisons are now resolved at head 5b2825e6cdd16db6a0e32f0fc5aa385634c0b139. - Calendar: merged and origin/dev both pass tab selection, then fail the stale Today range contract (#1313). - Agenda: both reach the same hidden Day fan (#1314). - Mail: merged passes the layout interactions, then reaches the prepared-image timeout (#1316). The full baseline had a SLOW theme timeout. A focused baseline probe (omit only capture matrix; keep all setup/assertions/fixtures) fails with unknown fixture action: prepared-images. Baseline has that update but falls through to the independent seed/else chain; the merged tree keeps the elif dispatch fix and proceeds further. Both fail, at different steps; the same image failure is not established on baseline. - Money: the full baseline had a SLOW navigation timeout. A focused one-width/scheme baseline probe reproduces the original `/money` vs `/money/import` assertion. The merged runner now waits for the Import pathname with its query and passes this step. It reaches CSV Review, then fails the unchanged four-check assertion's obsolete Totals checked list selector (#1318). Both source trees use Check groups Cards; exact baseline CSV runtime reproduction is not claimed. Focused baseline runner diffs are retained under artifacts/merge32/baseline-probe.diff. No assertion or fixture was weakened; no product source changed in baseline. Full Rust workspace tests are still compiling. All other gate results remain as reported.
Author
Owner

Committed 41102c015: settle the existing source cleanup in the Money refusal fixture before snapshotting the receipt. No existing assertion, response expectation or financial calculation changed. Per-crate gates passed: cargo clippy -p calternal-plugin-money --all-targets -- -D warnings: Finished dev profile [unoptimized + debuginfo] target(s) in 3m 49s. cargo test -p calternal-plugin-money -- --test-threads=4: test result: ok. 123 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 192.75s / test result: ok. 27 passed; 0 failed; 3 ignored; 0 measured; 0 filtered out; finished in 14.08s. Both previously reported test names pass. Full clippy and the requested workspace tests continue.

Committed 41102c015: settle the existing source cleanup in the Money refusal fixture before snapshotting the receipt. No existing assertion, response expectation or financial calculation changed. Per-crate gates passed: cargo clippy -p calternal-plugin-money --all-targets -- -D warnings: Finished `dev` profile [unoptimized + debuginfo] target(s) in 3m 49s. cargo test -p calternal-plugin-money -- --test-threads=4: test result: ok. 123 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 192.75s / test result: ok. 27 passed; 0 failed; 3 ignored; 0 measured; 0 filtered out; finished in 14.08s. Both previously reported test names pass. Full clippy and the requested workspace tests continue.
Author
Owner

The first workspace test run stopped at calternal-collab after 60 passes and 32 failures. All 32 failures contain FreeSpaceReserve: the root filesystem had about 13.9 GB available and the configured reserve is 31.7 GB. Earlier API/Auth tests passed. This is an environment capacity failure, not SLOW-only and not a failed security invariant.

The preset CARGO_TARGET_DIR points at /home/kayg/build/targets/merge32 on the root filesystem. I initially aliased the requested /mnt/hdd/targets/merge32 to that cache to avoid duplicate output. That kept the cache on root and contributed to the reserve failure. I am relocating the same owned cache to the actual HDD target, preserving both paths through a reverse alias. The requested TMPDIR remains /target/tmp and will point at that owned HDD target's tmp directory. No production reserve, fixture, assertion or limit changes. The failed log is retained as artifacts/merge32/rust-test-reserve-failure.log. Then the workspace tests will run again against the copied build cache.

The first workspace test run stopped at calternal-collab after 60 passes and 32 failures. All 32 failures contain FreeSpaceReserve: the root filesystem had about 13.9 GB available and the configured reserve is 31.7 GB. Earlier API/Auth tests passed. This is an environment capacity failure, not SLOW-only and not a failed security invariant. The preset CARGO_TARGET_DIR points at /home/kayg/build/targets/merge32 on the root filesystem. I initially aliased the requested /mnt/hdd/targets/merge32 to that cache to avoid duplicate output. That kept the cache on root and contributed to the reserve failure. I am relocating the same owned cache to the actual HDD target, preserving both paths through a reverse alias. The requested TMPDIR remains <worktree>/target/tmp and will point at that owned HDD target's tmp directory. No production reserve, fixture, assertion or limit changes. The failed log is retained as artifacts/merge32/rust-test-reserve-failure.log. Then the workspace tests will run again against the copied build cache.
Author
Owner

Progress at head 41102c015: requested production web build and cargo fmt --check exited 0. Full cargo clippy --all-targets -- -D warnings exited 0; verbatim terminal line: Finished dev profile [unoptimized + debuginfo] target(s) in 8m 40s. The full cargo test --workspace -- --test-threads=4 gate is still compiling/linking its test targets with CARGO_BUILD_JOBS=4. Compiler CPU counters advance and target jobs move between crates; host load was about 56. No failure has appeared. No rerun or parallel build was started; both fixes are committed and the working tree is clean.

Progress at head 41102c015: requested production web build and cargo fmt --check exited 0. Full cargo clippy --all-targets -- -D warnings exited 0; verbatim terminal line: Finished `dev` profile [unoptimized + debuginfo] target(s) in 8m 40s. The full cargo test --workspace -- --test-threads=4 gate is still compiling/linking its test targets with CARGO_BUILD_JOBS=4. Compiler CPU counters advance and target jobs move between crates; host load was about 56. No failure has appeared. No rerun or parallel build was started; both fixes are committed and the working tree is clean.
Author
Owner

Storage recovery update: the failure is the test Home filesystem's free-space reserve. The sufficient fix is to place test temp storage on HDD while preserving TMPDIR=<worktree>/target/tmp. That path now links to the owned /mnt/hdd/targets/merge32-test-tmp, with 180 GB free. The cache copy was stopped and its partial destination removed; the existing compiled cache stays in place until final cleanup. No reserve, fixture, assertion or production code changed.

The cached workspace rerun is active. Cargo rebuilds only the server targets after the earlier web asset changes; the shared sccache process stopped, so these targets compile locally. The first failed run remains in rust-test-reserve-failure.log. The final run writes rust-test-final.log.

Storage recovery update: the failure is the test Home filesystem's free-space reserve. The sufficient fix is to place test temp storage on HDD while preserving `TMPDIR=<worktree>/target/tmp`. That path now links to the owned `/mnt/hdd/targets/merge32-test-tmp`, with 180 GB free. The cache copy was stopped and its partial destination removed; the existing compiled cache stays in place until final cleanup. No reserve, fixture, assertion or production code changed. The cached workspace rerun is active. Cargo rebuilds only the server targets after the earlier web asset changes; the shared sccache process stopped, so these targets compile locally. The first failed run remains in rust-test-reserve-failure.log. The final run writes rust-test-final.log.
Author
Owner

Full workspace test gate stopped in calternal-collab: test result: FAILED. 72 passed; 62 failed; 0 ignored; 0 measured; 0 filtered out; finished in 13.15s. Root cause is environmental FreeSpaceReserve refusal, not test timing or a weakened assertion: reserve 31695649792 bytes exceeds root-filesystem availability 18013233152 bytes. The required worktree TMPDIR was on that filesystem; shared jobs reduced free space during the build. I moved this job-specific scratch directory behind a symlink at the same required target/tmp path into /mnt/hdd/targets/reconcile-c1/tmp, which has ample free space. Production reserve rules and assertions stay unchanged. Retrying the blocked Rust gate once using the already-built targets; original output is retained in artifacts/reconcile-c1/04-rust-tests-root-reserve.log.

Full workspace test gate stopped in calternal-collab: test result: FAILED. 72 passed; 62 failed; 0 ignored; 0 measured; 0 filtered out; finished in 13.15s. Root cause is environmental FreeSpaceReserve refusal, not test timing or a weakened assertion: reserve 31695649792 bytes exceeds root-filesystem availability 18013233152 bytes. The required worktree TMPDIR was on that filesystem; shared jobs reduced free space during the build. I moved this job-specific scratch directory behind a symlink at the same required target/tmp path into /mnt/hdd/targets/reconcile-c1/tmp, which has ample free space. Production reserve rules and assertions stay unchanged. Retrying the blocked Rust gate once using the already-built targets; original output is retained in artifacts/reconcile-c1/04-rust-tests-root-reserve.log.
Author
Owner

The HDD temp-storage change resolved all 32 free-space failures. The cached rerun compiled only the server targets, then reached one SLOW-only Collab timeout:

edit made during the timer flush was never saved: Elapsed(())
test result: FAILED. 91 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 149.63s

The history dictionary durability test took over 60 seconds and passed. The failing persistence-race test then passed in isolation with the unchanged eight-second timeout and assertions:

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 91 filtered out; finished in 12.65s

The full command stops on the first failed package. I am continuing once with --no-fail-fast, excluding only the five packages already run (async-imap, calternal-api, calternal-auth, calternal-cli, calternal-collab). Their results are retained. This completes the remaining workspace coverage without repeating the earlier groups. No production code, test expectation or reserve changed.

The HDD temp-storage change resolved all 32 free-space failures. The cached rerun compiled only the server targets, then reached one SLOW-only Collab timeout: ``` edit made during the timer flush was never saved: Elapsed(()) test result: FAILED. 91 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 149.63s ``` The history dictionary durability test took over 60 seconds and passed. The failing persistence-race test then passed in isolation with the unchanged eight-second timeout and assertions: ``` test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 91 filtered out; finished in 12.65s ``` The full command stops on the first failed package. I am continuing once with `--no-fail-fast`, excluding only the five packages already run (async-imap, calternal-api, calternal-auth, calternal-cli, calternal-collab). Their results are retained. This completes the remaining workspace coverage without repeating the earlier groups. No production code, test expectation or reserve changed.
Author
Owner

Final ancestry audit: all 14 heads recorded at merge time are ancestors of 5b2825e6c. The live job/bash-calendar ref advanced after its merge from a2d343da3 to febe9ef8a. New commits are a6019dfe3 (tablet range title), 827c5e6a9 (Event touch/keyboard Undo tests), and febe9ef8a (stable-identity Event editing). They are not in this verified round. The other 13 branch refs still match the merged snapshots. Per the one-round verification rule, I am preserving the tested tree and flagging these later commits for the orchestrator rather than starting another merge/gate loop. Exact snapshots are retained in artifacts/merge32/branch-snapshot.txt.

Final ancestry audit: all 14 heads recorded at merge time are ancestors of 5b2825e6c. The live job/bash-calendar ref advanced after its merge from a2d343da3 to febe9ef8a. New commits are a6019dfe3 (tablet range title), 827c5e6a9 (Event touch/keyboard Undo tests), and febe9ef8a (stable-identity Event editing). They are not in this verified round. The other 13 branch refs still match the merged snapshots. Per the one-round verification rule, I am preserving the tested tree and flagging these later commits for the orchestrator rather than starting another merge/gate loop. Exact snapshots are retained in artifacts/merge32/branch-snapshot.txt.
Author
Owner

The corrected scratch-location workspace run has one SLOW-only failure: Files test internal_temp_paths_never_enter_index_during_atomic_write_reconcile_storm hit its existing five-minute bound at lib.rs:8292. Verbatim: writes, reconcile scans, and watcher adoption complete within five minutes: Elapsed(()) / test result: FAILED. 261 passed; 1 failed; 4 ignored; 0 measured; 0 filtered out; finished in 751.62s. No temp-path correctness assertion failed. Per the brief, I will not change or rerun this timing bound. Cargo stops at this crate by default; I am completing the remaining workspace crates without repeating completed suites, then running bun run check and bun run test. All 62 earlier collaboration disk-reserve failures are resolved by HDD-backed fixtures, with no code or reserve-policy change.

The corrected scratch-location workspace run has one SLOW-only failure: Files test internal_temp_paths_never_enter_index_during_atomic_write_reconcile_storm hit its existing five-minute bound at lib.rs:8292. Verbatim: writes, reconcile scans, and watcher adoption complete within five minutes: Elapsed(()) / test result: FAILED. 261 passed; 1 failed; 4 ignored; 0 measured; 0 filtered out; finished in 751.62s. No temp-path correctness assertion failed. Per the brief, I will not change or rerun this timing bound. Cargo stops at this crate by default; I am completing the remaining workspace crates without repeating completed suites, then running bun run check and bun run test. All 62 earlier collaboration disk-reserve failures are resolved by HDD-backed fixtures, with no code or reserve-policy change.
Author
Owner

Rust continuation findings (source still frozen at 5b2825e6c):

Files finishes with 262 passed, 1 failed, 4 ignored in 760.79s. The #1213 storm cleanup reports the original five-minute deadline cleanly: writes, reconcile scans, and watcher adoption complete within five minutes: Elapsed(()); no secondary JoinHandle or removed-Home error appears. No bound or assertion changed.

Mail finishes with 127 passed, 1 failed, 6 ignored in 43.24s. sync::tests::delta_catch_up_shares_the_bounded_window_budget_and_resumes reports first delta pass failed: Transport; classified log: WARN mail sync step failed step="cache" error_kind="storage". I am not classifying this storage error as SLOW without further evidence. One focused unchanged run is queued after the continuation. Full failure traces remain in artifacts/merge32/rust-test-continuation.log.

Rust continuation findings (source still frozen at 5b2825e6c): Files finishes with 262 passed, 1 failed, 4 ignored in 760.79s. The #1213 storm cleanup reports the original five-minute deadline cleanly: `writes, reconcile scans, and watcher adoption complete within five minutes: Elapsed(())`; no secondary JoinHandle or removed-Home error appears. No bound or assertion changed. Mail finishes with 127 passed, 1 failed, 6 ignored in 43.24s. `sync::tests::delta_catch_up_shares_the_bounded_window_budget_and_resumes` reports `first delta pass failed: Transport; classified log: WARN mail sync step failed step="cache" error_kind="storage"`. I am not classifying this storage error as SLOW without further evidence. One focused unchanged run is queued after the continuation. Full failure traces remain in artifacts/merge32/rust-test-continuation.log.
Author
Owner

Money continuation trace: 122 passed, 1 failed, 2 ignored in 781.49s. The malformed-input test failed in recheck_local_http at its unchanged ten-second TCP deadline (Elapsed(())), not at a status or data assertion.

The root volume recovered while verification ran: 251986907136 free bytes at the restore. I paused only Cargo’s parent, let the current Money suite exit, restored the owned temporary directory from the HDD to the real worktree target/tmp, and resumed Cargo. No test process was moved while running; TMPDIR retains its required worktree path. Remaining plugin/server suites run on the original volume. Source and all expectations remain unchanged. Files/Money timing failures and the classified Mail storage error each get one focused unchanged check after the continuation.

Money continuation trace: 122 passed, 1 failed, 2 ignored in 781.49s. The malformed-input test failed in recheck_local_http at its unchanged ten-second TCP deadline (`Elapsed(())`), not at a status or data assertion. The root volume recovered while verification ran: 251986907136 free bytes at the restore. I paused only Cargo’s parent, let the current Money suite exit, restored the owned temporary directory from the HDD to the real worktree target/tmp, and resumed Cargo. No test process was moved while running; TMPDIR retains its required worktree path. Remaining plugin/server suites run on the original volume. Source and all expectations remain unchanged. Files/Money timing failures and the classified Mail storage error each get one focused unchanged check after the continuation.
Author
Owner

Review found that an exact generic operation/predicate call-site proof could conceal a named callback from another caller. Added failing regressions, then constrained the proof to exact hidden_items -> retry_sqlite_busy caller hashes and exact named predicate helper hashes. Both safe/unsafe traversal orders and cycles retain the unresolved unsafe edge. Commit 18e37c351. Guard tests: Ran 140 tests in 0.062s; OK. perf-lint: PASS; 0 violations; 22544 scoped exceptions. Original candidate baseline was 22548: no rule count or limit increased. Restored eight pre-existing unresolved callback scopes which the initial proof had incorrectly removed. Read-only reviewer found no remaining blockers. Full Rust continuation is still running after the reported Files SLOW-only timeout.

Review found that an exact generic operation/predicate call-site proof could conceal a named callback from another caller. Added failing regressions, then constrained the proof to exact hidden_items -> retry_sqlite_busy caller hashes and exact named predicate helper hashes. Both safe/unsafe traversal orders and cycles retain the unresolved unsafe edge. Commit 18e37c351. Guard tests: Ran 140 tests in 0.062s; OK. perf-lint: PASS; 0 violations; 22544 scoped exceptions. Original candidate baseline was 22548: no rule count or limit increased. Restored eight pre-existing unresolved callback scopes which the initial proof had incorrectly removed. Read-only reviewer found no remaining blockers. Full Rust continuation is still running after the reported Files SLOW-only timeout.
Author
Owner

Full Rust continuation found a second SLOW-only failure: live_apps_run_in_separate_processes stopped at startup_search_reconciliation_keeps_calendar_writes_responsive_on_large_home. Exact assertion output: Calendar write p95 10.188288572s exceeded 10s. No timing threshold or assertion will be changed. The deterministic performance guard is now running. After the continuation completes, run only the three unvisited startup children (full_app_setup_session_config_and_backup, owning_session_freshness_protects_trash_and_calendar_grants, admin_money_jobs_are_content_free), not the wrapper again.

Full Rust continuation found a second SLOW-only failure: live_apps_run_in_separate_processes stopped at startup_search_reconciliation_keeps_calendar_writes_responsive_on_large_home. Exact assertion output: Calendar write p95 10.188288572s exceeded 10s. No timing threshold or assertion will be changed. The deterministic performance guard is now running. After the continuation completes, run only the three unvisited startup children (full_app_setup_session_config_and_backup, owning_session_freshness_protects_trash_and_calendar_grants, admin_money_jobs_are_content_free), not the wrapper again.
Author
Owner

The server deterministic guard now passes on HEAD 18e37c351d:

test deterministic_performance_guards ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 68.06s

The continuation finished through Tags. Its only failed target is the server live-app wrapper because of the previously reported Calendar p95 SLOW-only failure. Running only the three startup children that wrapper had not reached, then workspace doc tests and the web gates.

The server deterministic guard now passes on HEAD 18e37c351d4a9a185d527e70ae19d80a77eb6e8e: test deterministic_performance_guards ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 68.06s The continuation finished through Tags. Its only failed target is the server live-app wrapper because of the previously reported Calendar p95 SLOW-only failure. Running only the three startup children that wrapper had not reached, then workspace doc tests and the web gates.
Author
Owner

Final head: 0419170fe4

Reconcile-c1, issue #1122

Built

  • Refreshed six exact hidden_items source proofs after visibility retry changed the merged read graph. Added exact bounded retry-edge evidence. Kept unresolved callback debt for every unrelated caller; proofs require exact caller-chain and named-helper hashes. No threshold or rule was loosened. Original ratchet 22548 -> 22544. Exact comparison: zero new entries, four removed entries; every retained ledger record is unchanged, including its owner and reason.
  • Extended deterministic guard regressions for inline provider IO, named operation/predicate callbacks on other paths, altered predicate helpers, both traversal orders, and cyclic graphs. All 140 tests pass.
  • Settled independent source cleanup before the Money Undo refusal matrix snapshots its receipt. The reproduced difference was only the cleanup-owned paths field. Assertions and arithmetic remain unchanged. The original source is identical on merge31 and collabloss-1197; each focused branch run passed, consistent with scheduling dependence rather than date or merge interaction.

Commits
9f7df52c7 fix(perf): restore exact visibility retry proofs without growing debt
41102c015c test(money): settle source cleanup before snapshotting Undo receipts
18e37c351d fix(perf): scope retry proofs to exact caller and helper bodies
0419170fe4 fix(perf): preserve the original ownership of retained callback debt

Files
contracts/perf/{adoption-1058,exceptions,ratchet,registry}.json
scripts/perf_guards/{rules,test_rules}.py
crates/plugins/money/src/durable_import_tests.rs

Decisions

  • Source reclamation is a separate startup operation; finish it before testing refusal immutability. Do not weaken the existing receipt assertion or change production Money behavior.
  • Prove only the exact reviewed callback chain and helper bodies. Keep every ambiguous callback unresolved. Traversal work is bounded by functions multiplied by registered proof prefixes; no user-visible operation was added.
  • Use a worktree TMPDIR symlink into the dedicated HDD target directory. The root filesystem free-space reserve caused 62 collaboration test failures on the first gate attempt; moving scratch to HDD resolved that environment failure. No product rule changed.

Known gaps

  • Full workspace Rust gate has a SLOW-only Files stress failure: its five-minute completion deadline expired. No correctness assertion failed in that scenario. Preserve its timeout and assertions; do not claim the gate passed.
  • A second SLOW-only failure occurred in the server live-app wrapper: Calendar write p95 10.188288572s exceeded 10s. Its three unvisited startup children were each run once and passed. The server deterministic_performance_guards test passed.
  • Web check passed with one existing empty CSS ruleset warning in unchanged packages/ui/src/components/calendar/AttachmentDeck.svelte.
  • No UI source changed; no screenshots or UX changes apply. UX gaps closed/left: not applicable.
  • Read-only review found no remaining blockers after tightening callback proofs.
  • No pushes, deployments, or additional merges. The one authorized origin/dev merge reported Already up to date.

Gate output (verbatim excerpts; complete logs remain in artifacts/reconcile-c1)

(cd apps/web && bun install && bun run build) — exit 0; log: 01-web-build.log

✓ built in 1m 9s
✓ built in 87ms
✓ built in 2m 4s
Compressed 917 static variants; saved 21487054 bytes.

cargo fmt --check — exit 0; log: 02-fmt.log
No output.

cargo clippy --all-targets -- -D warnings — exit 0; log: 03-clippy.log

    Finished `dev` profile [unoptimized + debuginfo] target(s) in 8m 40s

cargo test --workspace -- --test-threads=4 — exit 101; log: 04-rust-tests.log

test result: FAILED. 261 passed; 1 failed; 4 ignored; 0 measured; 0 filtered out; finished in 751.62s

cargo test --no-fail-fast --lib --bins --tests -p calternal-plugin-mail -p calternal-plugin-money -p calternal-plugin-notes -p calternal-plugin-notifications -p calternal-plugin-photos -p calternal-plugin-video -p calternal-search -p calternal-server -p calternal-sync -p calternal-tags -- --test-threads=4 — exit 101; log: 04-rust-remaining.log

Calendar write p95 10.188288572s exceeded 10s
test result: FAILED. 271 passed; 1 failed; 12 ignored; 0 measured; 0 filtered out; finished in 276.75s
test deterministic_performance_guards has been running for over 60 seconds
test deterministic_performance_guards ... ok

Three unvisited isolated server startup children — exit 0; log: startup-admin_money_jobs_are_content_free.log

test wire::tests::admin_money_jobs_are_content_free ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 283 filtered out; finished in 29.83s

cargo test --workspace --doc -- --test-threads=4 — exit 0; log: 04-rust-doc.log

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

(cd apps/web && bun run check) — exit 0; log: 05-web-check.log

perf-lint: PASS; 0 violations; 22544 scoped exceptions
svelte-check found 0 errors and 1 warning in 1 file

(cd apps/web && VITEST_MAX_WORKERS=2 bun run test) — exit 0; log: 06-web-tests.log

Ran 140 tests in 0.118s
Ran 8 tests across 1 file. [1432.00ms]
 Test Files  287 passed (287)
      Tests  2036 passed (2036)
   Duration  547.20s (transform 29%, environment 25%, import 21%, tests 20%, setup 5%)

Final repo generator: scripts/perf-lint --adopt-7c — exit 0; log: perf-owned.log

perf-lint: PASS; 0 violations; 22544 scoped exceptions

Original branch comparisons (focused unchanged Money refusal matrix):

money-merge31.log
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 124 filtered out; finished in 21.35s
money-collabloss1197.log
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 124 filtered out; finished in 21.52s

Exact ledger comparison: 0 new entries; 4 removed entries; all retained records unchanged

Verification accounting: the original full Rust run stopped at Files. The continuation covered every later crate and stopped neither at the server timing failure nor at later targets. The live-app wrapper stopped at its sixth child; the last three children each ran once separately and passed. Workspace doc tests ran once. No correctness failure remains unexplained. Do not describe the full Rust gate as passing.

No test expectation, timeout, limit, or monetary arithmetic was weakened. No dependency was changed. Source comments were re-read. No UI control or runtime operation was added.

Cleanup confirmed: cargo clean removed 20758 files, 28.5GiB total. The dedicated /mnt/hdd/targets/reconcile-c1 directory, web build output, and temporary scratch link are gone. Logs and this report remain under artifacts/reconcile-c1. The worktree is clean.

Final head: 0419170fe456b58614befcb12d9c9d255118f1c0 Reconcile-c1, issue #1122 Built - Refreshed six exact hidden_items source proofs after visibility retry changed the merged read graph. Added exact bounded retry-edge evidence. Kept unresolved callback debt for every unrelated caller; proofs require exact caller-chain and named-helper hashes. No threshold or rule was loosened. Original ratchet 22548 -> 22544. Exact comparison: zero new entries, four removed entries; every retained ledger record is unchanged, including its owner and reason. - Extended deterministic guard regressions for inline provider IO, named operation/predicate callbacks on other paths, altered predicate helpers, both traversal orders, and cyclic graphs. All 140 tests pass. - Settled independent source cleanup before the Money Undo refusal matrix snapshots its receipt. The reproduced difference was only the cleanup-owned paths field. Assertions and arithmetic remain unchanged. The original source is identical on merge31 and collabloss-1197; each focused branch run passed, consistent with scheduling dependence rather than date or merge interaction. Commits 9f7df52c7 fix(perf): restore exact visibility retry proofs without growing debt 41102c015c20714d60c02788657700a8cd2815d9 test(money): settle source cleanup before snapshotting Undo receipts 18e37c351d4a9a185d527e70ae19d80a77eb6e8e fix(perf): scope retry proofs to exact caller and helper bodies 0419170fe456b58614befcb12d9c9d255118f1c0 fix(perf): preserve the original ownership of retained callback debt Files contracts/perf/{adoption-1058,exceptions,ratchet,registry}.json scripts/perf_guards/{rules,test_rules}.py crates/plugins/money/src/durable_import_tests.rs Decisions - Source reclamation is a separate startup operation; finish it before testing refusal immutability. Do not weaken the existing receipt assertion or change production Money behavior. - Prove only the exact reviewed callback chain and helper bodies. Keep every ambiguous callback unresolved. Traversal work is bounded by functions multiplied by registered proof prefixes; no user-visible operation was added. - Use a worktree TMPDIR symlink into the dedicated HDD target directory. The root filesystem free-space reserve caused 62 collaboration test failures on the first gate attempt; moving scratch to HDD resolved that environment failure. No product rule changed. Known gaps - Full workspace Rust gate has a SLOW-only Files stress failure: its five-minute completion deadline expired. No correctness assertion failed in that scenario. Preserve its timeout and assertions; do not claim the gate passed. - A second SLOW-only failure occurred in the server live-app wrapper: Calendar write p95 10.188288572s exceeded 10s. Its three unvisited startup children were each run once and passed. The server deterministic_performance_guards test passed. - Web check passed with one existing empty CSS ruleset warning in unchanged packages/ui/src/components/calendar/AttachmentDeck.svelte. - No UI source changed; no screenshots or UX changes apply. UX gaps closed/left: not applicable. - Read-only review found no remaining blockers after tightening callback proofs. - No pushes, deployments, or additional merges. The one authorized origin/dev merge reported Already up to date. Gate output (verbatim excerpts; complete logs remain in artifacts/reconcile-c1) (cd apps/web && bun install && bun run build) — exit 0; log: 01-web-build.log ```text ✓ built in 1m 9s ✓ built in 87ms ✓ built in 2m 4s Compressed 917 static variants; saved 21487054 bytes. ``` cargo fmt --check — exit 0; log: 02-fmt.log No output. cargo clippy --all-targets -- -D warnings — exit 0; log: 03-clippy.log ```text Finished `dev` profile [unoptimized + debuginfo] target(s) in 8m 40s ``` cargo test --workspace -- --test-threads=4 — exit 101; log: 04-rust-tests.log ```text test result: FAILED. 261 passed; 1 failed; 4 ignored; 0 measured; 0 filtered out; finished in 751.62s ``` cargo test --no-fail-fast --lib --bins --tests -p calternal-plugin-mail -p calternal-plugin-money -p calternal-plugin-notes -p calternal-plugin-notifications -p calternal-plugin-photos -p calternal-plugin-video -p calternal-search -p calternal-server -p calternal-sync -p calternal-tags -- --test-threads=4 — exit 101; log: 04-rust-remaining.log ```text Calendar write p95 10.188288572s exceeded 10s test result: FAILED. 271 passed; 1 failed; 12 ignored; 0 measured; 0 filtered out; finished in 276.75s test deterministic_performance_guards has been running for over 60 seconds test deterministic_performance_guards ... ok ``` Three unvisited isolated server startup children — exit 0; log: startup-admin_money_jobs_are_content_free.log ```text test wire::tests::admin_money_jobs_are_content_free ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 283 filtered out; finished in 29.83s ``` cargo test --workspace --doc -- --test-threads=4 — exit 0; log: 04-rust-doc.log ```text test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s ``` (cd apps/web && bun run check) — exit 0; log: 05-web-check.log ```text perf-lint: PASS; 0 violations; 22544 scoped exceptions svelte-check found 0 errors and 1 warning in 1 file ``` (cd apps/web && VITEST_MAX_WORKERS=2 bun run test) — exit 0; log: 06-web-tests.log ```text Ran 140 tests in 0.118s Ran 8 tests across 1 file. [1432.00ms] Test Files 287 passed (287) Tests 2036 passed (2036) Duration 547.20s (transform 29%, environment 25%, import 21%, tests 20%, setup 5%) ``` Final repo generator: scripts/perf-lint --adopt-7c — exit 0; log: perf-owned.log ```text perf-lint: PASS; 0 violations; 22544 scoped exceptions ``` Original branch comparisons (focused unchanged Money refusal matrix): ```text money-merge31.log test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 124 filtered out; finished in 21.35s money-collabloss1197.log test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 124 filtered out; finished in 21.52s ``` Exact ledger comparison: 0 new entries; 4 removed entries; all retained records unchanged Verification accounting: the original full Rust run stopped at Files. The continuation covered every later crate and stopped neither at the server timing failure nor at later targets. The live-app wrapper stopped at its sixth child; the last three children each ran once separately and passed. Workspace doc tests ran once. No correctness failure remains unexplained. Do not describe the full Rust gate as passing. No test expectation, timeout, limit, or monetary arithmetic was weakened. No dependency was changed. Source comments were re-read. No UI control or runtime operation was added. Cleanup confirmed: cargo clean removed 20758 files, 28.5GiB total. The dedicated /mnt/hdd/targets/reconcile-c1 directory, web build output, and temporary scratch link are gone. Logs and this report remain under artifacts/reconcile-c1. The worktree is clean.
Author
Owner

The original target-selection diagnostic reproduced the failure in 6.81s and printed only fixed metadata:

merge32 cache error discriminant=Discriminant(2) numeric_code=5
first delta pass failed: Transport; classified log:  WARN mail sync step failed step="cache" error_kind="storage"
test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 133 filtered out; finished in 6.81s

Code 5 is SQLite BUSY. This is a persistent lock-contention finding in the reduced workspace continuation context. The library-only and standalone probes pass, so their result does not resolve it. The context difference and the exact failing command remain in artifacts/merge32/mail-diagnostic-all-targets.log. No underlying error message or provider data was printed.

The temporary diagnostic is removed; git status is clean at 5b2825e6c. No assertion, fixture, timeout or retry limit changed. Mail source and its library dependency sources remain identical to origin/dev. Root cause and baseline runtime comparison remain open. This is not reported as a passing gate or dismissed as SLOW.

The original target-selection diagnostic reproduced the failure in 6.81s and printed only fixed metadata: ```text merge32 cache error discriminant=Discriminant(2) numeric_code=5 first delta pass failed: Transport; classified log: WARN mail sync step failed step="cache" error_kind="storage" test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 133 filtered out; finished in 6.81s ``` Code 5 is SQLite BUSY. This is a persistent lock-contention finding in the reduced workspace continuation context. The library-only and standalone probes pass, so their result does not resolve it. The context difference and the exact failing command remain in artifacts/merge32/mail-diagnostic-all-targets.log. No underlying error message or provider data was printed. The temporary diagnostic is removed; git status is clean at 5b2825e6c. No assertion, fixture, timeout or retry limit changed. Mail source and its library dependency sources remain identical to origin/dev. Root cause and baseline runtime comparison remain open. This is not reported as a passing gate or dismissed as SLOW.
Author
Owner

Merge32 report for #1122

Built: all fourteen branches were merged in the requested order with --no-ff. Each branch head recorded at its merge is an ancestor of HEAD. bash-calendar advanced during verification: this round contains a2d343da3; later commits a6019dfe3, 827c5e6a9 and febe9ef8a are not included and need the next round. The other thirteen heads still match their merged snapshots. origin/dev was fetched and merged once before gates; it was already up to date at 3601719b8. No push or deploy ran. No migration was added by these branches.

Integration fixes: combined shared primitive variants without duplicate definitions; kept PillGroup content-width behavior, Pill rowMenuAction/facet alignment, OverlaySurface full-viewport sheets and solid Card, formatter tooltip props, hidden-item actions, watcher cleanup and password tests. ActivityStack inherits size and uses three CSS deck depths. Money e2e routes the current production assets and waits for the first-visit Import pathname with its restoration query. No existing assertion or fixture was weakened.

Files: 170 merged files. Main integration files are packages/ui/src/components/{Card,Pill,PillGroup,OverlaySurface,StatusPill}.svelte, packages/ui/src/components/calendar/ActivityStack.svelte, packages/ui/src/tokens.css, packages/ui/README.md, apps/web/src/lib/editor/format/FormatButton.svelte, focused component tests, apps/web/e2e/{money,notes,photos,files,settings-review-50}.mjs and contracts/perf/*.json. Imported performance profiles and measurements remain in bench/ and docs/perf/. A new focused ActivityStack component test verifies its bounded deck and primary action.

Shared controls: Card owns surfaces, elevation and tints; Pill owns row/facet/menu/editor actions; PillGroup owns toolbars; OverlaySurface owns dialogs and sheets; StatusPill owns live action feedback. Feature files supply content and behavior.

Decisions: preserve the union of opt-in primitive props; normalize Card's glass alias to its card material; use separate compact surface and compact dialog tokens because the branches specify different widths; put formatter sizing in shared Pill props; use static CSS depths for the finite three-card deck. No new product behavior or design was chosen. Exact perf pins use the repo parser and retain every accepted limit. One removed dynamic-style scope lowers the material ratchet from 19 to 18 and the total from 22548 to 22547.

Expected integration cost: O(1), at most three deck cards; no new I/O, scan, observer or per-row layout read. This is a merge job, so no new perf-VM measurements ran. Branch measurements are preserved.

UX gaps closed: kept hidden-item actions and primary actions when combining the restyles; restored all shared opt-in controls; fixed the Money runner's asset and first-visit route synchronization. UX gaps left: the filed area-flow failures below. No screenshot sweep or adversarial matrix ran.

Full area flows ran once on each tree. Two focused baseline diagnostics resolve the earlier SLOW stops: Mail omits only the capture matrix; Money uses one width/scheme. They preserve every assertion and fixture; their temporary runner diff stays in artifacts/merge32/baseline-probe.diff. Area comparisons use real production web builds with macOS emulation and the same prebuilt bash-security server binary. This compares frontend origin/dev and merged behavior; it is not a baseline backend build comparison.

  • Mail: merged layout interactions pass, then prepared-image wait times out (#1316). The full baseline stopped earlier in a theme timeout. A focused baseline probe reaches the fixture and fails with unknown fixture action: prepared-images: its update falls through to the independent seed/else chain. The merged tree keeps the elif dispatch fix and reaches the later image timeout. Mail fails on both trees at different steps; exact baseline image rendering remains unconfirmed.
  • Calendar header: both merged and origin/dev pass tab selection, then fail the initial Today range assertion (October 20 vs October 7, #1313). The loader documents a fourteen-day forward contract; the test still asserts #549's earlier backward bounded range. Kept both behavior and assertion for owner resolution.
  • Money: the final setup passes the Import route check and reaches CSV Review. The unchanged four-check assertion counts the retired Totals checked list and gets zero (#1318). The full baseline run stopped earlier in a navigation timeout. A focused baseline probe reproduces the original /money vs /money/import route assertion, which the merged runner now passes. Both source trees have the new Check groups Cards, so the later selector mismatch is inherited in source; exact baseline CSV runtime reproduction remains unconfirmed. Initial manual-click and glob setup mistakes are retained in logs and corrected in later commits.
  • Agenda fan: both merged and origin/dev reach the Day grid and find the is-fan list hidden through the 90-second wait (#1314); merged 177 checks, baseline 174. No assertion changed.

Known gaps: these flows stop before their remaining acceptance steps. Do not read this report as all acceptance flows passing. Full web tests have five SLOW-only 5-second timeouts; the unchanged focused rerun passes all 95 tests. No secrets were displayed.

Head: 5b2825e6cd

Gate output (verbatim summary lines; full logs remain in artifacts/merge32):

cargo fmt --check — exit 0
(No output.)

cargo clippy --all-targets -- -D warnings — exit 0

    Finished `dev` profile [unoptimized + debuginfo] target(s) in 38m 39s

(cd apps/web && bun install) — exit 0

911 packages installed [4.90s]

(cd apps/web && bun run build) — exit 0

Compressed 914 static variants; saved 21486029 bytes.

(cd apps/web && bun run check) — exit 0

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

(cd apps/web && bun run test --maxWorkers=2) — exit 1

 Test Files  4 failed | 286 passed (290)
      Tests  5 failed | 2074 passed (2079)
   Duration  1591.25s (transform 42%, import 21%, environment 16%, tests 15%, setup 6%)

Focused unchanged timeout files plus ActivityStack — exit 0

 Test Files  5 passed (5)
      Tests  95 passed (95)
   Duration  115.80s (transform 66%, tests 13%, import 10%, environment 9%, setup 2%)

CARGO_TARGET_DIR=/mnt/hdd/targets/merge32 cargo test --workspace -- --test-threads=4 — exit 101

    Finished `test` profile [unoptimized + debuginfo] target(s) in 3m 39s
edit made during the timer flush was never saved: Elapsed(())
test result: FAILED. 91 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 149.63s

Focused unchanged collaboration regression — exit 0

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 91 filtered out; finished in 12.65s

The first Rust run failed the unchanged free-space reserve because the test Homes used the crowded root volume. I moved only this job’s temporary Home directory to the HDD and kept TMPDIR at the worktree path through a symlink. The cached full rerun then failed only the unchanged 8-second collaboration flush deadline. Its focused rerun passed. No timeout or assertion changed. The no-fail-fast continuation covers the remaining packages; separate doc tests cover the packages that the original fail-fast command passed before stopping.

Rust continuation command: CARGO_TARGET_DIR=/mnt/hdd/targets/merge32 cargo test --workspace --exclude async-imap --exclude calternal-api --exclude calternal-auth --exclude calternal-cli --exclude calternal-collab --no-fail-fast -- --test-threads=4. Its newly failed groups printed:

writes, reconcile scans, and watcher adoption complete within five minutes: Elapsed(())
test result: FAILED. 262 passed; 1 failed; 4 ignored; 0 measured; 0 filtered out; finished in 760.79s
first delta pass failed: Transport; classified log:  WARN mail sync step failed step="cache" error_kind="storage"
test result: FAILED. 127 passed; 1 failed; 6 ignored; 0 measured; 0 filtered out; finished in 43.24s
called `Result::unwrap()` on an `Err` value: Elapsed(())
test result: FAILED. 122 passed; 1 failed; 2 ignored; 0 measured; 0 filtered out; finished in 781.49s

The Money failure is the unchanged ten-second HTTP deadline. The Files failure is the unchanged five-minute storm bound. The Mail storage error is not assumed to be SLOW. When the root volume recovered to 251986907136 free bytes, I paused only Cargo’s parent, let Money finish, restored the real worktree target/tmp, and resumed the remaining suites. No running test had its temporary directory moved.

Earlier-package doc coverage command: CARGO_TARGET_DIR=/mnt/hdd/targets/merge32 cargo test -p async-imap -p calternal-api -p calternal-auth -p calternal-collab --doc --no-fail-fast -- --test-threads=4. CLI is a binary with no doc-test target.

Final verification outcome: NOT READY FOR MERGE. The requested gates and all four area flows ran. The persistent Mail storage failure is filed as #1339; the four area blockers are filed as #1313, #1314, #1316 and #1318. Later bash-calendar commits after a2d343da3 are outside this round. No push or deploy ran.

Rust continuation exit 101; all remaining package tests and doc tests finished. It records 2890 passing test executions and three failures. Earlier-package doc coverage exits 0. The server suite and its nine isolated live-app cases pass:

test wire::tests::live_apps_run_in_separate_processes ... ok
test result: ok. 272 passed; 0 failed; 12 ignored; 0 measured; 0 filtered out; finished in 371.95s
error: 3 targets failed:
    `-p calternal-plugin-files --lib`
    `-p calternal-plugin-mail --lib`
    `-p calternal-plugin-money --lib`

Focused original test binaries (same assertions and bounds):

Files atomic-write/reconcile storm — exit 0

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 266 filtered out; finished in 122.60s

Money malformed-input TCP round — exit 0

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 124 filtered out; finished in 3.10s

Mail delta catch-up — exit 101

test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 133 filtered out; finished in 9.58s

Mail diagnosis: #1339. Mail and its library dependency sources, and Cargo.lock, are unchanged from origin/dev. The unchanged workspace binary reproduces the failure in 9.58s. Temporary test-only diagnostics report only an error discriminant and numeric SQLite code. Standalone and library-only workspace contexts pass in 28.58s and 28.57s; the latter differs from the failing binary’s direct dependency fingerprints only for lightningcss. That difference does not establish the cause. The original target selection fails again:

merge32 cache error discriminant=Discriminant(2) numeric_code=5
test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 133 filtered out; finished in 6.81s

SQLite code 5 is BUSY. This persistent lock-contention finding in the reduced workspace continuation context is unresolved, and is not assumed to be SLOW. The temporary diagnostic was removed. No diagnostic code is committed; the shipping source still matches the source checked by the original gates. No assertion, fixture, timeout or retry limit changed. A separate baseline Mail runtime comparison was not made.

Cleanup — cargo clean exit 0; owned cleanup exit 0:

     Removed 22539 files, 33.6GiB total
Removed owned link /mnt/hdd/targets/merge32
Retained worktree target/tmp: a live shared sccache daemon uses it.
Removed owned output /home/kayg/Developer/calternal-wt/merge32/apps/web/build
Removed owned output /home/kayg/Developer/calternal-wt/merge32/apps/web/.svelte-kit
Removed borrowed e2e server copy
CARGO target directories and web build output are absent.

Cleanup gap: the worktree target/tmp remains because a live host-wide sccache daemon inherited it and other jobs use that daemon. Deleting it would disrupt their builds. Both CARGO target paths are removed, as are the web build, .svelte-kit output and borrowed server copy. Evidence logs and area captures remain in ignored artifacts/merge32; no review artifact was committed.

Final head: 5b2825e6cd. Final git status: clean.

Merge32 report for #1122 Built: all fourteen branches were merged in the requested order with --no-ff. Each branch head recorded at its merge is an ancestor of HEAD. bash-calendar advanced during verification: this round contains a2d343da3; later commits a6019dfe3, 827c5e6a9 and febe9ef8a are not included and need the next round. The other thirteen heads still match their merged snapshots. origin/dev was fetched and merged once before gates; it was already up to date at 3601719b8. No push or deploy ran. No migration was added by these branches. Integration fixes: combined shared primitive variants without duplicate definitions; kept PillGroup content-width behavior, Pill rowMenuAction/facet alignment, OverlaySurface full-viewport sheets and solid Card, formatter tooltip props, hidden-item actions, watcher cleanup and password tests. ActivityStack inherits size and uses three CSS deck depths. Money e2e routes the current production assets and waits for the first-visit Import pathname with its restoration query. No existing assertion or fixture was weakened. Files: 170 merged files. Main integration files are packages/ui/src/components/{Card,Pill,PillGroup,OverlaySurface,StatusPill}.svelte, packages/ui/src/components/calendar/ActivityStack.svelte, packages/ui/src/tokens.css, packages/ui/README.md, apps/web/src/lib/editor/format/FormatButton.svelte, focused component tests, apps/web/e2e/{money,notes,photos,files,settings-review-50}.mjs and contracts/perf/*.json. Imported performance profiles and measurements remain in bench/ and docs/perf/. A new focused ActivityStack component test verifies its bounded deck and primary action. Shared controls: Card owns surfaces, elevation and tints; Pill owns row/facet/menu/editor actions; PillGroup owns toolbars; OverlaySurface owns dialogs and sheets; StatusPill owns live action feedback. Feature files supply content and behavior. Decisions: preserve the union of opt-in primitive props; normalize Card's glass alias to its card material; use separate compact surface and compact dialog tokens because the branches specify different widths; put formatter sizing in shared Pill props; use static CSS depths for the finite three-card deck. No new product behavior or design was chosen. Exact perf pins use the repo parser and retain every accepted limit. One removed dynamic-style scope lowers the material ratchet from 19 to 18 and the total from 22548 to 22547. Expected integration cost: O(1), at most three deck cards; no new I/O, scan, observer or per-row layout read. This is a merge job, so no new perf-VM measurements ran. Branch measurements are preserved. UX gaps closed: kept hidden-item actions and primary actions when combining the restyles; restored all shared opt-in controls; fixed the Money runner's asset and first-visit route synchronization. UX gaps left: the filed area-flow failures below. No screenshot sweep or adversarial matrix ran. Full area flows ran once on each tree. Two focused baseline diagnostics resolve the earlier SLOW stops: Mail omits only the capture matrix; Money uses one width/scheme. They preserve every assertion and fixture; their temporary runner diff stays in artifacts/merge32/baseline-probe.diff. Area comparisons use real production web builds with macOS emulation and the same prebuilt bash-security server binary. This compares frontend origin/dev and merged behavior; it is not a baseline backend build comparison. - Mail: merged layout interactions pass, then prepared-image wait times out (#1316). The full baseline stopped earlier in a theme timeout. A focused baseline probe reaches the fixture and fails with unknown fixture action: prepared-images: its update falls through to the independent seed/else chain. The merged tree keeps the elif dispatch fix and reaches the later image timeout. Mail fails on both trees at different steps; exact baseline image rendering remains unconfirmed. - Calendar header: both merged and origin/dev pass tab selection, then fail the initial Today range assertion (October 20 vs October 7, #1313). The loader documents a fourteen-day forward contract; the test still asserts #549's earlier backward bounded range. Kept both behavior and assertion for owner resolution. - Money: the final setup passes the Import route check and reaches CSV Review. The unchanged four-check assertion counts the retired Totals checked list and gets zero (#1318). The full baseline run stopped earlier in a navigation timeout. A focused baseline probe reproduces the original /money vs /money/import route assertion, which the merged runner now passes. Both source trees have the new Check groups Cards, so the later selector mismatch is inherited in source; exact baseline CSV runtime reproduction remains unconfirmed. Initial manual-click and glob setup mistakes are retained in logs and corrected in later commits. - Agenda fan: both merged and origin/dev reach the Day grid and find the is-fan list hidden through the 90-second wait (#1314); merged 177 checks, baseline 174. No assertion changed. Known gaps: these flows stop before their remaining acceptance steps. Do not read this report as all acceptance flows passing. Full web tests have five SLOW-only 5-second timeouts; the unchanged focused rerun passes all 95 tests. No secrets were displayed. Head: 5b2825e6cdd16db6a0e32f0fc5aa385634c0b139 Gate output (verbatim summary lines; full logs remain in artifacts/merge32): `cargo fmt --check` — exit 0 (No output.) `cargo clippy --all-targets -- -D warnings` — exit 0 ```text Finished `dev` profile [unoptimized + debuginfo] target(s) in 38m 39s ``` `(cd apps/web && bun install)` — exit 0 ```text 911 packages installed [4.90s] ``` `(cd apps/web && bun run build)` — exit 0 ```text Compressed 914 static variants; saved 21486029 bytes. ``` `(cd apps/web && bun run check)` — exit 0 ```text perf-lint: PASS; 0 violations; 22547 scoped exceptions svelte-check found 0 errors and 4 warnings in 2 files ``` `(cd apps/web && bun run test --maxWorkers=2)` — exit 1 ```text Test Files 4 failed | 286 passed (290) Tests 5 failed | 2074 passed (2079) Duration 1591.25s (transform 42%, import 21%, environment 16%, tests 15%, setup 6%) ``` `Focused unchanged timeout files plus ActivityStack` — exit 0 ```text Test Files 5 passed (5) Tests 95 passed (95) Duration 115.80s (transform 66%, tests 13%, import 10%, environment 9%, setup 2%) ``` `CARGO_TARGET_DIR=/mnt/hdd/targets/merge32 cargo test --workspace -- --test-threads=4` — exit 101 ```text Finished `test` profile [unoptimized + debuginfo] target(s) in 3m 39s edit made during the timer flush was never saved: Elapsed(()) test result: FAILED. 91 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 149.63s ``` `Focused unchanged collaboration regression` — exit 0 ```text test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 91 filtered out; finished in 12.65s ``` The first Rust run failed the unchanged free-space reserve because the test Homes used the crowded root volume. I moved only this job’s temporary Home directory to the HDD and kept TMPDIR at the worktree path through a symlink. The cached full rerun then failed only the unchanged 8-second collaboration flush deadline. Its focused rerun passed. No timeout or assertion changed. The no-fail-fast continuation covers the remaining packages; separate doc tests cover the packages that the original fail-fast command passed before stopping. Rust continuation command: `CARGO_TARGET_DIR=/mnt/hdd/targets/merge32 cargo test --workspace --exclude async-imap --exclude calternal-api --exclude calternal-auth --exclude calternal-cli --exclude calternal-collab --no-fail-fast -- --test-threads=4`. Its newly failed groups printed: ```text writes, reconcile scans, and watcher adoption complete within five minutes: Elapsed(()) test result: FAILED. 262 passed; 1 failed; 4 ignored; 0 measured; 0 filtered out; finished in 760.79s first delta pass failed: Transport; classified log: WARN mail sync step failed step="cache" error_kind="storage" test result: FAILED. 127 passed; 1 failed; 6 ignored; 0 measured; 0 filtered out; finished in 43.24s called `Result::unwrap()` on an `Err` value: Elapsed(()) test result: FAILED. 122 passed; 1 failed; 2 ignored; 0 measured; 0 filtered out; finished in 781.49s ``` The Money failure is the unchanged ten-second HTTP deadline. The Files failure is the unchanged five-minute storm bound. The Mail storage error is not assumed to be SLOW. When the root volume recovered to 251986907136 free bytes, I paused only Cargo’s parent, let Money finish, restored the real worktree target/tmp, and resumed the remaining suites. No running test had its temporary directory moved. Earlier-package doc coverage command: `CARGO_TARGET_DIR=/mnt/hdd/targets/merge32 cargo test -p async-imap -p calternal-api -p calternal-auth -p calternal-collab --doc --no-fail-fast -- --test-threads=4`. CLI is a binary with no doc-test target. Final verification outcome: NOT READY FOR MERGE. The requested gates and all four area flows ran. The persistent Mail storage failure is filed as #1339; the four area blockers are filed as #1313, #1314, #1316 and #1318. Later bash-calendar commits after a2d343da3 are outside this round. No push or deploy ran. Rust continuation exit 101; all remaining package tests and doc tests finished. It records 2890 passing test executions and three failures. Earlier-package doc coverage exits 0. The server suite and its nine isolated live-app cases pass: ```text test wire::tests::live_apps_run_in_separate_processes ... ok test result: ok. 272 passed; 0 failed; 12 ignored; 0 measured; 0 filtered out; finished in 371.95s error: 3 targets failed: `-p calternal-plugin-files --lib` `-p calternal-plugin-mail --lib` `-p calternal-plugin-money --lib` ``` Focused original test binaries (same assertions and bounds): Files atomic-write/reconcile storm — exit 0 ```text test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 266 filtered out; finished in 122.60s ``` Money malformed-input TCP round — exit 0 ```text test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 124 filtered out; finished in 3.10s ``` Mail delta catch-up — exit 101 ```text test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 133 filtered out; finished in 9.58s ``` Mail diagnosis: #1339. Mail and its library dependency sources, and Cargo.lock, are unchanged from origin/dev. The unchanged workspace binary reproduces the failure in 9.58s. Temporary test-only diagnostics report only an error discriminant and numeric SQLite code. Standalone and library-only workspace contexts pass in 28.58s and 28.57s; the latter differs from the failing binary’s direct dependency fingerprints only for lightningcss. That difference does not establish the cause. The original target selection fails again: ```text merge32 cache error discriminant=Discriminant(2) numeric_code=5 test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 133 filtered out; finished in 6.81s ``` SQLite code 5 is BUSY. This persistent lock-contention finding in the reduced workspace continuation context is unresolved, and is not assumed to be SLOW. The temporary diagnostic was removed. No diagnostic code is committed; the shipping source still matches the source checked by the original gates. No assertion, fixture, timeout or retry limit changed. A separate baseline Mail runtime comparison was not made. Cleanup — cargo clean exit 0; owned cleanup exit 0: ```text Removed 22539 files, 33.6GiB total Removed owned link /mnt/hdd/targets/merge32 Retained worktree target/tmp: a live shared sccache daemon uses it. Removed owned output /home/kayg/Developer/calternal-wt/merge32/apps/web/build Removed owned output /home/kayg/Developer/calternal-wt/merge32/apps/web/.svelte-kit Removed borrowed e2e server copy CARGO target directories and web build output are absent. ``` Cleanup gap: the worktree target/tmp remains because a live host-wide sccache daemon inherited it and other jobs use that daemon. Deleting it would disrupt their builds. Both CARGO target paths are removed, as are the web build, .svelte-kit output and borrowed server copy. Evidence logs and area captures remain in ignored artifacts/merge32; no review artifact was committed. Final head: 5b2825e6cdd16db6a0e32f0fc5aa385634c0b139. Final git status: clean.
Author
Owner

Continuing merge32b on job/merge32, base/head 5b2825e6cd. Read the repository contracts and prior report. Investigating #1339 SQLite BUSY first, then the four area-flow contracts and five web timeouts. Will merge origin/dev once before final gates, keep atomic commits, and report READY or NOT READY with gate evidence. No push or deploy.

Continuing merge32b on job/merge32, base/head 5b2825e6cdd16db6a0e32f0fc5aa385634c0b139. Read the repository contracts and prior report. Investigating #1339 SQLite BUSY first, then the four area-flow contracts and five web timeouts. Will merge origin/dev once before final gates, keep atomic commits, and report READY or NOT READY with gate evidence. No push or deploy.
Author
Owner

Evidence so far:

  • The five previous web failures are: Agenda "runs the Journal false visibility action from its More menu (#1153)" and "keeps the shared Composer edit action current when a Log refreshes"; OverlaySurface "uses shared compact and medium geometry variants"; InfoPanel "shows Canvas membership with its source title and stable copy link"; StatRow "renders the four metrics once each: value row, supporting detail, then label". Each was a 5000ms timeout. Each failing file now passes alone, unchanged: 34, 27, 19 and 13 tests respectively. Uptime load averages are recorded in artifacts/merge32b/isolated-*.log (24.47 through 50.20).
  • #1313: DESIGN §38 explicitly sets the anchor plus 13 forward days. data.ts readRange adds one API carry-in day for overnight Logs. The old e2e asserted a backward range. Corrected the test to keep one carry-in day and assert the forward endpoint; product behavior stays unchanged.
  • #1318: Money Review uses Check groups with four article Cards behind See check details. Corrected the selector and disclose the details as a User. The four-check expectation and all Money logic and amounts stay unchanged.
  • #1316: remote::ContentJob documents that opening Mail never triggers preparation. The prepared-images fixture resets the source without delivery's enqueue. Corrected the fixture to queue both bounded mail.remote-content slots in the same transaction. The real worker and decoder still do preparation; all image-count and decode assertions remain.

A production frontend build passes. Focused area flows are running with macOS emulation and a copied prebuilt Oct 7 bash-notes2 server. Browser plugin not available; using repository Playwright runners. A workspace-context Rust test build is running for #1339. Temporary diagnostics report only static source locations and SQLite numeric codes, not query values or error messages.

Evidence so far: - The five previous web failures are: Agenda "runs the Journal false visibility action from its More menu (#1153)" and "keeps the shared Composer edit action current when a Log refreshes"; OverlaySurface "uses shared compact and medium geometry variants"; InfoPanel "shows Canvas membership with its source title and stable copy link"; StatRow "renders the four metrics once each: value row, supporting detail, then label". Each was a 5000ms timeout. Each failing file now passes alone, unchanged: 34, 27, 19 and 13 tests respectively. Uptime load averages are recorded in artifacts/merge32b/isolated-*.log (24.47 through 50.20). - #1313: DESIGN §38 explicitly sets the anchor plus 13 forward days. data.ts readRange adds one API carry-in day for overnight Logs. The old e2e asserted a backward range. Corrected the test to keep one carry-in day and assert the forward endpoint; product behavior stays unchanged. - #1318: Money Review uses Check groups with four article Cards behind See check details. Corrected the selector and disclose the details as a User. The four-check expectation and all Money logic and amounts stay unchanged. - #1316: remote::ContentJob documents that opening Mail never triggers preparation. The prepared-images fixture resets the source without delivery's enqueue. Corrected the fixture to queue both bounded mail.remote-content slots in the same transaction. The real worker and decoder still do preparation; all image-count and decode assertions remain. A production frontend build passes. Focused area flows are running with macOS emulation and a copied prebuilt Oct 7 bash-notes2 server. Browser plugin not available; using repository Playwright runners. A workspace-context Rust test build is running for #1339. Temporary diagnostics report only static source locations and SQLite numeric codes, not query values or error messages.
Author
Owner

Progress at 88fa7d54e:

  • #1316 complete production Mail layouts flow now exits 0: Mail layouts e2e passed; screenshots are in /home/kayg/Developer/calternal-wt/merge32/artifacts/merge32b/mail. Includes all 17 raster decode/count/natural-height checks and a clean console. The fixture delivery enqueue and shared macOS platform regression are committed as 796689bcc.
  • #1313 complete header matrix exits 0: calendar header e2e: all geometry checks passed. Forward fourteen-day Agenda plus one API carry-in day checks are committed as 88fa7d54e. Screenshots cover 390/820/1440, light/dark, macOS.
  • #1314 diagnosis identifies the cramped card: 1440px Week at zoom 160 is 83.65625px wide; .block.cramped .b-deck intentionally uses display:none. DESIGN §38 permits the compact count. The corrected test retains fan geometry for roomy cards, checks the full count for cramped cards, and still opens the full keyboard deck for both. Complete corrected matrix is running.
  • #1318 the current Review assertion passes (four Check groups Cards after disclosure). The borrowed Oct 7 server's build ID differs from this web build, so a persistent Update available toast covers Cancel import. Will use the branch's own server once its workspace build completes; Money product logic stays unchanged.
  • All four previously timed-out web files pass individually without changes. Harness tests: 16 passed, 2 skipped, 0 failed.
  • #1339 workspace test build is running. Added a one-attempt regression to prove whether Mail reserves the writer before reading its generation, rather than letting bounded retries hide a deferred upgrade. Numeric-code/static-location diagnostics remain temporary and will be removed before a product commit.

No push or deploy. No secret displayed.

Progress at 88fa7d54e: - #1316 complete production Mail layouts flow now exits 0: `Mail layouts e2e passed; screenshots are in /home/kayg/Developer/calternal-wt/merge32/artifacts/merge32b/mail`. Includes all 17 raster decode/count/natural-height checks and a clean console. The fixture delivery enqueue and shared macOS platform regression are committed as 796689bcc. - #1313 complete header matrix exits 0: `calendar header e2e: all geometry checks passed`. Forward fourteen-day Agenda plus one API carry-in day checks are committed as 88fa7d54e. Screenshots cover 390/820/1440, light/dark, macOS. - #1314 diagnosis identifies the cramped card: 1440px Week at zoom 160 is 83.65625px wide; .block.cramped .b-deck intentionally uses display:none. DESIGN §38 permits the compact count. The corrected test retains fan geometry for roomy cards, checks the full count for cramped cards, and still opens the full keyboard deck for both. Complete corrected matrix is running. - #1318 the current Review assertion passes (four Check groups Cards after disclosure). The borrowed Oct 7 server's build ID differs from this web build, so a persistent Update available toast covers Cancel import. Will use the branch's own server once its workspace build completes; Money product logic stays unchanged. - All four previously timed-out web files pass individually without changes. Harness tests: 16 passed, 2 skipped, 0 failed. - #1339 workspace test build is running. Added a one-attempt regression to prove whether Mail reserves the writer before reading its generation, rather than letting bounded retries hide a deferred upgrade. Numeric-code/static-location diagnostics remain temporary and will be removed before a product commit. No push or deploy. No secret displayed.
Author
Owner

#1339 reproduced in the workspace-context Mail test binary (calternal_plugin_mail-81e455bc4adbb477):

mail diagnostic store line=1764 code=Some("5")
mail diagnostic store line=1764 code=Some("5")
mail diagnostic store line=1764 code=Some("5")
mail diagnostic store line=1764 code=Some("5")
mail diagnostic store line=1764 code=Some("5")
mail diagnostic authority idle=1 size=1 checkpoint=CheckpointStatus { runs: 16, errors: 0, log_frames: 19005, checkpointed_frames: 19005, elapsed: 141.879285ms, busy: true }
test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 134 filtered out; finished in 17.76s

Line 1764 is the mail_thread_keys INSERT, the first main-Index write for that message. commit_window starts BEGIN DEFERRED and reads folder ownership, generation and message/thread state first. Maintenance can take the WAL writer lock between those reads and the first main write. Its TRUNCATE follows a complete PASSIVE pass above the 16 MiB threshold (19,005 frames here). The test has no workers or concurrent authority jobs; its authority connection is idle and its account commit already finished. The separate maintenance connection is the only other active writer in this isolated fixture. A pinned deferred reader cannot safely upgrade while that writer owns the lock, so SQLite returns BUSY at the upgrade instead of waiting with busy_timeout. This is a real product contention bug, not SLOW.

A new one-attempt regression holds BEGIN IMMEDIATE on the authority connection and changes the generation. Before the fix it fails at the same upgrade:

mail diagnostic store line=1808 code=Some("5")
one window attempt must wait before reading, rather than fail a deferred lock upgrade
test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 134 filtered out; finished in 0.85s

The product fix uses BEGIN IMMEDIATE in commit_window before any owner/generation read. The existing busy timeout now applies at writer admission. The admitted window must re-read the committed generation and refuse a stale one without publishing messages. No timeout or retry budget changed. There is no provider I/O under this lock. SQL statements and per-window bounds stay unchanged. See SQLite's transaction contract: https://www.sqlite.org/lang_transaction.html#deferred_immediate_and_exclusive_transactions

The temporary numeric/static-location diagnostics are removed. A fresh workspace-context build, the new regression, and 20 consecutive runs of the original delta test follow. Evidence logs remain under artifacts/merge32b/mail-lock-red.log and mail-delta-diagnostic.log.

#1339 reproduced in the workspace-context Mail test binary (calternal_plugin_mail-81e455bc4adbb477): ```text mail diagnostic store line=1764 code=Some("5") mail diagnostic store line=1764 code=Some("5") mail diagnostic store line=1764 code=Some("5") mail diagnostic store line=1764 code=Some("5") mail diagnostic store line=1764 code=Some("5") mail diagnostic authority idle=1 size=1 checkpoint=CheckpointStatus { runs: 16, errors: 0, log_frames: 19005, checkpointed_frames: 19005, elapsed: 141.879285ms, busy: true } test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 134 filtered out; finished in 17.76s ``` Line 1764 is the mail_thread_keys INSERT, the first main-Index write for that message. commit_window starts BEGIN DEFERRED and reads folder ownership, generation and message/thread state first. Maintenance can take the WAL writer lock between those reads and the first main write. Its TRUNCATE follows a complete PASSIVE pass above the 16 MiB threshold (19,005 frames here). The test has no workers or concurrent authority jobs; its authority connection is idle and its account commit already finished. The separate maintenance connection is the only other active writer in this isolated fixture. A pinned deferred reader cannot safely upgrade while that writer owns the lock, so SQLite returns BUSY at the upgrade instead of waiting with busy_timeout. This is a real product contention bug, not SLOW. A new one-attempt regression holds BEGIN IMMEDIATE on the authority connection and changes the generation. Before the fix it fails at the same upgrade: ```text mail diagnostic store line=1808 code=Some("5") one window attempt must wait before reading, rather than fail a deferred lock upgrade test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 134 filtered out; finished in 0.85s ``` The product fix uses BEGIN IMMEDIATE in commit_window before any owner/generation read. The existing busy timeout now applies at writer admission. The admitted window must re-read the committed generation and refuse a stale one without publishing messages. No timeout or retry budget changed. There is no provider I/O under this lock. SQL statements and per-window bounds stay unchanged. See SQLite's transaction contract: https://www.sqlite.org/lang_transaction.html#deferred_immediate_and_exclusive_transactions The temporary numeric/static-location diagnostics are removed. A fresh workspace-context build, the new regression, and 20 consecutive runs of the original delta test follow. Evidence logs remain under artifacts/merge32b/mail-lock-red.log and mail-delta-diagnostic.log.
Author
Owner

merge32b progress, head 0b4a3aca06: Mail #1339 has a product fix with no timeout or retry increase. The new lock-admission regression passes, the original workspace-built delta test passes 20/20 consecutive runs (22.18–32.15 s each), and the complete Mail suite passes 129 tests / 6 ignored / 0 failed. Per-crate clippy exits 0; fmt exits 0. Calendar #1313 and Mail #1316 complete their full area flows at all requested widths/themes with macOS emulation. CSV Review #1318 passes all six empty-state Review/cancellation captures; the flow next exposed a native-input locator blocked by the shared Checkbox indicator. Its enclosing 44 px label is being checked without changing Money logic or numbers. Agenda #1314 is running the final full flow after the cramped-card and deferred-focus fixture corrections. The required fetch/merge of origin/dev ran once: Already up to date, origin/dev remains 3601719b80. Full ordered gates follow.

merge32b progress, head 0b4a3aca06aabf85d388225006686a11de31fb2a: Mail #1339 has a product fix with no timeout or retry increase. The new lock-admission regression passes, the original workspace-built delta test passes 20/20 consecutive runs (22.18–32.15 s each), and the complete Mail suite passes 129 tests / 6 ignored / 0 failed. Per-crate clippy exits 0; fmt exits 0. Calendar #1313 and Mail #1316 complete their full area flows at all requested widths/themes with macOS emulation. CSV Review #1318 passes all six empty-state Review/cancellation captures; the flow next exposed a native-input locator blocked by the shared Checkbox indicator. Its enclosing 44 px label is being checked without changing Money logic or numbers. Agenda #1314 is running the final full flow after the cramped-card and deferred-focus fixture corrections. The required fetch/merge of origin/dev ran once: Already up to date, origin/dev remains 3601719b80a39f712daf07b37879b22929dfffa0. Full ordered gates follow.
Author
Owner

Production screenshot evidence for merge32b: 141 PNGs are attached to #1122. They use the real production app and macOS platform emulation. The full sets cover phone (390 px), tablet (820 px) and desktop (1440 px), light and dark. The orchestrator reviews visual quality.

Representative Agenda and CSV Review surfaces:

Mail and Calendar header sets are also attached. Every upload returned HTTP 201. Local attachment map: artifacts/merge32b/attachments.json.

Production screenshot evidence for merge32b: 141 PNGs are attached to #1122. They use the real production app and macOS platform emulation. The full sets cover phone (390 px), tablet (820 px) and desktop (1440 px), light and dark. The orchestrator reviews visual quality. Representative Agenda and CSV Review surfaces: - [agenda-390-light-unfocused.png](https://git.kayg.org/attachments/1dea97f1-6ea5-4d5c-84aa-469b5f19d343) - [agenda-390-dark-unfocused.png](https://git.kayg.org/attachments/2c0ccfa7-2717-4f8d-b6fd-e98e5314de05) - [agenda-820-light-unfocused.png](https://git.kayg.org/attachments/7c35d393-218e-41d2-a58d-deeb36c8bd48) - [agenda-820-dark-unfocused.png](https://git.kayg.org/attachments/f483770a-bf55-4370-9be7-9a5fe46f64df) - [agenda-1440-light-unfocused.png](https://git.kayg.org/attachments/5a00be99-98fc-447f-9269-ee7ac5ee4967) - [agenda-1440-dark-unfocused.png](https://git.kayg.org/attachments/d9303447-e357-4a23-a621-ecb8fee9b2f7) - [money-import-review-empty-light-390.png](https://git.kayg.org/attachments/d67fffad-58c2-4110-b2ff-2ce5c7445f0d) - [money-import-review-empty-dark-390.png](https://git.kayg.org/attachments/8888ca6e-de4c-4e1c-a866-6517db6ef568) - [money-import-review-empty-light-820.png](https://git.kayg.org/attachments/840bf217-4aac-4005-8384-2f4cde166a0b) - [money-import-review-empty-dark-820.png](https://git.kayg.org/attachments/a48bc5ed-aa00-4891-a822-4a5123c7e7fc) - [money-import-review-empty-light-1440.png](https://git.kayg.org/attachments/8cce2986-c2e2-4193-a1fd-e8010fed0f86) - [money-import-review-empty-dark-1440.png](https://git.kayg.org/attachments/ec10ed57-d568-4c39-b87f-3f976ff43eee) Mail and Calendar header sets are also attached. Every upload returned HTTP 201. Local attachment map: artifacts/merge32b/attachments.json.
Author
Owner

Found during merge32b (#1122), after fixing the current CSV Review selector (#1318). A focused production User flow preserves all numeric and Markdown assertions and omits only screenshot loops. It passes Budget creation, Category and Account creation, inline assignment, register posting, tag rendering and the displayed derived values. It then fails assertPersistedMonthRows: the original regular expression anchors the final Transaction row at end of file, but the file has an additional empty child line - notes:: "". The top-level Transaction and numeric values match.

DESIGN §48 separates Transaction notes from the Payee. The #1130 JSON property tests admit empty notes. The Money TransactionForm and plugin store have no diff from origin/dev 3601719b8, so this serialization behavior is pre-existing. It causes no data loss, corruption or changed balances.

The owner rule forbids changing an existing expectation unless the issue changes that behavior. #1318 changes the Review contract, not this file expectation. I kept the original anchored regular expression and all source values unchanged. Owner follow-up: decide whether a new Transaction with empty Notes should omit the child line, or whether the exact e2e expectation should include it. No Money product change was made.

Evidence: artifacts/merge32b/money-numeric-probe2.log. The full Money area flow cannot be reported as passing to the end until this preserved expectation is resolved.

Found during merge32b (#1122), after fixing the current CSV Review selector (#1318). A focused production User flow preserves all numeric and Markdown assertions and omits only screenshot loops. It passes Budget creation, Category and Account creation, inline assignment, register posting, tag rendering and the displayed derived values. It then fails assertPersistedMonthRows: the original regular expression anchors the final Transaction row at end of file, but the file has an additional empty child line ` - notes:: ""`. The top-level Transaction and numeric values match. DESIGN §48 separates Transaction notes from the Payee. The #1130 JSON property tests admit empty notes. The Money TransactionForm and plugin store have no diff from origin/dev 3601719b8, so this serialization behavior is pre-existing. It causes no data loss, corruption or changed balances. The owner rule forbids changing an existing expectation unless the issue changes that behavior. #1318 changes the Review contract, not this file expectation. I kept the original anchored regular expression and all source values unchanged. Owner follow-up: decide whether a new Transaction with empty Notes should omit the child line, or whether the exact e2e expectation should include it. No Money product change was made. Evidence: artifacts/merge32b/money-numeric-probe2.log. The full Money area flow cannot be reported as passing to the end until this preserved expectation is resolved.
Author
Owner

Money landing does not select a refreshed Budget after CSV Review cancellation.

Observed in merge32b, head ed12462cee, own production build and server. The fixture creates Household, opens CSV Review, then cancels. Job DELETE returns 204 and Review closes. The existing assertion confirms cancellation creates no new Budget. The route then remains /money and shows No budget yet for 30 seconds.

Diagnostic output, verbatim:

CATALOG DIAGNOSTIC {"serverStatus":200,"serverIds":["household"],"cachedIds":["household"],"empty":true}
RESTORE DIAGNOSTIC {"route":"/money","step":null,"alerts":[],"visible":false,"heading":[]}

Source: apps/web/src/routes/money/+page.svelte calls openFirstBudget once. loadBudgets can return the cached empty array while it refreshes the catalog. The page selects its empty state from that array and does not select a Budget when the catalog refresh completes. The relevant page, layout and store are unchanged from origin/dev 3601719b80. This establishes pre-existing source behavior; a complete baseline runtime replay was not run.

No data loss was observed. The API and client cache both retain Household. The merge32b brief forbids Money logic changes, so this finding is filed without changing product behavior or weakening the route assertion. This blocks completion of the full Money area runner after populated Review cancellation. DESIGN §48 requires the Budget view to remain reachable.

Evidence: artifacts/merge32b/money-catalog-diagnostic.log and screenshots in artifacts/merge32b/money-catalog-diagnostic/. A fix should select the refreshed existing Budget and add a focused regression for an initially empty cached catalog.

Money landing does not select a refreshed Budget after CSV Review cancellation. Observed in merge32b, head ed12462cee1edea9e60f4817fba6373d831010bb, own production build and server. The fixture creates Household, opens CSV Review, then cancels. Job DELETE returns 204 and Review closes. The existing assertion confirms cancellation creates no new Budget. The route then remains /money and shows No budget yet for 30 seconds. Diagnostic output, verbatim: ``` CATALOG DIAGNOSTIC {"serverStatus":200,"serverIds":["household"],"cachedIds":["household"],"empty":true} RESTORE DIAGNOSTIC {"route":"/money","step":null,"alerts":[],"visible":false,"heading":[]} ``` Source: apps/web/src/routes/money/+page.svelte calls openFirstBudget once. loadBudgets can return the cached empty array while it refreshes the catalog. The page selects its empty state from that array and does not select a Budget when the catalog refresh completes. The relevant page, layout and store are unchanged from origin/dev 3601719b80a39f712daf07b37879b22929dfffa0. This establishes pre-existing source behavior; a complete baseline runtime replay was not run. No data loss was observed. The API and client cache both retain Household. The merge32b brief forbids Money logic changes, so this finding is filed without changing product behavior or weakening the route assertion. This blocks completion of the full Money area runner after populated Review cancellation. DESIGN §48 requires the Budget view to remain reachable. Evidence: artifacts/merge32b/money-catalog-diagnostic.log and screenshots in artifacts/merge32b/money-catalog-diagnostic/. A fix should select the refreshed existing Budget and add a focused regression for an initially empty cached catalog.
Author
Owner

merge32b report (#1122)

READY

All six ordered gates pass. The requested lock and contract failures are fixed. The two remaining Money findings (#1343 and #1347) are filed, with no observed data loss, crash, security hole or sync collision. They do not block integration under the owner policy. The full Money area runner is NOT reported as passing.
Head: ed12462cee.
Base: 5b2825e6cd.
Origin/dev after the required single fetch and merge: 3601719b80. Git reported Already up to date.

Built

  • #1339: Mail reserves the SQLite writer before it reads a mailbox window. No timeout or retry budget changed. The maintenance connection's WAL TRUNCATE conflicted with the deferred reader's first write. The new one-attempt authority contention regression fails before the fix and passes after it. The original workspace-built catch-up test passes 20 consecutive runs. All Mail tests pass (129 passed, 6 ignored).
  • #1318: CSV Review reads the disclosed Check groups Cards. It still checks exactly four groups and one sample row. Cancellation finishes before capture contexts close. Tests activate shared Checkbox labels and submit the actual Account form. Money product logic and all numeric and exact Markdown expectations stay unchanged. The test waits for the import route and the restored Month route before using their menus. Eight atomic commits cover the seven changed files.
  • #1316: the prepared-image fixture enqueues delivery preparation. The real worker, sanitizer and decoder prepare 17 images. Mail uses the shared configurable macOS emulation helper. Full Mail layout flow passes.
  • #1313: initial Today reads the anchor and next 13 days, plus one API carry-in day for overnight Log entries. This follows DESIGN §38. Full Calendar header matrix passes. The old expectation was pre-existing on origin/dev.
  • #1314: cramped grid cards show the full attachment count; roomy cards keep the fan checks. Both still open the full keyboard deck. Quick Look waits for the shared deferred focus trap before testing Escape. Full flow passes 36 layouts and all later interactions. The old expectation was pre-existing on origin/dev.

Files

crates/plugins/mail/src/cache/store.rs
apps/web/e2e/money.mjs
apps/web/e2e/calendar.mjs
apps/web/e2e/agenda-decks-822.mjs
apps/web/e2e/mail-layouts.mjs
apps/web/e2e/harness.test.mjs
tests/adversarial/mail_screenshot_fixture.py

Earlier web failures

  1. Agenda list > runs the Journal false visibility action from its More menu (#1153).
  2. Agenda list > keeps the shared Composer edit action current when a Log refreshes.
  3. OverlaySurface presentation sheet chrome > uses shared compact and medium geometry variants.
  4. InfoPanel > shows Canvas membership with its source title and stable copy link.
  5. StatRow summary cards > renders the four metrics once each: value row, supporting detail, then label.

Each of the four affected files ran alone with uptime recorded. All passed: 34, 27, 19 and 13 tests. No expectation or timeout changed. Isolated load averages ranged from 24.47 to 50.20. Exact output is in isolated-*.log.

UX gaps closed

The review fixture uses the current shared Cards. Browser contexts do not abort import cancellation. Starter Category selection uses the real 44 px labels. Account submission does not depend on toast expiry. Mail images use delivery-time work. Narrow Calendar cards retain their count and their keyboard deck. Keyboard Escape is tested after Quick Look owns focus.

UX gaps left and known gaps

#1343: the focused Money User flow passes displayed numbers, then the original exact Month regex rejects an empty notes:: "" child after its last Transaction. The Transaction row and amounts match. Product code is unchanged from origin/dev. This is a harmless serialization/test mismatch. The existing expectation is preserved for owner review. The full Money area flow is not reported as passing to the end.

#1347: after populated Review cancellation returns 204 and closes, /money shows No budget yet even though the API and refreshed client cache both contain Household. The landing page selects the old empty cached catalog once and does not react to its refresh. Relevant product files are unchanged from origin/dev. No complete baseline runtime replay was run. No Budget was lost. The brief forbids Money logic changes; this User flow gap is filed. The runner stops at its preserved restoration assertion.

#1314 also records the existing prepaint Escape edge: before the deferred trap claims focus, the opener can handle Escape. The test waits for keyboard ownership. No shared focus behavior changed.

Decisions

No new product design. The fixes follow DESIGN §§2, 38, 45 and 48. Writer admission uses the existing authority pattern and busy timeout. No dependency, migration, visual control or user-visible operation was added. Existing visible controls remain the shared Checkbox, Pill, Card, AttachmentDeck and Quick Look.

The lock-admission change is O(1). Window work stays O(messages). The existing budget is 80 UIDs per window and 100 windows per pass. The repeat fixture processes 8,000 messages, then resumes for the final 100. The 8,100-message repeat scenario takes 22.18–32.15 seconds per run on this loaded host. These are test timings, not a perf baseline. No perf VM benchmark was required for this verification job.

Evidence

141 production screenshots are attached to #1122: real app, macOS emulation, 390/820/1440 px, light/dark. Mail, Calendar headers and Agenda matrices pass. Money empty-state and CSV Review captures cover all six width/theme combinations; later Budget captures are partial because the full runner meets the filed gaps. Mail used the prebuilt backend with current-build assets; The final Agenda run used this branch server. The Mail prepared-image path uses the real delivery worker. The final workspace server and Mail tests pass. The gallery and attachment map remain in artifacts/merge32b. The orchestrator reviews visual quality. No screenshots were committed.

Code review

A read-only review found no Critical or Important issues. One optional test improvement remains: separately assert the unchanged generation cursor in the new stale-window regression, which currently asserts zero messages. The product checks generation before mutation. Existing catch-up/cursor tests pass.

Gates

The required fetch and origin/dev merge ran once before these gates. All ran in the requested order. No SLOW-only failure or timeout rerun was needed in this final gate round. Full logs, load records and exit codes are attached in the evidence archive. These excerpts are verbatim.

  1. cd apps/web && bun run build, exit 0:
Compressed 914 static variants; saved 21486004 bytes.
  1. cargo fmt --check, exit 0. No output.
  2. cargo clippy --all-targets -- -D warnings, exit 0:
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 15m 27s
  1. CARGO_TARGET_DIR=/mnt/hdd/targets/jobs/merge32 cargo test --workspace --no-fail-fast -- --test-threads=4, exit 0. Every unit, integration and doc-test result passes. Relevant excerpts (Mail, Money plugin, Notes plugin, server):
    Finished `test` profile [unoptimized + debuginfo] target(s) in 5m 18s
test result: ok. 129 passed; 0 failed; 6 ignored; 0 measured; 0 filtered out; finished in 54.74s
test result: ok. 123 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 109.99s
test result: ok. 314 passed; 0 failed; 4 ignored; 0 measured; 0 filtered out; finished in 288.33s
test result: ok. 272 passed; 0 failed; 12 ignored; 0 measured; 0 filtered out; finished in 162.49s
  1. cd apps/web && bun run check, exit 0:
perf-lint: PASS; 0 violations; 22547 scoped exceptions
svelte-check found 0 errors and 4 warnings in 2 files
  1. cd apps/web && bun run test --maxWorkers=2, exit 0:
 Test Files  291 passed (291)
      Tests  2081 passed (2081)
   Start at  11:50:19
   Duration  325.95s (transform 27%, environment 27%, import 22%, tests 18%, setup 6%)

The four check warnings and jsdom scrollTo/CSS diagnostics are retained in the logs. They did not fail a gate. The original five web failures pass both their isolated reruns and this full suite. The original Mail catch-up test has 20 consecutive exit-0 logs. The deterministic one-attempt writer-admission test was red before the fix and green after it.

Browser output, verbatim:

calendar header e2e: all geometry checks passed
PASS #822 media contract: 9 finite local checks
PASS #822: 36 production layouts; no item overlap or escaping thumbnail; macOS screenshots in /home/kayg/Developer/calternal-wt/merge32/artifacts/merge32b/agenda
Mail layouts e2e passed; screenshots are in /home/kayg/Developer/calternal-wt/merge32/artifacts/merge32b/mail

The full Agenda output additionally records 36 production layouts without item overlap or escaping thumbnails. Mail's complete runner exits 0 with all 17 prepared images rendered and decoded, no external requests, natural frame height and a clean console. See their complete logs for exact output and assertions.

This continuation ran the requested focused reliability and browser scenarios, not a fresh full e2e/adversarial matrix. No new endpoint or API contract was added. Earlier merge32 matrix findings remain on #1122; this report does not claim a new staging or Mac interop pass.

Cleanup

Completed. Cargo output, verbatim:

     Removed 19295 files, 22.0GiB total

The owned HDD target is empty. Web build and .svelte-kit output and the borrowed server artifact were removed. Reports, logs and screenshots remain. No push, deployment, issue closure or merge into dev. Git status is clean.

Download exact gate and focused evidence logs.

# merge32b report (#1122) READY All six ordered gates pass. The requested lock and contract failures are fixed. The two remaining Money findings (#1343 and #1347) are filed, with no observed data loss, crash, security hole or sync collision. They do not block integration under the owner policy. The full Money area runner is NOT reported as passing. Head: ed12462cee1edea9e60f4817fba6373d831010bb. Base: 5b2825e6cdd16db6a0e32f0fc5aa385634c0b139. Origin/dev after the required single fetch and merge: 3601719b80a39f712daf07b37879b22929dfffa0. Git reported Already up to date. ## Built - #1339: Mail reserves the SQLite writer before it reads a mailbox window. No timeout or retry budget changed. The maintenance connection's WAL TRUNCATE conflicted with the deferred reader's first write. The new one-attempt authority contention regression fails before the fix and passes after it. The original workspace-built catch-up test passes 20 consecutive runs. All Mail tests pass (129 passed, 6 ignored). - #1318: CSV Review reads the disclosed Check groups Cards. It still checks exactly four groups and one sample row. Cancellation finishes before capture contexts close. Tests activate shared Checkbox labels and submit the actual Account form. Money product logic and all numeric and exact Markdown expectations stay unchanged. The test waits for the import route and the restored Month route before using their menus. Eight atomic commits cover the seven changed files. - #1316: the prepared-image fixture enqueues delivery preparation. The real worker, sanitizer and decoder prepare 17 images. Mail uses the shared configurable macOS emulation helper. Full Mail layout flow passes. - #1313: initial Today reads the anchor and next 13 days, plus one API carry-in day for overnight Log entries. This follows DESIGN §38. Full Calendar header matrix passes. The old expectation was pre-existing on origin/dev. - #1314: cramped grid cards show the full attachment count; roomy cards keep the fan checks. Both still open the full keyboard deck. Quick Look waits for the shared deferred focus trap before testing Escape. Full flow passes 36 layouts and all later interactions. The old expectation was pre-existing on origin/dev. ## Files crates/plugins/mail/src/cache/store.rs apps/web/e2e/money.mjs apps/web/e2e/calendar.mjs apps/web/e2e/agenda-decks-822.mjs apps/web/e2e/mail-layouts.mjs apps/web/e2e/harness.test.mjs tests/adversarial/mail_screenshot_fixture.py ## Earlier web failures 1. Agenda list > runs the Journal false visibility action from its More menu (#1153). 2. Agenda list > keeps the shared Composer edit action current when a Log refreshes. 3. OverlaySurface presentation sheet chrome > uses shared compact and medium geometry variants. 4. InfoPanel > shows Canvas membership with its source title and stable copy link. 5. StatRow summary cards > renders the four metrics once each: value row, supporting detail, then label. Each of the four affected files ran alone with uptime recorded. All passed: 34, 27, 19 and 13 tests. No expectation or timeout changed. Isolated load averages ranged from 24.47 to 50.20. Exact output is in isolated-*.log. ## UX gaps closed The review fixture uses the current shared Cards. Browser contexts do not abort import cancellation. Starter Category selection uses the real 44 px labels. Account submission does not depend on toast expiry. Mail images use delivery-time work. Narrow Calendar cards retain their count and their keyboard deck. Keyboard Escape is tested after Quick Look owns focus. ## UX gaps left and known gaps #1343: the focused Money User flow passes displayed numbers, then the original exact Month regex rejects an empty notes:: "" child after its last Transaction. The Transaction row and amounts match. Product code is unchanged from origin/dev. This is a harmless serialization/test mismatch. The existing expectation is preserved for owner review. The full Money area flow is not reported as passing to the end. #1347: after populated Review cancellation returns 204 and closes, /money shows No budget yet even though the API and refreshed client cache both contain Household. The landing page selects the old empty cached catalog once and does not react to its refresh. Relevant product files are unchanged from origin/dev. No complete baseline runtime replay was run. No Budget was lost. The brief forbids Money logic changes; this User flow gap is filed. The runner stops at its preserved restoration assertion. #1314 also records the existing prepaint Escape edge: before the deferred trap claims focus, the opener can handle Escape. The test waits for keyboard ownership. No shared focus behavior changed. ## Decisions No new product design. The fixes follow DESIGN §§2, 38, 45 and 48. Writer admission uses the existing authority pattern and busy timeout. No dependency, migration, visual control or user-visible operation was added. Existing visible controls remain the shared Checkbox, Pill, Card, AttachmentDeck and Quick Look. The lock-admission change is O(1). Window work stays O(messages). The existing budget is 80 UIDs per window and 100 windows per pass. The repeat fixture processes 8,000 messages, then resumes for the final 100. The 8,100-message repeat scenario takes 22.18–32.15 seconds per run on this loaded host. These are test timings, not a perf baseline. No perf VM benchmark was required for this verification job. ## Evidence 141 production screenshots are attached to #1122: real app, macOS emulation, 390/820/1440 px, light/dark. Mail, Calendar headers and Agenda matrices pass. Money empty-state and CSV Review captures cover all six width/theme combinations; later Budget captures are partial because the full runner meets the filed gaps. Mail used the prebuilt backend with current-build assets; The final Agenda run used this branch server. The Mail prepared-image path uses the real delivery worker. The final workspace server and Mail tests pass. The gallery and attachment map remain in artifacts/merge32b. The orchestrator reviews visual quality. No screenshots were committed. ## Code review A read-only review found no Critical or Important issues. One optional test improvement remains: separately assert the unchanged generation cursor in the new stale-window regression, which currently asserts zero messages. The product checks generation before mutation. Existing catch-up/cursor tests pass. ## Gates The required fetch and origin/dev merge ran once before these gates. All ran in the requested order. No SLOW-only failure or timeout rerun was needed in this final gate round. Full logs, load records and exit codes are attached in the evidence archive. These excerpts are verbatim. 1. `cd apps/web && bun run build`, exit 0: ``` Compressed 914 static variants; saved 21486004 bytes. ``` 2. `cargo fmt --check`, exit 0. No output. 3. `cargo clippy --all-targets -- -D warnings`, exit 0: ``` Finished `dev` profile [unoptimized + debuginfo] target(s) in 15m 27s ``` 4. `CARGO_TARGET_DIR=/mnt/hdd/targets/jobs/merge32 cargo test --workspace --no-fail-fast -- --test-threads=4`, exit 0. Every unit, integration and doc-test result passes. Relevant excerpts (Mail, Money plugin, Notes plugin, server): ``` Finished `test` profile [unoptimized + debuginfo] target(s) in 5m 18s test result: ok. 129 passed; 0 failed; 6 ignored; 0 measured; 0 filtered out; finished in 54.74s test result: ok. 123 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 109.99s test result: ok. 314 passed; 0 failed; 4 ignored; 0 measured; 0 filtered out; finished in 288.33s test result: ok. 272 passed; 0 failed; 12 ignored; 0 measured; 0 filtered out; finished in 162.49s ``` 5. `cd apps/web && bun run check`, exit 0: ``` perf-lint: PASS; 0 violations; 22547 scoped exceptions svelte-check found 0 errors and 4 warnings in 2 files ``` 6. `cd apps/web && bun run test --maxWorkers=2`, exit 0: ``` Test Files 291 passed (291) Tests 2081 passed (2081) Start at 11:50:19 Duration 325.95s (transform 27%, environment 27%, import 22%, tests 18%, setup 6%) ``` The four check warnings and jsdom scrollTo/CSS diagnostics are retained in the logs. They did not fail a gate. The original five web failures pass both their isolated reruns and this full suite. The original Mail catch-up test has 20 consecutive exit-0 logs. The deterministic one-attempt writer-admission test was red before the fix and green after it. Browser output, verbatim: ``` calendar header e2e: all geometry checks passed PASS #822 media contract: 9 finite local checks PASS #822: 36 production layouts; no item overlap or escaping thumbnail; macOS screenshots in /home/kayg/Developer/calternal-wt/merge32/artifacts/merge32b/agenda Mail layouts e2e passed; screenshots are in /home/kayg/Developer/calternal-wt/merge32/artifacts/merge32b/mail ``` The full Agenda output additionally records 36 production layouts without item overlap or escaping thumbnails. Mail's complete runner exits 0 with all 17 prepared images rendered and decoded, no external requests, natural frame height and a clean console. See their complete logs for exact output and assertions. This continuation ran the requested focused reliability and browser scenarios, not a fresh full e2e/adversarial matrix. No new endpoint or API contract was added. Earlier merge32 matrix findings remain on #1122; this report does not claim a new staging or Mac interop pass. ## Cleanup Completed. Cargo output, verbatim: ``` Removed 19295 files, 22.0GiB total ``` The owned HDD target is empty. Web build and .svelte-kit output and the borrowed server artifact were removed. Reports, logs and screenshots remain. No push, deployment, issue closure or merge into dev. Git status is clean. [Download exact gate and focused evidence logs](https://git.kayg.org/attachments/85fda794-7e4d-4955-a207-c1371eabea8a).
Author
Owner

Starting merge round 33 on job/merge33-1122, base 0419170fe. I will merge the six reviewed heads in the prescribed order, preserve both sides of conflicts, then run the full merge-round gates and production browser screenshot smoke. No pushes or deploys.

Starting merge round 33 on `job/merge33-1122`, base `0419170fe`. I will merge the six reviewed heads in the prescribed order, preserve both sides of conflicts, then run the full merge-round gates and production browser screenshot smoke. No pushes or deploys.
Author
Owner

All six reviewed heads merged in order. Round 32 conflicts: safe worker cleanup helper retained; cookie-origin/Licence probes added beside production probes; Instance feature keys use the newer explicit classification; source-pin conflicts refreshed against exact merged source. Chrome conflicts: keep shared Pill/ActionPill controls and both Checkbox regressions; move toast safe-area geometry into OverlaySurface; keep keyboard and touch context menus plus aria-expanded. Calendar: keep both README additions and exact source pins. Mail and DAV: no manual conflicts. Performance: keep BEGIN IMMEDIATE admission plus page-local thread-key batching; retain Files incomplete-phase profiles and safe cleanup; keep Mail large fixture/folder coverage plus batching profiles and original 180 s bound.

Finding: test_xuser_classification.py has incompatible assertions for admin_feature_flag_put (feature_flag_id and instance_feature_flag_id). Both expectations are retained, per owner rule; the newer explicit Instance-level class is used. This requires orchestrator review.

Pin refresh: 151 hashes each in exceptions.json and adoption-1058.json; zero new scopes; ratchet stays 22543.

All six reviewed heads merged in order. Round 32 conflicts: safe worker cleanup helper retained; cookie-origin/Licence probes added beside production probes; Instance feature keys use the newer explicit classification; source-pin conflicts refreshed against exact merged source. Chrome conflicts: keep shared Pill/ActionPill controls and both Checkbox regressions; move toast safe-area geometry into OverlaySurface; keep keyboard and touch context menus plus aria-expanded. Calendar: keep both README additions and exact source pins. Mail and DAV: no manual conflicts. Performance: keep BEGIN IMMEDIATE admission plus page-local thread-key batching; retain Files incomplete-phase profiles and safe cleanup; keep Mail large fixture/folder coverage plus batching profiles and original 180 s bound. Finding: test_xuser_classification.py has incompatible assertions for admin_feature_flag_put (feature_flag_id and instance_feature_flag_id). Both expectations are retained, per owner rule; the newer explicit Instance-level class is used. This requires orchestrator review. Pin refresh: 151 hashes each in exceptions.json and adoption-1058.json; zero new scopes; ratchet stays 22543.
Author
Owner

Merge heads are committed in the requested order. Production build passed; fmt passed with no output; Clippy is compiling in the preset target with four jobs. Cross-User and Admin preflights pass (429 operations, 1206 generated tools, 53 Admin operations). The incompatible feature-key unit assertions are filed as #1350 and preserved. The production screenshot runner now covers the required eight screens and includes tablet evidence in addition to the requested phone and desktop.

Merge heads are committed in the requested order. Production build passed; fmt passed with no output; Clippy is compiling in the preset target with four jobs. Cross-User and Admin preflights pass (429 operations, 1206 generated tools, 53 Admin operations). The incompatible feature-key unit assertions are filed as #1350 and preserved. The production screenshot runner now covers the required eight screens and includes tablet evidence in addition to the requested phone and desktop.
Author
Owner

Finding filed as #1350: the combined offline classification tests demand both feature_flag_id and instance_feature_flag_id for one route. I preserved both expectations under the owner rule and retained the newer explicit Instance-key implementation.

Focused output, verbatim:

Ran 20 tests in 0.517s
FAILED (failures=1)

Full verbatim failure log.

Live-matrix preflight output, verbatim:

Cross-User classification gate: 429 operations classified
Generated entry point classification: 1206 tools classified
Admin coverage: 53 reviewed operations; contract and Rust guards agree

No expectation was changed to make this pass. The production web build and fmt pass. Clippy is progressing through the cold dependency and calternal build; no compiler failure has appeared.

Finding filed as #1350: the combined offline classification tests demand both `feature_flag_id` and `instance_feature_flag_id` for one route. I preserved both expectations under the owner rule and retained the newer explicit Instance-key implementation. Focused output, verbatim: ``` Ran 20 tests in 0.517s FAILED (failures=1) ``` [Full verbatim failure log](https://git.kayg.org/attachments/ad88426c-c357-43c7-b3fe-97675bea6f1c). Live-matrix preflight output, verbatim: ``` Cross-User classification gate: 429 operations classified Generated entry point classification: 1206 tools classified Admin coverage: 53 reviewed operations; contract and Rust guards agree ``` No expectation was changed to make this pass. The production web build and fmt pass. Clippy is progressing through the cold dependency and calternal build; no compiler failure has appeared.
Author
Owner

Clippy found one integration error in the Files storm fixture. The perf branch changed watcher to an immutable binding because its cleanup consumed the handle. The production cleanup helper retained by this merge borrows the handle mutably. Restoring let mut watcher at line 8305 preserves single-join cleanup and the perf branch phase diagnostics. No expectation or timeout changed.

Verbatim first-gate error:

error[E0596]: cannot borrow `watcher` as mutable, as it is not declared as mutable
    --> crates/plugins/files/src/lib.rs:8305:13
error: could not compile `calternal-plugin-files` (lib test) due to 1 previous error

The full Clippy gate is rerunning after that one-line correction. Both outputs will be attached.

Clippy found one integration error in the Files storm fixture. The perf branch changed `watcher` to an immutable binding because its cleanup consumed the handle. The production cleanup helper retained by this merge borrows the handle mutably. Restoring `let mut watcher` at line 8305 preserves single-join cleanup and the perf branch phase diagnostics. No expectation or timeout changed. Verbatim first-gate error: ``` error[E0596]: cannot borrow `watcher` as mutable, as it is not declared as mutable --> crates/plugins/files/src/lib.rs:8305:13 error: could not compile `calternal-plugin-files` (lib test) due to 1 previous error ``` The full Clippy gate is rerunning after that one-line correction. Both outputs will be attached.
Author
Owner

Head 0ebb27db8 commits the Files storm watcher binding fix. Full Clippy retry passed:

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

Workspace cargo test -- --test-threads=4 is compiling in the preset target with four build jobs. No error so far. Production build and formatting are already green. Native media runtime and Chromium are ready for the later real-server security and screenshot rounds. No push or deploy.

Head 0ebb27db8 commits the Files storm watcher binding fix. Full Clippy retry passed: ``` Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 02s ``` Workspace `cargo test -- --test-threads=4` is compiling in the preset target with four build jobs. No error so far. Production build and formatting are already green. Native media runtime and Chromium are ready for the later real-server security and screenshot rounds. No push or deploy.
Author
Owner

Integration ancestry verified:

ed12462ce is an ancestor of HEAD
5a8528e59 is an ancestor of HEAD
34146e638 is an ancestor of HEAD
8b5535000 is an ancestor of HEAD
50495909d is an ancestor of HEAD
88ce7a765 is an ancestor of HEAD
origin/dev 0419170fe456b58614befcb12d9c9d255118f1c0

Workspace tests continue compiling in the preset job target; currently at calternal-tags and the remaining Plugin crates, without a compiler error. No uncommitted changes. Head remains 0ebb27db8.

Integration ancestry verified: ``` ed12462ce is an ancestor of HEAD 5a8528e59 is an ancestor of HEAD 34146e638 is an ancestor of HEAD 8b5535000 is an ancestor of HEAD 50495909d is an ancestor of HEAD 88ce7a765 is an ancestor of HEAD origin/dev 0419170fe456b58614befcb12d9c9d255118f1c0 ``` Workspace tests continue compiling in the preset job target; currently at calternal-tags and the remaining Plugin crates, without a compiler error. No uncommitted changes. Head remains 0ebb27db8.
Author
Owner

Head 57977551b. The production capture matrix now reuses waitForAppearanceThemeCard, so Settings waits for real controls before capture. Shell syntax passed for the optional ADVERSARIAL_SECURITY_WITH_ROBUSTNESS flag: the merge round will reuse the complete hostile-payload API campaign between the Cross-User and Admin matrices, before Admin revoke-all ends its own fixture sessions. Focused security jobs keep their existing scope.

Workspace cargo test is still compiling under heavy host load (about 43 at the latest sample), with four build jobs and no compiler error. No uncommitted changes.

Head 57977551b. The production capture matrix now reuses waitForAppearanceThemeCard, so Settings waits for real controls before capture. Shell syntax passed for the optional ADVERSARIAL_SECURITY_WITH_ROBUSTNESS flag: the merge round will reuse the complete hostile-payload API campaign between the Cross-User and Admin matrices, before Admin revoke-all ends its own fixture sessions. Focused security jobs keep their existing scope. Workspace cargo test is still compiling under heavy host load (about 43 at the latest sample), with four build jobs and no compiler error. No uncommitted changes.
Author
Owner

Workspace tests are still running. Completed key crates, verbatim:

Files:

test result: ok. 266 passed; 0 failed; 4 ignored; 0 measured; 0 filtered out; finished in 349.37s

Mail:

test result: ok. 130 passed; 0 failed; 6 ignored; 0 measured; 0 filtered out; finished in 39.41s

Money:

test result: ok. 123 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 102.65s

No workspace test failure so far. Head remains 57977551b. Web check and full tests follow this workspace command; production captures then the one bounded live adversarial round follow those gates.

Workspace tests are still running. Completed key crates, verbatim: Files: ``` test result: ok. 266 passed; 0 failed; 4 ignored; 0 measured; 0 filtered out; finished in 349.37s ``` Mail: ``` test result: ok. 130 passed; 0 failed; 6 ignored; 0 measured; 0 filtered out; finished in 39.41s ``` Money: ``` test result: ok. 123 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 102.65s ``` No workspace test failure so far. Head remains 57977551b. Web check and full tests follow this workspace command; production captures then the one bounded live adversarial round follow those gates.
Author
Owner

The workspace cargo test command passed all runtime binaries through calternal-server, then failed its deterministic guard on 12 stale NotesExplorer hashes after the row-positioning fix. The exact scope keys, limits, owner, expiry and ratchet are unchanged. The same guard passes after refreshing those hashes. Remaining binaries passed from the Cargo workspace artifact manifest: Sync daemon 2, Sync library 60, Tags 51, private-index permissions 1. Doctest compilation is still running. Original failure and continuation logs will be attached verbatim.

The workspace cargo test command passed all runtime binaries through calternal-server, then failed its deterministic guard on 12 stale NotesExplorer hashes after the row-positioning fix. The exact scope keys, limits, owner, expiry and ratchet are unchanged. The same guard passes after refreshing those hashes. Remaining binaries passed from the Cargo workspace artifact manifest: Sync daemon 2, Sync library 60, Tags 51, private-index permissions 1. Doctest compilation is still running. Original failure and continuation logs will be attached verbatim.
Author
Owner

Live merge-round campaign on 95b1ea5724: media/document boundaries, auth redirects and 30/30 passkey fixture requests passed. Non-SLOW shared-video range inconsistency is filed as #1358 with the unchanged probe and exact 404 response. No authorization leak observed in that probe. The bounded campaign continues; image-proxy has a SLOW-only pending worker diagnostic. Gate output archive: https://git.kayg.org/attachments/beedb642-267c-4b72-98e4-c9b11c52add5. Mac production screenshot archive (48 images and capture logs): https://git.kayg.org/attachments/dff38bc7-88c0-40b2-8c4b-f8e1ddd8c7b9. Final readiness will account for #1350, #1358 and any unfinished bounded phases.

Live merge-round campaign on 95b1ea5724fa9e35f92de0fec624aa20df51da61: media/document boundaries, auth redirects and 30/30 passkey fixture requests passed. Non-SLOW shared-video range inconsistency is filed as #1358 with the unchanged probe and exact 404 response. No authorization leak observed in that probe. The bounded campaign continues; image-proxy has a SLOW-only pending worker diagnostic. Gate output archive: https://git.kayg.org/attachments/beedb642-267c-4b72-98e4-c9b11c52add5. Mac production screenshot archive (48 images and capture logs): https://git.kayg.org/attachments/dff38bc7-88c0-40b2-8c4b-f8e1ddd8c7b9. Final readiness will account for #1350, #1358 and any unfinished bounded phases.
Author
Owner

Merge round 33 — #1122

Built: combined the six reviewed heads in the requested order on job/merge33-1122. Kept one shared implementation per UI primitive. Added a reusable production capture matrix with Mac platform emulation at 390, 820 and 1440 px, in light and dark.

Integration files: shared OverlaySurface, Checkbox regressions, sidebar/tree actions, NotesExplorer, Calendar shared-component docs, Mail commit-window and backfill probe, Files storm probe, adversarial classifier/probes, exact perf ledgers, and apps/web/e2e/merge-review.mjs. The combined branch also includes the reviewed feature files from the six heads; files.txt lists them.

Conflicts: round 32 kept production cleanup and security probes. Chrome kept shared Pill/ActionPill controls, both Checkbox regressions, keyboard/touch context menus and shared toast-safe Search geometry. Calendar kept both documentation additions. Mail and DAV merged without manual conflicts. Performance kept BEGIN IMMEDIATE writer admission together with page-local thread-key batching; Files keeps single-join cleanup and phase diagnostics; Mail retains the original 180 s backfill bound and large fixture profiles.

Corrections: anchor each Note touch action to its own row; make the Files storm watcher mutable for the retained cleanup helper. Test assertions and timeout budgets were not weakened. Exact source hashes were refreshed only in changed files, with no new scopes and no ratchet increase (22543).

Known gap: #1350 records mutually incompatible feature-key classification expectations. Both assertions are unchanged; the newer Instance-level classifier remains. Offline unit run: 20 tests, 1 failure. The contract preflights pass: 429 operations, 1206 generated tools, 53 Admin operations.

Decisions: place Search toast geometry in OverlaySurface, its existing owner; add tablet captures to satisfy the device-width rule; use the preset Cargo target directory rather than overriding it. No product design decision added.

UX gaps closed: Note touch action positioning; merged shared-control, Mail, Calendar and DAV fixes covered by the reviewed branches. UX gaps left: visual approval belongs to the orchestrator; classification expectation decision is #1350; playback/preview probe consistency is tracked in #1358/#1359.

Performance: this merge adds no production operation beyond the reviewed branches. It retains their bounded page-local batching, storm profiles and performance budgets. No perf VM run: the verification policy reserves new measurements for performance issues.

Head: 1d4abf495c. Origin/dev was fetched and merged once before final gates (already up to date). All six requested heads are ancestors.

Gate output (verbatim excerpts; the attached archive contains complete original stdout/stderr, including initial failures):

bun run build:
Compressed 914 static variants; saved 21489812 bytes.

cargo fmt --check:
[no output; exit 0]

cargo clippy --all-targets -- -D warnings:
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 02s

cargo test -- --test-threads=4 (original run):
perf-lint: INVALID: ('render.bound', 'apps/web/src/lib/notes/NotesExplorer.svelte', 'apps/web/src/lib/notes/NotesExplorer.svelte#each:3c7baf2164751d7e:1'): unused or changed exception
test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 47.98s
error: test failed, to rerun pass `-p calternal-server --test perf_guards`

cargo test deterministic_performance_guards -- --test-threads=4 (after exact pin correction):
test deterministic_performance_guards ... ok

Remaining workspace binaries (same Cargo-built artifacts, package cwd, four test threads):
All remaining workspace test binaries passed.

cargo test --doc -- --test-threads=4:
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

bun run check:
svelte-check found 0 errors and 4 warnings in 2 files

bun run test --maxWorkers=2:
 Test Files  293 passed (293)
      Tests  2101 passed (2101)
   Start at  15:28:02
   Duration  380.41s (environment 28%, transform 25%, import 24%, tests 17%, setup 5%)

The original workspace test command stopped at the stale source pin after all preceding crates passed. The guard was fixed and rerun with the workspace feature graph; the remaining Sync, Tags and private-index binaries passed, then all workspace doc tests passed. The canceled per-crate guard attempt and artifact collection are retained in the archive. No runtime assertion was changed. Initial build dependency setup and clippy mutability failures, plus successful retries, are also retained.

Screenshots: 48 production PNGs cover Calendar Week, Tasks, open Note with formatting controls, Files, Mail, Money, Settings and open Search, each at 390/820/1440 px in light and dark with macOS platform emulation. Successful captures span retries: the full last run captured 46/48; the final focused desktop Note run passed both palettes (exit 0, empty failure list) after reusing the shared theme helper at the post-hydration capture boundary. No visual approval is claimed. Build identity, initial failed attempts and successful retry logs are included. Screenshot archive: download final macOS set. Earlier archive remains attached for provenance.

Verbatim focused capture output:

PASS capture notes-format 1440 light macOS
PASS capture notes-format 1440 dark macOS

Live adversarial round: full log, one 900-second local-server campaign. The security-origin/licence, image-proxy, Share options, Unicode titles and isolation phase completed with four findings in two cases: #1358 shared-video range playback returned 404; #1359 Notes preview DNS pinning ended unavailable with no private upstream hits. The server was alive at the phase end. SLOW-only diagnostics are recorded separately.

Cross-User matrix completed: 429 operations classified; 203 replayed; 938 owned-ID/missing-ID comparisons across other Users and anonymous; 122 Job/Mail/quota comparisons with zero denial failures. Calendar subscription ownership and Photos Share contracts passed. Revoked Share timing profiles were identical HTTP 404 (median delta 3.4 ms). It reports 39 identifier routes without seeded object factories, listed in the log.

Local probe measurements (not a perf VM benchmark): cookie-origin denial p50/p95 6.204/8.869 ms; invalid Licence key p50/p95 5.067/11.554 ms; Appearance PUT burst p95 0.517 s across 31 requests. No comparable baseline is claimed. Robustness campaign ended at the fixed 900-second deadline (exit 124), during the tag rename storm after 30/100 progress was printed. Earlier completed probes include zero-failure search storm (p50/p95 373.3/1081.5 ms), upload PATCH concurrency, 200-directory storm and rename race. The remaining robustness cases and Admin matrix did NOT complete; no pass is claimed. This is the one time-boxed round, not an endless rerun. To complete verification, rerun the existing robustness and Admin phases against a fresh isolated fixture; the full command is:

ADVERSARIAL_SECURITY_ONLY=1 ADVERSARIAL_SECURITY_WITH_ROBUSTNESS=1 ADVERSARIAL_SKIP_WEB_BUILD=1 ADVERSARIAL_SERVER_BIN="$CARGO_TARGET_DIR/debug/calternal-server" CALTERNAL_E2E_ASSET_OVERRIDE=1 CALTERNAL_E2E_MAC=1 bash tests/adversarial/run.sh

The merge round is NOT READY until these gaps and the filed inconsistencies are resolved.

Readiness: NOT READY. #1350, #1358 and #1359 remain unresolved; the robustness/Admin verification is incomplete. The required screenshot matrix is complete across successful captures; orchestrator visual approval remains pending. No push, deploy or merge into dev performed.

Cleanup: cargo clean and web/native-test build output removal completed; review artifacts are retained. No screenshots or videos were committed. Working tree is clean.

Shared controls retained: Pill/PillGroup/ActionPill, Checkbox, OverlaySurface, SidebarSectionHeader, PageChrome and Menu. No duplicate visual primitive added. The Note row anchor costs one CSS containing block per rendered tree row (bounded by the existing 200-row page); it adds no IO or runtime layout measurement.

Comment review: integration module/helper comments were re-read; they explain shared ownership, writer admission, bounded rendering, single-join cleanup and capture invariants. The last changes after web gates affect only the review fixture; Node syntax checks and its real-server focused capture passed.

Cleanup output (verbatim):

     Removed 18743 files, 22.9GiB total
Merge round 33 — #1122 Built: combined the six reviewed heads in the requested order on job/merge33-1122. Kept one shared implementation per UI primitive. Added a reusable production capture matrix with Mac platform emulation at 390, 820 and 1440 px, in light and dark. Integration files: shared OverlaySurface, Checkbox regressions, sidebar/tree actions, NotesExplorer, Calendar shared-component docs, Mail commit-window and backfill probe, Files storm probe, adversarial classifier/probes, exact perf ledgers, and apps/web/e2e/merge-review.mjs. The combined branch also includes the reviewed feature files from the six heads; files.txt lists them. Conflicts: round 32 kept production cleanup and security probes. Chrome kept shared Pill/ActionPill controls, both Checkbox regressions, keyboard/touch context menus and shared toast-safe Search geometry. Calendar kept both documentation additions. Mail and DAV merged without manual conflicts. Performance kept BEGIN IMMEDIATE writer admission together with page-local thread-key batching; Files keeps single-join cleanup and phase diagnostics; Mail retains the original 180 s backfill bound and large fixture profiles. Corrections: anchor each Note touch action to its own row; make the Files storm watcher mutable for the retained cleanup helper. Test assertions and timeout budgets were not weakened. Exact source hashes were refreshed only in changed files, with no new scopes and no ratchet increase (22543). Known gap: #1350 records mutually incompatible feature-key classification expectations. Both assertions are unchanged; the newer Instance-level classifier remains. Offline unit run: 20 tests, 1 failure. The contract preflights pass: 429 operations, 1206 generated tools, 53 Admin operations. Decisions: place Search toast geometry in OverlaySurface, its existing owner; add tablet captures to satisfy the device-width rule; use the preset Cargo target directory rather than overriding it. No product design decision added. UX gaps closed: Note touch action positioning; merged shared-control, Mail, Calendar and DAV fixes covered by the reviewed branches. UX gaps left: visual approval belongs to the orchestrator; classification expectation decision is #1350; playback/preview probe consistency is tracked in #1358/#1359. Performance: this merge adds no production operation beyond the reviewed branches. It retains their bounded page-local batching, storm profiles and performance budgets. No perf VM run: the verification policy reserves new measurements for performance issues. Head: 1d4abf495c848953cde7f007dab77bf526a4ec5f. Origin/dev was fetched and merged once before final gates (already up to date). All six requested heads are ancestors. Gate output (verbatim excerpts; [the attached archive](https://git.kayg.org/attachments/beedb642-267c-4b72-98e4-c9b11c52add5) contains complete original stdout/stderr, including initial failures): ```text bun run build: Compressed 914 static variants; saved 21489812 bytes. cargo fmt --check: [no output; exit 0] cargo clippy --all-targets -- -D warnings: Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 02s cargo test -- --test-threads=4 (original run): perf-lint: INVALID: ('render.bound', 'apps/web/src/lib/notes/NotesExplorer.svelte', 'apps/web/src/lib/notes/NotesExplorer.svelte#each:3c7baf2164751d7e:1'): unused or changed exception test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 47.98s error: test failed, to rerun pass `-p calternal-server --test perf_guards` cargo test deterministic_performance_guards -- --test-threads=4 (after exact pin correction): test deterministic_performance_guards ... ok Remaining workspace binaries (same Cargo-built artifacts, package cwd, four test threads): All remaining workspace test binaries passed. cargo test --doc -- --test-threads=4: test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s bun run check: svelte-check found 0 errors and 4 warnings in 2 files bun run test --maxWorkers=2: Test Files 293 passed (293) Tests 2101 passed (2101) Start at 15:28:02 Duration 380.41s (environment 28%, transform 25%, import 24%, tests 17%, setup 5%) ``` The original workspace test command stopped at the stale source pin after all preceding crates passed. The guard was fixed and rerun with the workspace feature graph; the remaining Sync, Tags and private-index binaries passed, then all workspace doc tests passed. The canceled per-crate guard attempt and artifact collection are retained in the archive. No runtime assertion was changed. Initial build dependency setup and clippy mutability failures, plus successful retries, are also retained. Screenshots: 48 production PNGs cover Calendar Week, Tasks, open Note with formatting controls, Files, Mail, Money, Settings and open Search, each at 390/820/1440 px in light and dark with macOS platform emulation. Successful captures span retries: the full last run captured 46/48; the final focused desktop Note run passed both palettes (exit 0, empty failure list) after reusing the shared theme helper at the post-hydration capture boundary. No visual approval is claimed. Build identity, initial failed attempts and successful retry logs are included. Screenshot archive: [download final macOS set](https://git.kayg.org/attachments/9e137b98-5b9b-4c09-9f5c-909339e4022b). Earlier archive remains attached for provenance. Verbatim focused capture output: ```text PASS capture notes-format 1440 light macOS PASS capture notes-format 1440 dark macOS ``` Live adversarial round: [full log](https://git.kayg.org/attachments/08482e2a-8f91-4091-b321-8a54e6eab0d4), one 900-second local-server campaign. The security-origin/licence, image-proxy, Share options, Unicode titles and isolation phase completed with four findings in two cases: #1358 shared-video range playback returned 404; #1359 Notes preview DNS pinning ended unavailable with no private upstream hits. The server was alive at the phase end. SLOW-only diagnostics are recorded separately. Cross-User matrix completed: 429 operations classified; 203 replayed; 938 owned-ID/missing-ID comparisons across other Users and anonymous; 122 Job/Mail/quota comparisons with zero denial failures. Calendar subscription ownership and Photos Share contracts passed. Revoked Share timing profiles were identical HTTP 404 (median delta 3.4 ms). It reports 39 identifier routes without seeded object factories, listed in the log. Local probe measurements (not a perf VM benchmark): cookie-origin denial p50/p95 6.204/8.869 ms; invalid Licence key p50/p95 5.067/11.554 ms; Appearance PUT burst p95 0.517 s across 31 requests. No comparable baseline is claimed. Robustness campaign ended at the fixed 900-second deadline (exit 124), during the tag rename storm after 30/100 progress was printed. Earlier completed probes include zero-failure search storm (p50/p95 373.3/1081.5 ms), upload PATCH concurrency, 200-directory storm and rename race. The remaining robustness cases and Admin matrix did NOT complete; no pass is claimed. This is the one time-boxed round, not an endless rerun. To complete verification, rerun the existing robustness and Admin phases against a fresh isolated fixture; the full command is: ```sh ADVERSARIAL_SECURITY_ONLY=1 ADVERSARIAL_SECURITY_WITH_ROBUSTNESS=1 ADVERSARIAL_SKIP_WEB_BUILD=1 ADVERSARIAL_SERVER_BIN="$CARGO_TARGET_DIR/debug/calternal-server" CALTERNAL_E2E_ASSET_OVERRIDE=1 CALTERNAL_E2E_MAC=1 bash tests/adversarial/run.sh ``` The merge round is NOT READY until these gaps and the filed inconsistencies are resolved. Readiness: NOT READY. #1350, #1358 and #1359 remain unresolved; the robustness/Admin verification is incomplete. The required screenshot matrix is complete across successful captures; orchestrator visual approval remains pending. No push, deploy or merge into dev performed. Cleanup: cargo clean and web/native-test build output removal completed; review artifacts are retained. No screenshots or videos were committed. Working tree is clean. Shared controls retained: Pill/PillGroup/ActionPill, Checkbox, OverlaySurface, SidebarSectionHeader, PageChrome and Menu. No duplicate visual primitive added. The Note row anchor costs one CSS containing block per rendered tree row (bounded by the existing 200-row page); it adds no IO or runtime layout measurement. Comment review: integration module/helper comments were re-read; they explain shared ownership, writer admission, bounded rendering, single-join cleanup and capture invariants. The last changes after web gates affect only the review fixture; Node syntax checks and its real-server focused capture passed. Cleanup output (verbatim): ```text Removed 18743 files, 22.9GiB total ```
Author
Owner

Continuing merge33b on job/merge33-1122, base/head 1d4abf495. Read the prior findings. Resolve #1350, prove the production video behavior for #1358, isolate #1359, fix the three reviewed UI defects, then run full ordered gates and one bounded split adversarial round. No push or deploy.

Continuing merge33b on job/merge33-1122, base/head 1d4abf495. Read the prior findings. Resolve #1350, prove the production video behavior for #1358, isolate #1359, fix the three reviewed UI defects, then run full ordered gates and one bounded split adversarial round. No push or deploy.
Author
Owner

Evidence for #1359: the isolated image-proxy phase passes on production 0419170fe with fresh DNS state. Host load at phase start: 53.36, 46.34, 37.22. Verbatim outcome:

server alive at end: True

==== ROUND 2 FINDINGS 0

==== ROUND 2 SLOW 0

The earlier pending-only diagnostic is load. The later unavailable result was a test-fixture collision: attack2.py contained two complete image-proxy phases, but the LD_PRELOAD shim has one process-wide public-then-private DNS counter. Commit 213c79934 removes the duplicate, keeps the phase before User deletion, and adds a regression that fails with two phases. No private upstream hit occurred. The focused runner seam in 87a0a93bb avoids unrelated storms before an isolated replay. Combined release verification remains pending.

Evidence for #1359: the isolated image-proxy phase passes on production 0419170fe with fresh DNS state. Host load at phase start: 53.36, 46.34, 37.22. Verbatim outcome: ```text server alive at end: True ==== ROUND 2 FINDINGS 0 ==== ROUND 2 SLOW 0 ``` The earlier pending-only diagnostic is load. The later unavailable result was a test-fixture collision: attack2.py contained two complete image-proxy phases, but the LD_PRELOAD shim has one process-wide public-then-private DNS counter. Commit 213c79934 removes the duplicate, keeps the phase before User deletion, and adds a regression that fails with two phases. No private upstream hit occurred. The focused runner seam in 87a0a93bb avoids unrelated storms before an isolated replay. Combined release verification remains pending.
Author
Owner

Evidence for #1358 on origin/dev / production 0419170fe: the original plain-text .mp4 fixture returns the same 404 as in merge round 33. This is not introduced by this round. Video requires a content-sniffed video MIME type on both revisions.

The replay now reuses crates/plugins/files/tests/fixtures/media/source-generated.mp4, the existing two-frame decodable MP4. The 206 assertion and exact-byte assertion are unchanged. Added explicit non-recipient/missing-item equivalence. Verbatim output on production:

VIDEO_SHARE recipient=206 bytes_match=True non_recipient=404 missing=404 denial_equal=True
server alive at end: True

==== ROUND 2 FINDINGS 0

==== ROUND 2 SLOW 0

Host load: 66.69, 52.84, 43.50. The real video also exposed an assumption in the Photos fixture: it chose the first owner media Item, which can be the video outside the Photos Share, rather than the uploaded share-probe.jpg. The probe now waits for that exact JPEG; every original denial, scope, recipient and revoke assertion remains. A replay with this fixture correction has zero findings. The fresh production release build and the combined release round remain in progress.

Evidence for #1358 on origin/dev / production 0419170fe: the original plain-text .mp4 fixture returns the same 404 as in merge round 33. This is not introduced by this round. Video requires a content-sniffed video MIME type on both revisions. The replay now reuses crates/plugins/files/tests/fixtures/media/source-generated.mp4, the existing two-frame decodable MP4. The 206 assertion and exact-byte assertion are unchanged. Added explicit non-recipient/missing-item equivalence. Verbatim output on production: ```text VIDEO_SHARE recipient=206 bytes_match=True non_recipient=404 missing=404 denial_equal=True server alive at end: True ==== ROUND 2 FINDINGS 0 ==== ROUND 2 SLOW 0 ``` Host load: 66.69, 52.84, 43.50. The real video also exposed an assumption in the Photos fixture: it chose the first owner media Item, which can be the video outside the Photos Share, rather than the uploaded share-probe.jpg. The probe now waits for that exact JPEG; every original denial, scope, recipient and revoke assertion remains. A replay with this fixture correction has zero findings. The fresh production release build and the combined release round remain in progress.
Author
Owner

merge33b UI findings

The top-of-window grip belongs to the first body paragraph (block position 19), not the title. A production-build diagnostic measured its retained DOM node after hydration: it was disconnected and returned a zero rectangle. Floating UI can measure after an await, so resolving the node only when the virtual reference is created is too early. Commit c14e7ab5a resolves the current block inside each reference getter. The regression replaces the node after reference creation and fails before the fix. Line centering now uses shared CSS line-height tokens, with no Range or computed-style reads for alignment. The first corrected 1440 px capture passes the in-Note grip assertion; the full width/palette capture is running.

DESIGN §42 docks the phone capsule above the software keyboard. The previous headless screenshot represented a reduced visual viewport but did not render an OS keyboard, so the capsule appeared over Linked mentions. Commit 4fbc624d8 keeps the documented dock while the keyboard is open and reuses EditorFormatBubble beside selected text when it is closed. Tests cover this fallback; the capture checks the real viewport boundary separately from the no-keyboard screenshot.

The Files collection now retains FileIcon for Markdown, text and code, even if a thumbnail hint is present. Other image thumbnails remain. The focused regression fails with the old collection and passes with the fix. No new visual primitive was added. The original empty-circle screenshot could not be reproduced with the production assets; this correction pins the document-glyph contract instead of claiming an unverified cause.

Final before/after captures and gate output will follow. No visual approval is claimed; the orchestrator remains the reviewer.

# merge33b UI findings The top-of-window grip belongs to the first body paragraph (block position 19), not the title. A production-build diagnostic measured its retained DOM node after hydration: it was disconnected and returned a zero rectangle. Floating UI can measure after an await, so resolving the node only when the virtual reference is created is too early. Commit c14e7ab5a resolves the current block inside each reference getter. The regression replaces the node after reference creation and fails before the fix. Line centering now uses shared CSS line-height tokens, with no Range or computed-style reads for alignment. The first corrected 1440 px capture passes the in-Note grip assertion; the full width/palette capture is running. DESIGN §42 docks the phone capsule above the software keyboard. The previous headless screenshot represented a reduced visual viewport but did not render an OS keyboard, so the capsule appeared over Linked mentions. Commit 4fbc624d8 keeps the documented dock while the keyboard is open and reuses EditorFormatBubble beside selected text when it is closed. Tests cover this fallback; the capture checks the real viewport boundary separately from the no-keyboard screenshot. The Files collection now retains FileIcon for Markdown, text and code, even if a thumbnail hint is present. Other image thumbnails remain. The focused regression fails with the old collection and passes with the fix. No new visual primitive was added. The original empty-circle screenshot could not be reproduced with the production assets; this correction pins the document-glyph contract instead of claiming an unverified cause. Final before/after captures and gate output will follow. No visual approval is claimed; the orchestrator remains the reviewer.
Author
Owner

Corrected production captures completed at head 4f3273473: all 12 checks pass for Notes and Files at 390/820/1440 px, light/dark, macOS emulation. Before/after PNGs and capture log.

The grip is beside the first body paragraph inside the Note. The phone capsule is directly above selected text when the software keyboard is closed; a separate viewport assertion verifies the §42 keyboard dock. Markdown uses the document glyph. Source comments and capture geometry checks are committed; PNGs remain review artifacts. Please use this set for the orchestrator visual review. No push, deploy or merge into dev.

Corrected production captures completed at head 4f3273473: all 12 checks pass for Notes and Files at 390/820/1440 px, light/dark, macOS emulation. [Before/after PNGs and capture log](https://git.kayg.org/attachments/f7db9761-6d98-4a0e-946e-7e96570d7d1b). The grip is beside the first body paragraph inside the Note. The phone capsule is directly above selected text when the software keyboard is closed; a separate viewport assertion verifies the §42 keyboard dock. Markdown uses the document glyph. Source comments and capture geometry checks are committed; PNGs remain review artifacts. Please use this set for the orchestrator visual review. No push, deploy or merge into dev.
Author
Owner

Fresh production proof: built origin/dev at 0419170fe4 in a detached worktree. The first build needed the production frontend assets for RustEmbed; after using the existing assets from the same revision, the release build completed:

    Finished `release` profile [optimized] target(s) in 20m 08s

The built binary was copied before the combined build. The fresh video-only replay exited 0, at host load 63.41, 65.68, 61.04. Output, verbatim:


VIDEO_SHARE recipient=206 bytes_match=True non_recipient=404 missing=404 denial_equal=True
server alive at end: True

==== ROUND 2 FINDINGS 0

==== ROUND 2 SLOW 0

The earlier fresh replay of isolation plus preview completed its assertions with FINDINGS 0 / SLOW 9, but its 600-second wrapper expired during cleanup (exit 124). This focused replay keeps that result separate. The preview-only check previously completed FINDINGS 0 / SLOW 0 at load 53.36, 46.34, 37.22. No server authorization behavior was relaxed.

Fresh production proof: built origin/dev at 0419170fe456b58614befcb12d9c9d255118f1c0 in a detached worktree. The first build needed the production frontend assets for RustEmbed; after using the existing assets from the same revision, the release build completed: ``` Finished `release` profile [optimized] target(s) in 20m 08s ``` The built binary was copied before the combined build. The fresh video-only replay exited 0, at host load 63.41, 65.68, 61.04. Output, verbatim: ``` VIDEO_SHARE recipient=206 bytes_match=True non_recipient=404 missing=404 denial_equal=True server alive at end: True ==== ROUND 2 FINDINGS 0 ==== ROUND 2 SLOW 0 ``` The earlier fresh replay of isolation plus preview completed its assertions with FINDINGS 0 / SLOW 9, but its 600-second wrapper expired during cleanup (exit 124). This focused replay keeps that result separate. The preview-only check previously completed FINDINGS 0 / SLOW 0 at load 53.36, 46.34, 37.22. No server authorization behavior was relaxed.
Author
Owner

Merge33b gate progress at head 4f3273473: source tree clean; production web build and fmt exit 0; full-workspace clippy exit 0. Verbatim clippy output:

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

The ordered workspace cargo test gate is now compiling its test artifacts. The combined release build is progressing separately. The fresh production video-only probe exited 0 with FINDINGS 0/SLOW 0; all 12 corrected macOS capture checks passed and are attached. The final bounded continuation will run security, cross-User, API robustness and Admin in the established runner order, against the combined release binary. Final readiness remains pending those results.

Merge33b gate progress at head 4f3273473: source tree clean; production web build and fmt exit 0; full-workspace clippy exit 0. Verbatim clippy output: ``` Finished `dev` profile [unoptimized + debuginfo] target(s) in 42m 39s ``` The ordered workspace cargo test gate is now compiling its test artifacts. The combined release build is progressing separately. The fresh production video-only probe exited 0 with FINDINGS 0/SLOW 0; all 12 corrected macOS capture checks passed and are attached. The final bounded continuation will run security, cross-User, API robustness and Admin in the established runner order, against the combined release binary. Final readiness remains pending those results.
Author
Owner

Merge33b progress at 5382ca7a1 (last change: test doc comment only). The combined release build exited 0 in 20m 37s. Final before/after captures against that combined release server: all 12 Notes/Files checks pass at 390/820/1440 px, light/dark, macOS emulation, including the separate software-keyboard dock assertions.

The 90-minute continuation started at 17:46 CEST with load 36.46/50.85/58.27. Security phase: FINDINGS 0, SLOW 5. Viewer video: recipient 206 with matching bytes; non-recipient and missing Item return the same 404. Cross-User: 203 operations replayed, 938 owned-ID/missing-ID comparisons; Job/Mail/quota: 122 comparisons, 0 denial failures; Photos Share contracts and Calendar subscription ownership pass. The 39 identifier routes without fixture factories remain listed as a coverage gap.

API robustness has reached tag rename 80/100. Before it, Search storm reported 0 failures (local p50/p95 487.5/781.5 ms), upload PATCH concurrency, the 200-directory storm and rename race passed. No non-SLOW finding has appeared. The round remains bounded at 90 minutes; Admin runs last. Full clippy passed; workspace test artifacts still compile with four jobs. Web check/test follow it in the requested order. Final readiness is pending completion, not claimed here.

Merge33b progress at 5382ca7a1 (last change: test doc comment only). The combined release build exited 0 in 20m 37s. [Final before/after captures against that combined release server](https://git.kayg.org/attachments/735dcda6-78e5-4876-88be-8ee9dc90971c): all 12 Notes/Files checks pass at 390/820/1440 px, light/dark, macOS emulation, including the separate software-keyboard dock assertions. The 90-minute continuation started at 17:46 CEST with load 36.46/50.85/58.27. Security phase: FINDINGS 0, SLOW 5. Viewer video: recipient 206 with matching bytes; non-recipient and missing Item return the same 404. Cross-User: 203 operations replayed, 938 owned-ID/missing-ID comparisons; Job/Mail/quota: 122 comparisons, 0 denial failures; Photos Share contracts and Calendar subscription ownership pass. The 39 identifier routes without fixture factories remain listed as a coverage gap. API robustness has reached tag rename 80/100. Before it, Search storm reported 0 failures (local p50/p95 487.5/781.5 ms), upload PATCH concurrency, the 200-directory storm and rename race passed. No non-SLOW finding has appeared. The round remains bounded at 90 minutes; Admin runs last. Full clippy passed; workspace test artifacts still compile with four jobs. Web check/test follow it in the requested order. Final readiness is pending completion, not claimed here.
Author
Owner

The combined release continuation completed before the 90-minute limit (exit 1), including API robustness and all 3036 Admin requests. Security: FINDINGS 0/SLOW 5. Cross-User: 938 owned-ID/missing-ID comparisons; Job/Mail/quota 122 comparisons with 0 denial failures. API: 312 finding rows, 242 explicitly SLOW and 70 other rows. The other rows include two fixture inconsistencies plus client timeouts and their dependent upload/projection checks. I did not suppress them or change expectations.

Filed #1381: first-open Appearance assertion runs without opening the app in normal setup; expectation retained for owner review. Filed #1382: Files DAV credential creation can outlive fresh authority; the existing refresh helper is now called before creation, preserving all 200/403/revocation checks. Its focused regression is running. Filed #1383: direct API client timeouts coincide with long Index pool/query/checkpoint waits, with derived fixture failures retained. No actual 5xx, product crash or accepted hostile input is identified in these rows.

The full Admin matrix had one client timeout on GET /api/v1/admin/system/codecs as app_password_notes_full/valid. Replayed that one operation through the same inventory/denial matrix: 25 requests, no failure, exit 0, at load 88.69/82.59/76.70. Commit a9e331a3c adds the focused runner seam; its initial preflight-mode error and correction remain in the logs. This supports a load-related timeout, not an observed authorization grant. The original full-run failure is retained.

Rust workspace tests have begun running after the cold compile. Full clippy already passed. Final readiness is still pending the remaining gates and recorded fixture/timeout gaps.

The combined release continuation completed before the 90-minute limit (exit 1), including API robustness and all 3036 Admin requests. Security: FINDINGS 0/SLOW 5. Cross-User: 938 owned-ID/missing-ID comparisons; Job/Mail/quota 122 comparisons with 0 denial failures. API: 312 finding rows, 242 explicitly SLOW and 70 other rows. The other rows include two fixture inconsistencies plus client timeouts and their dependent upload/projection checks. I did not suppress them or change expectations. Filed #1381: first-open Appearance assertion runs without opening the app in normal setup; expectation retained for owner review. Filed #1382: Files DAV credential creation can outlive fresh authority; the existing refresh helper is now called before creation, preserving all 200/403/revocation checks. Its focused regression is running. Filed #1383: direct API client timeouts coincide with long Index pool/query/checkpoint waits, with derived fixture failures retained. No actual 5xx, product crash or accepted hostile input is identified in these rows. The full Admin matrix had one client timeout on GET /api/v1/admin/system/codecs as app_password_notes_full/valid. Replayed that one operation through the same inventory/denial matrix: 25 requests, no failure, exit 0, at load 88.69/82.59/76.70. Commit a9e331a3c adds the focused runner seam; its initial preflight-mode error and correction remain in the logs. This supports a load-related timeout, not an observed authorization grant. The original full-run failure is retained. Rust workspace tests have begun running after the cold compile. Full clippy already passed. Final readiness is still pending the remaining gates and recorded fixture/timeout gaps.
Author
Owner

#1382 fixture fix committed as 3d0c88200. Refresh the existing owner assertion immediately before Files DAV App Password creation, and retain the existing refresh before revoke. All authorization assertions remain unchanged.

The focused real-server retry completed with exit 0. Verbatim evidence:

owner installation and browser session assertions refreshed
DAV 100-href Apple multiget: 18045 request bytes, 100 responses, 1.216s
DAV early rejection follow-up: 413
DAV #471 case 2: PASS (previous=True, two areas=False)
DAV #471 case 3: PASS (previous=False, two areas=False)
DAV #471 case 4: PASS (previous=True, two areas=True)
WebDAV scripted probes passed
owner installation and browser session assertions refreshed

The bounded combined round finished with findings filed as #1381 and #1383. The Rust gate also found a non-timeout Shared Notes 403 instead of 101; filed as #1386. Keep its assertion. No Rust source was changed in merge33b. Continue the remaining compiled workspace test binaries after Cargo stopped on this failure.

#1382 fixture fix committed as 3d0c88200. Refresh the existing owner assertion immediately before Files DAV App Password creation, and retain the existing refresh before revoke. All authorization assertions remain unchanged. The focused real-server retry completed with exit 0. Verbatim evidence: ``` owner installation and browser session assertions refreshed DAV 100-href Apple multiget: 18045 request bytes, 100 responses, 1.216s DAV early rejection follow-up: 413 DAV #471 case 2: PASS (previous=True, two areas=False) DAV #471 case 3: PASS (previous=False, two areas=False) DAV #471 case 4: PASS (previous=True, two areas=True) WebDAV scripted probes passed owner installation and browser session assertions refreshed ``` The bounded combined round finished with findings filed as #1381 and #1383. The Rust gate also found a non-timeout Shared Notes 403 instead of 101; filed as #1386. Keep its assertion. No Rust source was changed in merge33b. Continue the remaining compiled workspace test binaries after Cargo stopped on this failure.
Author
Owner

Merge33b head 3e60d38f2b: both web gates pass after origin/dev was fetched and merged once. Preserve both initial fixture type failures and the successful final check in the final archive. Verbatim:

svelte-check found 2 errors and 4 warnings in 3 files
svelte-check found 1 error and 4 warnings in 3 files
perf-lint: PASS; 0 violations; 22543 scoped exceptions
svelte-check found 0 errors and 4 warnings in 2 files
 Test Files  293 passed (293)
      Tests  2103 passed (2103)

Workspace doctests passed. Rust cargo test remains failed on #1386 (Shared Notes viewer 403 rather than 101). No Rust assertion or production authorization behavior was changed. Continued binaries and timeout-only retries remain in progress; final readiness is NOT READY.

Merge33b head 3e60d38f2b6f018690f1c89092a06d105ff5699c: both web gates pass after origin/dev was fetched and merged once. Preserve both initial fixture type failures and the successful final check in the final archive. Verbatim: ``` svelte-check found 2 errors and 4 warnings in 3 files svelte-check found 1 error and 4 warnings in 3 files perf-lint: PASS; 0 violations; 22543 scoped exceptions svelte-check found 0 errors and 4 warnings in 2 files Test Files 293 passed (293) Tests 2103 passed (2103) ``` Workspace doctests passed. Rust cargo test remains failed on #1386 (Shared Notes viewer 403 rather than 101). No Rust assertion or production authorization behavior was changed. Continued binaries and timeout-only retries remain in progress; final readiness is NOT READY.
Author
Owner

Merge33b continuation — #1122

NOT READY. Head: 3e60d38f2b. Branch job/merge33-1122. Origin/dev 0419170fe4 fetched and merged once before gates: already up to date. No push, deploy or merge into dev.

Built: corrected the older Instance feature-key review; retained both tests. Removed the duplicate DNS-pinning probe lifecycle. Replaced the text-as-MP4 fixture with the existing decodable video and added exact Range/opaque denial checks. Fixed the Photos probe to select its known shared JPEG rather than an unrelated owner media Item. Fixed asynchronous grip anchoring; CSS owns line centering. Reused the selection bubble on phones with no software keyboard while preserving the documented dock when it opens. Text file rows retain the shared document/code glyph. Added regressions and production capture geometry checks.

#1358 evidence: the original invalid-video probe returned 404 on the existing production 0419170fe binary too. Built that exact revision in a detached worktree and ran the real-video probe on the freshly built binary: recipient 206, exact requested bytes; non-recipient and missing Item both 404 with the same body. Focused replay exit 0, FINDINGS 0, SLOW 0 at load 63.41/65.68/61.04. No production video authorization change needed. An earlier fresh isolation+preview replay completed FINDINGS 0/SLOW 9 but its 600-second wrapper expired during cleanup; retain exit 124. The first baseline build needed its same-revision frontend assets for RustEmbed; its retry completed. A redundant second baseline compile was stopped after preserving and running the successful first binary, to start the combined release build.

#1359 evidence: two identical image-proxy phases consumed one process-wide public-then-private DNS answer sequence. The second phase was a fixture inconsistency. One retained phase covers every hostile URL, redirect, size/encoding, public-cache and private-trap assertion. Preview alone completed FINDINGS 0/SLOW 0 at load 53.36/46.34/37.22; later pending-only results on the fresh production replay are SLOW diagnostics. No assertion or deadline was weakened.

Screenshots: before/after files in artifacts/merge33/review-fixes; all 12 corrected Notes/Files captures pass at 390,820,1440 px, light/dark, macOS emulation. Separate viewport assertions test the §42 software-keyboard dock. Zoom inspection covers the requested grip, capsule and file glyph. The first body paragraph owns the old stray grip (block position 19); its stale detached DOM node yielded a zero rect. The reference now resolves the current block at asynchronous measurement time. The exact original empty-circle Files image was not reproduced; the regression pins document/code glyphs even with old thumbnail hints. Orchestrator visual approval remains separate. PNGs are not committed.

Files: apps/web/e2e/merge-review.mjs; editor/format/EditorFormatBar.svelte and test; files/FileCollection.svelte.test.ts; notes/NoteEditorSurface.svelte and noteProse.css; packages/editor/src/extensions.ts and dragHandle test; packages/ui/src/components/files/FileCollection.svelte; tests/adversarial/attack.py, attack2.py, run.sh, test_link_preview_fixtures.py, test_xuser_classification.py; exact source pins in contracts/perf/{exceptions,adoption-1058}.json. No Rust source or lockfile changed.

UX gaps closed: grip beside its block inside the editor on hover/focus; selection capsule beside phone text when the keyboard is closed and above it when open; document glyph for Markdown/text and code glyph for code. Reused the existing editor DragHandle, PillGroup, EditorFormatBubble, FormatCommandRow, IconLabel, FileIcon and FileThumb. No duplicate visual primitive. Existing command, focus, touch and reduced-motion paths remain shared.

Decisions: DESIGN §42 specifies the open-keyboard dock; for a closed keyboard, reuse the existing selection bubble. Text file rows identify their kind even when an old thumbnail hint exists. Use the preset CARGO_TARGET_DIR (/home/kayg/build/targets/merge33b), per the no-override rule; the brief's historical /mnt/hdd path was not substituted. No OPEN design item built.

Cost: one current-block lookup per existing Floating UI geometry getter; traversal follows the editor view tree, with no Home IO; line alignment uses CSS, with no Range/computed-style alignment reads. File glyph selection is three constant comparisons per already virtualized row. No new IO, full-Home scan or background job. Exact perf pins refreshed in existing scopes only; ratchet remains 22543. No new perf VM measurement: this is a merge verification issue, and current policy reserves measurements for performance issues.

Bounded adversarial continuation: completed within 90 minutes, exit 1. Security FINDINGS 0/SLOW 5. Cross-User: 938 owned-ID/missing-ID comparisons and 122 Job/Mail/quota comparisons with zero denial failures. Admin: 3036 requests, one client timeout; its single-operation retry passed all 25 denial checks at load 88.69/82.59/76.70. API: 312 finding rows, 242 marked SLOW and 70 other rows. Retain all non-SLOW rows: Appearance first-open fixture #1381; Files DAV stale owner proof #1382 (fixed, focused run exit 0); direct client timeouts plus dependent upload/projection checks #1383. No observed actual 5xx, product crash, unauthorized success or accepted hostile input was identified in these rows. One isolation Share thumbnail was not generated within 30 seconds, so its byte checks were skipped; the separate Photos Share thumbnail checks passed before and after revoke. This and 39 inventory routes without factories remain coverage gaps. No assertions weakened.

Rust blocker: #1386, Shared Notes viewer WebSocket returns 403 rather than 101; Files access rejects the current Share identity. This is a non-timeout gate failure. Existing assertion retained. Cargo stopped before later workspace tests. Remaining compiled test binaries were continued; the root cargo test gate remains failed regardless of that continuation.

Web check initially failed with two strict TypeScript errors in the new file-icon regression fixture (possibly absent indexed fixture row and Set). Type correction exposed three required collection selection props. Added them without changing assertions; focused nine tests pass. Both failed checks and the final retry are retained.

Known gaps: #1381, #1383, #1386 remain open. No Rust workspace pass claimed. The orchestrator must review the before/after images. No follow-up security or filesystem behavior was changed to hide these failures.

Screenshots: combined-release before/after archive. Gates and cleanup follow below.

Gate output verbatim (full logs will be attached):

Web build, exit 0:

Compressed 914 static variants; saved 21490281 bytes.

Cargo fmt --check, exit 0: no output.

Full clippy, exit 0:

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

Workspace cargo test, exit 101:

test owner_editor_viewer_and_live_revoke ... FAILED
test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 5.89s
error: test failed, to rerun pass `-p calternal-collab --test shared_notes`

Initial web check, exit 1:

svelte-check found 2 errors and 4 warnings in 3 files
error: script "check" exited with code 1

Web test, exit 0:

 Test Files  293 passed (293)
      Tests  2103 passed (2103)
   Duration  470.89s (transform 31%, import 27%, environment 23%, tests 14%, setup 4%)

Second web check, exit 1 (required props exposed after the first type fix):

svelte-check found 1 error and 4 warnings in 3 files
error: script "check" exited with code 1

Workspace doctests: exit 0. The full raw output is in cargo-doctests-merge33b.log.

Files changed in this continuation:

apps/web/e2e/merge-review.mjs
apps/web/src/lib/editor/format/EditorFormatBar.svelte
apps/web/src/lib/editor/format/EditorFormatBar.svelte.test.ts
apps/web/src/lib/files/FileCollection.svelte.test.ts
apps/web/src/lib/notes/NoteEditorSurface.svelte
apps/web/src/lib/notes/noteProse.css
contracts/perf/adoption-1058.json
contracts/perf/exceptions.json
packages/editor/src/extensions.dragHandle.test.ts
packages/editor/src/extensions.ts
packages/ui/src/components/files/FileCollection.svelte
tests/adversarial/attack.py
tests/adversarial/attack2.py
tests/adversarial/run.sh
tests/adversarial/test_link_preview_fixtures.py
tests/adversarial/test_xuser_classification.py

Final web check, exit 0:

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

The four warnings are existing unused selectors in MailView and Money. All new test fixture errors are fixed.

Continued Rust verification: all 75 compiled binaries were run after the root Cargo runner stopped. 71 passed; four reached an explicit 180-second continuation cap. There was no additional FAILED case in their partial logs. Those caps are not native assertion failures. Retry each unfinished group with exact skip filters, four test threads and a job deadline; do not repeat completed cases. Original result:

SUMMARY 75/75 binaries; failures 4

The four capped binaries were calternal_plugin_money, calternal_plugin_files, calternal_plugin_notes and indexer. Both partial output and focused output will be attached.

Intermediate focused retry output, verbatim:

RETRY calternal_plugin_money unfinished=63 already-completed=62
test result: ok. 63 passed; 0 failed; 0 ignored; 0 measured; 62 filtered out; finished in 84.30s
EXIT 0
RETRY calternal_plugin_files unfinished=156 already-completed=114
test result: ok. 154 passed; 0 failed; 2 ignored; 0 measured; 114 filtered out; finished in 261.57s
EXIT 0
RETRY calternal_plugin_notes unfinished=122 already-completed=199
test result: ok. 118 passed; 0 failed; 4 ignored; 0 measured; 199 filtered out; finished in 379.33s
EXIT 0
RETRY indexer unfinished=5 already-completed=24

Final focused Rust continuation, verbatim:

RETRY calternal_plugin_money unfinished=63 already-completed=62
test result: ok. 63 passed; 0 failed; 0 ignored; 0 measured; 62 filtered out; finished in 84.30s
EXIT 0
RETRY calternal_plugin_files unfinished=156 already-completed=114
test result: ok. 154 passed; 0 failed; 2 ignored; 0 measured; 114 filtered out; finished in 261.57s
EXIT 0
RETRY calternal_plugin_notes unfinished=122 already-completed=199
test result: ok. 118 passed; 0 failed; 4 ignored; 0 measured; 199 filtered out; finished in 379.33s
EXIT 0
RETRY indexer unfinished=5 already-completed=24
EXIT 124
BOUND: additional binary not run before deadline
SUMMARY failures=1

The Notes 700-Note reconciliation case completed in its retry. The indexer retry reached the job deadline while overflow_recovery_answers_a_queued_integrity_check was pending. The other four unfinished indexer cases completed. This unresolved timeout is not claimed as a proven load-only result. The additional calternal-server binary (284 tests) was not run before the deadline. All other continued binaries and completed retry cases had no new assertion failure. The original workspace cargo test remains exit 101.

Verification left after fixing #1386:

  • cargo test -p calternal-collab --test shared_notes -- --test-threads=4 must prove viewer/editor access during save and live revoke.
  • cargo test -p calternal-search --test indexer overflow_recovery_answers_a_queued_integrity_check -- --exact --test-threads=4 must finish the pending overflow recovery check.
  • cargo test -p calternal-server --bin calternal-server -- --test-threads=4 must run the additional 284 tests.
  • Run the workspace gate after the fixes; this job does not claim it passed.

No push, deploy or merge into dev. Final source comments were re-read. Working tree is clean. Cleanup output and the full evidence archive follow.

Cleanup completed, verbatim:

     Removed 27853 files, 26.1GiB total

Full gate, probe, retry and cleanup output.

Merge33b continuation — #1122 NOT READY. Head: 3e60d38f2b6f018690f1c89092a06d105ff5699c. Branch job/merge33-1122. Origin/dev 0419170fe456b58614befcb12d9c9d255118f1c0 fetched and merged once before gates: already up to date. No push, deploy or merge into dev. Built: corrected the older Instance feature-key review; retained both tests. Removed the duplicate DNS-pinning probe lifecycle. Replaced the text-as-MP4 fixture with the existing decodable video and added exact Range/opaque denial checks. Fixed the Photos probe to select its known shared JPEG rather than an unrelated owner media Item. Fixed asynchronous grip anchoring; CSS owns line centering. Reused the selection bubble on phones with no software keyboard while preserving the documented dock when it opens. Text file rows retain the shared document/code glyph. Added regressions and production capture geometry checks. #1358 evidence: the original invalid-video probe returned 404 on the existing production 0419170fe binary too. Built that exact revision in a detached worktree and ran the real-video probe on the freshly built binary: recipient 206, exact requested bytes; non-recipient and missing Item both 404 with the same body. Focused replay exit 0, FINDINGS 0, SLOW 0 at load 63.41/65.68/61.04. No production video authorization change needed. An earlier fresh isolation+preview replay completed FINDINGS 0/SLOW 9 but its 600-second wrapper expired during cleanup; retain exit 124. The first baseline build needed its same-revision frontend assets for RustEmbed; its retry completed. A redundant second baseline compile was stopped after preserving and running the successful first binary, to start the combined release build. #1359 evidence: two identical image-proxy phases consumed one process-wide public-then-private DNS answer sequence. The second phase was a fixture inconsistency. One retained phase covers every hostile URL, redirect, size/encoding, public-cache and private-trap assertion. Preview alone completed FINDINGS 0/SLOW 0 at load 53.36/46.34/37.22; later pending-only results on the fresh production replay are SLOW diagnostics. No assertion or deadline was weakened. Screenshots: before/after files in artifacts/merge33/review-fixes; all 12 corrected Notes/Files captures pass at 390,820,1440 px, light/dark, macOS emulation. Separate viewport assertions test the §42 software-keyboard dock. Zoom inspection covers the requested grip, capsule and file glyph. The first body paragraph owns the old stray grip (block position 19); its stale detached DOM node yielded a zero rect. The reference now resolves the current block at asynchronous measurement time. The exact original empty-circle Files image was not reproduced; the regression pins document/code glyphs even with old thumbnail hints. Orchestrator visual approval remains separate. PNGs are not committed. Files: apps/web/e2e/merge-review.mjs; editor/format/EditorFormatBar.svelte and test; files/FileCollection.svelte.test.ts; notes/NoteEditorSurface.svelte and noteProse.css; packages/editor/src/extensions.ts and dragHandle test; packages/ui/src/components/files/FileCollection.svelte; tests/adversarial/attack.py, attack2.py, run.sh, test_link_preview_fixtures.py, test_xuser_classification.py; exact source pins in contracts/perf/{exceptions,adoption-1058}.json. No Rust source or lockfile changed. UX gaps closed: grip beside its block inside the editor on hover/focus; selection capsule beside phone text when the keyboard is closed and above it when open; document glyph for Markdown/text and code glyph for code. Reused the existing editor DragHandle, PillGroup, EditorFormatBubble, FormatCommandRow, IconLabel, FileIcon and FileThumb. No duplicate visual primitive. Existing command, focus, touch and reduced-motion paths remain shared. Decisions: DESIGN §42 specifies the open-keyboard dock; for a closed keyboard, reuse the existing selection bubble. Text file rows identify their kind even when an old thumbnail hint exists. Use the preset CARGO_TARGET_DIR (/home/kayg/build/targets/merge33b), per the no-override rule; the brief's historical /mnt/hdd path was not substituted. No OPEN design item built. Cost: one current-block lookup per existing Floating UI geometry getter; traversal follows the editor view tree, with no Home IO; line alignment uses CSS, with no Range/computed-style alignment reads. File glyph selection is three constant comparisons per already virtualized row. No new IO, full-Home scan or background job. Exact perf pins refreshed in existing scopes only; ratchet remains 22543. No new perf VM measurement: this is a merge verification issue, and current policy reserves measurements for performance issues. Bounded adversarial continuation: completed within 90 minutes, exit 1. Security FINDINGS 0/SLOW 5. Cross-User: 938 owned-ID/missing-ID comparisons and 122 Job/Mail/quota comparisons with zero denial failures. Admin: 3036 requests, one client timeout; its single-operation retry passed all 25 denial checks at load 88.69/82.59/76.70. API: 312 finding rows, 242 marked SLOW and 70 other rows. Retain all non-SLOW rows: Appearance first-open fixture #1381; Files DAV stale owner proof #1382 (fixed, focused run exit 0); direct client timeouts plus dependent upload/projection checks #1383. No observed actual 5xx, product crash, unauthorized success or accepted hostile input was identified in these rows. One isolation Share thumbnail was not generated within 30 seconds, so its byte checks were skipped; the separate Photos Share thumbnail checks passed before and after revoke. This and 39 inventory routes without factories remain coverage gaps. No assertions weakened. Rust blocker: #1386, Shared Notes viewer WebSocket returns 403 rather than 101; Files access rejects the current Share identity. This is a non-timeout gate failure. Existing assertion retained. Cargo stopped before later workspace tests. Remaining compiled test binaries were continued; the root cargo test gate remains failed regardless of that continuation. Web check initially failed with two strict TypeScript errors in the new file-icon regression fixture (possibly absent indexed fixture row and Set<unknown>). Type correction exposed three required collection selection props. Added them without changing assertions; focused nine tests pass. Both failed checks and the final retry are retained. Known gaps: #1381, #1383, #1386 remain open. No Rust workspace pass claimed. The orchestrator must review the before/after images. No follow-up security or filesystem behavior was changed to hide these failures. Screenshots: [combined-release before/after archive](https://git.kayg.org/attachments/735dcda6-78e5-4876-88be-8ee9dc90971c). Gates and cleanup follow below. Gate output verbatim (full logs will be attached): Web build, exit 0: ``` Compressed 914 static variants; saved 21490281 bytes. ``` Cargo fmt --check, exit 0: no output. Full clippy, exit 0: ``` Finished `dev` profile [unoptimized + debuginfo] target(s) in 42m 39s ``` Workspace cargo test, exit 101: ``` test owner_editor_viewer_and_live_revoke ... FAILED test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 5.89s error: test failed, to rerun pass `-p calternal-collab --test shared_notes` ``` Initial web check, exit 1: ``` svelte-check found 2 errors and 4 warnings in 3 files error: script "check" exited with code 1 ``` Web test, exit 0: ``` Test Files 293 passed (293) Tests 2103 passed (2103) Duration 470.89s (transform 31%, import 27%, environment 23%, tests 14%, setup 4%) ``` Second web check, exit 1 (required props exposed after the first type fix): ``` svelte-check found 1 error and 4 warnings in 3 files error: script "check" exited with code 1 ``` Workspace doctests: exit 0. The full raw output is in cargo-doctests-merge33b.log. Files changed in this continuation: ``` apps/web/e2e/merge-review.mjs apps/web/src/lib/editor/format/EditorFormatBar.svelte apps/web/src/lib/editor/format/EditorFormatBar.svelte.test.ts apps/web/src/lib/files/FileCollection.svelte.test.ts apps/web/src/lib/notes/NoteEditorSurface.svelte apps/web/src/lib/notes/noteProse.css contracts/perf/adoption-1058.json contracts/perf/exceptions.json packages/editor/src/extensions.dragHandle.test.ts packages/editor/src/extensions.ts packages/ui/src/components/files/FileCollection.svelte tests/adversarial/attack.py tests/adversarial/attack2.py tests/adversarial/run.sh tests/adversarial/test_link_preview_fixtures.py tests/adversarial/test_xuser_classification.py ``` Final web check, exit 0: ``` perf-lint: PASS; 0 violations; 22543 scoped exceptions svelte-check found 0 errors and 4 warnings in 2 files ``` The four warnings are existing unused selectors in MailView and Money. All new test fixture errors are fixed. Continued Rust verification: all 75 compiled binaries were run after the root Cargo runner stopped. 71 passed; four reached an explicit 180-second continuation cap. There was no additional FAILED case in their partial logs. Those caps are not native assertion failures. Retry each unfinished group with exact skip filters, four test threads and a job deadline; do not repeat completed cases. Original result: ``` SUMMARY 75/75 binaries; failures 4 ``` The four capped binaries were calternal_plugin_money, calternal_plugin_files, calternal_plugin_notes and indexer. Both partial output and focused output will be attached. Intermediate focused retry output, verbatim: ``` RETRY calternal_plugin_money unfinished=63 already-completed=62 test result: ok. 63 passed; 0 failed; 0 ignored; 0 measured; 62 filtered out; finished in 84.30s EXIT 0 RETRY calternal_plugin_files unfinished=156 already-completed=114 test result: ok. 154 passed; 0 failed; 2 ignored; 0 measured; 114 filtered out; finished in 261.57s EXIT 0 RETRY calternal_plugin_notes unfinished=122 already-completed=199 test result: ok. 118 passed; 0 failed; 4 ignored; 0 measured; 199 filtered out; finished in 379.33s EXIT 0 RETRY indexer unfinished=5 already-completed=24 ``` Final focused Rust continuation, verbatim: ``` RETRY calternal_plugin_money unfinished=63 already-completed=62 test result: ok. 63 passed; 0 failed; 0 ignored; 0 measured; 62 filtered out; finished in 84.30s EXIT 0 RETRY calternal_plugin_files unfinished=156 already-completed=114 test result: ok. 154 passed; 0 failed; 2 ignored; 0 measured; 114 filtered out; finished in 261.57s EXIT 0 RETRY calternal_plugin_notes unfinished=122 already-completed=199 test result: ok. 118 passed; 0 failed; 4 ignored; 0 measured; 199 filtered out; finished in 379.33s EXIT 0 RETRY indexer unfinished=5 already-completed=24 EXIT 124 BOUND: additional binary not run before deadline SUMMARY failures=1 ``` The Notes 700-Note reconciliation case completed in its retry. The indexer retry reached the job deadline while overflow_recovery_answers_a_queued_integrity_check was pending. The other four unfinished indexer cases completed. This unresolved timeout is not claimed as a proven load-only result. The additional calternal-server binary (284 tests) was not run before the deadline. All other continued binaries and completed retry cases had no new assertion failure. The original workspace cargo test remains exit 101. Verification left after fixing #1386: - cargo test -p calternal-collab --test shared_notes -- --test-threads=4 must prove viewer/editor access during save and live revoke. - cargo test -p calternal-search --test indexer overflow_recovery_answers_a_queued_integrity_check -- --exact --test-threads=4 must finish the pending overflow recovery check. - cargo test -p calternal-server --bin calternal-server -- --test-threads=4 must run the additional 284 tests. - Run the workspace gate after the fixes; this job does not claim it passed. No push, deploy or merge into dev. Final source comments were re-read. Working tree is clean. Cleanup output and the full evidence archive follow. Cleanup completed, verbatim: ``` Removed 27853 files, 26.1GiB total ``` [Full gate, probe, retry and cleanup output](https://git.kayg.org/attachments/ec8fb45e-3557-40d6-a45e-873face6904a).
Author
Owner

merge33c continuation started on job/merge33-1122, head/base 3e60d38f2b. First compare #1386 against production 0419170fe in a detached worktree, then trace Share identity enforcement. Retain viewer 101 and live-revoke assertions. Finish overflow recovery and server tests before the final combined gates. No push, deploy or merge into dev.

merge33c continuation started on job/merge33-1122, head/base 3e60d38f2b6f018690f1c89092a06d105ff5699c. First compare #1386 against production 0419170fe in a detached worktree, then trace Share identity enforcement. Retain viewer 101 and live-revoke assertions. Finish overflow recovery and server tests before the final combined gates. No push, deploy or merge into dev.
Author
Owner

The previously unfinished overflow_recovery_answers_a_queued_integrity_check completed on the merge branch without a source change:

Finished `test` profile [unoptimized + debuginfo] target(s) in 2m 54s

running 1 test
test overflow_recovery_answers_a_queued_integrity_check has been running for over 60 seconds
test overflow_recovery_answers_a_queued_integrity_check ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 28 filtered out; finished in 528.51s

A live stack capture while it was slow placed the fixture writer in fsync before actor startup. File count increased from 1722 to 2378, then reached completion. No hang established; no dev comparison needed for this passing run. Full log and stack retained under artifacts/merge33c.

The previously unfinished overflow_recovery_answers_a_queued_integrity_check completed on the merge branch without a source change: Finished `test` profile [unoptimized + debuginfo] target(s) in 2m 54s running 1 test test overflow_recovery_answers_a_queued_integrity_check has been running for over 60 seconds test overflow_recovery_answers_a_queued_integrity_check ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 28 filtered out; finished in 528.51s A live stack capture while it was slow placed the fixture writer in fsync before actor startup. File count increased from 1722 to 2378, then reached completion. No hang established; no dev comparison needed for this passing run. Full log and stack retained under artifacts/merge33c.
Author
Owner

The previously unrun calternal-server binary completed at head cec7ddf72c:

cargo test -p calternal-server --bin calternal-server -- --test-threads=4
Finished test profile [unoptimized + debuginfo] target(s) in 7m 43s
test wire::tests::live_apps_run_in_separate_processes has been running for over 60 seconds
test wire::tests::live_apps_run_in_separate_processes ... ok
test result: ok. 272 passed; 0 failed; 12 ignored; 0 measured; 0 filtered out; finished in 209.96s

Exit 0. The live-app wrapper ran its nine process-isolated checks. The required full workspace fmt/clippy/test gates now run once after fetch/merge origin/dev (Already up to date). Final web check already passed; full web test remains running.

The previously unrun calternal-server binary completed at head cec7ddf72ca134af0e8019429b9f423a169b654a: cargo test -p calternal-server --bin calternal-server -- --test-threads=4 Finished `test` profile [unoptimized + debuginfo] target(s) in 7m 43s test wire::tests::live_apps_run_in_separate_processes has been running for over 60 seconds test wire::tests::live_apps_run_in_separate_processes ... ok test result: ok. 272 passed; 0 failed; 12 ignored; 0 measured; 0 filtered out; finished in 209.96s Exit 0. The live-app wrapper ran its nine process-isolated checks. The required full workspace fmt/clippy/test gates now run once after fetch/merge origin/dev (Already up to date). Final web check already passed; full web test remains running.
Author
Owner

Merge33c progress at ef0aa12b12. The unchanged production and branch Shared Notes tests both passed. The fixture now uses an explicit stale-inode denial barrier instead of a fixed sleep; it keeps the existing handshake, viewer-write denial and revoke assertions. Final focused test passes; its trace proves stale denial, refresh, viewer access and live revoke. No production authorization code changed.

Required focused blockers complete: overflow recovery passes in 528.51s; server binary passes (272 passed, 12 ignored, zero failures). The single final workspace test run is active and has passed Shared Notes too:

test owner_editor_viewer_and_live_revoke ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 11.41s

Final workspace fmt: exit 0, no output. Workspace clippy: exit 0.
Finished dev profile [unoptimized + debuginfo] target(s) in 5m 40s

Final web check: exit 0.
perf-lint: PASS; 0 violations; 22543 scoped exceptions
svelte-check found 0 errors and 4 warnings in 2 files

Final web test: exit 0.
Test Files 293 passed (293)
Tests 2103 passed (2103)
Duration 415.99s (transform 29%, environment 26%, import 24%, tests 16%, setup 5%)

Fetch/merge origin/dev ran once before final gates: Already up to date, origin/dev 0419170fe. The full-workspace gate began before the final test-only strengthening; focused fmt/clippy/test then passed that final change. All production code and web code stayed unchanged in this continuation. No push, deploy, merge into dev or issue closure. Final readiness remains pending the complete workspace test result and cleanup.

Merge33c progress at ef0aa12b12e0047cf9a779827cc0ed32261b934e. The unchanged production and branch Shared Notes tests both passed. The fixture now uses an explicit stale-inode denial barrier instead of a fixed sleep; it keeps the existing handshake, viewer-write denial and revoke assertions. Final focused test passes; its trace proves stale denial, refresh, viewer access and live revoke. No production authorization code changed. Required focused blockers complete: overflow recovery passes in 528.51s; server binary passes (272 passed, 12 ignored, zero failures). The single final workspace test run is active and has passed Shared Notes too: test owner_editor_viewer_and_live_revoke ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 11.41s Final workspace fmt: exit 0, no output. Workspace clippy: exit 0. Finished `dev` profile [unoptimized + debuginfo] target(s) in 5m 40s Final web check: exit 0. perf-lint: PASS; 0 violations; 22543 scoped exceptions svelte-check found 0 errors and 4 warnings in 2 files Final web test: exit 0. Test Files 293 passed (293) Tests 2103 passed (2103) Duration 415.99s (transform 29%, environment 26%, import 24%, tests 16%, setup 5%) Fetch/merge origin/dev ran once before final gates: Already up to date, origin/dev 0419170fe. The full-workspace gate began before the final test-only strengthening; focused fmt/clippy/test then passed that final change. All production code and web code stayed unchanged in this continuation. No push, deploy, merge into dev or issue closure. Final readiness remains pending the complete workspace test result and cleanup.
Author
Owner

Merge33c final report — #1122

READY. Head: ef0aa12b12. Branch: job/merge33-1122. Started at 3e60d38f2. Fetched and merged origin/dev once before final gates: Already up to date. origin/dev remains 0419170fe4. No push, deploy, merge into dev or issue closure.

Built: a deterministic Shared Notes save-window regression. The callback holds the first atomic save until the real Files resolver denies the viewer's stale inode. It then refreshes the Files Index. The next Hub check must allow the viewer. The test also checks that the installed fingerprint changed while the Share and Index item IDs still match. Existing viewer 101, rejected viewer writes, saved bytes and live-revoke assertions stay unchanged. Production authorization checks and retry limits stay unchanged.

Files: crates/calternal-collab/tests/shared_notes.rs only. Commits: cec7ddf72 (save barrier), 30e37a4a8 (callback documentation), ef0aa12b1 (require a real stale-inode denial). Final module and function comments were re-read. Working tree is clean.

#1386 cause evidence: the exact unchanged test passes on detached production 0419170fe (12.13s) and on the unchanged merge branch (11.83s). The Share resolver, collaboration session, Note writer, filesystem and database source are unchanged from production. No merged branch changed the identity check, so there is no identity-change parent to bisect. The original failure showed matching Share/Index IDs but no refresh completion before the viewer exhausted retries. The fixture's fixed 100-ms delay made its intended ordering depend on host scheduling. This is the supported fixture explanation; the original scheduler delay itself was not captured. The final regression explicitly observes stale denial after 204 ms, then refresh, viewer access and live revoke. Cause and evidence were posted on #1386; it remains open.

Remaining blocker results: the focused overflow recovery test passed in 528.51s. A live stack placed slow setup inside fsync; fixture file counts increased. The full indexer suite also passed all 29 tests in 422.21s. The previously unrun server binary passed all 284 accounted tests: 272 passed, 12 ignored; its live-app wrapper passed nine isolated checks. The full workspace run then passed without a failed assertion. No SLOW-only failed test needed an exact retry.

Decisions: use a first-save notification after an actual stale-inode denial, rather than a wall-clock sleep. This keeps the test's security boundary explicit. Use the preset CARGO_TARGET_DIR (/home/kayg/build/targets/merge33c), without replacing it with the brief's historical path. No OPEN design item was built.

Cost: fixture-only constant-size state (two flags and one notification); it uses the existing bounded access checks. No production operation, route, background job or UI cost changed. Reused Access, shared_note_access, record_note_write and RelPath; no new helper or dependency. No performance profile was needed for this test-only change.

UX gaps closed / left: no UI changed in merge33c. The accepted merge33b Notes grip, phone capsule and Files glyph fixes remain intact. No new screenshot set was needed.

Known gaps: the original scheduling delay is inferred from the failed callback sequence, not directly measured. Prior #1381 and #1383 and merge33b adversarial coverage gaps remain recorded: one isolation thumbnail timed out before byte checks, and 39 inventory routes lacked factories. This continuation does not claim a new adversarial matrix, Mac interop or deployment run. The prior bounded adversarial round was not repeated. No requested command in this continuation was deferred.

Gates, verbatim output excerpts (all exited 0):

cargo fmt --check: no output. Final fixture fmt also produced no output.

cargo clippy --workspace --all-targets -- -D warnings:

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

cargo test --workspace -- --test-threads=4:

    Finished `test` profile [unoptimized + debuginfo] target(s) in 12m 02s
FMT_EXIT 0
CLIPPY_EXIT 0
TEST_EXIT 0

The workspace gate began before the final test-only documentation and strengthening commits. The full run passed Shared Notes too (11.41s); focused fmt, clippy and the strengthened test passed the final fixture source. Production and web source did not change during the gates.

Final focused clippy/test for the strengthened fixture:

    Finished `dev` profile [unoptimized + debuginfo] target(s) in 5m 59s
    Finished `test` profile [unoptimized + debuginfo] target(s) in 13.64s
test owner_editor_viewer_and_live_revoke ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 11.04s

Focused overflow:

test overflow_recovery_answers_a_queued_integrity_check ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 28 filtered out; finished in 528.51s

Focused server binary:

    Finished `test` profile [unoptimized + debuginfo] target(s) in 7m 43s
test result: ok. 272 passed; 0 failed; 12 ignored; 0 measured; 0 filtered out; finished in 209.96s

apps/web bun run check:

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

The four existing warnings are unused CSS selectors in Mail and Money.

apps/web bun run test --maxWorkers=2:

 Test Files  293 passed (293)
      Tests  2103 passed (2103)
   Duration  415.99s (transform 29%, environment 26%, import 24%, tests 16%, setup 5%)

The required production web asset build also exited 0:

Compressed 914 static variants; saved 21490261 bytes.
Workspace test result lines, verbatim
test result: ok. 70 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s
test result: ok. 23 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.11s
test result: ok. 135 passed; 0 failed; 3 ignored; 0 measured; 0 filtered out; finished in 96.90s
test result: ok. 52 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.92s
test result: ok. 17 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 5.23s
test result: ok. 134 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 244.38s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.39s
test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 13.53s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.92s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 80.95s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.37s
test result: ok. 15 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.83s
test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 7.75s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.26s
test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.59s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 11.41s
test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.34s
test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 94.55s
test result: ok. 15 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.34s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.56s
test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 22.29s
test result: ok. 62 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 7.45s
test result: ok. 38 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.13s
test result: ok. 38 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.28s
test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.33s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.13s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.24s
test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.35s
test result: ok. 21 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 1.29s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.08s
test result: ok. 43 passed; 0 failed; 5 ignored; 0 measured; 0 filtered out; finished in 45.14s
test result: ok. 98 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 20.46s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.14s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.08s
test result: ok. 52 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 29.55s
test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.08s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.06s
test result: ok. 3 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.02s
test result: ok. 30 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.25s
test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
test result: ok. 6 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 3.80s
test result: ok. 24 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
test result: ok. 16 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.12s
test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 10.51s
test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.76s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s
test result: ok. 4 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 3.35s
test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.53s
test result: ok. 589 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.88s
test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
test result: ok. 19 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 8.16s
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 0.61s
test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s
test result: ok. 62 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 10.96s
test result: ok. 24 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.42s
test result: ok. 34 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.75s
test result: ok. 104 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 9.16s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.46s
test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.22s
test result: ok. 266 passed; 0 failed; 4 ignored; 0 measured; 0 filtered out; finished in 187.49s
test result: ok. 130 passed; 0 failed; 6 ignored; 0 measured; 0 filtered out; finished in 42.84s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 124 filtered out; finished in 44.15s
test result: ok. 123 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 99.66s
test result: ok. 27 passed; 0 failed; 3 ignored; 0 measured; 0 filtered out; finished in 11.67s
test result: ok. 317 passed; 0 failed; 4 ignored; 0 measured; 0 filtered out; finished in 369.51s
test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.79s
test result: ok. 44 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.50s
test result: ok. 58 passed; 0 failed; 4 ignored; 0 measured; 0 filtered out; finished in 4.97s
test result: ok. 16 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.35s
test result: ok. 60 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 22.78s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.39s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s
test result: ok. 29 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 422.21s
test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s
test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
test result: ok. 1 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 4.52s
test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 272 passed; 0 failed; 12 ignored; 0 measured; 0 filtered out; finished in 156.24s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 33.28s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.21s
test result: ok. 60 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.42s
test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 51 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 46.82s
test result: ok. 1 passed; 0 failed; 6 ignored; 0 measured; 0 filtered out; finished in 0.15s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

Cleanup, verbatim:

     Removed 26664 files, 37.2GiB total

Owned web build output and target/tmp were removed. The detached production comparison worktree was removed. Raw logs and the evidence archive remain in artifacts/merge33c; no review artifact was committed.

READY ef0aa12b12

Merge33c final report — #1122 READY. Head: ef0aa12b12e0047cf9a779827cc0ed32261b934e. Branch: job/merge33-1122. Started at 3e60d38f2. Fetched and merged origin/dev once before final gates: Already up to date. origin/dev remains 0419170fe456b58614befcb12d9c9d255118f1c0. No push, deploy, merge into dev or issue closure. Built: a deterministic Shared Notes save-window regression. The callback holds the first atomic save until the real Files resolver denies the viewer's stale inode. It then refreshes the Files Index. The next Hub check must allow the viewer. The test also checks that the installed fingerprint changed while the Share and Index item IDs still match. Existing viewer 101, rejected viewer writes, saved bytes and live-revoke assertions stay unchanged. Production authorization checks and retry limits stay unchanged. Files: crates/calternal-collab/tests/shared_notes.rs only. Commits: cec7ddf72 (save barrier), 30e37a4a8 (callback documentation), ef0aa12b1 (require a real stale-inode denial). Final module and function comments were re-read. Working tree is clean. #1386 cause evidence: the exact unchanged test passes on detached production 0419170fe (12.13s) and on the unchanged merge branch (11.83s). The Share resolver, collaboration session, Note writer, filesystem and database source are unchanged from production. No merged branch changed the identity check, so there is no identity-change parent to bisect. The original failure showed matching Share/Index IDs but no refresh completion before the viewer exhausted retries. The fixture's fixed 100-ms delay made its intended ordering depend on host scheduling. This is the supported fixture explanation; the original scheduler delay itself was not captured. The final regression explicitly observes stale denial after 204 ms, then refresh, viewer access and live revoke. Cause and evidence were posted on #1386; it remains open. Remaining blocker results: the focused overflow recovery test passed in 528.51s. A live stack placed slow setup inside fsync; fixture file counts increased. The full indexer suite also passed all 29 tests in 422.21s. The previously unrun server binary passed all 284 accounted tests: 272 passed, 12 ignored; its live-app wrapper passed nine isolated checks. The full workspace run then passed without a failed assertion. No SLOW-only failed test needed an exact retry. Decisions: use a first-save notification after an actual stale-inode denial, rather than a wall-clock sleep. This keeps the test's security boundary explicit. Use the preset CARGO_TARGET_DIR (/home/kayg/build/targets/merge33c), without replacing it with the brief's historical path. No OPEN design item was built. Cost: fixture-only constant-size state (two flags and one notification); it uses the existing bounded access checks. No production operation, route, background job or UI cost changed. Reused Access, shared_note_access, record_note_write and RelPath; no new helper or dependency. No performance profile was needed for this test-only change. UX gaps closed / left: no UI changed in merge33c. The accepted merge33b Notes grip, phone capsule and Files glyph fixes remain intact. No new screenshot set was needed. Known gaps: the original scheduling delay is inferred from the failed callback sequence, not directly measured. Prior #1381 and #1383 and merge33b adversarial coverage gaps remain recorded: one isolation thumbnail timed out before byte checks, and 39 inventory routes lacked factories. This continuation does not claim a new adversarial matrix, Mac interop or deployment run. The prior bounded adversarial round was not repeated. No requested command in this continuation was deferred. Gates, verbatim output excerpts (all exited 0): cargo fmt --check: no output. Final fixture fmt also produced no output. cargo clippy --workspace --all-targets -- -D warnings: ``` Finished `dev` profile [unoptimized + debuginfo] target(s) in 5m 40s ``` cargo test --workspace -- --test-threads=4: ``` Finished `test` profile [unoptimized + debuginfo] target(s) in 12m 02s FMT_EXIT 0 CLIPPY_EXIT 0 TEST_EXIT 0 ``` The workspace gate began before the final test-only documentation and strengthening commits. The full run passed Shared Notes too (11.41s); focused fmt, clippy and the strengthened test passed the final fixture source. Production and web source did not change during the gates. Final focused clippy/test for the strengthened fixture: ``` Finished `dev` profile [unoptimized + debuginfo] target(s) in 5m 59s Finished `test` profile [unoptimized + debuginfo] target(s) in 13.64s test owner_editor_viewer_and_live_revoke ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 11.04s ``` Focused overflow: ``` test overflow_recovery_answers_a_queued_integrity_check ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 28 filtered out; finished in 528.51s ``` Focused server binary: ``` Finished `test` profile [unoptimized + debuginfo] target(s) in 7m 43s test result: ok. 272 passed; 0 failed; 12 ignored; 0 measured; 0 filtered out; finished in 209.96s ``` apps/web bun run check: ``` perf-lint: PASS; 0 violations; 22543 scoped exceptions svelte-check found 0 errors and 4 warnings in 2 files ``` The four existing warnings are unused CSS selectors in Mail and Money. apps/web bun run test --maxWorkers=2: ``` Test Files 293 passed (293) Tests 2103 passed (2103) Duration 415.99s (transform 29%, environment 26%, import 24%, tests 16%, setup 5%) ``` The required production web asset build also exited 0: ``` Compressed 914 static variants; saved 21490261 bytes. ``` <details> <summary>Workspace test result lines, verbatim</summary> ``` test result: ok. 70 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s test result: ok. 23 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.11s test result: ok. 135 passed; 0 failed; 3 ignored; 0 measured; 0 filtered out; finished in 96.90s test result: ok. 52 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.92s test result: ok. 17 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 5.23s test result: ok. 134 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 244.38s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.39s test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 13.53s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.92s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 80.95s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.37s test result: ok. 15 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.83s test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 7.75s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.26s test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.59s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 11.41s test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.34s test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 94.55s test result: ok. 15 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.34s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.56s test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 22.29s test result: ok. 62 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 7.45s test result: ok. 38 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.13s test result: ok. 38 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.28s test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.33s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.13s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.24s test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.35s test result: ok. 21 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 1.29s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.08s test result: ok. 43 passed; 0 failed; 5 ignored; 0 measured; 0 filtered out; finished in 45.14s test result: ok. 98 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 20.46s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.14s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.08s test result: ok. 52 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 29.55s test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.08s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.06s test result: ok. 3 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.02s test result: ok. 30 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.25s test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s test result: ok. 6 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 3.80s test result: ok. 24 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s test result: ok. 16 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.12s test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 10.51s test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.76s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s test result: ok. 4 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 3.35s test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.53s test result: ok. 589 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.88s test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s test result: ok. 19 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 8.16s 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 0.61s test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s test result: ok. 62 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 10.96s test result: ok. 24 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.42s test result: ok. 34 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.75s test result: ok. 104 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 9.16s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.46s test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.22s test result: ok. 266 passed; 0 failed; 4 ignored; 0 measured; 0 filtered out; finished in 187.49s test result: ok. 130 passed; 0 failed; 6 ignored; 0 measured; 0 filtered out; finished in 42.84s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 124 filtered out; finished in 44.15s test result: ok. 123 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 99.66s test result: ok. 27 passed; 0 failed; 3 ignored; 0 measured; 0 filtered out; finished in 11.67s test result: ok. 317 passed; 0 failed; 4 ignored; 0 measured; 0 filtered out; finished in 369.51s test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.79s test result: ok. 44 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.50s test result: ok. 58 passed; 0 failed; 4 ignored; 0 measured; 0 filtered out; finished in 4.97s test result: ok. 16 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.35s test result: ok. 60 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 22.78s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.39s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s test result: ok. 29 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 422.21s test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s test result: ok. 1 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 4.52s test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 272 passed; 0 failed; 12 ignored; 0 measured; 0 filtered out; finished in 156.24s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 33.28s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.21s test result: ok. 60 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.42s test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 51 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 46.82s test result: ok. 1 passed; 0 failed; 6 ignored; 0 measured; 0 filtered out; finished in 0.15s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s ``` </details> Cleanup, verbatim: ``` Removed 26664 files, 37.2GiB total ``` Owned web build output and target/tmp were removed. The detached production comparison worktree was removed. Raw logs and the evidence archive remain in artifacts/merge33c; no review artifact was committed. READY ef0aa12b12e0047cf9a779827cc0ed32261b934e
Author
Owner

Deployed to production as ef0aa12b1 at 2026-10-08 02:22 IST (backup /srv/calternal/backup-pre-m33-20261007-2236).

Deployed to production as ef0aa12b1 at 2026-10-08 02:22 IST (backup /srv/calternal/backup-pre-m33-20261007-2236).
kayg closed this issue 2026-10-07 20:52:37 +00:00
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#1122
No description provided.