Repository navigation
Approvals: a sheet's "Needs you" notification goes with its sheet line - #282
Merged
Merged
Conversation
This was referenced Oct 2, 2026
Each approval sheet posts a notification, "Needs you: Calendar · calendar.remove_event / Calendar's agent asks. Open the sheet to approve or deny." (a desktop toast, a phone shade notification). It stayed after the sheet's Stop had withdrawn the sheet (instrument run, S11, frame 35): the toast until its lifetime ran out, the shade's until the person cleared it, both pointing at a sheet that was gone. Nothing linked a notification to its request. The router's notice now names the request it asks about (Notice::request, set for the sheet's notice only). The shell records where it showed such a notice (approvals::RequestNotices) and, on every approvals change, withdraws the toast and the shade notification of each request that no longer waits: stopped, answered on the sheet, withdrawn because its turn ended, or expired. Other notices, the expiry's own "Expired: …" among them, stay as they were. Tests: approvals (each way a line leaves its sheet withdraws its notification once; the expiry notice stands on its own). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ymote
force-pushed
the
fix/approval-toast-withdrawn
branch
from
October 2, 2026 18:53
203114c to
f6ec4a0
Compare
Contributor
Author
|
Local CI passed on f6ec4a0 ( GitHub would run for this PR: desktop.yml, phone.yml, apps.yml. Merged on this local pass (macOS runner queue); GitHub CI runs on the merge commit on main.
Skipped (these did NOT pass; (!) marks a skip that blocks tools/ci-local-merge.sh):
Notes:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A headless instrument run of the desktop shell (main f52620c, scenario S11, frame 35) found a stale approval toast. "Needs you: Calendar · calendar.remove_event … Open the sheet to approve or deny." stayed up after the sheet's Stop had withdrawn the sheet. It pointed at a sheet that was gone. The phone shade's copy of that notification stays until the person clears it.
Cause. Every sheet line posts a "Needs you" notice (
Router::surface), which the shell shows as a desktop toast and a phone shade notification (App::notify). Nothing linked that notification to its request, so stopping, answering, withdrawing or expiring the line left it up.Fix.
Notice::request). It is set only for the sheet's "Needs you" notice.approvals::RequestNotices: the toast id and the shade notification id).approvals: <id> no longer waits; its notification is withdrawn.Tests (Linux build host, from
phone/; this branch alone):cargo test --locked --features mobile-apps -p octosense-shell approvals: 59 passed, including the newa_sheets_notification_is_withdrawn_with_its_line. It covers Stop, an answer on the sheet, the turn's own end and the deadline. Each notification is withdrawn once, and the expiry's own notice stands alone.… app_chat: 9 passed.… system_chat: 65 passed.… questions: 9 passed.phone.ymlruns it (cargo test --locked --features mobile-apps -p octosense-shell, withOCTOS_SHELL_TEST_KERNEL): 776 passed in 2 of 4 runs. The other 2 runs each failed one test,apps::tests::bundled_apps_open_without_catalog_files_or_child_processes.glance_cardtile tests register test apps (os.glancetile,os.glancequiet, …) that the catalog test then sees.Instrument (the same harness, on the Linux build host; before = main, after = this branch):
approvals: the person stopped os.calendar's agent (2 turn(s))). The "Needs you" toast (id 3) stayed in the stack until its own lifetime ran out, and frame 35 shows it 2 s after Stop.approvals: hostappr:… no longer waits; its notification is withdrawn. The stack's next layout isnotifications: 1 toast(s) 2@…: toast 3 is gone. Only "Mail · Hello" stays, the glance card's toast from S10, which Glance: a card's toast always shows; cards and the panel close #273 now always shows (frame 35).Overlap. This branch is on main 4f73ab3, after #272, #273 and #274 merged; the rebase had no conflicts. #273 is the nearest. It changed how toasts stack (
notifications.rs,keep_clear_of) andlib.rsglance_notify, a few lines belownotify, which this PR splits intonotify_shownandwithdraw_notification. This PR removes toasts through the existingShellNotifications::dismiss. The open #230 (Router::withdraw) and #255 (Router::answer) edit other hunks ofrouter.rs; both merge with this branch cleanly. The four fixes from the same run are independent, and each pair merges without conflicts: this one, #279, #280 and #281.🤖 Generated with Claude Code