Skip to content

feat(channels): remove DMs from the sidebar - #157

Merged
klopez4212 merged 9 commits into
mainfrom
kennylopez-hide-dms-pr138
Sep 23, 2026
Merged

klopez4212 merged 9 commits into
mainfrom
kennylopez-hide-dms-pr138

Conversation

@klopez4212

@klopez4212 klopez4212 commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Add a hover X that removes a DM from the local sidebar without deleting the conversation.
  • Restore a removed DM on a new live incoming message or confirmed outgoing send, and check recent history when the app reopens.
  • Keep unread indicators in place and match the row and X hover timing.

Offline boundary

Removal stays immediate. If the app closes before the first history snapshot finishes, a message received while closed that sorts behind the previous head may remain hidden until later verified activity. This is the chosen behavior for this version.

Validation

  • Conflict resolution: TypeScript, 25 focused unit tests, and 14 Chromium/WebKit browser tests passed.
  • Pre-push checks: 862 related unit tests and design checks passed.
  • Exact-head hosted CI passed at bbb96c0, including JavaScript, Rust and tool integration, browser measurements, Chromium/WebKit journeys, and DCO. Windows native validation was skipped.

@klopez4212
klopez4212 requested review from a team, comp615 and wesbillman as code owners September 23, 2026 09:28
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 23, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-09-23T16:20:55.207270Z 8698dd8 New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 77d8ffdf43

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/bundled/channels/useHiddenDms.ts Outdated
Comment thread tests/browser/sidebar-unread.spec.mjs
@klopez4212
klopez4212 force-pushed the kennylopez-hide-dms-pr138 branch from 77d8ffd to ef738e3 Compare September 23, 2026 12:42

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ef738e3cd9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/bundled/channels/useHiddenDms.ts
Comment thread src/bundled/channels/useHiddenDms.ts Outdated
@klopez4212
klopez4212 force-pushed the kennylopez-hide-dms-pr138 branch from ef738e3 to 6b72d0a Compare September 23, 2026 12:49

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6b72d0a4dd

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/bundled/channels/useHiddenDms.ts Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4b55dc2ccc

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/bundled/channels/useHiddenDms.ts Outdated
Comment thread src/bundled/channels/useHiddenDms.ts
Comment thread src/bundled/channels/useHiddenDms.ts Outdated
Comment thread src/bundled/channels/ChannelSidebarRow.tsx Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: dd1d78b0fb

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/bundled/channels/useHiddenDms.ts Outdated
Comment thread src/bundled/channels/useHiddenDms.ts Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 8a0b637c4a

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/bundled/channels/ChannelSidebarRow.tsx Outdated
@klopez4212
klopez4212 force-pushed the kennylopez-channel-creation branch from cfaefce to d820533 Compare September 23, 2026 13:51

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a692d3247d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/bundled/channels/useHiddenDms.ts
Comment thread src/bundled/channels/useHiddenDms.ts
@klopez4212
klopez4212 force-pushed the kennylopez-hide-dms-pr138 branch from a692d32 to e4ab060 Compare September 23, 2026 13:57

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e4ab060e1b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/bundled/channels/useHiddenDms.ts
@klopez4212
klopez4212 force-pushed the kennylopez-channel-creation branch from d820533 to 39cc184 Compare September 23, 2026 14:12
@klopez4212
klopez4212 force-pushed the kennylopez-hide-dms-pr138 branch from e4ab060 to f021088 Compare September 23, 2026 14:13

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f0210884b4

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/bundled/channels/useHiddenDms.ts
Base automatically changed from kennylopez-channel-creation to main September 23, 2026 14:26
Signed-off-by: klopez4212 <klopez4212@gmail.com>
Signed-off-by: klopez4212 <klopez4212@gmail.com>
Signed-off-by: klopez4212 <klopez4212@gmail.com>
Signed-off-by: klopez4212 <klopez4212@gmail.com>
Signed-off-by: klopez4212 <klopez4212@gmail.com>
Signed-off-by: klopez4212 <klopez4212@gmail.com>
@klopez4212
klopez4212 force-pushed the kennylopez-hide-dms-pr138 branch from f021088 to 225dfec Compare September 23, 2026 14:29

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 225dfecf94

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/bundled/channels/useHiddenDms.ts
Comment thread src/bundled/channels/useHiddenDms.ts Outdated

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Carl, an automated reviewer, commenting via Wes’s GitHub account.

Changes requested at 225dfecf. One concrete restoration bug remains; the UI/navigation and scope-isolation review found no additional material blocker.

  • Fix: preserve outgoing restoration across baseline enrichment, as detailed in the existing finding. Exit criterion: a gated intent → enrichment → delivery regression passes without relying on head advancement, while a later explicit hide still wins.
  • Scope decision, not a protocol-redesign request: the acknowledged incomplete-baseline offline boundary remains. Obtain product acceptance and document bounded offline restoration, or agree on a conservative fallback; the current summary promises more than this case supports.
  • Validation: hosted CI is green for this head, including JavaScript and Chromium/WebKit journeys; Windows native was skipped. Source review only locally, no deployed-relay/native acceptance. All six actual PR commits have DCO trailers, so the prior missing-trailer warnings are not carried forward.

Signed-off-by: klopez4212 <klopez4212@gmail.com>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 34e9b11d13

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

}
})();
return () => controller.abort();
}, [hiddenKey, session, dmRosterKey, show, update]);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Recheck hidden DMs after connection recovery

When connectivity drops after this effect's initial read, an offline message that sorts behind the saved head is delivered during catch-up rather than through subscribeIncoming (the session only emits incoming notifications for provenance.phase === "live"), while the unread subscription still sees the unchanged head. Since none of these dependencies changes on disconnect/reconnect, the history window is never reread and the DM remains hidden until a remount, roster change, or later live message. Fresh evidence beyond the earlier transient-read retry is that the retries here cover only the initial invocation and no connection-recovery generation retriggers it.

AGENTS.md reference: AGENTS.md:L78-L80

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Carl, an automated reviewer, commenting via Wes’s GitHub account.

Accurate lifecycle limitation at 34e9b11d, but non-blocking for the now-documented scope: new live incoming messages, confirmed outgoing sends, and bounded history checks on reopen. This does not promise reconciliation on every in-place transport recovery.

The distinction is real: transport recovery updates the existing session (session.ts:1378–1444), while the outer relay service generation changes only on session replacement (service.ts:52–58,67–108). Roster refresh preserves an already-ready list (store.ts:791–814), so unchanged DM IDs do not retrigger this effect. Replay is excluded by session.ts:1288–1306; an older-sorting arrival can therefore remain hidden until remount, a relevant roster transition, or later qualifying activity.

Follow-up if reconnect recovery becomes required: observe the existing recovery lifecycle and repeat the bounded read, with a focused unchanged-head regression. No new protocol or delivery subsystem is needed. Source-traced; no local reconnect reproduction was run.

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Carl, an automated reviewer, commenting via Wes’s GitHub account.

Approved at 34e9b11d135aa44875a2fee8190f79d8bb28daf2 against base fdc8a71ede5ead71125d656118ff44fbbee152f8. The prior requested changes are satisfied; no remaining blocker within the documented contract.

  • The stable hide generation fixes outgoing restoration across baseline enrichment, while a later explicit hide still wins. Both interleavings have deterministic gated regression coverage. The immediate-removal/incomplete-baseline offline boundary is now explicitly documented by the author.
  • The new reconnect observation is a non-blocking scope limitation, not silently dismissed. Lifecycle analysis and follow-up.
  • Exact-head hosted CI passed, including JavaScript, Rust/tools, Chromium/WebKit journeys, measurements and DCO. Local validation was source/diff review only; no local suite, live-relay or native acceptance run. Windows native CI was skipped.

This supersedes my previous changes-requested verdict. Approval is not a merge action.

@wesbillman

Copy link
Copy Markdown
Collaborator

@klopez4212 do we want those assets that were added to this PR

Signed-off-by: klopez4212 <klopez4212@gmail.com>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 8698dd8e06

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +200 to +203
const ids = events.map((event) => event.id);
const changed =
entry.knownIds &&
ids.some((eventId) => !entry.knownIds?.includes(eventId));

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Exclude unconfirmed outbox entries from restoration

When this check runs after a restart while an outgoing DM is still pending or failed, session.read() merges matching local outbox records into its result (session.ts lines 1013–1022). This comparison treats those local IDs as new history and restores the row even though delivery was never confirmed, bypassing the observeSend path that deliberately waits for a receipt or verified echo. Filter local projections (which carry delivery) out of the saved and compared history IDs so failed sends cannot resurface a hidden DM.

AGENTS.md reference: AGENTS.md:L78-L85

Useful? React with 👍 / 👎.

Signed-off-by: klopez4212 <klopez4212@gmail.com>
@klopez4212
klopez4212 merged commit 7f1efc3 into main Sep 23, 2026
12 checks passed
@klopez4212
klopez4212 deleted the kennylopez-hide-dms-pr138 branch September 23, 2026 17:01
zrmarley added a commit that referenced this pull request Sep 23, 2026
…search-send

* origin/main:
  Connect attachments to existing message delivery (#176)
  perf: preserve unchanged thread row identities (#171)
  perf: cache markdown preparation by content (#172)
  Add safe attachment upload groundwork (#150)
  feat: add sampling profiler launch modes (#148)
  feat(channels): remove DMs from the sidebar (#157)
  Distinguish namesake agents and selected recipients (#142)
  feat(channels): move diagnostics into Channel Settings (#163)
  Replace warning banners with shared Base UI toasts (#164)
  feat(shortcuts): add keyboard shortcut settings (#155)
  fix(channels): give floating unread cue an opaque panel surface (#153)
  feat(communities): add BUZZ_DEV_OPEN_RELAY to open the default relay on fresh dev ports (#151)
  Restore recipient avatars beside the composer mention tool (#162)
  Fix startup inventory duplication and late panel scroll shifts (#160)
  feat(channels): add channel creation (#138)
  Standardize Button and IconButton with Buzz design tokens (#145)

Signed-off-by: Zach Marley <zmarley@squareup.com>
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.

2 participants