Repository navigation
send queue: list only pending messages; tap a message to see all of it - #391
Merged
Merged
Conversation
Owner
Author
|
Round 0 (requirements & deletion): proceed to the checklist. Ledger: requirements 7 (unattributed 2: the failed-row cap of 20, and the whole-message popover widened to sending/failed rows) · deletion candidates 2 · no open premises. |
Owner
Author
|
Round 1 (nine-axis checklist): 0 🔴, 2 🟡, 3 🟢. No 🔴, so the ladder ends; the 🟡s are fixed un-re-audited. |
…t on tap The Rendered view's queue listed the five most recently finished messages beside the open ones, so sent and cancelled messages piled up and each had to be deleted by hand. PGStore.List now returns the open rows (queued, sending) and the failed rows not yet retried, bounded by FailedShown (the open bound, 20). A sent or cancelled message leaves the list at once; a failure stays until it is retried or deleted, so it never vanishes unseen; a failure already retried is hidden, since its retry row carries it. The Delete route still deletes any finished message. A row's preview is cut at 200 bytes and clamped to two lines. It is now a button (popovertarget, 44px, aria-label) opening a top-layer popover with the whole text and a Close, so it works without script and moves nothing. Every listed row, failed ones included, now carries its whole text. The list's poll skips a redraw while ANY popover in the list is open, so it does not redraw an open message away. Tests: internal/sendqueue TestListShowsOnlyWhatStillNeedsSomething and TestListBoundsTheFailures (red against origin/main's store.go); the UI's TestATapOnAPreviewOpensTheWholeMessage and the API's TestEveryListedRowCarriesItsWholeText (red against origin/main's ui/send_queue.go and api/send_queue.go); existing tests and e2e specs that waited for a sent or cancelled row now wait for the row to leave the list. A new send-queue e2e taps a long queued message, sees its tail, checks no layout shift and that it stays open across a poll (red on origin/main; red with the poll's old popover selector). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Audit round 1 on #391: - Y1: a failed routed message (route_id) or chief nudge (chief_nudge_id) has no Retry and its outcome goes back to the chief, so under the new filter it sat in the list until deleted by hand. List now leaves both out (both columns are NULL on a person's own row); the in-memory fake in internal/api matches. TestListLeavesOutAFailureHandedBackToTheChief: red before the filter change, green after. The e2e specs that made a failure with sqfix 'route' to exercise Delete now use an expired message (a person's own failure); the routed one now asserts it leaves the list. - Y2: TestFailedShownCoversAWholeQueue pins FailedShown >= MaxOpenPerTarget (20), and TestListBoundsTheFailures expects a literal 21 rows. The FailedShown=5 mutant is red in both. - G4: the docs and the store comment no longer say a failure "never disappears": it is listed until retried, deleted, or pruned 7 days after it failed, only the newest 20, and routed/nudge failures not at all. - G5: Copy message reads the row's popover text; the duplicate template is gone. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
ZacxDev
force-pushed
the
fix/send-queue-hide-finished
branch
from
November 1, 2026 16:00
00b5301 to
870d185
Compare
ZacxDev
marked this pull request as ready for review
November 1, 2026 16:27
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.
What
Two changes to the send queue in a mirrored window's Rendered view:
How
sendqueue.PGStore.List: the open rows (queued, sending), plusstate = 'failed' AND retried_as IS NULL, newest first, capped atFailedShown.HistoryShown(5) is replaced byFailedShown, which equalsMaxOpenPerTarget(20), so a whole queue that failed is shown in full. The Delete route is unchanged and still deletes any finished message.ui.sendQueuePreview: apopovertargetbutton (44px tall,aria-label"Show the whole message: …", Enter and Space work natively) and a top-layerpopover(role=dialog) holding the body and a Close button. It works without script and causes no layout shift.menuOpen) now checks every[popover]in the list, not just the row menus and the waiting line. Before this, a poll redraw would have closed an open message.sendQueueListViewnow puts the wholeBodyon every listed row. Before, only queued rows had it. Failed rows get it too: they are the caller's own text under row-level security, and their preview is cut the same way.docs/sending-and-step-up.mdis updated to match.Tests
sendqueueTestListShowsOnlyWhatStillNeedsSomething(queued, sending, sent, cancelled, failed ×2, failed and retried, plus another owner's and another window's failures)sendqueueTestListBoundsTheFailuressendqueueTestRetryQueuesAFailedMessageAgainOnce(updated)uiTestATapOnAPreviewOpensTheWholeMessage#mv-qf-41)uiTestThePollDoesNotRedrawUnderAnOpenWholeMessageapiTestEveryListedRowCarriesItsWholeTextapiTestTheListDrawsDeleteOnAnUnhandledFailureOnly(PG)a tap on a long queued message shows the whole of it…For the red runs, origin/main's
store.go/ui/send_queue.go/api/send_queue.gowere checked out. A temporary shim declared the new constant names so the tests would compile.TestDeleteIsDrawnOnAFailedRowOnly(memQueue) checks that the fake matches the real store's filter and that the view maps rows correctly. It does not catch this regression on its own.Mutation test: putting back the poll's old popover selector turns the e2e red, at
still open after a poll.Results:
go test ./internal/sendqueue/ ./internal/api/ ./internal/ui/with a database (MUSTER_TEST_REQUIRE_DB=1): 3344 PASS, 0 FAIL, 0 SKIP.go vet ./...is clean, andmake css-checkmatches.send-queue.spec.ts: 41/41 passed.attention,composer-menu,cls,mirror-ask: 57/57 passed.🤖 Generated with Claude Code