Merge round 36 #1526

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

Merge round 36 into dev from production 5a2c02c13: Tag rename performance and safety (#1186, #1501), Notes Explorer keyboard selection (#1493). Gates, e2e, adversarial round, xuser matrix, upgrade tests, screenshots. Ends READY/NOT READY.

Merge round 36 into dev from production 5a2c02c13: Tag rename performance and safety (#1186, #1501), Notes Explorer keyboard selection (#1493). Gates, e2e, adversarial round, xuser matrix, upgrade tests, screenshots. Ends READY/NOT READY.
Author
Owner

Started merge36 on job/merge36 at production base 5a2c02c13. Will merge 4c4734791 then 67b3f8a55, run merged-head gates, branch regressions, upgrade and one bounded adversarial round, and attach UI evidence. No push or deploy.

Started merge36 on job/merge36 at production base 5a2c02c13. Will merge 4c4734791 then 67b3f8a55, run merged-head gates, branch regressions, upgrade and one bounded adversarial round, and attach UI evidence. No push or deploy.
Author
Owner

Merged the requested commits in order: 21e52aab7 (Tags), d0f654548 (Notes Explorer). Conflicts preserve production repair protection plus batch staging, both RepairRequired and QuotaExceeded API mappings, both perf baselines, and combined upgrade receipts (40 production additions plus Tags 0007 = 41). A batch staged before new repair protection could publish without rechecking it; added a publication-lock check and a regression test preserving bytes, inode and Versions. Final fetch/merge found origin/dev already included. Gates are running.

Merged the requested commits in order: 21e52aab7 (Tags), d0f654548 (Notes Explorer). Conflicts preserve production repair protection plus batch staging, both RepairRequired and QuotaExceeded API mappings, both perf baselines, and combined upgrade receipts (40 production additions plus Tags 0007 = 41). A batch staged before new repair protection could publish without rechecking it; added a publication-lock check and a regression test preserving bytes, inode and Versions. Final fetch/merge found origin/dev already included. Gates are running.
Author
Owner

Readiness finding: the single exact-pin regeneration produced 22,255 live exceptions versus production 22,249. io.unresolved-call rises from 16,319 to 16,327; io.content-read falls from 51 to 49. Kept the production ratchet ceilings as required; did not accept the generated increase. This blocks READY unless the imported debt is removed. Continuing merged-head verification to report all evidence.

Readiness finding: the single exact-pin regeneration produced 22,255 live exceptions versus production 22,249. io.unresolved-call rises from 16,319 to 16,327; io.content-read falls from 51 to 49. Kept the production ratchet ceilings as required; did not accept the generated increase. This blocks READY unless the imported debt is removed. Continuing merged-head verification to report all evidence.
Author
Owner

Resolved the ratchet finding: eight existing exact call bindings retained stale enclosing-function hashes after the Tag-read changes. Refreshed only those function hashes; full call hashes, capabilities and proof tests are unchanged. Removed the eight now-resolved ledger sites. The guard reports verbatim: perf-lint: PASS; 0 violations; 22247 scoped exceptions. Ratchet total is lowered from production 22249 to 22247; io.unresolved-call stays at 16319 and io.content-read falls to 49. No rule or ceiling was weakened. Focused web regression tests: 4 files, 34 tests passed.

Resolved the ratchet finding: eight existing exact call bindings retained stale enclosing-function hashes after the Tag-read changes. Refreshed only those function hashes; full call hashes, capabilities and proof tests are unchanged. Removed the eight now-resolved ledger sites. The guard reports verbatim: perf-lint: PASS; 0 violations; 22247 scoped exceptions. Ratchet total is lowered from production 22249 to 22247; io.unresolved-call stays at 16319 and io.content-read falls to 49. No rule or ceiling was weakened. Focused web regression tests: 4 files, 34 tests passed.
Author
Owner

The perf blocker is resolved in 0aa09c752 with existing proof hashes refreshed and ratchet reduced to 22247. No feature change or new exemption. Full web suite and workspace Rust gates continue. Added a focused production-shaped upgrade probe using the existing crash/upgrade helpers: 1000 tagged Notes, production build identity check, exact deployed receipts, byte preservation, Tags 0007 exactly once, and second-boot idempotence.

The perf blocker is resolved in 0aa09c752 with existing proof hashes refreshed and ratchet reduced to 22247. No feature change or new exemption. Full web suite and workspace Rust gates continue. Added a focused production-shaped upgrade probe using the existing crash/upgrade helpers: 1000 tagged Notes, production build identity check, exact deployed receipts, byte preservation, Tags 0007 exactly once, and second-boot idempotence.
Author
Owner

Gate progress: workspace cargo clippy --all-targets -- -D warnings passed: Finished dev profile [unoptimized + debuginfo] target(s) in 12m 00s. Final web check passed: svelte-check found 0 errors and 3 warnings in 1 file. The staged-batch repair regression passed; fix committed atomically. Workspace cargo test and release build are running.

Gate progress: workspace cargo clippy --all-targets -- -D warnings passed: Finished `dev` profile [unoptimized + debuginfo] target(s) in 12m 00s. Final web check passed: svelte-check found 0 errors and 3 warnings in 1 file. The staged-batch repair regression passed; fix committed atomically. Workspace cargo test and release build are running.
Author
Owner

Web gates are green after the exact binding fix: svelte-check found 0 errors and 3 warnings in 1 file; Test Files 310 passed (310), Tests 2271 passed (2271); editor Test Files 30 passed (30), Tests 529 passed (529). Full Rust tests are compiling. Release compilation is paused until that compilation completes to keep this job within four active Cargo build workers.

Web gates are green after the exact binding fix: svelte-check found 0 errors and 3 warnings in 1 file; Test Files 310 passed (310), Tests 2271 passed (2271); editor Test Files 30 passed (30), Tests 529 passed (529). Full Rust tests are compiling. Release compilation is paused until that compilation completes to keep this job within four active Cargo build workers.
Author
Owner

Committed production-shaped upgrade probe 6eb050ce6 (Python syntax check passed; real execution awaits candidate binary). Worktree is clean. Rust workspace test compilation continues after the clean Clippy gate; release compilation will resume once test compilation releases the build workers. Browser/editor suites have completed successfully.

Committed production-shaped upgrade probe 6eb050ce6 (Python syntax check passed; real execution awaits candidate binary). Worktree is clean. Rust workspace test compilation continues after the clean Clippy gate; release compilation will resume once test compilation releases the build workers. Browser/editor suites have completed successfully.
Author
Owner

Blocking finding: workspace cargo test aborted with SIGABRT/stack overflow in calternal-plugin-calendar::view::tests::range_and_year_project_items_before_files_adopt_notes. The same test aborts in isolation; not a latency flake. Root::write retained 68504 bytes per future, including its inline 64 KiB streaming chunk. Moved that chunk to one bounded heap allocation and added a future-size regression; it passes. Calendar regression is rebuilding. Upgrade passed verbatim: PASS production 5a2c02c13 Home: Notes=1000; startup=2.059s; Tags 0007 installed once; deployed receipts, source bytes and Tag counts preserved. Adversarial also found an NFD Search miss in the mixed Home and a Mail Save-to-Files click intercepted by the selected row; classifying these without changing expectations. Isolated NFC/NFD Search currently passes on both production and candidate.

Blocking finding: workspace cargo test aborted with SIGABRT/stack overflow in calternal-plugin-calendar::view::tests::range_and_year_project_items_before_files_adopt_notes. The same test aborts in isolation; not a latency flake. Root::write retained 68504 bytes per future, including its inline 64 KiB streaming chunk. Moved that chunk to one bounded heap allocation and added a future-size regression; it passes. Calendar regression is rebuilding. Upgrade passed verbatim: PASS production 5a2c02c13 Home: Notes=1000; startup=2.059s; Tags 0007 installed once; deployed receipts, source bytes and Tag counts preserved. Adversarial also found an NFD Search miss in the mixed Home and a Mail Save-to-Files click intercepted by the selected row; classifying these without changing expectations. Isolated NFC/NFD Search currently passes on both production and candidate.
Author
Owner

Stack fix committed as de96a8fe5. Unchanged Calendar regression now passes (1 passed; 0 failed; 106 filtered; 2.46s). calternal-fs Clippy and all tests pass, including 107 unit tests and 54 storage tests. Full merged gates and release rebuild are running again because of this fix; no expectations changed. Search mismatch filed as #1527; isolated and mixed three-item production/candidate comparisons both pass. The round has two UI failures to classify: Mail attachment Save click is intercepted by a selected row; editor block Copy-link menu locator timed out. No backend 5xx or cross-User denial failure has appeared so far.

Stack fix committed as de96a8fe5. Unchanged Calendar regression now passes (1 passed; 0 failed; 106 filtered; 2.46s). calternal-fs Clippy and all tests pass, including 107 unit tests and 54 storage tests. Full merged gates and release rebuild are running again because of this fix; no expectations changed. Search mismatch filed as #1527; isolated and mixed three-item production/candidate comparisons both pass. The round has two UI failures to classify: Mail attachment Save click is intercepted by a selected row; editor block Copy-link menu locator timed out. No backend 5xx or cross-User denial failure has appeared so far.
Author
Owner

Post-fix workspace Clippy passed: Finished dev profile [unoptimized + debuginfo] target(s) in 1m 16s. Release rebuild passed: Finished release profile [optimized] target(s) in 7m 16s. Perf guard still passes with 22247 exceptions. The full adversarial runner reached its 40-minute time box (exit 124) after 100/100 Tag renames, zero mkdir/rename-race errors, and the passing full ownership matrix; it was stopped during the Task storm (single-request baseline 4.055s, SLOW threshold 101.39s). The split XUser run is now active within the same <=60-minute round. No unexpected backend 5xx/crash or denied-ownership failure was observed. Full Rust tests are recompiling after the stack fix.

Post-fix workspace Clippy passed: Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 16s. Release rebuild passed: Finished `release` profile [optimized] target(s) in 7m 16s. Perf guard still passes with 22247 exceptions. The full adversarial runner reached its 40-minute time box (exit 124) after 100/100 Tag renames, zero mkdir/rename-race errors, and the passing full ownership matrix; it was stopped during the Task storm (single-request baseline 4.055s, SLOW threshold 101.39s). The split XUser run is now active within the same <=60-minute round. No unexpected backend 5xx/crash or denied-ownership failure was observed. Full Rust tests are recompiling after the stack fix.
Author
Owner

Final release validation: the production 5a2c02c13 Home upgrade with 1,000 Notes passed; startup 3.169 s; Tags 0007 installed once; deployed migration receipts, Note bytes and Tag counts survived a second boot. The #1501 two-User regression passed: rename acceptance 132.34247 ms; 20 independent User B writes succeeded, p95 606.651837 ms and maximum 641.427014 ms, while User A rewrote 2,000 Notes. The SIGKILL/quota/Undo probe passed with a durable 64-of-128 prefix, 507 while over quota, and all 128 original sources restored after space was available. The partial-failure probe passed with exact foreign-source bytes and exact Undo. These are local shared-host measurements. Final workspace clippy and the release build passed; workspace tests and browser suites are running.

Final release validation: the production 5a2c02c13 Home upgrade with 1,000 Notes passed; startup 3.169 s; Tags 0007 installed once; deployed migration receipts, Note bytes and Tag counts survived a second boot. The #1501 two-User regression passed: rename acceptance 132.34247 ms; 20 independent User B writes succeeded, p95 606.651837 ms and maximum 641.427014 ms, while User A rewrote 2,000 Notes. The SIGKILL/quota/Undo probe passed with a durable 64-of-128 prefix, 507 while over quota, and all 128 original sources restored after space was available. The partial-failure probe passed with exact foreign-source bytes and exact Undo. These are local shared-host measurements. Final workspace clippy and the release build passed; workspace tests and browser suites are running.
Author
Owner

The newly merged #1186 browser test captured sidebar inline Rename, real pending progress, completion and exact Undo at 390, 820 and 1440 px in both themes. It then failed at tag-rewrite-1186.mjs:428: AssertionError: the UI persists the accepted receipt for route changes (actual null). Evidence: the renamed label appeared at 297.10 ms; the test treated that optimistic projection as an accepted server receipt. The merged store deliberately projects before acceptance. I added a separate wait for the persisted receipt after the latency sample, without changing the existing assertion or product behavior. The focused Rename/receipt/completion/Undo scenario will run before this fix is committed.

The newly merged #1186 browser test captured sidebar inline Rename, real pending progress, completion and exact Undo at 390, 820 and 1440 px in both themes. It then failed at tag-rewrite-1186.mjs:428: `AssertionError: the UI persists the accepted receipt for route changes` (actual null). Evidence: the renamed label appeared at 297.10 ms; the test treated that optimistic projection as an accepted server receipt. The merged store deliberately projects before acceptance. I added a separate wait for the persisted receipt after the latency sample, without changing the existing assertion or product behavior. The focused Rename/receipt/completion/Undo scenario will run before this fix is committed.
Author
Owner

Committed the Tag e2e ordering fix as dbd621434. The focused real-release-server scenario passed without screenshots: all route-boundary assertions, receipt persistence, 1,000-item completion and visible Undo. Verbatim results:

#1186 browser click-to-visible: 49.60 ms (local, one sample)
#1186 E2E: rename source_items=0 renamed_items=1000
#1186 E2E: completed receipt can_undo=true
#1186 E2E: Undo conflicts=0 source_items=1000 renamed_items=0
svelte-check found 0 errors and 3 warnings in 1 file

The six sidebar screenshot cases had already passed before the ordering assertion. The existing assertion is unchanged. No product code or Rust source changed in this commit.

Committed the Tag e2e ordering fix as dbd621434. The focused real-release-server scenario passed without screenshots: all route-boundary assertions, receipt persistence, 1,000-item completion and visible Undo. Verbatim results: ``` #1186 browser click-to-visible: 49.60 ms (local, one sample) #1186 E2E: rename source_items=0 renamed_items=1000 #1186 E2E: completed receipt can_undo=true #1186 E2E: Undo conflicts=0 source_items=1000 renamed_items=0 svelte-check found 0 errors and 3 warnings in 1 file ``` The six sidebar screenshot cases had already passed before the ordering assertion. The existing assertion is unchanged. No product code or Rust source changed in this commit.
Author
Owner

READY dbd621434d

Merged exactly 4c4734791 (job/tagperf-1186, #1186/#1501), then 67b3f8a55 (job/notesel-1493, #1493), with the requested no-fast-forward commits 21e52aab7 and d0f654548. The branch started from production origin/dev 5a2c02c13. The required fetch and merge of origin/dev ran once before final gates; it was already up to date. No push or deploy ran.

Built and fixed

  • Combined bounded durable Tag rename and exact Undo with the production upload repair protections. Publication now rechecks protected evidence under the writer lock. The regression preserves bytes, inode and Versions when protection appears after staging.
  • Combined Notes Explorer selection with production focus and motion behavior. The existing TagRow, ItemActionMenu, Menu and Explorer row controls remain the UI owners. No new visual primitive was added by this merge round.
  • Fixed a reproducible Calendar stack overflow from the merged streaming-write future: its 64 KiB chunk now lives on the heap. The original unchanged Calendar test passes. A regression failed before the fix with a 68,504-byte future and passes afterward. Chunk size and write semantics remain the same.
  • Added tests/adversarial/merge36_upgrade.py. It reuses the established crash campaign and upgrade helpers, creates a stopped production-shaped Home, and checks 1,000 Notes, source bytes, Tag counts and receipts across two candidate boots.
  • Fixed an ordering defect in the newly added Tag e2e: it now waits for receipt persistence after measuring optimistic label visibility. The existing receipt assertion is unchanged. The focused completion/visible Undo run passes.
  • Regenerated exact performance pins once after the merge. Refreshed eight moved function-hash proofs without changing call hashes or capabilities. Lowered the exception ratchet from 22,249 to 22,247. No ceiling or rule was weakened.

Atomic follow-up commits: c14f7ecfb, 0aa09c752, 99155855f, 6eb050ce6, de96a8fe5, dbd621434. The final commit changes only e2e ordering; the Rust sources and built SPA are the same ones used by final Rust gates and runtime probes. The web check and focused e2e also pass after that commit.

Gates — verbatim output

Environment: CARGO_BUILD_JOBS=4, CARGO_PROFILE_DEV_DEBUG=line-tables-only, CARGO_INCREMENTAL=0, worktree target/tmp. The preset CARGO_TARGET_DIR was retained. cargo fmt --check returned 0 with no output.

cargo clippy --all-targets -- -D warnings returned 0:

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

cargo test --no-fail-fast -- --test-threads=4 returned 0. All 125 test-result lines follow verbatim (3,515 passed, 56 ignored, 0 failed):

test result: ok. 23 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.11s
test result: ok. 137 passed; 0 failed; 3 ignored; 0 measured; 0 filtered out; finished in 77.09s
test result: ok. 52 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.85s
test result: ok. 17 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.53s
test result: ok. 141 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 164.99s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.85s
test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.06s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.54s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 40.71s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.06s
test result: ok. 15 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.29s
test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.48s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.89s
test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.63s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 12.50s
test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.02s
test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 27.16s
test result: ok. 15 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.17s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.99s
test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 15.51s
test result: ok. 63 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.87s
test result: ok. 40 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s
test result: ok. 40 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.30s
test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.22s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.09s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.19s
test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.29s
test result: ok. 22 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.91s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s
test result: ok. 43 passed; 0 failed; 5 ignored; 0 measured; 0 filtered out; finished in 26.49s
test result: ok. 107 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 17.95s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.59s
test result: ok. 54 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 164.62s
test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.79s
test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 30 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.14s
test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s
test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s
test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.97s
test result: ok. 24 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 16 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s
test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 8.15s
test result: ok. 21 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.80s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
test result: ok. 4 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 2.69s
test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.26s
test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.42s
test result: ok. 589 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.55s
test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 19 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.53s
test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s
test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.50s
test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
test result: ok. 63 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 10.65s
test result: ok. 24 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.28s
test result: ok. 34 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.01s
test result: ok. 106 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 12.13s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.33s
test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.11s
test result: ok. 281 passed; 0 failed; 4 ignored; 0 measured; 0 filtered out; finished in 201.38s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 8 filtered out; finished in 0.03s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 8 filtered out; finished in 0.03s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 8 filtered out; finished in 0.15s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 8 filtered out; finished in 0.03s
test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.99s
test result: ok. 172 passed; 0 failed; 10 ignored; 0 measured; 0 filtered out; finished in 21.84s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 138 filtered out; finished in 33.30s
test result: ok. 137 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 613.30s
test result: ok. 29 passed; 0 failed; 3 ignored; 0 measured; 0 filtered out; finished in 6.51s
test result: ok. 324 passed; 0 failed; 4 ignored; 0 measured; 0 filtered out; finished in 209.42s
test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.91s
test result: ok. 45 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.41s
test result: ok. 60 passed; 0 failed; 4 ignored; 0 measured; 0 filtered out; finished in 5.64s
test result: ok. 16 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.11s
test result: ok. 61 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 13.74s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.62s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s
test result: ok. 29 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 238.90s
test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s
test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
test result: ok. 1 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 2.40s
test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 276 passed; 0 failed; 12 ignored; 0 measured; 0 filtered out; finished in 110.12s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 24.34s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.13s
test result: ok. 72 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.03s
test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 72 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 50.90s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

cd apps/web && bun run check returned 0:

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

The three warnings are existing unused selectors in MailMorphCard.svelte. Performance audit output:

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

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

 Test Files  310 passed (310)
      Tests  2271 passed (2271)
   Duration  591.43s (transform 27%, environment 26%, import 22%, tests 20%, setup 6%)

cd packages/editor && bun run test returned 0:

 Test Files  30 passed (30)
      Tests  529 passed (529)
   Duration  52.09s (transform 8.86s, setup 826ms, import 22.32s, tests 21.36s, environment 47.71s)

The production web build and release server build returned 0. Final release binary SHA-256: a64720ff2a6a1b627ca89ab1d860c8da8c2e922ff6776a8daa484d15a9939cd0.

The first workspace run aborted in Calendar with stack overflow (exit 101). The unchanged test reproduced alone with exit 134. The heap-buffer fix passed that regression alone and the final full workspace run. This was a fixed crash, not a latency flake. No latency-test failure needed an isolated rerun.

Real-server validation and cost

PASS production 5a2c02c13 Home: Notes=1000; startup=3.169s; Tags 0007 installed once; deployed receipts, source bytes and Tag counts preserved

The final two-User regression uses 2,000 Notes for User A and 20 conditional writes for User B. All 20 writes succeed within the strict one-second limit. Local rename acceptance is 132.34247 ms; other-User write p95 is 606.651837 ms and maximum is 641.427014 ms. It also verifies completed receipt state and User B's final body.

SIGKILL/quota/Undo passes on 128 Notes with a durable 64-Note prefix. Undo returns 507 while over quota and restores all 128 original sources after space is available. The partial-failure probe passes with 64 old and 64 new sources, ten exact foreign sources, consistent counts, and exact Undo of 128 sources. Tags crate subprocess SIGKILL and replay regressions pass in the workspace run.

The corrected focused #1186 browser run passes real route boundaries, persisted receipt, 1,000 renamed sources, durable can_undo=true, and visible Undo with zero conflicts and all 1,000 sources restored. Local optimistic label timing is 49.60 ms (one sample); the earlier screenshot run measured 297.10 ms before its test-ordering failure.

The #1493 1,000-Note Explorer audit passes: five ArrowDown samples, p50 82.5 ms, p95/max 96 ms, no failures or long tasks, and zero critical-path requests in every sample. These are local Linux timings with Mac emulation, not real Mac GPU measurements. The whole seeded browser/server audit process tree averages 1,140,806,216 bytes RSS, peaks at 1,654,018,048 bytes and uses 399.44 CPU-seconds over 177.978 seconds; that includes startup and fixture preparation. No like-for-like fresh VM comparison was made in this merge round. Existing source-branch profiles and their baselines remain in docs/perf/baseline.json.

Expected cost: Tag source work is linear in saved witnesses, with at most 64 paths per publication batch and eight bounded IO workers. Streaming writes keep one 64 KiB chunk allocation per active write. Explorer ArrowDown uses the row index and row references, changes the relevant focus/tab stops and performs no content IO. No new Home scan was added by the merge fixes.

One adversarial round

Ran tests/adversarial/run.sh and XUSER_MATRIX_ONLY=1 tests/adversarial/run-split.sh in one 43 min 25 s round, below the 60-minute limit. The full runner timed out during the Task storm (exit 124). The split matrix stopped at the known busy-host import fixture deadline of 45 seconds (exit 1, #1445 SLOW condition). Do not read these statuses as full campaign passes.

The full runner completed the Tags probe and cross-User matrix before its time box. Verbatim:

PASS #1110 Tag rewrite, cross-User receipt, concurrency and Undo
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 1.2 ms
Job/Mail/quota ownership checks: 127 comparisons; 0 denial failures
search storm: 0 failures, p50=455.8ms p95=1786.8ms
Task create single-request baseline p50=4.055s (5/5 successful); task storm SLOW threshold=101.39s

It also completed import admission/cancel/Undo ownership, hidden/share isolation, Note byte/mtime/restart probes, drawing payload limits, Mail network protections, and editor concurrent/offline/external-write/restart probes. No unexpected server crash, 5xx, source loss or cross-User effect was observed in this round. The runner's explicit SIGKILL restarts are intentional.

Known gaps / UX gaps left

  • #1527: one NFD Search result omission in the mixed Home. Two focused comparisons pass on production and candidate. It remains intermittent; baseline status is unproven. No source loss or security effect was observed.
  • #1528: inherited editor harness locator asks for “Copy link to block”; production and candidate use “Copy link to this block”. The assertion remains unchanged; this stops the block-action scenario before the action runs.
  • #1529: production and candidate both reproduce Mail attachment row interception of Save to Files pointer clicks.
  • #1530: production and candidate both reproduce the Notes #606 cached-editor visibility timeout.
  • #1531: production and candidate both reproduce the Tasks sidebar Tag-action locator timeout after two successful forward-write/Undo flows.
  • #1532: production and candidate both reproduce the Files #547 text-card fixture timeout: its .txt file contains PDF bytes and is classified as application/pdf.
  • The standard Notes, Files and Tags suites were all run, then their failures were compared with production. They stop at the inherited failures above; later suite scenarios are not claimed as verified. No existing expectation was changed to make them pass.
  • The Task storm remainder and the split XUser replay did not finish within this single round. The full-round XUser matrix did finish with zero denial failures.

UX gaps closed

The merged changes keep a renamed Tag visible immediately, show real pending progress, retain exact Undo, and move Notes Explorer focus without waiting for content IO. The merge fix preserves newly protected upload evidence at publication. The new e2e ordering fix proves server acceptance separately from the optimistic label. Standard Tag sidebar mouse/shortcut inline Rename, real progress and completion have screenshots at every required width and theme.

Decisions

No new product design was introduced. Conflict resolution retains both sides: production repair protection and error mapping, bounded Tag publication/quota errors, Notes focus behavior, the Tags 0007 receipt, and both performance profiles. The upgrade fixture is indexed by the actual production binary before its bytes are snapshotted, because production can add its established metadata. The streaming chunk is heap-backed to bound nested async frame size. The e2e wait separates optimistic projection from durable receipt persistence. These follow existing DESIGN §§2,31,59 invariants.

Evidence and cleanup

Review archive: 36 actual-size Mac-emulated captures, verbatim gate logs and all probe/production-comparison logs. Tags include mouse and shortcut inline rename, pending sidebar progress and completion at 390, 820 and 1440 px in light/dark. Notes include pointer and ArrowDown at all three widths/themes. The captures use real fixture data on the production SPA with matching server/web build identities; no update toast is present. The orchestrator owns visual review. No Mac VM session or lock was used.

Doc comments for the merge fixes and upgrade probe were re-read. Screenshots were not committed. cargo clean completed and removed 31.3 GiB; web build output, own temporary fixtures and copied production binary were deleted. The worktree is clean. No issue was closed.

Files

The complete merged file list is also in changed-files.txt in the archive:

apps/web/e2e/tag-rewrite-1186.mjs
apps/web/src/lib/a11y/inputModality.test.ts
apps/web/src/lib/calendar/TimeGrid.svelte.test.ts
apps/web/src/lib/components/ItemActionMenu.svelte
apps/web/src/lib/components/TagRow.svelte
apps/web/src/lib/components/TagRow.svelte.test.ts
apps/web/src/lib/components/app-sidebar.svelte
apps/web/src/lib/notes/NotesExplorer.svelte
apps/web/src/lib/notes/NotesExplorer.svelte.test.ts
apps/web/src/lib/stores/tagRewrite.svelte.test.ts
apps/web/src/lib/stores/tagRewrite.svelte.ts
apps/web/src/routes/tag/[tag]/+page.svelte
apps/web/src/routes/tags/+page.svelte
bench/interaction-audit-1493.mjs
bench/tag-rewrite-1186-browser.mjs
bench/tag-rewrite-1186-controller.py
bench/tag-rewrite-1186-fixture.py
bench/tag-rewrite-1186-paired.sh
bench/tag-rewrite-1186.py
contracts/perf/adoption-1058.json
contracts/perf/exceptions.json
contracts/perf/ratchet.json
contracts/perf/registry.json
crates/calternal-collab/src/session.rs
crates/calternal-fs/src/journal.rs
crates/calternal-fs/src/lib.rs
crates/calternal-fs/src/quota.rs
crates/calternal-fs/src/root.rs
crates/calternal-fs/src/versions.rs
crates/calternal-fs/src/write.rs
crates/calternal-fs/tests/storage.rs
crates/calternal-server/src/upgrade_tests.rs
crates/calternal-tags/examples/tag_rewrite_1186_seed.rs
crates/calternal-tags/migrations/0007_tag_rewrite_acceptance.sql
crates/calternal-tags/src/index.rs
crates/calternal-tags/src/lib.rs
crates/calternal-tags/src/rewrite.rs
crates/calternal-tags/src/source.rs
crates/plugins/notes/src/lib.rs
crates/plugins/notes/src/store.rs
docs/DESIGN.md
docs/perf/2026-10-07-tag-rewrite-1186.md
docs/perf/2026-10-08-tagfast2-1186.md
docs/perf/2026-10-09-tagfix5-1501.md
docs/perf/2026-10-09-tagperf4-1186.md
docs/perf/baseline.json
docs/perf/runs/tag-rewrite-1186-idle-merged.json
docs/perf/runs/tag-rewrite-1186-round10.json
docs/perf/runs/tag-rewrite-1186-round11.json
docs/perf/runs/tag-rewrite-1186-round12.json
docs/perf/runs/tag-rewrite-1186-tagfast2-final-round.json
docs/perf/runs/tag-rewrite-1186-tagfast2-first-round.json
docs/perf/runs/tag-rewrite-1186-tagfix5.json
docs/perf/runs/tag-rewrite-1186-tagperf4-mac.json
docs/perf/runs/tag-rewrite-1186-tagperf4.json
packages/ui/src/components/calendar/TimeGrid.svelte
packages/ui/src/components/menu/FloatingSurface.svelte
packages/ui/src/components/menu/Menu.svelte
tests/adversarial/merge36_upgrade.py
tests/adversarial/tag-rewrite-cross-user-1501.mjs
tests/adversarial/tag-rewrite-failure-1186.mjs
tests/adversarial/tag-rewrite-fixture-1186.mjs
tests/adversarial/tag-rewrite-quota-1186.mjs

READY dbd621434d

READY dbd621434d0a1133f16230cca5c6a83af0d8aed3 Merged exactly 4c4734791 (job/tagperf-1186, #1186/#1501), then 67b3f8a55 (job/notesel-1493, #1493), with the requested no-fast-forward commits 21e52aab7 and d0f654548. The branch started from production origin/dev 5a2c02c13. The required fetch and merge of origin/dev ran once before final gates; it was already up to date. No push or deploy ran. **Built and fixed** - Combined bounded durable Tag rename and exact Undo with the production upload repair protections. Publication now rechecks protected evidence under the writer lock. The regression preserves bytes, inode and Versions when protection appears after staging. - Combined Notes Explorer selection with production focus and motion behavior. The existing TagRow, ItemActionMenu, Menu and Explorer row controls remain the UI owners. No new visual primitive was added by this merge round. - Fixed a reproducible Calendar stack overflow from the merged streaming-write future: its 64 KiB chunk now lives on the heap. The original unchanged Calendar test passes. A regression failed before the fix with a 68,504-byte future and passes afterward. Chunk size and write semantics remain the same. - Added tests/adversarial/merge36_upgrade.py. It reuses the established crash campaign and upgrade helpers, creates a stopped production-shaped Home, and checks 1,000 Notes, source bytes, Tag counts and receipts across two candidate boots. - Fixed an ordering defect in the newly added Tag e2e: it now waits for receipt persistence after measuring optimistic label visibility. The existing receipt assertion is unchanged. The focused completion/visible Undo run passes. - Regenerated exact performance pins once after the merge. Refreshed eight moved function-hash proofs without changing call hashes or capabilities. Lowered the exception ratchet from 22,249 to 22,247. No ceiling or rule was weakened. Atomic follow-up commits: c14f7ecfb, 0aa09c752, 99155855f, 6eb050ce6, de96a8fe5, dbd621434. The final commit changes only e2e ordering; the Rust sources and built SPA are the same ones used by final Rust gates and runtime probes. The web check and focused e2e also pass after that commit. **Gates — verbatim output** Environment: CARGO_BUILD_JOBS=4, CARGO_PROFILE_DEV_DEBUG=line-tables-only, CARGO_INCREMENTAL=0, worktree target/tmp. The preset CARGO_TARGET_DIR was retained. cargo fmt --check returned 0 with no output. cargo clippy --all-targets -- -D warnings returned 0: ``` Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 16s ``` cargo test --no-fail-fast -- --test-threads=4 returned 0. All 125 test-result lines follow verbatim (3,515 passed, 56 ignored, 0 failed): ``` test result: ok. 23 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.11s test result: ok. 137 passed; 0 failed; 3 ignored; 0 measured; 0 filtered out; finished in 77.09s test result: ok. 52 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.85s test result: ok. 17 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.53s test result: ok. 141 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 164.99s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.85s test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.06s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.54s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 40.71s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.06s test result: ok. 15 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.29s test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.48s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.89s test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.63s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 12.50s test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.02s test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 27.16s test result: ok. 15 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.17s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.99s test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 15.51s test result: ok. 63 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.87s test result: ok. 40 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s test result: ok. 40 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.30s test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.22s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.09s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.19s test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.29s test result: ok. 22 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.91s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s test result: ok. 43 passed; 0 failed; 5 ignored; 0 measured; 0 filtered out; finished in 26.49s test result: ok. 107 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 17.95s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.59s test result: ok. 54 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 164.62s test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.79s test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 30 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.14s test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.97s test result: ok. 24 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 16 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 8.15s test result: ok. 21 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.80s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s test result: ok. 4 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 2.69s test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.26s test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.42s test result: ok. 589 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.55s test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 19 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.53s test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.50s test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s test result: ok. 63 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 10.65s test result: ok. 24 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.28s test result: ok. 34 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.01s test result: ok. 106 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 12.13s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.33s test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.11s test result: ok. 281 passed; 0 failed; 4 ignored; 0 measured; 0 filtered out; finished in 201.38s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 8 filtered out; finished in 0.03s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 8 filtered out; finished in 0.03s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 8 filtered out; finished in 0.15s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 8 filtered out; finished in 0.03s test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.99s test result: ok. 172 passed; 0 failed; 10 ignored; 0 measured; 0 filtered out; finished in 21.84s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 138 filtered out; finished in 33.30s test result: ok. 137 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 613.30s test result: ok. 29 passed; 0 failed; 3 ignored; 0 measured; 0 filtered out; finished in 6.51s test result: ok. 324 passed; 0 failed; 4 ignored; 0 measured; 0 filtered out; finished in 209.42s test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.91s test result: ok. 45 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.41s test result: ok. 60 passed; 0 failed; 4 ignored; 0 measured; 0 filtered out; finished in 5.64s test result: ok. 16 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.11s test result: ok. 61 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 13.74s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.62s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s test result: ok. 29 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 238.90s test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s test result: ok. 1 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 2.40s test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 276 passed; 0 failed; 12 ignored; 0 measured; 0 filtered out; finished in 110.12s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 24.34s test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.13s test result: ok. 72 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.03s test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 72 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 50.90s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s ``` cd apps/web && bun run check returned 0: ``` svelte-check found 0 errors and 3 warnings in 1 file ``` The three warnings are existing unused selectors in MailMorphCard.svelte. Performance audit output: ``` perf-lint: PASS; 0 violations; 22247 scoped exceptions ``` cd apps/web && bun run test --maxWorkers=2 returned 0: ``` Test Files 310 passed (310) Tests 2271 passed (2271) Duration 591.43s (transform 27%, environment 26%, import 22%, tests 20%, setup 6%) ``` cd packages/editor && bun run test returned 0: ``` Test Files 30 passed (30) Tests 529 passed (529) Duration 52.09s (transform 8.86s, setup 826ms, import 22.32s, tests 21.36s, environment 47.71s) ``` The production web build and release server build returned 0. Final release binary SHA-256: a64720ff2a6a1b627ca89ab1d860c8da8c2e922ff6776a8daa484d15a9939cd0. The first workspace run aborted in Calendar with stack overflow (exit 101). The unchanged test reproduced alone with exit 134. The heap-buffer fix passed that regression alone and the final full workspace run. This was a fixed crash, not a latency flake. No latency-test failure needed an isolated rerun. **Real-server validation and cost** ``` PASS production 5a2c02c13 Home: Notes=1000; startup=3.169s; Tags 0007 installed once; deployed receipts, source bytes and Tag counts preserved ``` The final two-User regression uses 2,000 Notes for User A and 20 conditional writes for User B. All 20 writes succeed within the strict one-second limit. Local rename acceptance is 132.34247 ms; other-User write p95 is 606.651837 ms and maximum is 641.427014 ms. It also verifies completed receipt state and User B's final body. SIGKILL/quota/Undo passes on 128 Notes with a durable 64-Note prefix. Undo returns 507 while over quota and restores all 128 original sources after space is available. The partial-failure probe passes with 64 old and 64 new sources, ten exact foreign sources, consistent counts, and exact Undo of 128 sources. Tags crate subprocess SIGKILL and replay regressions pass in the workspace run. The corrected focused #1186 browser run passes real route boundaries, persisted receipt, 1,000 renamed sources, durable can_undo=true, and visible Undo with zero conflicts and all 1,000 sources restored. Local optimistic label timing is 49.60 ms (one sample); the earlier screenshot run measured 297.10 ms before its test-ordering failure. The #1493 1,000-Note Explorer audit passes: five ArrowDown samples, p50 82.5 ms, p95/max 96 ms, no failures or long tasks, and zero critical-path requests in every sample. These are local Linux timings with Mac emulation, not real Mac GPU measurements. The whole seeded browser/server audit process tree averages 1,140,806,216 bytes RSS, peaks at 1,654,018,048 bytes and uses 399.44 CPU-seconds over 177.978 seconds; that includes startup and fixture preparation. No like-for-like fresh VM comparison was made in this merge round. Existing source-branch profiles and their baselines remain in docs/perf/baseline.json. Expected cost: Tag source work is linear in saved witnesses, with at most 64 paths per publication batch and eight bounded IO workers. Streaming writes keep one 64 KiB chunk allocation per active write. Explorer ArrowDown uses the row index and row references, changes the relevant focus/tab stops and performs no content IO. No new Home scan was added by the merge fixes. **One adversarial round** Ran tests/adversarial/run.sh and XUSER_MATRIX_ONLY=1 tests/adversarial/run-split.sh in one 43 min 25 s round, below the 60-minute limit. The full runner timed out during the Task storm (exit 124). The split matrix stopped at the known busy-host import fixture deadline of 45 seconds (exit 1, #1445 SLOW condition). Do not read these statuses as full campaign passes. The full runner completed the Tags probe and cross-User matrix before its time box. Verbatim: ``` PASS #1110 Tag rewrite, cross-User receipt, concurrency and Undo 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 1.2 ms Job/Mail/quota ownership checks: 127 comparisons; 0 denial failures search storm: 0 failures, p50=455.8ms p95=1786.8ms Task create single-request baseline p50=4.055s (5/5 successful); task storm SLOW threshold=101.39s ``` It also completed import admission/cancel/Undo ownership, hidden/share isolation, Note byte/mtime/restart probes, drawing payload limits, Mail network protections, and editor concurrent/offline/external-write/restart probes. No unexpected server crash, 5xx, source loss or cross-User effect was observed in this round. The runner's explicit SIGKILL restarts are intentional. **Known gaps / UX gaps left** - #1527: one NFD Search result omission in the mixed Home. Two focused comparisons pass on production and candidate. It remains intermittent; baseline status is unproven. No source loss or security effect was observed. - #1528: inherited editor harness locator asks for “Copy link to block”; production and candidate use “Copy link to this block”. The assertion remains unchanged; this stops the block-action scenario before the action runs. - #1529: production and candidate both reproduce Mail attachment row interception of Save to Files pointer clicks. - #1530: production and candidate both reproduce the Notes #606 cached-editor visibility timeout. - #1531: production and candidate both reproduce the Tasks sidebar Tag-action locator timeout after two successful forward-write/Undo flows. - #1532: production and candidate both reproduce the Files #547 text-card fixture timeout: its .txt file contains PDF bytes and is classified as application/pdf. - The standard Notes, Files and Tags suites were all run, then their failures were compared with production. They stop at the inherited failures above; later suite scenarios are not claimed as verified. No existing expectation was changed to make them pass. - The Task storm remainder and the split XUser replay did not finish within this single round. The full-round XUser matrix did finish with zero denial failures. **UX gaps closed** The merged changes keep a renamed Tag visible immediately, show real pending progress, retain exact Undo, and move Notes Explorer focus without waiting for content IO. The merge fix preserves newly protected upload evidence at publication. The new e2e ordering fix proves server acceptance separately from the optimistic label. Standard Tag sidebar mouse/shortcut inline Rename, real progress and completion have screenshots at every required width and theme. **Decisions** No new product design was introduced. Conflict resolution retains both sides: production repair protection and error mapping, bounded Tag publication/quota errors, Notes focus behavior, the Tags 0007 receipt, and both performance profiles. The upgrade fixture is indexed by the actual production binary before its bytes are snapshotted, because production can add its established metadata. The streaming chunk is heap-backed to bound nested async frame size. The e2e wait separates optimistic projection from durable receipt persistence. These follow existing DESIGN §§2,31,59 invariants. **Evidence and cleanup** [Review archive: 36 actual-size Mac-emulated captures, verbatim gate logs and all probe/production-comparison logs](https://git.kayg.org/attachments/8e72738c-1717-445b-9eca-3250555c5018). Tags include mouse and shortcut inline rename, pending sidebar progress and completion at 390, 820 and 1440 px in light/dark. Notes include pointer and ArrowDown at all three widths/themes. The captures use real fixture data on the production SPA with matching server/web build identities; no update toast is present. The orchestrator owns visual review. No Mac VM session or lock was used. Doc comments for the merge fixes and upgrade probe were re-read. Screenshots were not committed. cargo clean completed and removed 31.3 GiB; web build output, own temporary fixtures and copied production binary were deleted. The worktree is clean. No issue was closed. **Files** The complete merged file list is also in changed-files.txt in the archive: ``` apps/web/e2e/tag-rewrite-1186.mjs apps/web/src/lib/a11y/inputModality.test.ts apps/web/src/lib/calendar/TimeGrid.svelte.test.ts apps/web/src/lib/components/ItemActionMenu.svelte apps/web/src/lib/components/TagRow.svelte apps/web/src/lib/components/TagRow.svelte.test.ts apps/web/src/lib/components/app-sidebar.svelte apps/web/src/lib/notes/NotesExplorer.svelte apps/web/src/lib/notes/NotesExplorer.svelte.test.ts apps/web/src/lib/stores/tagRewrite.svelte.test.ts apps/web/src/lib/stores/tagRewrite.svelte.ts apps/web/src/routes/tag/[tag]/+page.svelte apps/web/src/routes/tags/+page.svelte bench/interaction-audit-1493.mjs bench/tag-rewrite-1186-browser.mjs bench/tag-rewrite-1186-controller.py bench/tag-rewrite-1186-fixture.py bench/tag-rewrite-1186-paired.sh bench/tag-rewrite-1186.py contracts/perf/adoption-1058.json contracts/perf/exceptions.json contracts/perf/ratchet.json contracts/perf/registry.json crates/calternal-collab/src/session.rs crates/calternal-fs/src/journal.rs crates/calternal-fs/src/lib.rs crates/calternal-fs/src/quota.rs crates/calternal-fs/src/root.rs crates/calternal-fs/src/versions.rs crates/calternal-fs/src/write.rs crates/calternal-fs/tests/storage.rs crates/calternal-server/src/upgrade_tests.rs crates/calternal-tags/examples/tag_rewrite_1186_seed.rs crates/calternal-tags/migrations/0007_tag_rewrite_acceptance.sql crates/calternal-tags/src/index.rs crates/calternal-tags/src/lib.rs crates/calternal-tags/src/rewrite.rs crates/calternal-tags/src/source.rs crates/plugins/notes/src/lib.rs crates/plugins/notes/src/store.rs docs/DESIGN.md docs/perf/2026-10-07-tag-rewrite-1186.md docs/perf/2026-10-08-tagfast2-1186.md docs/perf/2026-10-09-tagfix5-1501.md docs/perf/2026-10-09-tagperf4-1186.md docs/perf/baseline.json docs/perf/runs/tag-rewrite-1186-idle-merged.json docs/perf/runs/tag-rewrite-1186-round10.json docs/perf/runs/tag-rewrite-1186-round11.json docs/perf/runs/tag-rewrite-1186-round12.json docs/perf/runs/tag-rewrite-1186-tagfast2-final-round.json docs/perf/runs/tag-rewrite-1186-tagfast2-first-round.json docs/perf/runs/tag-rewrite-1186-tagfix5.json docs/perf/runs/tag-rewrite-1186-tagperf4-mac.json docs/perf/runs/tag-rewrite-1186-tagperf4.json packages/ui/src/components/calendar/TimeGrid.svelte packages/ui/src/components/menu/FloatingSurface.svelte packages/ui/src/components/menu/Menu.svelte tests/adversarial/merge36_upgrade.py tests/adversarial/tag-rewrite-cross-user-1501.mjs tests/adversarial/tag-rewrite-failure-1186.mjs tests/adversarial/tag-rewrite-fixture-1186.mjs tests/adversarial/tag-rewrite-quota-1186.mjs ``` READY dbd621434d0a1133f16230cca5c6a83af0d8aed3
Author
Owner

Deployed to calternal.cloud in merge round 36 (build dbd621434, live 2026-10-10 ~14:40 IST). Closing.

Deployed to calternal.cloud in merge round 36 (build dbd621434, live 2026-10-10 ~14:40 IST). Closing.
kayg closed this issue 2026-10-10 09:14:55 +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#1526
No description provided.