Merge round 35c #1500

Closed
opened 2026-10-09 05:37:24 +00:00 by kayg · 16 comments
Owner

Merge round 35c into dev from production 9dc65437e: Money conservation fixes (#1393), Mail sync UIDVALIDITY (#1340), journal duplicate protection (#1295), large Note typing and scroll (#1349 #1481), Mail selection (#1449), Search restart (#1450), Notifications read toggle (#1387), Photos open (#1367), Calendar day select (#1491), Note title fade, breadcrumb truncation, phone Search focus and pills. Gates, e2e, adversarial round, xuser matrix, upgrade tests, screenshots. Ends READY/NOT READY.

Merge round 35c into dev from production 9dc65437e: Money conservation fixes (#1393), Mail sync UIDVALIDITY (#1340), journal duplicate protection (#1295), large Note typing and scroll (#1349 #1481), Mail selection (#1449), Search restart (#1450), Notifications read toggle (#1387), Photos open (#1367), Calendar day select (#1491), Note title fade, breadcrumb truncation, phone Search focus and pills. Gates, e2e, adversarial round, xuser matrix, upgrade tests, screenshots. Ends READY/NOT READY.
Author
Owner

Started merge35c on job/merge35c, base 9dc65437e86c74efe92d723f9a99774246e60650 (production). I will merge the 13 listed commits in order, keep both sides of shared primitive changes, and run the merge-round gates and evidence. No push or deploy.

Started merge35c on `job/merge35c`, base `9dc65437e86c74efe92d723f9a99774246e60650` (production). I will merge the 13 listed commits in order, keep both sides of shared primitive changes, and run the merge-round gates and evidence. No push or deploy.
Author
Owner

All 13 items merged in order, one merge commit per item. Head 41d12b1a1; fetched origin/dev once before final gates: Already up to date.

Conflicts resolved: preserve deployed Mail 0021 reader bodies and append deferred Search as 0026; epoch 0022–0025 keep their numbers. Preserve deployed Files contact/consent 0029–0031 and append Journal upload receipts as 0032–0033. Upgrade assertions retain prior receipts and include the added migrations. ModeHeader keeps both Note ProgressiveBlur and breadcrumb ancestor sizing. Mail keeps production one-row reader header/Keep actions and latest-message selection. Notifications retain shared-toast Delete/Clear Undo while adding stable grouped read toggles. Calendar retains bounded multiweek read-ahead/cancellation and adds immediate selected day/contained-range reuse. Toast mutation filtering retains large Note prose exclusion and skips unchanged Calendar docks. Exact perf pins will be regenerated once after the merged-source check.

All 13 items merged in order, one merge commit per item. Head `41d12b1a1`; fetched origin/dev once before final gates: `Already up to date.` Conflicts resolved: preserve deployed Mail 0021 reader bodies and append deferred Search as 0026; epoch 0022–0025 keep their numbers. Preserve deployed Files contact/consent 0029–0031 and append Journal upload receipts as 0032–0033. Upgrade assertions retain prior receipts and include the added migrations. ModeHeader keeps both Note ProgressiveBlur and breadcrumb ancestor sizing. Mail keeps production one-row reader header/Keep actions and latest-message selection. Notifications retain shared-toast Delete/Clear Undo while adding stable grouped read toggles. Calendar retains bounded multiweek read-ahead/cancellation and adds immediate selected day/contained-range reuse. Toast mutation filtering retains large Note prose exclusion and skips unchanged Calendar docks. Exact perf pins will be regenerated once after the merged-source check.
Author
Owner

All 13 merges are committed. Integration fix 4d76a2227 preserves exact Calendar cache snapshots and restores the Mail warm-queue bounds (4 workers, 96 rows). Focused regression rerun:

 Test Files  3 passed (3)
      Tests  80 passed (80)
regression exit=0

The first full web run found Calendar cache/zone and a nested Notifications test from merge conflicts. These are fixed. The unchanged Files Canvas membership test timed out under load and passed in this focused rerun without changing its assertions.

Clippy passed after building the web assets required by RustEmbed:

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

Editor suite:

 Test Files  30 passed (30)
      Tests  529 passed (529)
editor test exit=0

Exact call bindings now cover the existing actor-bound receipt reads, pure receipt/header helpers and Search overlay booleans with their regression tests. No guard was weakened. The total ceiling falls from production 22254 to 22249; no per-rule ceiling rises.

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

The release server is compiling. Full Rust/web gates and real-server verification follow.

All 13 merges are committed. Integration fix 4d76a2227 preserves exact Calendar cache snapshots and restores the Mail warm-queue bounds (4 workers, 96 rows). Focused regression rerun: ``` Test Files 3 passed (3) Tests 80 passed (80) regression exit=0 ``` The first full web run found Calendar cache/zone and a nested Notifications test from merge conflicts. These are fixed. The unchanged Files Canvas membership test timed out under load and passed in this focused rerun without changing its assertions. Clippy passed after building the web assets required by RustEmbed: ``` Finished `dev` profile [unoptimized + debuginfo] target(s) in 50.15s ``` Editor suite: ``` Test Files 30 passed (30) Tests 529 passed (529) editor test exit=0 ``` Exact call bindings now cover the existing actor-bound receipt reads, pure receipt/header helpers and Search overlay booleans with their regression tests. No guard was weakened. The total ceiling falls from production 22254 to 22249; no per-rule ceiling rises. ``` perf-lint: PASS; 0 violations; 22249 scoped exceptions ``` The release server is compiling. Full Rust/web gates and real-server verification follow.
kayg referenced this issue from a commit 2026-10-09 06:04:53 +00:00
Author
Owner

Release build passed:

    Finished `release` profile [optimized] target(s) in 20m 50s
release build exit=0

Final web check:

svelte-check found 0 errors and 3 warnings in 1 file
web check exit=0

Focused real-server Journal probes:

PASS jdrev4 Cancel -> intent/staging/Versions retained -> real restart -> Note GET 200, Log 409; sibling and other User Log 201; partial Cancel 204
journal_cancel_restart exit=0
PASS SIGKILL mid-finalize: 1 crash, 1 later Log, 1 same-ID retry, 1 Note, 0 duplicate Notes; bytes preserved
journal_finalize_crash exit=0

Photos test conflict: preserve both existing assertion sets by checking the live Undo toast first, repeating the same real tag edit, then reloading for the persistence check. No expected value changed. Syntax check passes; real Photos suite is running.

The additional Journal stages probe passed its first stage, then timed out on a Log request and even after SIGKILL. /proc/pressure/io at 06:18 UTC reported full avg10=27.44 avg60=26.01; the kernel journal worker, Node and calternal-server processes were in D state. This is retained as a SLOW host finding; no assertion or timeout was weakened. The requested cancel and finalize probes above passed before that stall. Full Rust/web suites and production classifications continue.

The upgrade test fixture needed two corrections: close/checkpoint SQLite before copying transient WAL state; exclude Versions directories from the live Note source lookup. This is test scaffolding, not a product finding. The corrected probe is running.

Release build passed: ``` Finished `release` profile [optimized] target(s) in 20m 50s release build exit=0 ``` Final web check: ``` svelte-check found 0 errors and 3 warnings in 1 file web check exit=0 ``` Focused real-server Journal probes: ``` PASS jdrev4 Cancel -> intent/staging/Versions retained -> real restart -> Note GET 200, Log 409; sibling and other User Log 201; partial Cancel 204 journal_cancel_restart exit=0 PASS SIGKILL mid-finalize: 1 crash, 1 later Log, 1 same-ID retry, 1 Note, 0 duplicate Notes; bytes preserved journal_finalize_crash exit=0 ``` Photos test conflict: preserve both existing assertion sets by checking the live Undo toast first, repeating the same real tag edit, then reloading for the persistence check. No expected value changed. Syntax check passes; real Photos suite is running. The additional Journal stages probe passed its first stage, then timed out on a Log request and even after SIGKILL. `/proc/pressure/io` at 06:18 UTC reported `full avg10=27.44 avg60=26.01`; the kernel journal worker, Node and calternal-server processes were in D state. This is retained as a SLOW host finding; no assertion or timeout was weakened. The requested cancel and finalize probes above passed before that stall. Full Rust/web suites and production classifications continue. The upgrade test fixture needed two corrections: close/checkpoint SQLite before copying transient WAL state; exclude Versions directories from the live Note source lookup. This is test scaffolding, not a product finding. The corrected probe is running.
Author
Owner

Upgrade and stopped Search regression now pass on real binaries (new probe committed as df2a8f02d):

PASS production 9dc65437e copy: startup=5.007s; Mail22–26 Files32–33; deployed receipts, Money, Mail and source bytes preserved; stopped Note edit reindexed and deleted file removed
upgrade verified exit=0

Full web suite:

 Test Files  309 passed (309)
      Tests  2261 passed (2261)
web test exit=0

Mail 10,000-Message probe: all 20 Arrow and 20 pointer selections used exactly one request. No speculative thread-header reads. The periodic Inbox and Notifications polls remained periodic.

exit=0; elapsed=88.731s

Real TLS Dovecot connected and backfilled 2,000 Messages in 17.325s; its scrolling assertion timed out (API metadata count 1998, UI250). The shared production binary lacks mail-test-provider (connect returns400), so this is not yet a valid production classification. A matching production provider build is still required.

Mail layout assertions for row-selection /mail/t routes must become /mail/m routes: #1449 explicitly changes this behavior. Explicit conversation deep links remain /mail/t. These are the only expectation changes planned for that test.

Journal real-daemon crash probe and the one focused rerun of the extra stages probe passed:

PASS daemon SIGKILL after final send: durable same ID + final_sent=1 + original 30-day deadline survive; restart verifies exact published bytes, retires pending/fence atomically; 1 POST, 1 receipt, 1 Note, no replay
sync crash retry exit=0
stages retry exit=0

Initialized retention, canonical missing-source protection, and cross-User isolation also passed. The raw imported-path probes distinguish lawful metadata adoption and the canonical Journal fallback; their unchanged assertions are retained for classification.

Upgrade and stopped Search regression now pass on real binaries (new probe committed as df2a8f02d): ``` PASS production 9dc65437e copy: startup=5.007s; Mail22–26 Files32–33; deployed receipts, Money, Mail and source bytes preserved; stopped Note edit reindexed and deleted file removed upgrade verified exit=0 ``` Full web suite: ``` Test Files 309 passed (309) Tests 2261 passed (2261) web test exit=0 ``` Mail 10,000-Message probe: all 20 Arrow and 20 pointer selections used exactly one request. No speculative thread-header reads. The periodic Inbox and Notifications polls remained periodic. ``` exit=0; elapsed=88.731s ``` Real TLS Dovecot connected and backfilled 2,000 Messages in 17.325s; its scrolling assertion timed out (API metadata count 1998, UI250). The shared production binary lacks mail-test-provider (connect returns400), so this is not yet a valid production classification. A matching production provider build is still required. Mail layout assertions for row-selection /mail/t routes must become /mail/m routes: #1449 explicitly changes this behavior. Explicit conversation deep links remain /mail/t. These are the only expectation changes planned for that test. Journal real-daemon crash probe and the one focused rerun of the extra stages probe passed: ``` PASS daemon SIGKILL after final send: durable same ID + final_sent=1 + original 30-day deadline survive; restart verifies exact published bytes, retires pending/fence atomically; 1 POST, 1 receipt, 1 Note, no replay sync crash retry exit=0 stages retry exit=0 ``` Initialized retention, canonical missing-source protection, and cross-User isolation also passed. The raw imported-path probes distinguish lawful metadata adoption and the canonical Journal fallback; their unchanged assertions are retained for classification.
Author
Owner

Files test integration fix 8c37131c1 moves the existing minimal User table creation before applying plugin migrations. The first full Rust run failed four tests at migration setup with no such table: main.users; receipt compaction follows the production Contacts foreign keys. No assertion, fixture value or product behavior changed.

Focused rerun uses the exact new workspace-built Files test binary (no second feature-graph build):

test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 282 filtered out; finished in 3.54s
exact Files regression exit=0
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 284 filtered out; finished in 0.60s
exact Admin repair exit=0

Full clippy after the fix:

    Finished `dev` profile [unoptimized + debuginfo] target(s) in 30.37s
clippy fixture exit=0

The full Rust suite is rerunning with --no-fail-fast -- --test-threads=4.

Mail layout assertions are updated in 7bd8b630e only for the behavior explicitly changed by #1449: row/Arrow selection links the latest Message (/mail/m); explicit thread links remain /mail/t. The 40-selection regression already verifies this behavior; the adapted layout suite is queued.

Calendar bounded range/scroll probe passed (553.327s on the busy build host). Search focus/ring and responsive Pill probes passed:

PASS #1425 Search opens without a ring after Cmd+K and click; Tab shows one.
exit=0; elapsed=44.317s
FAILURES []
exit=0; elapsed=39.588s

Production baseline issues filed: #1503 Files text-card/PDF fixture mismatch; #1504 Calendar suite expects an obsolete Week link. Their expectations remain unchanged.

The matching production9dc TLS-provider release build passed in12m38s, under an explicit host target subdirectory in the preset job target. The first attempt with a custom profile hit the existing native-runtime build script's supported-profile restriction; no source was changed to bypass it.

Files test integration fix 8c37131c1 moves the existing minimal User table creation before applying plugin migrations. The first full Rust run failed four tests at migration setup with `no such table: main.users`; receipt compaction follows the production Contacts foreign keys. No assertion, fixture value or product behavior changed. Focused rerun uses the exact new workspace-built Files test binary (no second feature-graph build): ``` test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 282 filtered out; finished in 3.54s exact Files regression exit=0 test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 284 filtered out; finished in 0.60s exact Admin repair exit=0 ``` Full clippy after the fix: ``` Finished `dev` profile [unoptimized + debuginfo] target(s) in 30.37s clippy fixture exit=0 ``` The full Rust suite is rerunning with `--no-fail-fast -- --test-threads=4`. Mail layout assertions are updated in 7bd8b630e only for the behavior explicitly changed by #1449: row/Arrow selection links the latest Message (/mail/m); explicit thread links remain /mail/t. The 40-selection regression already verifies this behavior; the adapted layout suite is queued. Calendar bounded range/scroll probe passed (553.327s on the busy build host). Search focus/ring and responsive Pill probes passed: ``` PASS #1425 Search opens without a ring after Cmd+K and click; Tab shows one. exit=0; elapsed=44.317s FAILURES [] exit=0; elapsed=39.588s ``` Production baseline issues filed: #1503 Files text-card/PDF fixture mismatch; #1504 Calendar suite expects an obsolete Week link. Their expectations remain unchanged. The matching production9dc TLS-provider release build passed in12m38s, under an explicit host target subdirectory in the preset job target. The first attempt with a custom profile hit the existing native-runtime build script's supported-profile restriction; no source was changed to bypass it.
Author
Owner

All 13 requested merges are committed. Current head is 5b452f649e. The separate Files integration fixture had the same Users-before-migrations requirement as the unit fixture; commit 1e69c7a19 fixes setup order without changing an assertion or product code.

test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.71s
jdrev2 fixed exit=0
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 26.31s
clippy exit=0

The second full Rust run continues with no-fail-fast so later crates are tested. Its earlier jdrev2 fixture failures are recorded alongside the passing focused rerun.

The Photos real-server suite passed its Taken/HEIC checks and its Tag and burst Undo functional checks. It failed later in a legacy screenshot step that picks the last global Undo and waits for a key-photo restored toast. Production stops earlier at the unchanged Tag toast assertion. This later screenshot finding is not yet classified; the separate 5,000-Photo capture has already produced all six width/theme sets.

Additional production baseline issues: #1508 Photos key-photo profile gets 400 on both binaries; #1509 Notes block-editor route reaches /f//edit but its contenteditable selector times out on both. Existing assertions stay intact. Money budget screenshots at all three widths in both themes now exist; the suite next fails at its exact Markdown header assertion because date and last-edited metadata precede the closing fence. Production classification is running.

The exact perf ratchet remains 22249, below production 22254. No push or deploy has run.

All 13 requested merges are committed. Current head is 5b452f649eb246b02c28a2f55f8a674c140aeb0c. The separate Files integration fixture had the same Users-before-migrations requirement as the unit fixture; commit 1e69c7a19 fixes setup order without changing an assertion or product code. ``` test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.71s jdrev2 fixed exit=0 Finished `dev` profile [unoptimized + debuginfo] target(s) in 26.31s clippy exit=0 ``` The second full Rust run continues with no-fail-fast so later crates are tested. Its earlier jdrev2 fixture failures are recorded alongside the passing focused rerun. The Photos real-server suite passed its Taken/HEIC checks and its Tag and burst Undo functional checks. It failed later in a legacy screenshot step that picks the last global Undo and waits for a key-photo restored toast. Production stops earlier at the unchanged Tag toast assertion. This later screenshot finding is not yet classified; the separate 5,000-Photo capture has already produced all six width/theme sets. Additional production baseline issues: #1508 Photos key-photo profile gets 400 on both binaries; #1509 Notes block-editor route reaches /f/<id>/edit but its contenteditable selector times out on both. Existing assertions stay intact. Money budget screenshots at all three widths in both themes now exist; the suite next fails at its exact Markdown header assertion because date and last-edited metadata precede the closing fence. Production classification is running. The exact perf ratchet remains 22249, below production 22254. No push or deploy has run.
Author
Owner

Current head: 30d36a22e. New commits reset the complete Photos legacy schema (without changing the migration-25 assertion), require prepared Mail bodies before capture, and add a selector for the existing editor browser probe so production classification does not need a second unrelated chaos round.

The full release-server adversarial round is running within its60-minute limit. Its cross-User matrix passed:

Two-User OpenAPI matrix: 436 operations classified; 227 operations replayed; 1058 A-ID vs missing-ID comparisons across B, C, D and anonymous; 16 #1402 non-private identifier routes reviewed by their own authority class; median absolute timing delta 0.6 ms
Job/Mail/quota ownership checks: 127 comparisons; 0 denial failures
Revoked Share timing control: identical HTTP 404 profiles; median delta 0.9 ms across 12 alternating pairs

The Money hostile-input/import/concurrency probe and Notifications route isolation/Undo probes also passed. Editor concurrent same-block, offline, delete/edit and external-write checks passed; its 10,000-block timing was2439ms against2000ms on this shared host (SLOW), and its Copy link to block menu check failed. The latter is queued for production classification.

Search chaos reported an NFD query mismatch during mixed plugin activity and a180-second restart integrity deadline. A focused fresh-Home comparison finds both NFC/NFD filenames on both binaries. The actual long-lived server later completed its24,076-item check: missing0, stale0, manifest mismatches0, healthy=true, last_error=null. Its quiescence wait was319.9s; ordinary Owner reads were0.01s. Record the restart deadline as load-related latency, not data loss. Mixed-plugin Unicode classification is still pending.

Filed findings: #1510 deliberate Money managed-date header vs old exact assertion; #1511 production TLS Mail scroll; #1512 pending second-account HTML fixture; #1513 production Notifications row-key assertions; #1514 Photos Undo capture/feedback; the raw Journal fixture issue is being posted separately. Existing expectation values are unchanged except the row route explicitly changed by #1449 and the merged migration receipts.

The third full Rust run tests the final Files fixture order. It has reached the server/upgrade tests without a failing target so far. The preceding run's only failing target was the fixed jdrev2 fixture; its focused nine-case rerun passed.

Current head: 30d36a22e. New commits reset the complete Photos legacy schema (without changing the migration-25 assertion), require prepared Mail bodies before capture, and add a selector for the existing editor browser probe so production classification does not need a second unrelated chaos round. The full release-server adversarial round is running within its60-minute limit. Its cross-User matrix passed: ``` Two-User OpenAPI matrix: 436 operations classified; 227 operations replayed; 1058 A-ID vs missing-ID comparisons across B, C, D and anonymous; 16 #1402 non-private identifier routes reviewed by their own authority class; median absolute timing delta 0.6 ms Job/Mail/quota ownership checks: 127 comparisons; 0 denial failures Revoked Share timing control: identical HTTP 404 profiles; median delta 0.9 ms across 12 alternating pairs ``` The Money hostile-input/import/concurrency probe and Notifications route isolation/Undo probes also passed. Editor concurrent same-block, offline, delete/edit and external-write checks passed; its 10,000-block timing was2439ms against2000ms on this shared host (SLOW), and its Copy link to block menu check failed. The latter is queued for production classification. Search chaos reported an NFD query mismatch during mixed plugin activity and a180-second restart integrity deadline. A focused fresh-Home comparison finds both NFC/NFD filenames on both binaries. The actual long-lived server later completed its24,076-item check: missing0, stale0, manifest mismatches0, healthy=true, last_error=null. Its quiescence wait was319.9s; ordinary Owner reads were0.01s. Record the restart deadline as load-related latency, not data loss. Mixed-plugin Unicode classification is still pending. Filed findings: #1510 deliberate Money managed-date header vs old exact assertion; #1511 production TLS Mail scroll; #1512 pending second-account HTML fixture; #1513 production Notifications row-key assertions; #1514 Photos Undo capture/feedback; the raw Journal fixture issue is being posted separately. Existing expectation values are unchanged except the row route explicitly changed by #1449 and the merged migration receipts. The third full Rust run tests the final Files fixture order. It has reached the server/upgrade tests without a failing target so far. The preceding run's only failing target was the fixed jdrev2 fixture; its focused nine-case rerun passed.
Author
Owner

Current head ea78d91b6. All full primary gates passed at 4e5762efb (3,486 Rust tests, 2,261 web tests, 529 editor tests). The focused CAS corruption/repair, quarantine and forced-restart resume probe now passes with zero findings and zero SLOW results. The separate XUser round also has zero findings. Clean Calendar, Notifications and Mail captures pass at all three widths and both themes.

A real integration bug appeared in the broader Mail layout test: after #1449 Message-link selection clears selectedThreadId, moveMorphSelection still uses only the thread index. Its next-row control resolves index -1 and returns to the first row. The fix shares the existing Message/thread index maps between list and reader controls, with constant-time lookup. The original Arrow assertions remain unchanged. The full layout regression and final web gates are running.

The Mail fixture now wakes the same real delivery preparation jobs as prepared-images. It does not mark raw HTML safe or alter source bodies. This is required because #1449 selection opens the latest Message directly. #1512 has a correction: the original diagnostic incorrectly assigned that latest Message's pending HTML to the visible second-account URL. Exact API comparisons show correct identities on both binaries. #1521 records the separate baseline unusable-provider MIME 500.

Production classifications filed: #1516 Mail attachment pointer interception, #1517 block Copy link menu, #1518 mixed Tag/NFD Search, #1519 legacy HEIC Inspector. #1520 records the disabled-plugin Calendar probe precondition; focused production feeds pass without findings. No new data loss or cross-User leak has been observed.

Current head ea78d91b6. All full primary gates passed at 4e5762efb (3,486 Rust tests, 2,261 web tests, 529 editor tests). The focused CAS corruption/repair, quarantine and forced-restart resume probe now passes with zero findings and zero SLOW results. The separate XUser round also has zero findings. Clean Calendar, Notifications and Mail captures pass at all three widths and both themes. A real integration bug appeared in the broader Mail layout test: after #1449 Message-link selection clears selectedThreadId, moveMorphSelection still uses only the thread index. Its next-row control resolves index -1 and returns to the first row. The fix shares the existing Message/thread index maps between list and reader controls, with constant-time lookup. The original Arrow assertions remain unchanged. The full layout regression and final web gates are running. The Mail fixture now wakes the same real delivery preparation jobs as prepared-images. It does not mark raw HTML safe or alter source bodies. This is required because #1449 selection opens the latest Message directly. #1512 has a correction: the original diagnostic incorrectly assigned that latest Message's pending HTML to the visible second-account URL. Exact API comparisons show correct identities on both binaries. #1521 records the separate baseline unusable-provider MIME 500. Production classifications filed: #1516 Mail attachment pointer interception, #1517 block Copy link menu, #1518 mixed Tag/NFD Search, #1519 legacy HEIC Inspector. #1520 records the disabled-plugin Calendar probe precondition; focused production feeds pass without findings. No new data loss or cross-User leak has been observed.
Author
Owner

NOT READY: Money's exact Source assertion is a new mismatch with managed-date headers (#1510). The original expectation remains for orchestrator review. Primary gates pass.

Head: f49a5487ed775a59a78c6321cb6487c40bee7020 on job/merge35c. Base: 9dc65437e. No pushes or deploys. All ref changes were in this worktree.

Built and merged

Merged all 13 supplied commits, in the requested order, with one no-ff merge commit per item. No items were skipped. Merge commits: a84beae65, 924e2bc74, 2e0ea3c01, b6ea7a499, 5d1ad3989, d028d4ef9, da66f2a24, ca2807845, 31364cb42, 30620dafd, 00ceb5639, a0271394b, 41d12b1a1.

Integration fixes retain both ModeHeader CSS changes, the production Mail reader header and Keep action, Calendar bounded read-ahead and optimistic selection, and Notifications shared Undo and stable row state. Fixed Calendar snapshot/timezone integration, test fixture migration order, and Mail reader arrow navigation. Reader and list controls now share constant-time Message/thread index lookup. The complete Mail layout regression passes with its original reader and Arrow assertions.

The seeded Mail fixture now wakes the real delivery preparation jobs. Source bodies, identities and sanitization rules remain unchanged. The Photos legacy fixture resets the complete merged schema before its unchanged migration-25 assertion. Added the copied-production Home upgrade/stopped-Search probe, real Calendar/Notifications review captures, and an existing-editor-probe selector for focused production classification.

Files: 220 changed files. Areas: crates/calternal-money, crates/plugins/{money,mail,files,notifications}, crates/calternal-{server,sync,search}, apps/web/src, packages/{ui,editor}, bench, contracts/perf, apps/web/e2e, tests/adversarial. The gate archive has the complete changed-file manifest. Own integration files include MailView.svelte, calendar/data.ts, Notifications model/tests, Mail cache/store, Files journal fixtures, server upgrade tests, Mail/Photos e2e, merge35c-review.mjs, merge35c_upgrade.py, Tus probe/contracts/tests, and exact perf entries.

Gate output, verbatim

Full workspace Rust gates used four build jobs, disabled incremental builds and line-table debug output. Tests used four threads. The final Rust run has 3,486 passes, zero failures and 55 ignored tests across 125 result summaries. Rust sources did not change after that run. Final web gates include the Mail reader fix.

fmt final head exit=0
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 26.31s
clippy exit=0
cargo test head exit=0
perf-lint: PASS; 0 violations; 22249 scoped exceptions
svelte-check found 0 errors and 3 warnings in 1 file
web mail fix check exit=0
 Test Files  309 passed (309)
      Tests  2261 passed (2261)
   Duration  219.43s (environment 29%, transform 26%, import 21%, tests 18%, setup 5%)
web mail fix test exit=0
 Test Files  30 passed (30)
      Tests  529 passed (529)
   Duration  40.79s (transform 6.05s, setup 645ms, import 16.44s, tests 15.73s, environment 38.84s)
editor test exit=0
mail fix web build exit=0
    Finished `release` profile [optimized] target(s) in 20m 50s
release build exit=0

Commands: cargo fmt --check; cargo clippy --all-targets -- -D warnings; cargo test --no-fail-fast -- --test-threads=4; cd apps/web && bun run check && bun run test --maxWorkers=2; cd packages/editor && bun run test. Full Rust and web test output is attached. Three existing MailMorph unused-CSS warnings remain.

Earlier Rust runs exposed Users-before-migration fixture setup defects. Fixed them without changing expectations; focused Files cases and the full workspace rerun pass. The Files reconcile storm logged a greater-than-60-second warning but completed successfully; it did not time out. An early Canvas test hit its existing five-second deadline under load; its unchanged focused rerun and both later full web suites pass.

Real server, upgrade and adversarial evidence

PASS production 9dc65437e copy: startup=5.007s; Mail22–26 Files32–33; deployed receipts, Money, Mail and source bytes preserved; stopped Note edit reindexed and deleted file removed
upgrade verified exit=0
PASS jdrev4 Cancel -> intent/staging/Versions retained -> real restart -> Note GET 200, Log 409; sibling and other User Log 201; partial Cancel 204
journal_cancel_restart exit=0
PASS SIGKILL mid-finalize: 1 crash, 1 later Log, 1 same-ID retry, 1 Note, 0 duplicate Notes; bytes preserved
journal_finalize_crash exit=0
Two-User OpenAPI matrix: 436 operations classified; 227 operations replayed; 1058 A-ID vs missing-ID comparisons across B, C, D and anonymous; 16 #1402 non-private identifier routes reviewed by their own authority class; median absolute timing delta 0.2 ms
Job/Mail/quota ownership checks: 127 comparisons; 0 denial failures
Revoked Share timing control: identical HTTP 404 profiles; median delta 0.5 ms across 12 alternating pairs
xuser exit=0
dedup damaged inode moved to quarantine (paired rename cookie)
dedup scan resumed: saved=64 final=148 bytes=12255426
==== ROUND 2 FINDINGS 0
==== ROUND 2 SLOW 0
dedup-focused exit=0

All Mail epoch tests passed, including deployed pending-upgrade and SIGKILL cases. Journal tests also pass ten staging/cancel boundaries, initialized retention, missing canonical Source, two-User isolation, real Sync finalize recovery and the 30-day durable retry deadline. Raw imported/fallback fixture assertions remain filed in #1515; canonical and initialized cases retain exact later bytes and stable IDs.

Ran one full adversarial round with a 60-minute execution limit. It returned adversarial exit=124; cleanup needed a final kill after SIGTERM. The campaign passed Money hostile-input/import/concurrency, Notifications read-state/Undo/isolation, cross-User and editor concurrent/offline/delete-edit/external-write checks. No unplanned server crash, lost Source or cross-User disclosure was observed. Later phases were truncated by the time limit. Focused reruns classify findings, rather than repeat the full campaign.

The old Tus race assertion counted permitted completed-ID acknowledgements as writers. DESIGN §26/#1295 explicitly allows same-ID HEAD/PATCH completion acknowledgement without writing Source. The revised probe retains exactly-one-writer assertions for active partial uploads and verifies one completion identity, one offered payload, and unchanged bytes after varied-body retries. Its 25 contract tests and real release-server race pass.

A separate controlled Index-lock comparison reproduces PATCH 503 on both production and candidate. Both resume at offset zero and preserve exact bytes on retry (#1522). The loaded Search restart exceeded 180 seconds, then completed with 24,076 items, zero missing/stale/mismatched items and healthy state. Fresh NFC/NFD checks pass on both binaries; mixed Tag/NFD failure reproduces on production (#1518). Focused CAS repair/quarantine/GC/restart and scan-resume checks pass; the full round's pending scan was not a completed repair failure.

E2e, cost and UX gaps closed

Passed Journal upload recovery, large Note/editor risk checks, Note title fade, breadcrumb truncation, Search focus handoff, phone Search height, Calendar scroll/read-ahead, Photos cross-day selection, 5,000-Photo opening captures, the complete Mail layout suite and 10,000-Message selection profile. Captured all requested screens with macOS emulation at actual 1440, 820 and 390 widths, light and dark. Mail and Calendar/Notifications final captures use matching web/server build IDs. Discarded update-toast captures. Photos pointer/keyboard/Inspector and Search pointer/Cmd+K captures show the input states. Claude remains the visual reviewer.

The large Note probe preserves block-2520 caret/find/selection and printed all content. Its scroll probe reported zero input drift and zero end clamp. Calendar's local profile used 84 days with 20 provider Events per day and passed. Mail selection cost is constant-time index lookup plus one body request: all 20 Arrow and 20 click selections made exactly one body request each with a 10,000-Message Inbox. No speculative thread-body requests occurred. These are local/shared-host measurements; no Mac GPU timing or perf-VM benchmark is claimed. No Mac VM sessions or locks were used.

UX gaps closed: reader Arrow/previous/next state resolves from the current Message; explicit thread actions retain conversation checks; prepared images render through real jobs; Photos Undo and persistence checks have separate lifecycles; narrow Calendar overflow opens the real Log; Notifications read/unread persists and keeps the keyed row connected. Visible controls reuse ModeHeader, ProgressiveBlur, SegmentedControl, MailReaderActions, MailMorphCard, shared menus, Inspector and Toaster.

Known gaps and decisions

Blocking verification mismatch: #1510. Money writes managed date and last edited on the first durable month write so Notes date backfill cannot race Money CAS (#1393/#1148). Its exact old frontmatter prefix assertion fails on the candidate and passes on production. Conservation/store/reference-vector tests pass; no transaction loss was observed. Kept that assertion under the owner rule: do not change an existing expectation unless its behavior change is explicit. This report does not silently treat that new E2e failure as green.

Other filed gaps: #1503 Files thumbnail fixture; #1504 Calendar old Week selector; #1505 Search opening-shortcut focus expectation; #1506–#1507 Notifications focus/empty-state expectations; #1508 Photos key-photo fixture; #1509 Notes editor selector; #1511 real-TLS Mail scroll (same failure on production); #1513 Notifications row-key fixture; #1514 Photos Undo capture/feedback; #1515 raw Journal fixture; #1516 Mail attachment pointer interception; #1517 block Copy link menu; #1518 mixed Search; #1519 legacy HEIC Inspector (same exact failure on production, despite successful MIME/backfill/identity/byte checks); #1520 disabled Calendar probe state; #1521 uncached MIME error with unusable fixture credentials (500 on both binaries); #1522 retryable Index contention; #1523 PDF thumbnail deadline; #1524 production Money Create Budget selector; #1525 late revoked-session probe state. #1512 has a correction and the complete Mail regression now passes. No issues were closed. Existing assertions were retained except the route explicitly changed by #1449, appended migration receipts, and DESIGN §26's completed-acknowledgement race classification.

No new product features or OPEN decisions were implemented. Integration decisions: retain Mail's deployed 0021 reader-body migration, keep epoch 0022–0025 and move deferred Search to 0026; retain deployed Files 0029–0031 and move upload receipts to 0032–0033; keep both header CSS changes; preserve the production shared controls and Undo behavior. Exact perf adoption ran once after both header merges. Later fixes refresh live hashes only. Ratchet is 22,249 versus production 22,254, with no per-rule increase.

For the orchestrator: resolve #1510's exact Source assertion before treating this head as READY; review #1515's raw fixture contract and the filed non-blocking regressions. No push or deploy was attempted.

Cleanup, verbatim:

     Removed 42658 files, 33.8GiB total
cargo clean exit=0

Removed own web build/output and target/tmp test Homes. Kept ignored review artifacts. Final process audit found no owned server/browser processes. Git status is clean. Doc comments for the integration changes were re-read.

Attached evidence

NOT READY: #1510 Money exact Source expectation remains unresolved at f49a5487ed775a59a78c6321cb6487c40bee7020.

NOT READY: Money's exact Source assertion is a new mismatch with managed-date headers (#1510). The original expectation remains for orchestrator review. Primary gates pass. Head: `f49a5487ed775a59a78c6321cb6487c40bee7020` on `job/merge35c`. Base: `9dc65437e`. No pushes or deploys. All ref changes were in this worktree. ## Built and merged Merged all 13 supplied commits, in the requested order, with one no-ff merge commit per item. No items were skipped. Merge commits: `a84beae65`, `924e2bc74`, `2e0ea3c01`, `b6ea7a499`, `5d1ad3989`, `d028d4ef9`, `da66f2a24`, `ca2807845`, `31364cb42`, `30620dafd`, `00ceb5639`, `a0271394b`, `41d12b1a1`. Integration fixes retain both ModeHeader CSS changes, the production Mail reader header and Keep action, Calendar bounded read-ahead and optimistic selection, and Notifications shared Undo and stable row state. Fixed Calendar snapshot/timezone integration, test fixture migration order, and Mail reader arrow navigation. Reader and list controls now share constant-time Message/thread index lookup. The complete Mail layout regression passes with its original reader and Arrow assertions. The seeded Mail fixture now wakes the real delivery preparation jobs. Source bodies, identities and sanitization rules remain unchanged. The Photos legacy fixture resets the complete merged schema before its unchanged migration-25 assertion. Added the copied-production Home upgrade/stopped-Search probe, real Calendar/Notifications review captures, and an existing-editor-probe selector for focused production classification. Files: 220 changed files. Areas: `crates/calternal-money`, `crates/plugins/{money,mail,files,notifications}`, `crates/calternal-{server,sync,search}`, `apps/web/src`, `packages/{ui,editor}`, `bench`, `contracts/perf`, `apps/web/e2e`, `tests/adversarial`. The gate archive has the complete changed-file manifest. Own integration files include `MailView.svelte`, `calendar/data.ts`, Notifications model/tests, Mail cache/store, Files journal fixtures, server upgrade tests, Mail/Photos e2e, `merge35c-review.mjs`, `merge35c_upgrade.py`, Tus probe/contracts/tests, and exact perf entries. ## Gate output, verbatim Full workspace Rust gates used four build jobs, disabled incremental builds and line-table debug output. Tests used four threads. The final Rust run has 3,486 passes, zero failures and 55 ignored tests across 125 result summaries. Rust sources did not change after that run. Final web gates include the Mail reader fix. ```text fmt final head exit=0 Finished `dev` profile [unoptimized + debuginfo] target(s) in 26.31s clippy exit=0 cargo test head exit=0 perf-lint: PASS; 0 violations; 22249 scoped exceptions svelte-check found 0 errors and 3 warnings in 1 file web mail fix check exit=0 Test Files 309 passed (309) Tests 2261 passed (2261) Duration 219.43s (environment 29%, transform 26%, import 21%, tests 18%, setup 5%) web mail fix test exit=0 Test Files 30 passed (30) Tests 529 passed (529) Duration 40.79s (transform 6.05s, setup 645ms, import 16.44s, tests 15.73s, environment 38.84s) editor test exit=0 mail fix web build exit=0 Finished `release` profile [optimized] target(s) in 20m 50s release build exit=0 ``` Commands: `cargo fmt --check`; `cargo clippy --all-targets -- -D warnings`; `cargo test --no-fail-fast -- --test-threads=4`; `cd apps/web && bun run check && bun run test --maxWorkers=2`; `cd packages/editor && bun run test`. Full Rust and web test output is attached. Three existing MailMorph unused-CSS warnings remain. Earlier Rust runs exposed Users-before-migration fixture setup defects. Fixed them without changing expectations; focused Files cases and the full workspace rerun pass. The Files reconcile storm logged a greater-than-60-second warning but completed successfully; it did not time out. An early Canvas test hit its existing five-second deadline under load; its unchanged focused rerun and both later full web suites pass. ## Real server, upgrade and adversarial evidence ```text PASS production 9dc65437e copy: startup=5.007s; Mail22–26 Files32–33; deployed receipts, Money, Mail and source bytes preserved; stopped Note edit reindexed and deleted file removed upgrade verified exit=0 PASS jdrev4 Cancel -> intent/staging/Versions retained -> real restart -> Note GET 200, Log 409; sibling and other User Log 201; partial Cancel 204 journal_cancel_restart exit=0 PASS SIGKILL mid-finalize: 1 crash, 1 later Log, 1 same-ID retry, 1 Note, 0 duplicate Notes; bytes preserved journal_finalize_crash exit=0 Two-User OpenAPI matrix: 436 operations classified; 227 operations replayed; 1058 A-ID vs missing-ID comparisons across B, C, D and anonymous; 16 #1402 non-private identifier routes reviewed by their own authority class; median absolute timing delta 0.2 ms Job/Mail/quota ownership checks: 127 comparisons; 0 denial failures Revoked Share timing control: identical HTTP 404 profiles; median delta 0.5 ms across 12 alternating pairs xuser exit=0 dedup damaged inode moved to quarantine (paired rename cookie) dedup scan resumed: saved=64 final=148 bytes=12255426 ==== ROUND 2 FINDINGS 0 ==== ROUND 2 SLOW 0 dedup-focused exit=0 ``` All Mail epoch tests passed, including deployed pending-upgrade and SIGKILL cases. Journal tests also pass ten staging/cancel boundaries, initialized retention, missing canonical Source, two-User isolation, real Sync finalize recovery and the 30-day durable retry deadline. Raw imported/fallback fixture assertions remain filed in #1515; canonical and initialized cases retain exact later bytes and stable IDs. Ran one full adversarial round with a 60-minute execution limit. It returned `adversarial exit=124`; cleanup needed a final kill after SIGTERM. The campaign passed Money hostile-input/import/concurrency, Notifications read-state/Undo/isolation, cross-User and editor concurrent/offline/delete-edit/external-write checks. No unplanned server crash, lost Source or cross-User disclosure was observed. Later phases were truncated by the time limit. Focused reruns classify findings, rather than repeat the full campaign. The old Tus race assertion counted permitted completed-ID acknowledgements as writers. DESIGN §26/#1295 explicitly allows same-ID HEAD/PATCH completion acknowledgement without writing Source. The revised probe retains exactly-one-writer assertions for active partial uploads and verifies one completion identity, one offered payload, and unchanged bytes after varied-body retries. Its 25 contract tests and real release-server race pass. A separate controlled Index-lock comparison reproduces PATCH 503 on both production and candidate. Both resume at offset zero and preserve exact bytes on retry (#1522). The loaded Search restart exceeded 180 seconds, then completed with 24,076 items, zero missing/stale/mismatched items and healthy state. Fresh NFC/NFD checks pass on both binaries; mixed Tag/NFD failure reproduces on production (#1518). Focused CAS repair/quarantine/GC/restart and scan-resume checks pass; the full round's pending scan was not a completed repair failure. ## E2e, cost and UX gaps closed Passed Journal upload recovery, large Note/editor risk checks, Note title fade, breadcrumb truncation, Search focus handoff, phone Search height, Calendar scroll/read-ahead, Photos cross-day selection, 5,000-Photo opening captures, the complete Mail layout suite and 10,000-Message selection profile. Captured all requested screens with macOS emulation at actual 1440, 820 and 390 widths, light and dark. Mail and Calendar/Notifications final captures use matching web/server build IDs. Discarded update-toast captures. Photos pointer/keyboard/Inspector and Search pointer/Cmd+K captures show the input states. Claude remains the visual reviewer. The large Note probe preserves block-2520 caret/find/selection and printed all content. Its scroll probe reported zero input drift and zero end clamp. Calendar's local profile used 84 days with 20 provider Events per day and passed. Mail selection cost is constant-time index lookup plus one body request: all 20 Arrow and 20 click selections made exactly one body request each with a 10,000-Message Inbox. No speculative thread-body requests occurred. These are local/shared-host measurements; no Mac GPU timing or perf-VM benchmark is claimed. No Mac VM sessions or locks were used. UX gaps closed: reader Arrow/previous/next state resolves from the current Message; explicit thread actions retain conversation checks; prepared images render through real jobs; Photos Undo and persistence checks have separate lifecycles; narrow Calendar overflow opens the real Log; Notifications read/unread persists and keeps the keyed row connected. Visible controls reuse ModeHeader, ProgressiveBlur, SegmentedControl, MailReaderActions, MailMorphCard, shared menus, Inspector and Toaster. ## Known gaps and decisions Blocking verification mismatch: #1510. Money writes managed `date` and `last edited` on the first durable month write so Notes date backfill cannot race Money CAS (#1393/#1148). Its exact old frontmatter prefix assertion fails on the candidate and passes on production. Conservation/store/reference-vector tests pass; no transaction loss was observed. Kept that assertion under the owner rule: do not change an existing expectation unless its behavior change is explicit. This report does not silently treat that new E2e failure as green. Other filed gaps: #1503 Files thumbnail fixture; #1504 Calendar old Week selector; #1505 Search opening-shortcut focus expectation; #1506–#1507 Notifications focus/empty-state expectations; #1508 Photos key-photo fixture; #1509 Notes editor selector; #1511 real-TLS Mail scroll (same failure on production); #1513 Notifications row-key fixture; #1514 Photos Undo capture/feedback; #1515 raw Journal fixture; #1516 Mail attachment pointer interception; #1517 block Copy link menu; #1518 mixed Search; #1519 legacy HEIC Inspector (same exact failure on production, despite successful MIME/backfill/identity/byte checks); #1520 disabled Calendar probe state; #1521 uncached MIME error with unusable fixture credentials (500 on both binaries); #1522 retryable Index contention; #1523 PDF thumbnail deadline; #1524 production Money Create Budget selector; #1525 late revoked-session probe state. #1512 has a correction and the complete Mail regression now passes. No issues were closed. Existing assertions were retained except the route explicitly changed by #1449, appended migration receipts, and DESIGN §26's completed-acknowledgement race classification. No new product features or OPEN decisions were implemented. Integration decisions: retain Mail's deployed 0021 reader-body migration, keep epoch 0022–0025 and move deferred Search to 0026; retain deployed Files 0029–0031 and move upload receipts to 0032–0033; keep both header CSS changes; preserve the production shared controls and Undo behavior. Exact perf adoption ran once after both header merges. Later fixes refresh live hashes only. Ratchet is 22,249 versus production 22,254, with no per-rule increase. For the orchestrator: resolve #1510's exact Source assertion before treating this head as READY; review #1515's raw fixture contract and the filed non-blocking regressions. No push or deploy was attempted. Cleanup, verbatim: ```text Removed 42658 files, 33.8GiB total cargo clean exit=0 ``` Removed own web build/output and target/tmp test Homes. Kept ignored review artifacts. Final process audit found no owned server/browser processes. Git status is clean. Doc comments for the integration changes were re-read. ## Attached evidence - [merge35c-calendar-notifications.zip](https://git.kayg.org/attachments/e47746d1-6c61-449d-80d0-c41b973d68d3) - [merge35c-gate-reports.zip](https://git.kayg.org/attachments/b613ce90-8da9-43e5-aaca-e01c743abb8f) - [merge35c-mail-part1.zip](https://git.kayg.org/attachments/10f313b7-291b-450a-a6ae-355a9b33f6c3) - [merge35c-mail-part2.zip](https://git.kayg.org/attachments/bfbbc313-7a31-4b41-b24b-669cb40c3679) - [merge35c-mail-part3.zip](https://git.kayg.org/attachments/c18d5dbd-03f5-4a14-a6f4-c5a6ae79c0b2) - [merge35c-money.zip](https://git.kayg.org/attachments/be82fc61-2584-4fee-8deb-d4493b3438ac) - [merge35c-notes-part1.zip](https://git.kayg.org/attachments/020b35e7-9f42-4a8a-bea0-4fd739e04e8b) - [merge35c-notes-part2.zip](https://git.kayg.org/attachments/844eb1a1-3d8b-4026-abd8-21a300d4dd0a) - [merge35c-notes-part3.zip](https://git.kayg.org/attachments/e0961953-c609-4d60-9810-2b5e244275cc) - [merge35c-photos-part1.zip](https://git.kayg.org/attachments/9ebad201-5fd7-45cc-9ecd-4cc8e495c4d7) - [merge35c-photos-part2.zip](https://git.kayg.org/attachments/02fa116e-b505-4f79-a936-0179e0567599) - [merge35c-search.zip](https://git.kayg.org/attachments/a5038237-efea-4b4f-9369-fd3b470b19e6) NOT READY: #1510 Money exact Source expectation remains unresolved at `f49a5487ed775a59a78c6321cb6487c40bee7020`.
Author
Owner

Starting #1500 on job/merge35c at f49a5487ed775a59a78c6321cb6487c40bee7020; merge base with origin/dev is 9dc65437e86c74efe92d723f9a99774246e60650. I read #1510: its recorded evidence says the merged release fails because the Money month writer now stamps managed date and last edited before the closing fence, while production passes that assertion and later reaches a Create Budget timeout. I will preserve the exact file prefix outside those documented fields, validate the timestamps, then rerun the requested builds and checks.

Starting #1500 on `job/merge35c` at `f49a5487ed775a59a78c6321cb6487c40bee7020`; merge base with `origin/dev` is `9dc65437e86c74efe92d723f9a99774246e60650`. I read #1510: its recorded evidence says the merged release fails because the Money month writer now stamps managed `date` and `last edited` before the closing fence, while production passes that assertion and later reaches a Create Budget timeout. I will preserve the exact file prefix outside those documented fields, validate the timestamps, then rerun the requested builds and checks.
Author
Owner

Candidate release Money E2E reached the managed frontmatter assertion and rejected the writer's valid 2026-10-09T10:33:11Z value: the parser's round-trip check used Date.toISOString(), which adds .000 for zero milliseconds. I am correcting the test-only comparison to accept the writer's canonical second-precision UTC format; no product code changed.

Candidate release Money E2E reached the managed frontmatter assertion and rejected the writer's valid `2026-10-09T10:33:11Z` value: the parser's round-trip check used `Date.toISOString()`, which adds `.000` for zero milliseconds. I am correcting the test-only comparison to accept the writer's canonical second-precision UTC format; no product code changed.
Author
Owner

The candidate release Money E2E now passes the exact month prefix and managed-date checks, then reaches a later getByRole('button', { name: 'Create Budget' }) timeout after 30 seconds. This matches the selector failure tracked in #1524. I am running the same E2E on the production 9dc65437e server and matching web assets to confirm it is pre-existing.

The candidate release Money E2E now passes the exact month prefix and managed-date checks, then reaches a later `getByRole('button', { name: 'Create Budget' })` timeout after 30 seconds. This matches the selector failure tracked in #1524. I am running the same E2E on the production 9dc65437e server and matching web assets to confirm it is pre-existing.
Author
Owner

Production comparison completed with the original 9dc65437e apps/web/e2e/money.mjs, the preserved 9dc65437e release server and its embedded production web assets. The real Money flow and exact Markdown checks passed, then it timed out after 30 seconds at the same getByRole('button', { name: 'Create Budget' }) selector. The candidate run has the same failure after the new managed-date assertion passes. This confirms the later timeout is pre-existing and is already tracked in #1524; it does not block #1500.

Production comparison completed with the original 9dc65437e `apps/web/e2e/money.mjs`, the preserved 9dc65437e release server and its embedded production web assets. The real Money flow and exact Markdown checks passed, then it timed out after 30 seconds at the same `getByRole('button', { name: 'Create Budget' })` selector. The candidate run has the same failure after the new managed-date assertion passes. This confirms the later timeout is pre-existing and is already tracked in #1524; it does not block #1500.
Author
Owner

READY 5a2c02c130

Built

Updated apps/web/e2e/money.mjs to keep the exact month-file prefix, allow only the managed date and last edited lines in writer order, validate the writer's UTC timestamps, check date against the creation day in the User's time zone, and require last edited >= date. No product code changed.

Files and commits

  • File: apps/web/e2e/money.mjs
  • d599b683a Fix Money month header date expectation
  • 5a2c02c13 Normalize Money UTC timestamp check
  • Head: 5a2c02c1300dd2f591b177395e0d8c94fc2f8df9
  • git fetch origin && git merge origin/dev: Already up to date.

E2E and classification

The candidate release E2E passed the exact Markdown and managed-date assertions and printed:

PASS the User flow wrote exact Markdown and the screens show the derived numbers

It then timed out later at the Create Budget selector. I ran the original 9dc65437e Money E2E against the preserved 9dc65437e release server with its embedded production web assets. It passed the same real Money flow and exact Markdown checks, then failed at the identical selector after 30 seconds. This is the existing #1524 issue and does not block this change.

The E2E generated 115 ignored PNG captures under artifacts/money/. The earlier Money review archive remains attached to this issue: merge35c-money.zip.

Gate output, verbatim

    Finished `release` profile [optimized] target(s) in 1m 31s
Compressed 920 static variants; saved 21689074 bytes.
perf-lint: PASS; 0 violations; 22249 scoped exceptions
svelte-check found 0 errors and 3 warnings in 1 file
exit=0
Ran 140 tests in 0.029s
OK
 8 pass
 0 fail
Ran 8 tests across 1 file. [284.00ms]
design rules: no new shared primitive overrides or hand-rolled buttons (origin/dev baseline)
 Test Files  309 passed (309)
      Tests  2261 passed (2261)
   Duration  188.37s (environment 30%, transform 24%, import 21%, tests 19%, setup 5%)
     Removed 9259 files, 3.4GiB total

The web test chain reached every && stage and all passed. The post-test shell wrapper then emitted zsh:3: read-only variable: status when it tried to save the result in zsh's reserved status variable; the Vitest summary above is from the completed run.

Decisions and known gaps

  • I used the existing Money writer's second-precision UTC format. JavaScript adds .000Z when formatting an exact-second instant, so the assertion removes only that zero-millisecond suffix for its round-trip check.
  • The preset CARGO_TARGET_DIR was /home/kayg/build/targets/m35cfix; /mnt/hdd/targets/jobs/merge35c was absent. I kept the preset as required. The release build passed.
  • The later Create Budget selector timeout remains open in #1524. No Rust source changed, so no Rust clippy or test gate was needed.
  • cargo clean completed. The generated web build and temporary production snapshot were removed. The branch is clean. No push or deploy was made.
READY 5a2c02c1300dd2f591b177395e0d8c94fc2f8df9 ## Built Updated `apps/web/e2e/money.mjs` to keep the exact month-file prefix, allow only the managed `date` and `last edited` lines in writer order, validate the writer's UTC timestamps, check `date` against the creation day in the User's time zone, and require `last edited >= date`. No product code changed. ## Files and commits - File: `apps/web/e2e/money.mjs` - `d599b683a` Fix Money month header date expectation - `5a2c02c13` Normalize Money UTC timestamp check - Head: `5a2c02c1300dd2f591b177395e0d8c94fc2f8df9` - `git fetch origin && git merge origin/dev`: `Already up to date.` ## E2E and classification The candidate release E2E passed the exact Markdown and managed-date assertions and printed: ```text PASS the User flow wrote exact Markdown and the screens show the derived numbers ``` It then timed out later at the Create Budget selector. I ran the original 9dc65437e Money E2E against the preserved 9dc65437e release server with its embedded production web assets. It passed the same real Money flow and exact Markdown checks, then failed at the identical selector after 30 seconds. This is the existing #1524 issue and does not block this change. The E2E generated 115 ignored PNG captures under `artifacts/money/`. The earlier Money review archive remains attached to this issue: [merge35c-money.zip](https://git.kayg.org/attachments/be82fc61-2584-4fee-8deb-d4493b3438ac). ## Gate output, verbatim ```text Finished `release` profile [optimized] target(s) in 1m 31s Compressed 920 static variants; saved 21689074 bytes. perf-lint: PASS; 0 violations; 22249 scoped exceptions svelte-check found 0 errors and 3 warnings in 1 file exit=0 Ran 140 tests in 0.029s OK 8 pass 0 fail Ran 8 tests across 1 file. [284.00ms] design rules: no new shared primitive overrides or hand-rolled buttons (origin/dev baseline) Test Files 309 passed (309) Tests 2261 passed (2261) Duration 188.37s (environment 30%, transform 24%, import 21%, tests 19%, setup 5%) Removed 9259 files, 3.4GiB total ``` The web test chain reached every `&&` stage and all passed. The post-test shell wrapper then emitted `zsh:3: read-only variable: status` when it tried to save the result in zsh's reserved `status` variable; the Vitest summary above is from the completed run. ## Decisions and known gaps - I used the existing Money writer's second-precision UTC format. JavaScript adds `.000Z` when formatting an exact-second instant, so the assertion removes only that zero-millisecond suffix for its round-trip check. - The preset `CARGO_TARGET_DIR` was `/home/kayg/build/targets/m35cfix`; `/mnt/hdd/targets/jobs/merge35c` was absent. I kept the preset as required. The release build passed. - The later Create Budget selector timeout remains open in #1524. No Rust source changed, so no Rust clippy or test gate was needed. - `cargo clean` completed. The generated web build and temporary production snapshot were removed. The branch is clean. No push or deploy was made.
Author
Owner

Deployed to calternal.cloud in merge round 35c (build 5a2c02c13, live 2026-10-09 ~16:35 IST). Closing.

Deployed to calternal.cloud in merge round 35c (build 5a2c02c13, live 2026-10-09 ~16:35 IST). Closing.
kayg closed this issue 2026-10-09 11:11:48 +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#1500
No description provided.