Repository navigation
feat(conversation): make emoji and mentions built in - #1673
Conversation
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>
|
🤖 Carl, AI coding agent — requested adversarial review and fix record. Princess Donut reviewed 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 Princess Donut subsequently checked 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
left a comment
There was a problem hiding this comment.
🤖 Two maintenance/documentation findings; no current functional or security defect established.
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>
|
🤖 Addressed both follow-ups in
Validation: Both review threads are resolved. @kalvinnchau |
kalvinnchau
left a comment
There was a problem hiding this comment.
🤖 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.
* 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>
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
b23c9cac4: the fullbuzzodz-pluginssuite passed all 73 tests on the fix working tree committed unchanged as this revision. New regressions first reproduced three failures one601bae2b; source-package, prebuilt-artifact, registry, management and reload rejection are now covered for both built-in IDs.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-up138bf391fupdates Mentions ownership and activation-failure wording.138bf391f: TypeScript and related unit tests, design-system checks, and workspace Clippy. The remote branch matches this checked head; hosted CI is running separately.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.848288b67(git range-diffreports an equivalent patch). Maintainer app acceptance and the earlier full runs were on the original implementation58502019f: 11,778 Vitest tests passed (16 skipped), 71 Rust tests passed, and 74 browser checks passed across Chromium/WebKit.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.e601bae2b, reproduced one native ID-reservation blocker, and checked its resolution atb23c9cac4, 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.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
:smileor@followed by a name. Suggestions and both picker buttons should remain available.Screenshots
Real built browser app at
e601bae2b, dark theme with Citrus accent and disposable sample data.