镜像站点 · 本页由第三方 GitHub 只读镜像提供,非 GitHub 官方站点,不接受任何登录或凭据输入。前往 github.com
Skip to content

feat(conversation): make emoji and mentions built in - #1673

Merged
tellaho merged 4 commits into
mainfrom
tho/builtin-emoji-mentions
Oct 27, 2026
Merged

tellaho merged 4 commits into
mainfrom
tho/builtin-emoji-mentions

Conversation

@tellaho

@tellaho tellaho commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Category: improvement
User Impact: Emoji, reactions, and mentions are always available, without enabling a plugin.

Problem: Emoji and Mentions appear as optional plugins even though they are basic conversation features. Disabling Emoji also removes custom emoji rendering, reactions, and its settings destination.

Solution: Load the existing features through the shared runtime independently of optional settings, and remove their catalog entries while retaining native ID reservations. Saved disabled flags become inert, preserving contribution keys, cleanup, and Custom emoji settings.

Validation

  • Native reservation fix b23c9cac4: the full buzzodz-plugins suite passed all 73 tests on the fix working tree committed unchanged as this revision. New regressions first reproduced three failures on e601bae2b; source-package, prebuilt-artifact, registry, management and reload rejection are now covered for both built-in IDs.
  • Native parity follow-up 4c6f3043e: the existing catalog parity test now compares registered conversation-feature IDs with native reservations. The test passed on the tree committed as this revision, failed with a deliberately added unreserved host feature, and passed after restoration. Documentation-only follow-up 138bf391f updates Mentions ownership and activation-failure wording.
  • Mandatory pre-push checks passed on 138bf391f: TypeScript and related unit tests, design-system checks, and workspace Clippy. The remote branch matches this checked head; hosted CI is running separately.
  • UI evidence at e601bae2b: the built-app disabled-settings journey passes in Chromium and WebKit. Screenshots were captured from this head in headless Chromium using disposable sample data; later changes affect native validation, tests and documentation.
  • The feature patch rebased unchanged onto main 848288b67 (git range-diff reports an equivalent patch). Maintainer app acceptance and the earlier full runs were on the original implementation 58502019f: 11,778 Vitest tests passed (16 skipped), 71 Rust tests passed, and 74 browser checks passed across Chromium/WebKit.
  • The earlier Node integration batch had 228 passed, 3 skipped, and one unrelated macOS launcher-fixture failure: its temporary checkout omits scripts/build-agent-command.mjs. That failure reproduced in isolation; the launcher and failing fixture were outside the original feature diff. The affected native registry-lock test passed.
  • Princess Donut adversarially reviewed e601bae2b, reproduced one native ID-reservation blocker, and checked its resolution at b23c9cac4, rating the change 9/10 with no remaining blocker. The follow-up checked the fix diff and reservation call sites; it did not rerun tests or CI. Release packaging and cross-platform desktop acceptance are deferred; browser screenshots establish browser UI behavior.
  • Known limitation: built-in activation failures have no dedicated catalog status or retry control. A broader failure UI and unused catalog-media cleanup are outside this change.
  • One browser scenario was added, with no cases removed. It verifies rendered app startup, Settings, and composer wiring that lower-layer tests cannot establish. Configuration/recovery and cleanup cases remain in unit/native tests; optional-provider disposal coverage remains in its explicit fixtures.
File changes

src/app/conversation-features.ts
Defines the fixed conversation feature list while preserving existing contribution keys and implementations.

src/app/services.ts
Loads that list as part of app startup.

src/plugins/manager.ts
Keeps fixed contributions active independently of optional catalog storage, while reusing runtime readiness and disposal.

src/bundled/index.ts
Removes Emoji and Mentions from the browser's optional catalog.

crates/plugin-manager/src/lib.rs
Removes the native catalog entries and default flags while keeping both IDs reserved across package, artifact, registry and reload validation, with explicit management rejection. Checks reservation parity against the registered host conversation features.

src/app/services.test.ts
Checks disabled and malformed settings, contribution availability, and cleanup.

src/app/pages.integration.test.mjs
Exercises the real app composition with old disabled flags and verifies that disable attempts preserve the fixed features.

src/plugins/manager.test.ts
Checks fixed contributions while optional storage is pending or in recovery.

src/bundled/discovery.test.ts
Guards the optional catalog boundary.

crates/plugin-manager/tests/management.rs
Checks inert disabled overrides, explicit management/reload rejection, source install reservation and forged registry rejection, while retaining optional-plugin flag coverage.

tests/browser/builtin-conversation.spec.mjs
Verifies both built-in features, Custom emoji settings, catalog removal, and reload through the built app.

tests/browser/conversation.spec.mjs
Checks that rejected disable attempts preserve controls, historic custom emoji, and reactions in the packed consumer using the native manager.

tests/fixtures/conversation.tsx
Uses the fixed features in the native-consumer integration fixture.

tests/fixtures/messages.tsx
Uses the same fixed features in the shared message/composer fixture.

tests/fixtures/mentions.tsx
Explicitly retains optional provider lifetimes for removal and stale-callback regression coverage.

tests/integration/plugin-manager-lock.test.mjs
Uses Links as its optional-plugin toggle, preserving its native lock/recovery assertions.

docs/plugin-architecture.md
Documents the built-in feature policy, inert legacy flags, and retained host behavior if chooser activation fails.

docs/agents.md
Describes the built-in Mentions chooser and preserved host-owned recipient intent.

src/bundled/mentions/README.md
Describes Mentions as a built-in feature.

Reproduction steps

  1. Open Settings → Manage plugins. Emoji and Mentions should have no optional catalog entries.
  2. In a conversation or thread reply, type :smile or @ followed by a name. Suggestions and both picker buttons should remain available.
  3. Open Settings → Custom emoji and check existing custom emoji in messages and reactions.
  4. Restart the app. Both features should remain available, including for a profile that previously disabled them.

Screenshots

Real built browser app at e601bae2b, dark theme with Citrus accent and disposable sample data.

Optional plugin settings Custom emoji settings retained
Optional plugin catalog after making Emoji and Mentions built in Custom emoji remains available in Settings
Emoji completion Mention completion
Emoji suggestions remain available with an old disabled flag Mention suggestions remain available with an old disabled flag

tellaho and others added 2 commits October 26, 2026 16:00
Load Emoji and Mentions independently of optional plugin settings while retaining their contribution keys and shared runtime lifecycle. Remove both catalog entries and preserve custom emoji settings and rendering.

Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Keep Emoji and Mentions reserved across package, artifact, reload and registry validation without restoring optional catalog entries. Reject plugin management actions explicitly and cover both built-in IDs at the native boundaries.

Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
@tellaho
tellaho marked this pull request as ready for review October 26, 2026 23:15
@tellaho
tellaho requested a review from a team as a code owner October 26, 2026 23:15
@tellaho

tellaho commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor Author

🤖 Carl, AI coding agent — requested adversarial review and fix record.

Princess Donut reviewed e601bae2bcd6e139c2eb1a1e90091566c600b857 and reproduced one blocker: removing Emoji/Mentions from the native catalog also removed their ID reservations, allowing packages to claim those IDs. I accepted the finding and fixed it in b23c9cac40cd3a30e96478793e91f8acc049e902.

The fix keeps both IDs reserved independently of catalog membership across source packages, prebuilt artifacts, registry reads and reloads, and explicitly rejects management actions. Both features remain absent from the optional catalog.

Validation: new regressions reproduced three failures on the reviewed head; the full buzzodz-plugins suite then passed all 73 tests on the fix working tree, committed unchanged as b23c9cac4. Mandatory TypeScript/related-unit, design and workspace-Clippy push checks passed on the committed head. Hosted checks for the new head are separate evidence.

Princess Donut subsequently checked e601bae2b..b23c9cac4 and the reservation call sites, confirmed the blocker was resolved without a new defect, and rated the change 9/10.

Limits: the first review covered source and a native install probe, without broad suites or native-app acceptance. The follow-up was a source check of the fix, without rerunning the 73 tests or waiting for CI. Optional activation-failure UI and unused catalog-media cleanup are deferred; the former is documented in the PR body. Generic native rejection wording remains a non-blocking nit.

@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 maintenance/documentation findings; no current functional or security defect established.

Comment thread crates/plugin-manager/src/lib.rs Resolved
Comment thread src/app/conversation-features.ts Resolved
tellaho and others added 2 commits October 26, 2026 16:44
Compare registered host conversation-feature manifest IDs with the native reserved list in the existing catalog parity check.

Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Describe always-loaded Mentions and ignored enablement flags. Preserve host-owned mention intent when chooser activation fails.

Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
@tellaho

tellaho commented Oct 26, 2026

Copy link
Copy Markdown
Contributor Author

🤖 Addressed both follow-ups in 4c6f3043e (native parity coverage) and 138bf391f (Mentions documentation).

  • The existing native catalog parity test now compares registered conversation-feature manifest IDs with BUILT_IN.
  • The agent and architecture guides describe built-in Mentions, ignored enablement flags, and retained host behavior if chooser activation fails.

Validation: cargo test -p buzzodz-plugins native_catalog_matches_desktop_bundles passed on the test tree committed as 4c6f3043e. Adding an unreserved host feature made that check fail; restoring the registration made it pass. 138bf391f adds documentation only. Pre-commit and mandatory push checks passed at the new head; hosted CI remains separate validation. Runtime behavior is unchanged.

Both review threads are resolved. @kalvinnchau

@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.

🤖 Reviewed at 138bf39. Both prior findings are addressed: native reservation parity coverage is added and Mentions ownership documentation is corrected. No new actionable findings. All 73 plugin-manager tests and six Chromium/WebKit app checks passed. Native desktop and real-relay validation remain untested.

@tellaho
tellaho merged commit 511a19f into main Oct 27, 2026
38 checks passed
@tellaho
tellaho deleted the tho/builtin-emoji-mentions branch October 27, 2026 06:29
morgmart added a commit that referenced this pull request Oct 27, 2026
* origin/main: (39 commits)
  fix(github): keep PR action menu trigger in place (#1736)
  fix(goose): preserve default-model focus during pending saves (#1495)
  test(fixtures): reduce polling waits and repeated signing (#1493)
  test(inbox): wait for conversation focus before filtering (#1491)
  fix(desktop): keep the main webview running while it is hidden (#1713)
  chore(release): version desktop previews from 0.7.0 (#1643)
  fix(agent-harness): remove the unavailable-tools line from the base prompt (#1715)
  fix(agents): keep View transcript visible in narrow Pi and goose activity panes (#1717)
  fix(github-plugin): prefix GitHub plugin tools with github_ (#1726)
  perf(agents): load Claude and Codex activity without scanning every session (#1674)
  Improve new DM previews, picker performance, and composer focus (#1664)
  Polish individual message reactions and emoji settings (#1628)
  Improve dark-mode separators and composer contrast (#1711)
  Make decision providers plugins, and move TypeSafe into one (#1353)
  fix(avatars): use static pack portraits in chat (#1670)
  fix(channels): read the open thread when returning to a channel (#1639)
  Add app-wide GIF shortcut and composer previews (#1558)
  Add PR failure/conflict actions and sidebar unlinking (#1599)
  Polish queued follow-up previews and controls (#1554)
  feat(conversation): make emoji and mentions built in (#1673)
  ...

Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.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