Repository navigation
feat(status): offer don't clear for every status - #3515
Merged
Merged
Conversation
the duration menu only listed "don't clear" when the current status already had no expiry, so a new or expiring status could not be made permanent. list it for every status; saving it omits expiresAt. Co-Authored-By: Claude Opus 5.5 <[email protected]> Signed-off-by: Kalvin Chau <[email protected]>
kalvinnchau
marked this pull request as ready for review
November 13, 2026 22:11
wesbillman
reviewed
Nov 13, 2026
wesbillman
left a comment
Collaborator
There was a problem hiding this comment.
Carl, an automated reviewer, commenting via Wes’s GitHub account.
Verdict: no blockers. Not approving; that stays a human call.
- The newly reachable case (an existing status with a deadline, switched to "Don’t clear") is sound:
duration === "never"short-circuitsexpiresAttoundefinedbefore the keep-current-deadline branch, anduser-status.tssigns a full replacement event with noexpirationtag, so the old expiry does not carry over. - The new test drives the same branch, so I don't think a second test for the deadline case is needed.
- Product note for whoever merges: the original status feature (#228) hid "Don’t clear" unless the status already had no expiry. Its PR doesn't say why. This change deliberately reverses that, which looks right to me, but it's a behavior decision, not just a bug fix.
Merge criteria: the CI jobs still pending at head 42877ffe (Rust and tool integration, chromium 7/9, Vitest flake check) go green.
wesbillman
approved these changes
Nov 13, 2026
philazar
added a commit
that referenced
this pull request
Nov 13, 2026
…ve-client * origin/main: feat(solo): smooth chat recency reordering (#3502) Reject self-mentions that cannot wake another session (#3513) feat(status): offer don't clear for every status (#3515) Let plugin panels name their tab with panels.useTabTitle (#3251) fix(agents): report a conversation wake that fails before its turn starts (#2192) fix(usage): read Claude transcripts over 50 MB a page at a time (#3498) feat(agents): preview where interrupted agents were working before resume (#3494) perf(messages): close the editor and delete dialog on submit (#3493) feat(messages): quote selected message text into the composer (#2392) perf(toast): scope docked clearance to the toast host (#3489) fix(unread): undo exact captured ordinary reads conditionally (#3473) Signed-off-by: Philip Azar <[email protected]>
wpfleger96
added a commit
that referenced
this pull request
Nov 14, 2026
…y-unreads * origin/main: (24 commits) [1/2] feat(agents): add a recommended agent setup (core) (#3344) test(browser): survive the live-stream restart a page-clock jump causes (#3442) chore(renovate): hold rusqlite below 0.41 for mesh-llm (#3438) test(browser): serve the diffs and CLI reload fixtures outside the navigation budget (#3445) test(browser): play the draft clip at rate 0 instead of looping it before the Play click (#3446) fix(status): reopen a status whose preset deadlines coincide as Today (#3449) fix(messages): tolerate a cancelled reaction-name chunk load (#3450) fix(pairing): tolerate /proc/net/tcp rows printed twice or missed (#3451) test(browser): wait on the signal each test asserts in local-agent-activity and message-navigation (#3444) Expose native channel headings to Solo sources (#3523) test(browser-host): run the 100,000-channel broker scale check alone in the measurements lane (#3447) fix(solo): keep every contributed destination action (#3516) fix(identity): report an issuer that keeps rate-limiting an agent as a limit (#2365) fix(identity): let a stuck at-launch sign-in copy its link (#2453) fix(profiles): open avatar previews on hover in compact density (#3510) feat(solo): smooth chat recency reordering (#3502) Reject self-mentions that cannot wake another session (#3513) feat(status): offer don't clear for every status (#3515) Let plugin panels name their tab with panels.useTabTitle (#3251) fix(agents): report a conversation wake that fails before its turn starts (#2192) ... # Conflicts: # tests/browser/message-management.spec.mjs
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.
Problem
The status duration menu showed "Don’t clear" only when the current status already had no expiry. A new status, or one with a deadline, could not be set to persist.
Change
StatusEditorlists every entry instatusDurations, including "Don’t clear". Choosing it saves withoutexpiresAt(existingduration === "never"path insubmit).Evidence
bin/pnpm exec vitest run src/features/user-status: 29/29 pass, including a new test that picks "Don’t clear" for a new status and assertssavegets noexpiresAt; the existing quick-choice test now asserts the option is offered.bin/pnpm checkpasses.🤖 Generated with Claude Code