Skip to content

Add conditional undo for explicit reads - #3291

Merged
kazemek21 merged 1 commit into
mainfrom
kylez_NEXUS-4488_undo_explicit_read
Nov 12, 2026
Merged

kazemek21 merged 1 commit into
mainfrom
kylez_NEXUS-4488_undo_explicit_read

Conversation

@kazemek21

@kazemek21 kazemek21 commented Nov 11, 2026 •

Copy link
Copy Markdown
Contributor

TL;DR

This supports retained readers that need to undo an explicit read action without overwriting newer unread intent. It offers Undo only for saved local-unread markers removed by that action.

How

Undo checks the current journal revision inside the storage transaction and revalidates access, visit, and captured-message evidence. It restores only markers removed by that exact saved action.

Boundary and risk

Undo never restores forced-message overlays or rewinds or publishes read frontiers. Results omit Undo if the completed read also cleared forced-message overlays, or if force work was queued while the read saved.

The handle expires after any later journal save, even if unrelated or quiet. This whole-journal lifetime is deliberately conservative. Older hosts may omit the optional handle.

Related PRs

This change is independent of #3264, #2918, #2939, #1666, and #2956.

Generated with Codex (gpt-6-luna) on behalf of kylez

@kazemek21
kazemek21 force-pushed the kylez_NEXUS-4488_undo_explicit_read branch from 9d47714 to 89b7f44 Compare November 11, 2026 21:15
@kazemek21
kazemek21 marked this pull request as ready for review November 11, 2026 22:02
@kazemek21
kazemek21 requested a review from a team as a code owner November 11, 2026 22:02

@kalvinnchau kalvinnchau left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Two P3 maintainability and regression-coverage findings. No functional or security defect demonstrated.

Comment thread src/features/relay/read-state.ts Resolved
Comment thread src/features/relay/read-state.ts Resolved
Co-authored-by: Codex (gpt-6-luna) <noreply@openai.com>
Signed-off-by: Kyle Zemek <kylez@squareup.com>
Co-authored-by: Codex (gpt-6.1-sol) <noreply@openai.com>
@kazemek21
kazemek21 force-pushed the kylez_NEXUS-4488_undo_explicit_read branch from 89b7f44 to e5d39bd Compare November 11, 2026 22:43
@dr0uleau
dr0uleau requested a review from a team November 11, 2026 23:07

@dr0uleau dr0uleau left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 approved at e5d39bd

@gilgtm gilgtm left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 No P0/P1 findings in the deep-dual review of e5d39bd.

Posted by duel-review skill [driver: codex(high), mode: deep-dual, review synthesized by codex(high)]

@kazemek21
kazemek21 merged commit 2c09b6f into main Nov 12, 2026
72 checks passed
@kazemek21
kazemek21 deleted the kylez_NEXUS-4488_undo_explicit_read branch November 12, 2026 00:05
joahg added a commit to joahg/buzz-app that referenced this pull request Nov 12, 2026
* origin/main: (38 commits)
  Fix reminder counts with compact dock corner tabs (block#3126)
  Add conditional undo for explicit reads (block#3291)
  fix(composer): edit channel links as atomic chips (block#3312)
  fix(agents): show remote instruction limit (block#3325)
  NEXUS-4033: Offer session skills in the core task composer (block#2790)
  feat(github): name pasted repository and commit links (block#3268)
  Let plugins give standing instructions to every agent turn (block#3285)
  fix(relay): read a channel's creation once, not per metadata version (block#3244)
  fix(messages): remove unconfirmed sends from this device (block#3317)
  fix: expose proven non-delivery for artifacts (block#3300)
  feat(plugins): let plugins mark a person's name in @mention suggestions (block#3260)
  fix(mcp): strip metadata from images agents attach (block#3311)
  fix(identity): name a linked key that isn't here, and keep Restore after a failed backup check (block#3238)
  feat(changesets): show the files a local agent changed on its reply (block#3214)
  fix(identity): show a backed-up key as backed up, and drop dead retries (block#3223)
  fix(browser): open Builderlab account connections in the system browser (block#3287)
  Expose exact captured-message reads (block#3264)
  docs(agents): keep internal discussion out of public repo content (block#3258)
  fix(identity): clear a copied private key, name restore failures, fix storage copy (block#3236)
  fix(channels): list workspaces that load after `#` opens (block#3277)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants