Skip to content

feat(channels): suggest joined channels in the composer - #446

Merged
wesbillman merged 1 commit into
mainfrom
carl/channel-autocomplete
Sep 30, 2026
Merged

wesbillman merged 1 commit into
mainfrom
carl/channel-autocomplete

Conversation

@wesbillman

@wesbillman wesbillman commented Sep 30, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Add #channel suggestions through the Channels plugin and the existing composer completion host. The plugin owns channel eligibility, filtering, ranking and insertion; the host retains editor transactions, keyboard/IME handling, focus, positioning and stale-result protection. No new public plugin API or relay endpoint.

  • Suggest up to 20 confirmed joined stream/forum channels, including private channels. Exclude archived, cached, read-only and unnamed/multiline entries; qualify duplicate names by ID and recheck eligibility/name on selection.
  • Insert an escaped, stable-ID Markdown link, not notification recipients. Suppress suggestions inside code, existing links/images and HTML. Empty ready results hide the menu so ordinary PR #1234 + Enter sends.
  • Filter the existing local channel list without typing-driven network reads. The syntax matcher examines at most 160 characters; the extra prose-context scan runs only after a channel trigger matches.

Validation

Checked clean head 83ee83921636a9083e74715ee60809d12c6e4f0d, rebased onto 59e87ce5. The feature patch is unchanged from the independently reviewed f6096600 (git range-diff equality).

  • bin/pnpm exec vitest run: 451 files, 5,480 tests passed. The earlier run on the old base failed one profile-menu focus assertion; the upstream fix waits for focus, and the complete suite passes after rebase. No unrelated feature-branch fix added.
  • Actual pre-push hooks passed: TypeScript, 35 related files / 525 tests, design TypeScript and all design guards. Clippy correctly skipped this JS/CSS-only patch. Biome checked all 10 changed supported files with no warnings; diff check clean.
  • bin/pnpm test:browser channel-completion.spec.mjs mentions.spec.mjs --project chromium --project webkit --no-deps: 10/10 passed. Covers real editor selection/undo, focus, portal and narrow-screen geometry, restored drafts, signed channel/thread content without recipient tags, formatted acceptance, no-match sending, and existing mention journeys.
  • Independent agent review found no remaining blockers. The initial local slice was also tried successfully by the requesting human.

Test-layer accounting

Added one browser scenario, executed in both engines; removed none. It proves native editing/undo, focus, actual layout and plugin-to-send wiring that jsdom cannot establish. Eligibility, ranking, lifecycle, escaping and prose-context permutations stay in colocated Vitest tests. No tests were moved or replaced. No pre-feature failing browser run was recorded.

Local typing diagnostic

With 1,002 channels and a 10,000-character draft, 48 input-to-next-frame samples per case on the pre-rebase feature tree:

Input Chromium p95, enabled / disabled WebKit p95, enabled / disabled
Active #general 23.5 / 19.7 ms 20 / 20 ms
Ordinary text 21.2 / 21.3 ms 23 / 22 ms

Zero added relay reads were observed. These are local diagnostic measurements, not a zero-cost claim or production latency guarantee; they were not repeated after the patch-preserving rebase.

Remaining gates and known limitation

Draft pending a human recheck of the final review-driven behavior changes, especially no-match sending and formatted insertion. The initial human try preceded those adjustments. To check: type #, select with Enter/Tab, undo, repeat in a thread and bold/italic text, then type a nonmatching PR #1234 and verify Enter sends normally. Confirm private-channel labels and narrow-window placement.

Hosted DCO Check passed at 83ee8392; CI is running. CI and required reviewer/code-owner approval remain merge gates. Native desktop build, the entire browser suite and dedicated channel-link insertion while editing a previously sent message were not exercised locally.

Optional follow-up: if refreshing the channel list has failed and a query has no matches, the shared Retry-only menu captures Enter to retry rather than send. Escape dismisses it. This is documented, not silently treated as fixed.

Signed-off-by: Carl <32a2e2c9d428ee08902cab75d956da2c1d235a22d4766b0dd4138bf6e2e5db1d@buzz.block.builderlab.xyz>
@wesbillman
wesbillman marked this pull request as ready for review September 30, 2026 02:06
@wesbillman
wesbillman requested review from a team and comp615 as code owners September 30, 2026 02:06

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

No actionable source defects found in channel eligibility, stale-selection protection, escaped link insertion, prose-context gating, or composer lifecycle/focus handling.

Star Lord’s automated source review via Wes’s account; head 83ee83921636a9083e74715ee60809d12c6e4f0d, base 59e87ce5de792737a93d335ea345f7d829bc61ac. I executed no PR code or tests; the hosted snapshot shows CI required and DCO successful, but this is not runtime acceptance or approval. The documented final human recheck, native-desktop acceptance and dedicated previously-sent-message editing check remain outstanding; Retry-only Enter behavior remains the disclosed optional follow-up.

@wesbillman
wesbillman merged commit 2b5f2af into main Sep 30, 2026
20 checks passed
@wesbillman
wesbillman deleted the carl/channel-autocomplete branch September 30, 2026 02:50
TheSentinel454 pushed a commit that referenced this pull request Sep 30, 2026
* origin/main: (27 commits)
  Let plugin pages publish NIP-AR artifacts and embed the host thread view (#434)
  test(app): migrate entity-navigation test off removed buzz://open locator API (#463)
  Show agent activity in navigation (#423)
  test(browser): hold motion when it commits, not on its start event (#459)
  fix(navigation): ignore unknown query parameters on Buzz links and remove the buzz://open locator (#457)
  feat(design-system): distinguish controls on floating surfaces (#429)
  feat(native): add community extras and media preparation (#450)
  Clone inventory identities through reviewed text and fresh identity creation (#289)
  feat(communities): add right-click actions to the community rail (#400)
  fix(messages): keep a send reveal pending until its scroll runs (#454)
  fix(messages): reserve a stable scrollbar gutter on the channel feed (#451)
  fix(sidebar): list plugin pages as sidebar rows via an opt-in primary flag (#401)
  feat(channels): surface canvas content in channel settings (#426)
  fix(profiles): remove redundant presence status row (#394)
  test(browser): count live retries once the page handles startup controls (#443)
  feat(composer): host-owned resource links for the Projects picker (#445)
  feat: support native read state and recent channel activity (#444)
  feat(native): serve relay media and uploads in packaged builds (#433)
  feat(channels): suggest joined channels in the composer (#446)
  feat: support native agent activity, library, memories, and community resolution (#441)
  ...

Signed-off-by: Codex <noreply@openai.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.

1 participant