feat(web): shared rows swipe to Remove me, and have their menu again #1041
Open
kayg
wants to merge 4 commits from
fix/shared-row-swipes into dev
pull from: fix/shared-row-swipes
merge into: kayg:dev
kayg:main
kayg:feat/style-sheet-fixes
kayg:storage/wal-checkpoint-off-save-1051
kayg:t3/paged-search-reconcile-final
kayg:feat/pass8
kayg:review/calendar-2
kayg:feat/contrast
kayg:dev
kayg:feat/collections-db
kayg:fix/instant-keys-1056
kayg:feat/money-round
kayg:perf/stalls-1054
kayg:wip/tiering-v3-cold4
kayg:wip/tiering-v3-cold5
kayg:port/rows-actions
kayg:port/rows-drop
kayg:port/hidden-blocks
kayg:port/rows
kayg:port/port-tables
kayg:port/port-tables-2
kayg:t3/mail-1011-liveness
kayg:port/devices
kayg:port/port-attachments
kayg:port/port-attachments-2
kayg:port/port-attachments-3
kayg:docs/design-consistency
kayg:docs/engineering-standards
kayg:fix/rusqlite-0.41-rustsec-2026-0459
kayg:feat/iphone-fixes
kayg:shared/restore-and-stale-918-919
kayg:fix/phone-top-band-contrast
kayg:feat/notes-approve
kayg:perf/soak-max-gate
kayg:feat/files-s1-identity
kayg:fix/lifecycle-event-id
kayg:feat/quickfix
kayg:wip/tiering-v3-cold
kayg:perf/web-mockup-frame-fixes
kayg:port/contacts-merge
kayg:port/contacts-edit
kayg:test/shared-room-no-deleted-text
kayg:perf/first-paint-credits
kayg:fix/shared-history-after-grant
kayg:fix/phone-swipe-regressions
kayg:feat/contrast-r1
kayg:review/sharing-pr3-review
kayg:feat/tiering-v3-s2-tags
kayg:feat/folder-drop
kayg:fix/deskpills-lazy-share
kayg:feat/sharing-s1-pr3
kayg:tmp/money-round-before
kayg:fix/phone-pane-backdrop-roots
kayg:fix/palette-preload-chips
kayg:fix/invite-defaults
kayg:port/tasks-matrix
kayg:fix/restore-green-gates
kayg:fix/sharing-fast-path-hardening
kayg:t3/photos-s1
kayg:feat/tiering-v3-s1-namespace
kayg:notes-archive-hide
kayg:feat/tasks-actions
kayg:t3/photos-plan-slice-one
kayg:feat/whiteboard-s1
kayg:t3/paged-search-reconcile
kayg:t3/smooth-pane-transitions
kayg:t3/index-position-startup-scan
kayg:fix/private-staging-759b-r2
kayg:feat/dav-transport
kayg:feat/imap-notes-fetch
kayg:feat/imap-notes-projection
kayg:feat/imap-notes-readonly
kayg:feat/imap-notes-auth
kayg:feat/imap-notes-server-foundation
kayg:docs/undo-block-ids-plan
kayg:fix/undo-768
kayg:proto/block-identity-v7d
kayg:issue/carddav-read-perf-fix-r2
kayg:issue/carddav-read-r2
kayg:docs/imap-766-plan-v2
kayg:docs/imap-notes-plan
kayg:docs/quota-plan-2
kayg:fix/parallel-test-flakes
kayg:feat/contacts-companion-pure
kayg:docs/calendar-backend-v2-plan
kayg:feat/calendar-ical-converter
kayg:docs/tasks-writes-v2-plan
kayg:docs/carddav-writes-v2-plan
kayg:docs/contacts-import-v2-plan
kayg:issue/610-pm-midnight
kayg:feat/calendar-v2-s1-containment
kayg:docs/dav-recorder-v2-plan
kayg:plan/previews-865
kayg:plan/save-log-durable-entry
kayg:fix/e2e-data-on-ram
kayg:feat/appwindow3
kayg:feat/appwindow2
kayg:feat/appwindow
kayg:feat/money-p1
kayg:feat/keys-sheet
kayg:review/calendar-2-themes
kayg:feat/smooth-cursor
kayg:fix/float-style
kayg:review/calendar-2-float
kayg:release/2026-11-06-hotfix
kayg:archive/port/rows-drop-code
kayg:archive/port/rows-actions
kayg:archive/port/rows
kayg:scratch/tasks-894-ui-gates
kayg:review/calendar-2-night-wip
kayg:release/2026-11-05
kayg:archive/feat/tiering-v3-s1-namespace
kayg:archive/flaky/rows-drop-fixed
kayg:archive/flaky/rows-actions
kayg:archive/feat/tiering-v3-reader
kayg:archive/feat/tiering-v3-roots
kayg:archive/flaky/rows
kayg:sim/bm15-final
kayg:sim/bm15-fix
kayg:sim/bm15-bis-932
kayg:sim/bm15-bis-909
kayg:sim/bm15
kayg:sim/bm15-bis-887
kayg:perf/tiering-option-b
kayg:port/style-3
kayg:port/style-2
kayg:port/style
kayg:fix/sw-lazy-precache
kayg:fix/vim-w-waits-for-save
kayg:fix/signout-test-races
kayg:fp-scratch/all
kayg:sim/bm15-first-paint
kayg:archive/bm15/rows-drop
kayg:archive/bm15/rows-actions
kayg:fix/palette-snippet-contrast
kayg:archive/bm15/rows
kayg:archive/bm15/hidden
kayg:archive/plan/save-log-durable-entry
kayg:mock/money-fix2
kayg:archive/fix/e2e-data-on-ram
kayg:mock/appearance-all
kayg:mock/pill-press
kayg:archive/docs/design-consistency
kayg:mock/auto-swipes
kayg:mock/mail-actions
kayg:archive/feat/mail-p1
kayg:mock/money-static
kayg:archive/review/standards-917
kayg:archive/docs/engineering-standards
kayg:perf/tiering-761-fix
kayg:mock/type-audit
kayg:mock/third-pane
kayg:feat/contacts-import-v2-s1
kayg:perf/executor-hot-path
kayg:archive/port/hidden-blocks
kayg:archive/port/devices
kayg:scratch/executor-on-894
kayg:scratch/executor-spans2
kayg:scratch/executor-spans
kayg:train/2026-11-03-bm14c
kayg:archive/port/rows-drop
kayg:feat/tiering-761-d-scale
kayg:feat/tiering-761-c-index
kayg:feat/tiering-761-b-reader
kayg:archive/review/sharing-pr3-review-9fec3d1f
kayg:train/2026-11-03-bm14b
kayg:perf/ports-lazy-budgets
kayg:feat/tiering-761-a-migration
kayg:train/2026-11-03-bm14
kayg:train/2026-11-03-bm12
kayg:archive/review/sharing-pr3-review
kayg:archive/feat/sharing-s1-pr3
kayg:train/2026-11-03-bm11
kayg:archive/feat/imap-notes-fetch
kayg:train/2026-11-03-bm10
kayg:archive/review/sharing-pr3-review-code
kayg:archive/plan/previews-865
kayg:train/2026-11-02-bm9
kayg:archive/port/port-attachments-3
kayg:archive/port/contacts-merge
kayg:fix/motion-audit-859
kayg:train/2026-11-02-bm8
kayg:archive/scratch/bm8-prep
kayg:archive/port/port-pickers
kayg:archive/port/port-tables-2
kayg:archive/port/port-tables
kayg:archive/feat/sharing-s1-pr3-code
kayg:archive/scratch/bm7-fixed
kayg:train/2026-11-02-bm7
kayg:archive/fix/parallel-test-flakes-code-minipc01
kayg:train/2026-11-02-bm6
kayg:docs/imap-766-readonly-slice
kayg:feat/dav-recorder-v3
kayg:research/788-diagnosis
kayg:archive/fix/parallel-test-flakes
kayg:archive/perf/pr792-cold-index-edit
kayg:docs/sharing-slice-1
kayg:archive/docs/imap-766-plan-v2
kayg:feat/dav-recorder-v2
kayg:archive/docs/dav-recorder-v2-plan
kayg:spike/imap-766-s0-cases
kayg:archive/fix/undo-768
kayg:feat/dav-recorder
kayg:archive/docs/contacts-import-v2-plan
kayg:archive/feat/calendar-ical-converter
kayg:feat/contacts-import
kayg:perf/cold-growth-on-764
kayg:perf/cold-growth-on-tiering
kayg:archive/docs/tasks-writes-v2-plan
kayg:archive/docs/calendar-backend-v2-plan
kayg:archive/feat/contacts-companion-pure
kayg:feat/tasks-set-status
kayg:feat/tasks-move-reorder
kayg:archive/docs/carddav-writes-v2-plan
kayg:archive/feat/calendar-v2-s1-containment
kayg:feat/tasks-delete-promote-duplicate
kayg:archive/feat/dav-transport
kayg:archive/fix/carddav-rebuild-r1
kayg:archive/fix/carddav-retention-r1
kayg:feat/carddav-writes
kayg:perf/quota-on-tiering
kayg:perf/quota-simple
kayg:perf/cold-growth-on-quota-stack
kayg:feat/calendar-identity
kayg:feat/calendar-event-parser
kayg:feat/calendar-props-maps
kayg:port/glass-when-ring
kayg:feat/tiering-761-s1
kayg:wip/10by32-01-impl-759b-scratch-20261030
kayg:wip/6by32-01-bm3-webkit-pause-20261030
kayg:wip/10by32-01-bm3-chromium-pause-20261030
kayg:wip/6by32-01-tier-761-s1-pause-20261030
kayg:spike/imap-766-s0
kayg:wip/6by32-02-calternal-pause-20261030
kayg:wip/8by64-01-review-688-pause-20261030
kayg:wip/6by32-01-verify-744-pause-20261030
kayg:wip/6by32-01-verify-742-pause-20261030
kayg:fix/private-staging-759b
kayg:wip/6by32-01-review-748-pause-20261030
kayg:wip/6by32-01-review-733c-pause-20261030
kayg:wip/6by32-01-review-733b-pause-20261030
kayg:wip/6by32-01-perf-idle-8-pause-20261030
kayg:wip/6by32-01-perf767-base-pause-20261030
kayg:wip/6by32-01-perf767b-767-pause-20261030
kayg:wip/6by32-01-perf767b-764-pause-20261030
kayg:wip/6by32-01-perf767-767-pause-20261030
kayg:wip/6by32-01-perf767-764-pause-20261030
kayg:wip/6by32-01-lists-b-pause-20261030
kayg:wip/6by32-01-ids-verify5-pause-20261030
kayg:wip/6by32-01-ids-verify4-pause-20261030
kayg:review/calendar-month
kayg:wip/10by32-02-undo-768-20261030
kayg:test/ids-verify3
kayg:wip/10by32-02-bm3-chromium-20261030
kayg:wip/10by32-01-review-753-20261030
kayg:wip/10by32-01-perf-idle-2-20261030
kayg:wip/10by32-01-bm2-webkit2-20261030
kayg:plan/759b-staging
kayg:train/2026-10-30-bm2
kayg:review/758b-tests
kayg:review/758-tests
kayg:review/764d-tests
kayg:review/767b-tests
kayg:review/preview-2026-10-29
kayg:review/767-tests
kayg:docs/tiering-731-plan
kayg:wip/c6b02-when2
kayg:wip/c6b02-tasks-create-fix5
kayg:wip/c6b02-settings-frost-mock
kayg:wip/c6b02-settings-frost-base
kayg:wip/c6b02-settings-frost
kayg:wip/c6b02-ring
kayg:wip/c6b02-review-733d
kayg:wip/c6b02-bm1-full-a
kayg:wip/compute02-when-field
kayg:wip/compute02-webkit-lists-repro
kayg:wip/compute02-train-bl2-dev
kayg:wip/compute02-dev-green-pw164
kayg:docs/deploy-plan
kayg:review/764c-tests
kayg:review/764b-tests
kayg:review/748g-tests
kayg:review/764-tests
kayg:review/759b-tests
kayg:fix/storage-owner-liveness-642
kayg:fix/storage-fix-7
kayg:wip/compute02-storage-fix-7
kayg:review/759-tests
kayg:feat/tiering-731
kayg:wip/tiering-731-first-attempt
kayg:wip/compute02-storage-fix-1
kayg:review/754g-tests
kayg:perf/idle-honest-2
kayg:review/754f-tests
kayg:review/754e-tests
kayg:review/755-tests
kayg:review/754d-tests
kayg:review/754c-tests
kayg:review/754b-tests
kayg:review/754-tests
kayg:fix/storage-private-tmp-642-dev
kayg:wip/compute02-verify-750
kayg:test/ids-verify5
kayg:test/ids-verify4
kayg:fix/storage-exact-file-quarantine-642
kayg:wip/compute02-verify-740
kayg:perf/one-flush-save
kayg:review/calendar-static
kayg:wip/compute02-verify-737
kayg:review/indexing-ring
kayg:review/when-field-2
kayg:wip/compute02-review-733
kayg:proto/block-identity-2-review
kayg:proto/block-identity-review
kayg:wip/c6b02-tc-design
kayg:review/when-field
kayg:issue/tasks-create-ids
kayg:issue/tasks-create
kayg:review/combined
kayg:wip/compute02-review-combined
kayg:review/task-polish
kayg:review/top-buttons
kayg:review/q1-q5
kayg:train/2026-10-26-bl2
kayg:archive/wt-398h
kayg:archive/train-bm-proptest-seed
kayg:archive/integ325-293
kayg:archive/integ325-ci
kayg:archive/client-auth-review-baseline
kayg:archive/wt-sim-4853
kayg:archive/wt-sim-4811
kayg:archive/wt-448m
kayg:archive/wt-398a-allocator
kayg:issue/calendar-adr
kayg:archive/old/train/2026-10-23bk2
kayg:archive/old/train/2026-10-23bk
kayg:issue/469-mockup-9a
kayg:issue/smart-tasks-mockup
kayg:issue/469-menus
kayg:issue/652-signout-flake
kayg:issue/652-history-fix7
kayg:issue/652-history-fix6
kayg:archive/old/issue/spring-check-perf
kayg:issue/spring-check-perf
kayg:issue/659-rename-fast
kayg:archive/old/train/2026-10-21ar
kayg:issue/search-hardening-3
kayg:issue/652-history-fix5
kayg:issue/660-port-sheets-glass
kayg:issue/652-history-fix4
kayg:issue/652-history-fix3
kayg:issue/652-history-fix2
kayg:issue/652-history-flake
kayg:train/2026-10-21an
kayg:issue/settings-admin-port
kayg:issue/search-port
kayg:train/2026-10-20am
kayg:issue/storage-split-fix2
kayg:issue/storage-split
kayg:archive/old/issue/folder-ids-fix
kayg:train/2026-10-20al
kayg:archive/old/issue/folder-ids
kayg:train/2026-10-20ak
kayg:issue/tables-mockup
kayg:train/2026-10-19aj
kayg:train/2026-10-19ai
kayg:issue/469-merge-fixes
kayg:issue/sidebar-band
kayg:archive/old/issue/608-settings-spec
kayg:train/2026-10-19ah
kayg:issue/swipe-offscreen
kayg:train/2026-10-19ag
kayg:archive/old/issue/590-nlp-adr
kayg:archive/old/issue/587-event-after-write-2
kayg:train/2026-10-19af
kayg:archive/old/issue/587-event-after-write
kayg:issue/469-pill-room-c
kayg:issue/469-pill-room
kayg:train/2026-10-19ae
kayg:issue/469-narrow-handle
kayg:issue/397-ios-swipe-2
kayg:archive/old/issue/adrs-photos-files-tasks
kayg:issue/469-desk-fixes
kayg:archive/old/issue/auto-update-adr
kayg:issue/469-filter-gap
kayg:issue/469-port-1b
kayg:issue/442-opacity-flake
kayg:archive/397-ios-swipe-2
kayg:issue/327-web-fast-3
kayg:archive/old/issue/469-port-1
kayg:issue/469-port-1
kayg:issue/327-web-fast-2
kayg:archive/old/issue/327-web-fast
kayg:archive/old/issue/425-stt-bench-vq1
kayg:archive/old/issue/445-no-bleed
kayg:archive/old/issue/400-swipe-mockup-2
kayg:issue/426-client-review
kayg:issue/426-client-2
kayg:issue/426-client
kayg:archive/old/issue/476-safe-area-lab
kayg:archive/445-top-light-2
kayg:archive/old/issue/445-top-light
kayg:issue/471-blocks-mockup
kayg:archive/old/issue/448-links-app-2
kayg:archive/old/issue/448-links-app
kayg:archive/old/issue/398-cold-links
kayg:issue/434-442-small-2
kayg:issue/434-442-small
kayg:archive/old/issue/398-unload
kayg:archive/old/issue/445-bottom-band
kayg:issue/445-bottom-band
kayg:issue/351-rem-3
kayg:archive/312-views-mockup
kayg:issue/351-rem-2
kayg:issue/351-rem
kayg:archive/old/issue/327-first-note
kayg:issue/395-width-phone
kayg:archive/old/issue/327-typing
kayg:issue/396-ios-edges
kayg:issue/397-ios-swipe
kayg:archive/398-allocator
kayg:archive/old/issue/327-notes-index
kayg:issue/345-347-contrast-empty-2
kayg:archive/old/issue/44-arenas
kayg:issue/44-arenas
kayg:archive/integ325
kayg:archive/old/issue/327-perf-harness
kayg:archive/old/issue/44-thp
kayg:issue/44-thp
kayg:archive/old/issue/285-sticky-pills
kayg:archive/old/issue/44-trim-3
kayg:issue/44-trim-3
kayg:archive/old/issue/165-cards
kayg:archive/old/issue/165-picker-2
kayg:archive/old/issue/212-multi-select
No reviewers
Labels
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set
Reference
kayg/calternal!1041
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/shared-row-swipes"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Swipe actions on every list (kayg 11-08): shared rows had neither a swipe nor a menu. They were drawn outside
RowActions, which also dropped their right-click/hold menu.Change
RowActionsof a new kind,shared:sharing-syncmodule, which has always loaded before a shared row can exist. The first screen only gains thekind/menuprops on the existingRowActionscall.a shared row has row actions: its menu, and a swipe to Remove me(wide screens, trackpad swipe). It checks the menu (no Pin/Delete), swipes, presses Remove me in the tray, and the row leaves the list.Gates (head
c226c4da4)RowActionscall; inside build noise)Nit for review: "Remove me" wraps to two lines in the tray button (screenshot). Keeping the menu's wording; say if you'd rather the tray read "Remove".
🤖 Generated with Claude Code
Shared row swiped (Chromium 1440, 2×):
shared-row-swipe-1440-dark.png

shared-row-swipe-1440-light.png

Test lane result for #1041, head
f0ccc37ed(rebased onto dev9438918f3; the icon-only rule commit66477a1fecontent is in, asc7000fdd9).Seed script:
scripts/sharing-sim-seed.shis on the PR with its usage and what it makes documented in its header. The std runner'stestSwipeandSIM_UDIDwere already in~/Developer/calternal-simand are in its README, so nothing was added.iOS Simulator (iPhone 18 Pro, iOS 27, Safari, own simulator under the std lock):
notes.hide-shared; the share stays), and the code has no Undo for it. I saw none in the sim and none in the code. If an Undo is wanted, that is a small follow-up.--dev-userseed server over plain http with a localhost forward, and may well be that setup, not this PR. Not investigated further.Gates (dev-02, built from the PR head, one
~/bin/sloteach):admin-sharing.spec×2 (--repeat-each=2) on admin-chromium-1440/390 and admin-webkit-1440/390: 37 passed, 4 skipped, 0 failed.swipe-rows,swipe-guard,tasks-swipeon chromium-1440/390 and webkit-1440/390: 113 passed, 31 skipped, 0 failed.E2E_SHOTS, 2x) ofadmin-sharing, light and dark, on the four admin projects: 19 passed each.Shots: sim-* are the iPhone sim, the rest are Playwright (Chromium and WebKit share file names, so WebKit's overwrite Chromium's).
shared-list-1440-dark.png

















shared-list-1440-light.png
shared-list-390-dark.png
shared-list-390-light.png
shared-menu-1440-dark.png
shared-menu-1440-light.png
shared-menu-390-dark.png
shared-menu-390-light.png
shared-row-swipe-1440-dark.png
shared-row-swipe-1440-light.png
sim-list-dark.png
sim-list-light.png
sim-list-menu-light.png
sim-removed-dark.png
sim-removed-light.png
sim-swipe-open-dark.png
sim-swipe-open-light.png
Launch safety for recipients: "Could not save" was a
--dev-userartefact, not a bug on dev.New spec in
admin-sharing(a recipient who can edit is saved: no "Could not save", the words reach the owner live and survive a reload, commitd4577e908): the owner has the note open; a recipient with Can edit types, the page reachesdata-save="saved"with no refusal toast, the owner's open editor shows the words without a reload, the server's copy (notes.get) has them, and after the recipient reloads they are still there with no refusal.Run on plain dev
dd6eebd43(no PR code), real sign-in on the admin projects' https server,--repeat-each=3on admin-chromium-1440, admin-chromium-390, admin-webkit-1440 and admin-webkit-390: 13 passed (12 runs plus admin-setup), 0 failed.The earlier "Could not save" (iPhone sim, seed script) reproduces only on a
--dev-userserver over plain http: the recipient's room join is answeredforbidden, because a recipient's write needs an installation and a--dev-usersession has none (ensure_share_controls_applied). A real sign-in carries one. So recipients are not affected on a real server; the seed script is only good for looking at the list and swipes, not for editing as the recipient.#1041 rebased onto dev
dd6eebd43; gates for the Undo of "Remove me", headd4577e908(dev-01, x86_64; the server binary is dev's, since the PR has no Rust).Undo:
leaveSharedshows a toast "Removed “…” from Shared with me" with Undo, which callsnotes.hide-shared {share_id, hidden: false}(the exact reverse of the hide) and reads the list again. Spec a long swipe on a shared row runs Remove me, and Undo puts the row back: long swipe -> row gone -> toast has Undo -> Undo -> row back -> still there after a reload.swipe-rows,swipe-guard,tasks-swipeon chromium-1440, chromium-390, webkit-1440, webkit-390admin-sharing--repeat-each=2on the 4 admin projects (includes the new Undo spec, desktop projects, and the recipient-edit spec)contrast.spec(projectcontrast)admin-contraston the 4 admin projectsTwo failures, neither from this PR, per the flaky rule:
admin-sharinga shared note catches up after its recipient is offline, admin-webkit-1440: the editor was empty for 5 s once. Alone,--repeat-each=10passes 10/10 on this PR head and 10/10 on devdd6eebd43.admin-contrastaccent buttons are at full strength, admin-webkit-1440:hover()on the invite sheet's Copy chip waits "visible and stable" until the 30 s timeout. This one depends on host load: PR head 3 failed of 21 and dev 0 of 21 in two runs at different loads, then an interleaved run with the host at load 14–28 (a daily train and other agents' jobs were using dev-01): PR 2 failed of 11, dev 4 failed of 11. Dev fails the same way, so it is not this PR; I stopped the comparison after the first pair to stop adding load. It deserves a stability issue (the Copy chip's hover target keeps moving).Not done: the phone Undo toast has not been looked at in the iPhone Simulator (the earlier sim shots are from before Undo existed); the perf VMs and the first-paint budget were not run for this push (the earlier push moved the budgets by +0.2 for the press chunk; the Undo adds one
undoableimport to the lazy sharing module).#1041 status (head
d4577e908): 2 of the 4 required checks are done, 2 are not. Stopped on a usage limit; not READY yet.Done
admin-contrastCopy-chip hover stability, with the load-correlated numbers (dev fails 4/11 at load 21; the PR 2/11 at load 14).Not done
2. First-paint and bundle gate, PR vs dev: the
perf/web.sh --bundle-only --gaterun for the PR head and for its basedd6eebd43was queued behind other jobs on dev-01 and had not produced numbers. I stopped it. No KB figures yet, so no statement about growth.3. Perf (Notes list and shared list p50/p95, perf VM,
~/bin/perf-turn, ABAB ×3): not started on the VM. The PR changes no Rust; I wrote and smoke-tested a server-side probe (notes.list limit 50 and 500, notes.shared-with-me; 2000 notes, 500 shared) but no release binaries were built or relayed and no perf turn was taken, so there are no perf numbers.Left alone, and released: the simulator, its forward, the seed server and its data are deleted; no perf locks, holds or turns were taken; the dev-01 job is stopped.
devis now at4274dafb4(the PR is based ondd6eebd43); a rebase is still needed before merge.sim-dark-toast.png




sim-dark-undo.png
sim-light-toast.png
sim-light-undo.png
test lane update, rebased and pushed: head
5a7fde10e5c18e7d5489fb462ffec5d7566461b6, base dev4274dafb46f03ca23fea1fb76929bb13716af64e.size gate is not green, so this PR cannot be READY. both builds ran on dev-01 through
~/bin/slot nix develop -c bash -c 'PERF_OUT=<scratch>/<pr|dev>-bundle PERF_WORK=<scratch>/<pr|dev>-work bash perf/web.sh --bundle-only --gate'with frozen dependencies.KB below means KiB (bytes / 1024), brotli quality 11, matching the repo gate:
PR gate exit 1:
web.bundle.chunk.index: 222.7490234375 KiB > 222.71. dev gate exit 0. notable lazy chunk changes:press7856 -> 8034 bytes (+178);sharing-sync753 -> 972 (+219). budgets have not been changed by this lane. the branch already carries the earlierpress7.7 -> 7.9 and total 537.55 -> 537.75 increase; this is reported, not treated as approval for growth under the current brief. any growth needs kayg's OK.functional reruns and release binary/fixture preparation are in progress. recovered the previous smoke-tested
/tmp/list-probe.py; will run Notes limit 50/500 and Shared with me through plainperf-turn, with a dev-vs-dev control and ABAB x3. no merge will be performed.perf results for head
5a7fde10e5c18e7d5489fb462ffec5d7566461b6vs dev4274dafb46f03ca23fea1fb76929bb13716af64e.completed the same-session dev-vs-dev control, then ABAB ×3 (12 comparison runs, 6 per label), on perf-01 through plain
~/bin/perf-turn shared-row-1041 timeout 4800 bash <scratch>/run.sh. FIFO waited behindwal1051; no queue jumping. perf-01 and perf-02 locks were held together only during measurement, and both are now released. measurement ended 2026-11-10 21:22:49 IST.backend source identity was checked with
git diff --quiet origin/dev -- crates vendor Cargo.toml Cargo.lock .cargo rust-toolchain.toml. it exits 0. therefore both labels intentionally use the same current-dev release executable, built on dev-01 under~/bin/slot nix develop -c bash -c 'CARGO_TARGET_DIR=<scratch>/target cargo build --release --locked -j4 -p calternal'. binary SHA256 verified on dev-01, control host, and perf-01:12cfdfdebabd891f3cc014bc36bcaf3922861d7a623541c3da12c05f12d00194. staged fixture+probe tar SHA256:eef5ed099c5529886e8c999e12dd10e304006108131f7e00a3edc98ba87d9319.fixture: 2,000 owner notes; 500 shared read-only with Friend; 2,000 Friend notes. each run copies the same stopped fixture, serves as Friend, settles for 3 seconds, validates result counts (50/500/500), warms each action 30 times, then records 300 persistent-loopback HTTP requests per action. percentiles use sorted sample index
int(q*n); the summary below is the median of the six per-run percentiles, not a pooled percentile. timing includes HTTP, server read and JSON decoding; it does not measure browser rendering or the whole Undo interaction.notes.list:{"limit": 50}notes.list:{"limit": 50}notes.list:{"limit": 500}notes.list:{"limit": 500}notes.shared-with-me:{}notes.shared-with-me:{}notes.list:{"limit": 50}notes.list:{"limit": 500}notes.shared-with-me:{}all deltas are reported, including positive ones. no latency allowance or budget was changed. this is a comparison of identical backend code, so it does not establish a PR-specific backend slowdown or speedup. under the strict all-green rule, these numbers are not presented as a blanket green no-regression claim. the bundle/first-paint gate is already red (comment #89640).
probe repair: the recovered probe used fixed port 18931 and its setup connected to an older smoke server on dev-01. that failed setup sent sample seed writes to the old smoke fixture, then failed on
sharing.grant; none of it was measured or reused. the older process was left untouched. the new throwaway probe selects a free port, checks its own process during startup, checks result counts, and stops its own servers infinally. a small fixture smoke passed before the full fresh fixture was staged. one smoke assertion initially usednotesrather than the API'sitemskey; corrected before the full fixture and all perf measurements. no application source changed.exact raw perf results (14 runs)
throwaway probe used for the run
rebase follow-up: dev advanced during the first gate run, from
4274dafb4to581a40460ff9d035d83ff42899be065e2c42fa31(#1061 keyboard-motion fixes). rebased again and pushed headf83dc6bb413d6b22f2125b7ac05efbd218bb4fe3.the old PR commit raising
pressand total JS budgets conflicted with current dev's approved Contacts budget change. to follow the current test brief (do not raise budgets), dropped the old budget-raising commit.git diff --quiet origin/dev -- perf/budgets.jsonnow exits 0: PR budgets exactly equal current dev. no application behavior was changed by this lane.all gates on the first rebased head
5a7fde10epassed except sizes: admin-sharing (repeat 2) 60 passed / 8 skipped, swipe-rows + swipe-guard + tasks-swipe 113 passed / 31 skipped, svelte-check 0 errors / 18 warnings, vitest 24 files / 238 tests passed. those functional results are superseded by fresh frontend reruns now in progress forf83dc6bb4against581a40460(all requested specs, both engines, both widths; one repeat, as requested).completed perf evidence is in comment #89764.
git diff --quiet 4274dafb4 581a40460 -- crates vendor Cargo.toml Cargo.lock .cargo rust-toolchain.tomlalso exits 0, and the PR has no backend delta. the existing identical-backend, same-session ABAB x3 experiment therefore applies to both updated labels; no second perf turn is needed for the frontend-only rebase. both perf locks/units have been released and large fixtures/binaries on perf-01 and the relay host removed. fresh first-paint and bundle numbers will replace #89640's numbers in the final gate table.View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.Merge
Merge the changes and update on Forgejo.Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.