Merge round 38: Money #688 + job labels + Settings UI round 2 #1554

Closed
opened 2026-10-10 16:57:48 +00:00 by kayg · 17 comments
Owner

Merge round 38: Money register speed and durability (#688, four independent number reviews, READY at 98982153c), plain Settings Jobs labels (#1538), Settings/Admin UI round 2. Base origin/dev ac7fda1a8 (= production).

Merge round 38: Money register speed and durability (#688, four independent number reviews, READY at 98982153c), plain Settings Jobs labels (#1538), Settings/Admin UI round 2. Base origin/dev ac7fda1a8 (= production).
Author
Owner

Started on job/merge38 at ac7fda1a8c (production base). I will merge the three specified commits in order, run merged-head gates and Money upgrade/e2e/adversarial checks, and attach Chromium captures with macOS platform emulation. No push or deploy.

Started on job/merge38 at ac7fda1a8c49e902e1b246bea9d167d64e92d58f (production base). I will merge the three specified commits in order, run merged-head gates and Money upgrade/e2e/adversarial checks, and attach Chromium captures with macOS platform emulation. No push or deploy.
Author
Owner

Merged in order without conflicts: Money 83c016685, Jobs labels 37bb6e85e, Settings round 2 55ed03421. Fetched origin/dev and it remains ac7fda1a8; merge was already up to date. After the locked dependency install, perf-lint reports: perf-lint: PASS; 0 violations; 22131 scoped exceptions. No pin adoption or ratchet increase is needed. Added focused production-Home Money upgrade evidence and real-response Settings capture helpers; Rust compilation and web gates are running.

Merged in order without conflicts: Money 83c016685, Jobs labels 37bb6e85e, Settings round 2 55ed03421. Fetched origin/dev and it remains ac7fda1a8; merge was already up to date. After the locked dependency install, perf-lint reports: perf-lint: PASS; 0 violations; 22131 scoped exceptions. No pin adoption or ratchet increase is needed. Added focused production-Home Money upgrade evidence and real-response Settings capture helpers; Rust compilation and web gates are running.
Author
Owner

Web check passed verbatim: svelte-check found 0 errors and 0 warnings. The first Money full test run has reported register_writes_publish_before_reads and register_mark_writes_touch_constant_rows_with_card_history failures; assertion details will be inspected when the full run completes. Durability/SIGKILL recovery tests are passing so far. Perf VM status says held by another job; measurements will use the permitted local HDD fallback and will be labelled local. Verification-only commit a72255dc7 adds the Money runner selector and allows five interleaved benchmark pairs; runner snapshot tests: Ran 2 tests in 0.264s / OK.

Web check passed verbatim: svelte-check found 0 errors and 0 warnings. The first Money full test run has reported register_writes_publish_before_reads and register_mark_writes_touch_constant_rows_with_card_history failures; assertion details will be inspected when the full run completes. Durability/SIGKILL recovery tests are passing so far. Perf VM status says held by another job; measurements will use the permitted local HDD fallback and will be labelled local. Verification-only commit a72255dc7 adds the Money runner selector and allows five interleaved benchmark pairs; runner snapshot tests: Ran 2 tests in 0.264s / OK.
Author
Owner

Full web tests passed verbatim: Tests 2316 passed (2316); Duration 407.92s. Editor tests passed verbatim: Tests 529 passed (529); Duration 42.85s. Both reported Money register failures pass alone without code/assertion changes: register_writes_publish_before_reads: test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 182 filtered out; finished in 8.93s. register_mark_writes_touch_constant_rows_with_card_history: test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 182 filtered out; finished in 12.16s. Original failure details are still pending completion of the property tests. Head e9349a53b preserves the new upgrade/capture helpers.

Full web tests passed verbatim: Tests 2316 passed (2316); Duration 407.92s. Editor tests passed verbatim: Tests 529 passed (529); Duration 42.85s. Both reported Money register failures pass alone without code/assertion changes: register_writes_publish_before_reads: test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 182 filtered out; finished in 8.93s. register_mark_writes_touch_constant_rows_with_card_history: test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 182 filtered out; finished in 12.16s. Original failure details are still pending completion of the property tests. Head e9349a53b preserves the new upgrade/capture helpers.
Author
Owner

Production ac7fda1a8 Home → merged release upgrade passed verbatim: PASS ac7fda1a8 Home upgrade: startup=7.437s; Money ready=8.495s; Account balances, Category Available and Ready to Assign identical for all 3 Months; Money receipts 1–5 installed; deployed receipts and source bytes preserved. The first strict read returned the explicit cold projection 503 with Retry-After: 1; that failed attempt is retained. The new focused probe now bounds only that exact response, reporting server readiness and Money readiness separately. Baseline Settings e2e failed on production at the desktop assertion: You is one spacing token after User. I will classify it with the same script on the merged release; no existing assertion was changed.

Production ac7fda1a8 Home → merged release upgrade passed verbatim: PASS ac7fda1a8 Home upgrade: startup=7.437s; Money ready=8.495s; Account balances, Category Available and Ready to Assign identical for all 3 Months; Money receipts 1–5 installed; deployed receipts and source bytes preserved. The first strict read returned the explicit cold projection 503 with Retry-After: 1; that failed attempt is retained. The new focused probe now bounds only that exact response, reporting server readiness and Money readiness separately. Baseline Settings e2e failed on production at the desktop assertion: You is one spacing token after User. I will classify it with the same script on the merged release; no existing assertion was changed.
Author
Owner

The exact production web/server Settings suite reached all 30 live pages at phone and tablet widths in light/dark and all 30 desktop light pages, then failed the existing desktop sidebar indentation assertion (You is one spacing token after User). The same script will run on merged release before classification. Production Money e2e continues with populated Budget/Register/form screenshots after fixing the local Sharp C++ runtime loader. Release build passed verbatim: Finished release profile [optimized] target(s) in 18m 18s. Money has one property test left; its live thread is waiting for disk journal commits (jbd2_log_wait_commit), not a stuck application request. Current committed head: 8c1ff7e3b.

The exact production web/server Settings suite reached all 30 live pages at phone and tablet widths in light/dark and all 30 desktop light pages, then failed the existing desktop sidebar indentation assertion (You is one spacing token after User). The same script will run on merged release before classification. Production Money e2e continues with populated Budget/Register/form screenshots after fixing the local Sharp C++ runtime loader. Release build passed verbatim: Finished `release` profile [optimized] target(s) in 18m 18s. Money has one property test left; its live thread is waiting for disk journal commits (jbd2_log_wait_commit), not a stuck application request. Current committed head: 8c1ff7e3b.
kayg referenced this issue from a commit 2026-10-10 17:28:44 +00:00
kayg referenced this issue from a commit 2026-10-10 17:28:44 +00:00
Author
Owner

Merge-only regression fixed at 513eb3429: after creating a Money transaction, bounded paging kept the previously visible row as its anchor and excluded the newly accepted row. The saved transaction identity now anchors this refresh; other refreshes retain the existing visible row. The real release-server regression passes: PASS newly accepted transaction is visible; entry form resets without retaining the old page anchor. Four focused web test files pass (16 tests). Exact changed-source perf pins regenerated once (2359aaa79); ratchet unchanged.

Production and merged Settings review fail the identical desktop User indentation assertion. Filed #1555; no existing assertion changed. Settings Users add failure and actual Jobs labels passed all six width/theme configurations. Server label test: test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 288 filtered out; finished in 0.00s. Server upgrade tests: test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 285 filtered out; finished in 4.39s.

Merge-only regression fixed at 513eb3429: after creating a Money transaction, bounded paging kept the previously visible row as its anchor and excluded the newly accepted row. The saved transaction identity now anchors this refresh; other refreshes retain the existing visible row. The real release-server regression passes: `PASS newly accepted transaction is visible; entry form resets without retaining the old page anchor`. Four focused web test files pass (16 tests). Exact changed-source perf pins regenerated once (2359aaa79); ratchet unchanged. Production and merged Settings review fail the identical desktop User indentation assertion. Filed #1555; no existing assertion changed. Settings Users add failure and actual Jobs labels passed all six width/theme configurations. Server label test: `test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 288 filtered out; finished in 0.00s`. Server upgrade tests: `test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 285 filtered out; finished in 4.39s`.
Author
Owner

Adversarial preflight stopped before server startup: OpenAPI header had no classification for x-money-source-month (and the companion x-money-account-id). Fixed the inventory and replay guards at 3f6927e7a. Foreign and absent-item controls retain the same source Month and Account so source validation cannot mask ownership checks. Focused regression: Ran 28 tests in 0.601s, OK. Preflight now reports Cross-User classification gate: 436 operations classified and Generated entry point classification: 1224 tools classified. The live Money/XUser round is running with 20-minute limits for each phase.

Adversarial preflight stopped before server startup: OpenAPI header had no classification for `x-money-source-month` (and the companion `x-money-account-id`). Fixed the inventory and replay guards at 3f6927e7a. Foreign and absent-item controls retain the same source Month and Account so source validation cannot mask ownership checks. Focused regression: `Ran 28 tests in 0.601s`, `OK`. Preflight now reports `Cross-User classification gate: 436 operations classified` and `Generated entry point classification: 1224 tools classified`. The live Money/XUser round is running with 20-minute limits for each phase.
Author
Owner

Money API hostile-input and concurrency probe passed on the release build: Money API probe: anonymous access, cursed IDs and months, hostile payees and amounts, malformed/oversized JSON and multipart imports, owner-bound single-use import confirmation, bounded preview bursts, bad budget names a 40-request write storm and a 48-request mixed create burst passed.

The new combined selector omitted MCP credential provisioning, so the MCP phase stopped before any requests. Fixed the selector to reuse the existing MCP setup at 4c0df8aaf; Bash parsing and runner tests pass (Ran 2 tests in 0.475s, OK). The API phase will not be repeated; the remaining focused MCP phase will run within the same 45-minute adversarial time box. XUSER_MATRIX_ONLY split-data round is running.

Merged full clippy: Finished dev profile [unoptimized + debuginfo] target(s) in 9m 27s (exit 0). Final web check: svelte-check found 0 errors and 0 warnings (exit 0). Full Rust and final web tests continue.

Money API hostile-input and concurrency probe passed on the release build: `Money API probe: anonymous access, cursed IDs and months, hostile payees and amounts, malformed/oversized JSON and multipart imports, owner-bound single-use import confirmation, bounded preview bursts, bad budget names a 40-request write storm and a 48-request mixed create burst passed`. The new combined selector omitted MCP credential provisioning, so the MCP phase stopped before any requests. Fixed the selector to reuse the existing MCP setup at 4c0df8aaf; Bash parsing and runner tests pass (`Ran 2 tests in 0.475s`, `OK`). The API phase will not be repeated; the remaining focused MCP phase will run within the same 45-minute adversarial time box. XUSER_MATRIX_ONLY split-data round is running. Merged full clippy: `Finished `dev` profile [unoptimized + debuginfo] target(s) in 9m 27s` (exit 0). Final web check: `svelte-check found 0 errors and 0 warnings` (exit 0). Full Rust and final web tests continue.
Author
Owner

Final full web suite: Test Files 1 failed | 317 passed (318); Tests 1 failed | 2315 passed (2316). The only failure was a 30,000 ms timeout in NotesExplorer: “writes focus attributes on only the previous and next rows with 1,000 Notes rendered.” Focused rerun without changes: Test Files 1 passed (1), Tests 1 passed (1), Duration 39.91s (tests 57%, transform 35%, environment 4%, import 3%, setup 1%). The initial full suite on the merge head before the register fix passed all 2,316 tests; the register-focused four-file rerun passed 16 tests. No timeout or assertion changed.

Register API round passed: 9 rejected page inputs, 4 rejected mark inputs, 4 rejected source addresses, 16 concurrent reads and 8 concurrent marks. Repeated 94/100-Tag rows stayed readable; max-plus-one rejected with 422 and a clear limit message; bounded page and continuation both returned 200.

Cross-User retry uses the existing XUSER_FIXTURE_TIMEOUT=180 allowance after the first fixture exceeded the default 45 s. Money import cancellation isolation, Calendar subscriptions and Photos Share contracts have passed; the matrix is still running.

Final full web suite: `Test Files 1 failed | 317 passed (318)`; `Tests 1 failed | 2315 passed (2316)`. The only failure was a 30,000 ms timeout in NotesExplorer: “writes focus attributes on only the previous and next rows with 1,000 Notes rendered.” Focused rerun without changes: `Test Files 1 passed (1)`, `Tests 1 passed (1)`, `Duration 39.91s (tests 57%, transform 35%, environment 4%, import 3%, setup 1%)`. The initial full suite on the merge head before the register fix passed all 2,316 tests; the register-focused four-file rerun passed 16 tests. No timeout or assertion changed. Register API round passed: 9 rejected page inputs, 4 rejected mark inputs, 4 rejected source addresses, 16 concurrent reads and 8 concurrent marks. Repeated 94/100-Tag rows stayed readable; max-plus-one rejected with 422 and a clear limit message; bounded page and continuation both returned 200. Cross-User retry uses the existing XUSER_FIXTURE_TIMEOUT=180 allowance after the first fixture exceeded the default 45 s. Money import cancellation isolation, Calendar subscriptions and Photos Share contracts have passed; the matrix is still running.
Author
Owner

Blocking matrix finding fixed at 540da9ec9: B GET Money Accounts for A’s Budget returned a retryable server failure before checking the owner-bound source identity. Warm reads still use (User, Budget) Index keys. Only a cache miss now reuses the existing metadata-only identity lookup before cold-build queue admission. It checks at most 200 Budget headers and reads no Month history or full Home.

Focused unit test: test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 183 filtered out; finished in 0.92s. Real release-server regression: PASS cold Money ownership: 12 matching 404 denials; owned cold Budget became ready; owner Account numbers unchanged. Money clippy: Finished dev profile [unoptimized + debuginfo] target(s) in 1m 25s (exit 0).

MCP round passed: preview, aggregate verification, cancellation, confirmation and single-use tokens; read/API-only scope denied, oversized input 413, malformed JSON-RPC 415, and 48 parallel calls with no 5xx. The matrix had 436 classified operations, 227 replayed operations, 1,058 owned/missing comparisons and 127 Job/Mail/quota checks; its sole non-SLOW finding was the fixed Money cold-read failure. This closes the time-boxed adversarial round; the focused fix regression ran after the original matrix.

Decision/remaining perf debt: cold ownership checks use the bounded existing Budget-header lookup until the Index has a persistent owned Budget catalog. Two exact cold-call debt sites remain explicit. Added typed getter proofs, pinned to the getter body and scope tests, removed five exact old debts. Perf-lint passes with 22,128 scoped exceptions; ratchet lowered from 22,131, no rule weakened and no ratchet raised (1dd242b3b).

The editor/Rust scratch-workspace fix passes: test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 56.25s. Its fixture copies UI’s local formatter dependency and creates its destination through the existing copy helper. Final workspace gates follow this fix.

Blocking matrix finding fixed at 540da9ec9: B GET Money Accounts for A’s Budget returned a retryable server failure before checking the owner-bound source identity. Warm reads still use `(User, Budget)` Index keys. Only a cache miss now reuses the existing metadata-only identity lookup before cold-build queue admission. It checks at most 200 Budget headers and reads no Month history or full Home. Focused unit test: `test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 183 filtered out; finished in 0.92s`. Real release-server regression: `PASS cold Money ownership: 12 matching 404 denials; owned cold Budget became ready; owner Account numbers unchanged`. Money clippy: `Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 25s` (exit 0). MCP round passed: preview, aggregate verification, cancellation, confirmation and single-use tokens; read/API-only scope denied, oversized input 413, malformed JSON-RPC 415, and 48 parallel calls with no 5xx. The matrix had 436 classified operations, 227 replayed operations, 1,058 owned/missing comparisons and 127 Job/Mail/quota checks; its sole non-SLOW finding was the fixed Money cold-read failure. This closes the time-boxed adversarial round; the focused fix regression ran after the original matrix. Decision/remaining perf debt: cold ownership checks use the bounded existing Budget-header lookup until the Index has a persistent owned Budget catalog. Two exact cold-call debt sites remain explicit. Added typed getter proofs, pinned to the getter body and scope tests, removed five exact old debts. Perf-lint passes with 22,128 scoped exceptions; ratchet lowered from 22,131, no rule weakened and no ratchet raised (1dd242b3b). The editor/Rust scratch-workspace fix passes: `test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 56.25s`. Its fixture copies UI’s local formatter dependency and creates its destination through the existing copy helper. Final workspace gates follow this fix.
Author
Owner

Matching embedded production assets avoid the build-update overlay. The merged combined Money suite now passes the complete real Budget/Category/Account/assignment/transaction flow and exact Markdown/derived-number checks, then fails at the same Create Budget import selector as production ac7fda1a8. Filed #1556. Both unchanged money-wizard-1140.mjs --formats-only runs pass paired CSV, JSON, replacement confirmation, Undo after server restart, and unrelated ZIP failure. No existing test expectation changed.

Original Settings desktop indentation failure is identical on both releases; filed #1555. Actual Users add error and Jobs labels passed six Mac-emulated width/theme cases. Populated Money/entry screenshots and import-format captures copied under artifacts/merge38/owner; the focused register/edit captures and five 20k paired profiles are running.

Final whole-workspace clippy after the cold-owner and contract-fixture fixes: Finished dev profile [unoptimized + debuginfo] target(s) in 34.31s (exit 0). Whole-workspace tests run with four threads and --no-fail-fast so all crates, including the full Money suites, produce results.

Matching embedded production assets avoid the build-update overlay. The merged combined Money suite now passes the complete real Budget/Category/Account/assignment/transaction flow and exact Markdown/derived-number checks, then fails at the same `Create Budget` import selector as production ac7fda1a8. Filed #1556. Both unchanged `money-wizard-1140.mjs --formats-only` runs pass paired CSV, JSON, replacement confirmation, Undo after server restart, and unrelated ZIP failure. No existing test expectation changed. Original Settings desktop indentation failure is identical on both releases; filed #1555. Actual Users add error and Jobs labels passed six Mac-emulated width/theme cases. Populated Money/entry screenshots and import-format captures copied under artifacts/merge38/owner; the focused register/edit captures and five 20k paired profiles are running. Final whole-workspace clippy after the cold-owner and contract-fixture fixes: `Finished `dev` profile [unoptimized + debuginfo] target(s) in 34.31s` (exit 0). Whole-workspace tests run with four threads and --no-fail-fast so all crates, including the full Money suites, produce results.
Author
Owner

Latest release validation after the cold ownership fix:

PASS ac7fda1a8 Home upgrade: startup=9.598s; Money ready=10.651s; Account balances, Category Available and Ready to Assign identical for all 3 Months; Money receipts 1–5 installed; deployed receipts and source bytes preserved

Workspace Clippy passed. The full workspace test run is still in progress. Its collaboration hostile-client room-unload deadline failed under concurrent load; the unchanged test passed alone in 2.13 s (1 passed, 11 filtered out). No assertion or timeout was changed.

Screenshots: https://git.kayg.org/attachments/3ddfe0f4-452d-4f06-9dec-497d674a9483 (36 actual-size Chromium/macOS-emulated captures). I also added a capture of the renamed archive job after scrolling it into view; the updated archive will follow after the benchmark releases the browser.

Latest release validation after the cold ownership fix: ``` PASS ac7fda1a8 Home upgrade: startup=9.598s; Money ready=10.651s; Account balances, Category Available and Ready to Assign identical for all 3 Months; Money receipts 1–5 installed; deployed receipts and source bytes preserved ``` Workspace Clippy passed. The full workspace test run is still in progress. Its collaboration hostile-client room-unload deadline failed under concurrent load; the unchanged test passed alone in 2.13 s (1 passed, 11 filtered out). No assertion or timeout was changed. Screenshots: https://git.kayg.org/attachments/3ddfe0f4-452d-4f06-9dec-497d674a9483 (36 actual-size Chromium/macOS-emulated captures). I also added a capture of the renamed archive job after scrolling it into view; the updated archive will follow after the benchmark releases the browser.
Author
Owner

Progress at 3c2869344: both Money structural regressions that failed in the initial unrestricted-parallel run passed in the full workspace run with --test-threads=4 (register_writes_publish_before_reads and register_mark_writes_touch_constant_rows_with_card_history). The full workspace run continues.

Final screenshot archive (42 actual-size PNGs, six width/theme cases, including the archive job actually in the viewport): https://git.kayg.org/attachments/8fd7681e-8e7c-4752-8371-5abba8a4b890

Benchmark correction: I initially attributed the production stall to running against an upgraded Index. Source inspection shows ac7fda1a8 has no Money projection writer, so that cause was not established. The corrected runner still restores the exact stopped production fixture before each binary, to compare supported starting states. Production's full-list 20,000-row renderer exceeded its open time box; I stopped only that synthetic benchmark renderer. The final five paired attempts use a 120-second wall-clock bound outside the renderer and report unfinished opens as censored lower bounds, with scroll unmeasured. This is performance evidence under shared local load, not a successful-open claim. The perf VM remains held by calternal tabswitch2-mail-pairs-warm1440 (status checked at 20:53 CEST).

Progress at 3c2869344: both Money structural regressions that failed in the initial unrestricted-parallel run passed in the full workspace run with `--test-threads=4` (`register_writes_publish_before_reads` and `register_mark_writes_touch_constant_rows_with_card_history`). The full workspace run continues. Final screenshot archive (42 actual-size PNGs, six width/theme cases, including the archive job actually in the viewport): https://git.kayg.org/attachments/8fd7681e-8e7c-4752-8371-5abba8a4b890 Benchmark correction: I initially attributed the production stall to running against an upgraded Index. Source inspection shows ac7fda1a8 has no Money projection writer, so that cause was not established. The corrected runner still restores the exact stopped production fixture before each binary, to compare supported starting states. Production's full-list 20,000-row renderer exceeded its open time box; I stopped only that synthetic benchmark renderer. The final five paired attempts use a 120-second wall-clock bound outside the renderer and report unfinished opens as censored lower bounds, with scroll unmeasured. This is performance evidence under shared local load, not a successful-open claim. The perf VM remains held by `calternal tabswitch2-mail-pairs-warm1440` (status checked at 20:53 CEST).
Author
Owner

At 7af13bf9d, the focused timeout regression passed on both release binaries: with a one-second limit, each timed-out target was released through that Chromium instance's own process information, and the profile exited 0. No other browser or server process is targeted.

The final local paired run is progressing. Its first pair recorded merged open 4,714.99 ms versus production open 34,672.67 ms. Those are single cold-open samples, not aggregate p50/p95.

A source review found a scroll-method difference: ac7fda1a8's full list scrolls an ancestor, while the new bounded register scrolls .table. The existing profile always changed .table.scrollTop; its production frame-clock results therefore do not prove scrolling. I am extending the same helper to select the actual scroll owner once, record the position change, and verify it on a real small fixture before the final scroll comparison. No app code changes are needed.

The full workspace run has passed both initial Money structural regressions and the bulk-write balance and Card-model tests. The remaining long Money scoped-history test is still running. The browser queue is serial; the additional fidelity, exact-number, Month-revision and Settings Tabs checks follow the performance phase.

At 7af13bf9d, the focused timeout regression passed on both release binaries: with a one-second limit, each timed-out target was released through that Chromium instance's own process information, and the profile exited 0. No other browser or server process is targeted. The final local paired run is progressing. Its first pair recorded merged open 4,714.99 ms versus production open 34,672.67 ms. Those are single cold-open samples, not aggregate p50/p95. A source review found a scroll-method difference: ac7fda1a8's full list scrolls an ancestor, while the new bounded register scrolls `.table`. The existing profile always changed `.table.scrollTop`; its production frame-clock results therefore do not prove scrolling. I am extending the same helper to select the actual scroll owner once, record the position change, and verify it on a real small fixture before the final scroll comparison. No app code changes are needed. The full workspace run has passed both initial Money structural regressions and the bulk-write balance and Card-model tests. The remaining long Money scoped-history test is still running. The browser queue is serial; the additional fidelity, exact-number, Month-revision and Settings Tabs checks follow the performance phase.
Author
Owner

READY 4ebeba0b8e

Merge round 38 (#1554). The only full-suite failures are the unchanged latency tests that passed alone. No merge-only failure remains.

Built: merged 98982153c, 720c03275 and 255c221ea in the requested order with no-ff merge commits. Fixed the accepted transaction remaining outside the visible register page, foreign cold Money reads returning 503 before ownership validation, and the editor contract fixture omitting its transitive formatter package. Extended the existing adversarial runner, cross-User classification, upgrade probe and register profile. No features were added.

Files: all 68 paths are in artifacts/merge38/changed-files.txt. Main fixes: apps/web/src/routes/money/[budget]/accounts/[[account]]/+page.svelte, crates/plugins/money/src/routes.rs, store.rs, register_contract_tests.rs, and crates/calternal-collab/tests/cross_language.rs. Verification changes: bench/money-register-688.mjs, apps/web/e2e/merge38-settings.mjs, money-create-visible-1554.mjs, tests/adversarial/merge38_upgrade.py, money_cold_owner_1554.py, run.sh, xuser_matrix.py, test_xuser_classification.py, and the exact perf registry files.

Upgrade: production-shaped ac7fda1a8 Home, real API-created Money Budget, all three Months compared. Startup 9.598 s, Money ready 10.651 s. Account balances, Category Available and Ready to Assign identical; Money receipts 1–5 installed; old receipts and all five source files preserved.

Adversarial: one time-boxed round. Money API, register byte/page/mark guards, MCP scope/token/payload/concurrency probes passed. Cross-User matrix: 436 operations classified, 227 replayed, 1,058 foreign/missing comparisons; one cold Money ownership 503 found and fixed. Focused release regression passed 12 matching 404 denials, owned cold readiness, and unchanged owner Account numbers. The full matrix was not repeated after the focused fix.

Screenshots: 42 actual-size PNGs, Chromium with macOS emulation, 390/820/1440, light/dark; populated register, mouse/Enter transaction edit, adjacent Budget view, real add-User failure, and Jobs including the renamed archive row. No update notice or substituted responses. Archive: https://git.kayg.org/attachments/8fd7681e-8e7c-4752-8371-5abba8a4b890 . Visual review belongs to Claude. No macOS VM was used.

UX gaps closed: newly saved transaction stays visible; cold foreign/missing Money reads agree before work admission; plain add-User error and real Jobs labels verified. Existing TransactionForm, Card, Pill, Menu, RequestState and Settings controls were reused.

Known gaps: production Settings indentation assertion (#1555), obsolete Money import-button selector (#1556), fidelity Account-type selector (#1558), and Month-revision Assigned-field selector (#1559), reproduced with the same scripts on ac7fda1a8. Both binaries passed the separate CSV/JSON import, replacement, cancellation and restart/Undo scenarios, exact-number checks, and Settings Tabs checks. Both passed the first reversed-Assignment response scenario. The later fidelity and forced-read/two-tab scenarios remain blocked by the same production selector failures; their expectations were kept unchanged. Owned cold register reads use the existing Retry action. Two exact cold metadata-read perf debts remain; warm reads stay in the Index. Ratchet lowered 22131 → 22128; no rule weakened. Latency flakes are reported with both full-run and isolated results below.

Decisions: reuse the existing owner-scoped Budget metadata lookup before cold queue admission (at most 200 Budget.md metadata files), rather than add an Index catalog feature in this merge. Record two honest cold IO debts. Restore the same stopped production fixture before each perf sample; use each release's embedded client; bound renderer work and report censored results explicitly. Select the actual scroll owner once and record real movement, because production and the bounded register use different containers. Measurement cost: initial build O(N log N) with batched SQL; warm pages are row/byte bounded; cold ownership admission touches only bounded Budget metadata, not Month history.

Gates on the final code (Rust source unchanged by the later evidence-only commits). git fetch origin && git merge origin/dev ran once before gates; origin/dev was already included. Exact perf pins were adopted once, then only the changed cold-scope proofs/debts were updated. All 68 changed paths are included in the gate and comparison archives. No existing test expectation was changed.

Complete verbatim gate output and exit statuses: https://git.kayg.org/attachments/374a0f5a-823d-439a-afc0-05dfe2ad6e34 . Summary excerpts below are copied verbatim.

cargo fmt --check: exit 0, no stdout.

cargo clippy --all-targets -- -D warnings: exit 0.

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

cargo test --no-fail-fast -- --test-threads=4: exit 101, one latency target failure. Full Money and server results:

test result: ok. 181 passed; 0 failed; 3 ignored; 0 measured; 0 filtered out; finished in 2051.35s
test result: ok. 277 passed; 0 failed; 12 ignored; 0 measured; 0 filtered out; finished in 123.30s
test result: FAILED. 11 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 17.56s
error: 1 target failed:
    `-p calternal-collab --test hostile_clients`

The failure was only unrepresentable_update_is_rejected_and_room_keeps_saving: room unload missed its deadline with zero clients. The same test, unchanged, passed alone:

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

The initial full two-crate Money run had two structural failures under unrestricted test parallelism. Both passed unchanged alone and in the complete final four-thread workspace run. No failure was hidden by a changed assertion.

Required Settings label test and server upgrade tests:

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 288 filtered out; finished in 0.00s
test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 285 filtered out; finished in 4.39s

cd apps/web && bun run check: exit 0.

perf-lint: PASS; 0 violations; 22128 scoped exceptions
svelte-check found 0 errors and 0 warnings

cd apps/web && bun run test --maxWorkers=2: the first merged full run passed all 2,316 tests. The final run after the register fix had one Notes focus-test deadline failure (no assertion failure):

 Test Files  1 failed | 317 passed (318)
      Tests  1 failed | 2315 passed (2316)
   Duration  544.51s (transform 28%, environment 25%, import 23%, tests 19%, setup 5%)
error: script "test" exited with code 1

The unchanged writes focus attributes on only the previous and next rows test passed alone (--maxWorkers=1); no timeout was increased:

 Test Files  1 passed (1)
      Tests  1 passed (1)
   Duration  39.91s (tests 57%, transform 35%, environment 4%, import 3%, setup 1%)

cd packages/editor && bun run test: exit 0.

 Test Files  30 passed (30)
      Tests  529 passed (529)
   Duration  42.85s (transform 11.73s, setup 1.52s, import 21.81s, tests 15.24s, environment 37.23s)

Web and release server were built and used for all live checks. Release build output:

    Finished `release` profile [optimized] target(s) in 4m 47s

Final real production-Home upgrade output:

PASS ac7fda1a8 Home upgrade: startup=9.598s; Money ready=10.651s; Account balances, Category Available and Ready to Assign identical for all 3 Months; Money receipts 1–5 installed; deployed receipts and source bytes preserved

Final performance, five interleaved pairs:

Pair Open ms merged / production Scroll frame p50/p95 ms merged Scroll frame p50/p95 ms production RSS MiB merged / production
1 4473.44 / 33005.12 50.00/66.80 333.20/500.00 221.1 / 417.3
2 5775.68 / 37031.24 50.00/66.70 266.60/566.60 215.4 / 407.9
3 5773.74 / 34399.28 50.00/66.70 283.30/483.30 211.7 / 96.1
4 4804.40 / 29620.04 50.00/66.70 233.30/400.00 210.0 / 356.6
5 4480.30 / 29195.81 50.00/66.60 233.30/499.90 211.2 / 379.7

money688: navigation-to-first-row p50=4804.40 ms, p95=5775.68 ms; five samples.

origin_dev: navigation-to-first-row p50=33005.12 ms, p95=37031.24 ms; five samples.

Local HDD, shared host; both builds use their own embedded client and the same stopped production fixture, restored for each sample. HTTP/1.1. This measures navigation-to-first-row and animation-frame intervals during actual scrolling, not trusted-click latency. CPU/RSS, retry counts, renderer details and load averages are in the JSON. No final sample was censored. The perf VM was occupied; no macOS VM was used.

docs/perf/baseline.json has warm perf-VM measurements on 50,000 rows (open p50/p95 797.03/833.67 ms; scroll 83.4/116.7 ms) and 200,000 rows (841.6/2696.04 ms; scroll 50.1/100.1 ms). This 20,000-row cold upgrade/startup case on a loaded local host is not directly comparable. Against paired production, open and scroll improved; no paired regression issue is required. Existing first-row and 16.7 ms scroll targets remain unmet.

Raw perf JSON, CPU/RSS/load/retry data, scroll-owner regression proof, and paired additional e2e logs: https://git.kayg.org/attachments/08146cf5-b192-42cd-86de-e43ff92e7da7 . Earlier attempts exposed fixture/method problems and were kept in the worktree; their unqualified frame-clock values were not used as scroll evidence.

Cleanup output:

     Removed 37443 files, 38.7GiB total

Removed apps/web/build, apps/web/.svelte-kit/output and own target/tmp fixtures. All browser queues completed and the temporary queue marker was removed. No macOS VM, push or deploy was used. The worktree is clean.

READY 4ebeba0b8e

READY 4ebeba0b8e13b06223bc2b24ee7a398a0933bda0 Merge round 38 (#1554). The only full-suite failures are the unchanged latency tests that passed alone. No merge-only failure remains. Built: merged 98982153c, 720c03275 and 255c221ea in the requested order with no-ff merge commits. Fixed the accepted transaction remaining outside the visible register page, foreign cold Money reads returning 503 before ownership validation, and the editor contract fixture omitting its transitive formatter package. Extended the existing adversarial runner, cross-User classification, upgrade probe and register profile. No features were added. Files: all 68 paths are in `artifacts/merge38/changed-files.txt`. Main fixes: `apps/web/src/routes/money/[budget]/accounts/[[account]]/+page.svelte`, `crates/plugins/money/src/routes.rs`, `store.rs`, `register_contract_tests.rs`, and `crates/calternal-collab/tests/cross_language.rs`. Verification changes: `bench/money-register-688.mjs`, `apps/web/e2e/merge38-settings.mjs`, `money-create-visible-1554.mjs`, `tests/adversarial/merge38_upgrade.py`, `money_cold_owner_1554.py`, `run.sh`, `xuser_matrix.py`, `test_xuser_classification.py`, and the exact perf registry files. Upgrade: production-shaped ac7fda1a8 Home, real API-created Money Budget, all three Months compared. Startup 9.598 s, Money ready 10.651 s. Account balances, Category Available and Ready to Assign identical; Money receipts 1–5 installed; old receipts and all five source files preserved. Adversarial: one time-boxed round. Money API, register byte/page/mark guards, MCP scope/token/payload/concurrency probes passed. Cross-User matrix: 436 operations classified, 227 replayed, 1,058 foreign/missing comparisons; one cold Money ownership 503 found and fixed. Focused release regression passed 12 matching 404 denials, owned cold readiness, and unchanged owner Account numbers. The full matrix was not repeated after the focused fix. Screenshots: 42 actual-size PNGs, Chromium with macOS emulation, 390/820/1440, light/dark; populated register, mouse/Enter transaction edit, adjacent Budget view, real add-User failure, and Jobs including the renamed archive row. No update notice or substituted responses. Archive: https://git.kayg.org/attachments/8fd7681e-8e7c-4752-8371-5abba8a4b890 . Visual review belongs to Claude. No macOS VM was used. UX gaps closed: newly saved transaction stays visible; cold foreign/missing Money reads agree before work admission; plain add-User error and real Jobs labels verified. Existing TransactionForm, Card, Pill, Menu, RequestState and Settings controls were reused. Known gaps: production Settings indentation assertion (#1555), obsolete Money import-button selector (#1556), fidelity Account-type selector (#1558), and Month-revision Assigned-field selector (#1559), reproduced with the same scripts on ac7fda1a8. Both binaries passed the separate CSV/JSON import, replacement, cancellation and restart/Undo scenarios, exact-number checks, and Settings Tabs checks. Both passed the first reversed-Assignment response scenario. The later fidelity and forced-read/two-tab scenarios remain blocked by the same production selector failures; their expectations were kept unchanged. Owned cold register reads use the existing Retry action. Two exact cold metadata-read perf debts remain; warm reads stay in the Index. Ratchet lowered 22131 → 22128; no rule weakened. Latency flakes are reported with both full-run and isolated results below. Decisions: reuse the existing owner-scoped Budget metadata lookup before cold queue admission (at most 200 Budget.md metadata files), rather than add an Index catalog feature in this merge. Record two honest cold IO debts. Restore the same stopped production fixture before each perf sample; use each release's embedded client; bound renderer work and report censored results explicitly. Select the actual scroll owner once and record real movement, because production and the bounded register use different containers. Measurement cost: initial build O(N log N) with batched SQL; warm pages are row/byte bounded; cold ownership admission touches only bounded Budget metadata, not Month history. Gates on the final code (Rust source unchanged by the later evidence-only commits). `git fetch origin && git merge origin/dev` ran once before gates; origin/dev was already included. Exact perf pins were adopted once, then only the changed cold-scope proofs/debts were updated. All 68 changed paths are included in the gate and comparison archives. No existing test expectation was changed. Complete verbatim gate output and exit statuses: https://git.kayg.org/attachments/374a0f5a-823d-439a-afc0-05dfe2ad6e34 . Summary excerpts below are copied verbatim. `cargo fmt --check`: exit 0, no stdout. `cargo clippy --all-targets -- -D warnings`: exit 0. ``` Finished `dev` profile [unoptimized + debuginfo] target(s) in 34.31s ``` `cargo test --no-fail-fast -- --test-threads=4`: exit 101, one latency target failure. Full Money and server results: ``` test result: ok. 181 passed; 0 failed; 3 ignored; 0 measured; 0 filtered out; finished in 2051.35s test result: ok. 277 passed; 0 failed; 12 ignored; 0 measured; 0 filtered out; finished in 123.30s test result: FAILED. 11 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 17.56s error: 1 target failed: `-p calternal-collab --test hostile_clients` ``` The failure was only `unrepresentable_update_is_rejected_and_room_keeps_saving`: room unload missed its deadline with zero clients. The same test, unchanged, passed alone: ``` test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 11 filtered out; finished in 2.13s ``` The initial full two-crate Money run had two structural failures under unrestricted test parallelism. Both passed unchanged alone and in the complete final four-thread workspace run. No failure was hidden by a changed assertion. Required Settings label test and server upgrade tests: ``` test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 288 filtered out; finished in 0.00s test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 285 filtered out; finished in 4.39s ``` `cd apps/web && bun run check`: exit 0. ``` perf-lint: PASS; 0 violations; 22128 scoped exceptions svelte-check found 0 errors and 0 warnings ``` `cd apps/web && bun run test --maxWorkers=2`: the first merged full run passed all 2,316 tests. The final run after the register fix had one Notes focus-test deadline failure (no assertion failure): ``` Test Files 1 failed | 317 passed (318) Tests 1 failed | 2315 passed (2316) Duration 544.51s (transform 28%, environment 25%, import 23%, tests 19%, setup 5%) error: script "test" exited with code 1 ``` The unchanged `writes focus attributes on only the previous and next rows` test passed alone (`--maxWorkers=1`); no timeout was increased: ``` Test Files 1 passed (1) Tests 1 passed (1) Duration 39.91s (tests 57%, transform 35%, environment 4%, import 3%, setup 1%) ``` `cd packages/editor && bun run test`: exit 0. ``` Test Files 30 passed (30) Tests 529 passed (529) Duration 42.85s (transform 11.73s, setup 1.52s, import 21.81s, tests 15.24s, environment 37.23s) ``` Web and release server were built and used for all live checks. Release build output: ``` Finished `release` profile [optimized] target(s) in 4m 47s ``` Final real production-Home upgrade output: ``` PASS ac7fda1a8 Home upgrade: startup=9.598s; Money ready=10.651s; Account balances, Category Available and Ready to Assign identical for all 3 Months; Money receipts 1–5 installed; deployed receipts and source bytes preserved ``` Final performance, five interleaved pairs: | Pair | Open ms merged / production | Scroll frame p50/p95 ms merged | Scroll frame p50/p95 ms production | RSS MiB merged / production | |---|---:|---:|---:|---:| | 1 | 4473.44 / 33005.12 | 50.00/66.80 | 333.20/500.00 | 221.1 / 417.3 | | 2 | 5775.68 / 37031.24 | 50.00/66.70 | 266.60/566.60 | 215.4 / 407.9 | | 3 | 5773.74 / 34399.28 | 50.00/66.70 | 283.30/483.30 | 211.7 / 96.1 | | 4 | 4804.40 / 29620.04 | 50.00/66.70 | 233.30/400.00 | 210.0 / 356.6 | | 5 | 4480.30 / 29195.81 | 50.00/66.60 | 233.30/499.90 | 211.2 / 379.7 | money688: navigation-to-first-row p50=4804.40 ms, p95=5775.68 ms; five samples. origin_dev: navigation-to-first-row p50=33005.12 ms, p95=37031.24 ms; five samples. Local HDD, shared host; both builds use their own embedded client and the same stopped production fixture, restored for each sample. HTTP/1.1. This measures navigation-to-first-row and animation-frame intervals during actual scrolling, not trusted-click latency. CPU/RSS, retry counts, renderer details and load averages are in the JSON. No final sample was censored. The perf VM was occupied; no macOS VM was used. docs/perf/baseline.json has warm perf-VM measurements on 50,000 rows (open p50/p95 797.03/833.67 ms; scroll 83.4/116.7 ms) and 200,000 rows (841.6/2696.04 ms; scroll 50.1/100.1 ms). This 20,000-row cold upgrade/startup case on a loaded local host is not directly comparable. Against paired production, open and scroll improved; no paired regression issue is required. Existing first-row and 16.7 ms scroll targets remain unmet. Raw perf JSON, CPU/RSS/load/retry data, scroll-owner regression proof, and paired additional e2e logs: https://git.kayg.org/attachments/08146cf5-b192-42cd-86de-e43ff92e7da7 . Earlier attempts exposed fixture/method problems and were kept in the worktree; their unqualified frame-clock values were not used as scroll evidence. Cleanup output: ``` Removed 37443 files, 38.7GiB total ``` Removed `apps/web/build`, `apps/web/.svelte-kit/output` and own `target/tmp` fixtures. All browser queues completed and the temporary queue marker was removed. No macOS VM, push or deploy was used. The worktree is clean. READY 4ebeba0b8e13b06223bc2b24ee7a398a0933bda0
Author
Owner

Deployed to production in merge38 4ebeba0b8 (backup /srv/calternal/backup-pre-merge38-20261010-2214). Prod ready after 42 s; served-check true.

Deployed to production in merge38 4ebeba0b8 (backup /srv/calternal/backup-pre-merge38-20261010-2214). Prod ready after 42 s; served-check true.
kayg closed this issue 2026-10-10 20:32:04 +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#1554
No description provided.