FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

feat(plugins): surface ep.json disables in plugin card by JohnMcLear · Pull Request #395 · ether/ether.github.com · GitHub

feat(plugins): surface ep.json disables in plugin card - #395

Merged
JohnMcLear merged 1 commit into
ether:masterfrom
JohnMcLear:feat/render-plugin-disables
May 2, 2026
Merged

feat(plugins): surface ep.json disables in plugin card#395
JohnMcLear merged 1 commit into
ether:masterfrom
JohnMcLear:feat/render-plugin-disables

Conversation

Copy link
Copy Markdown
Member

Why

Plugins that intentionally remove a baseline Etherpad feature (ep_disable_chat, ep_disable_change_author_name, ep_disable_error_messages, …) currently look identical to neutral plugins on the listing page. A user installing one has no way to know it removes functionality until something stops working.

The companion proposal at ether/etherpad-lite#7648 introduces a small contract: plugins that disable a baseline feature declare it in their ep.json:

{ "name": "ep_disable_chat", "disables": ["@feature:chat"], "parts": [...] }

That disables field is mechanically enforced by Etherpad's CI — a plugin can't ship green while quietly removing functionality it doesn't declare. This PR is the user-facing half: surface the declaration on etherpad.org/plugins so the contract is visible to humans too.

Changes

  • src/store/Plugin.ts — adds optional disables?: string[] to PluginResponseVal with a doc-comment pointing at the upstream contract.
  • src/components/Plugin.tsx — renders an amber badge ("Disables: chat") under the description when disables is present and non-empty. Plugins without a disables field render unchanged.

Safe to ship now

The UI change is independent of plugins.viewer.json's build pipeline. Until that pipeline is updated to read disables from each plugin's ep.json, the new badge no-ops everywhere. As plugins start declaring disables (queued behind ether/etherpad#7648), the badge lights up automatically.

Test plan

  • pnpm exec tsc --noEmit — clean.
  • Verified the badge no-ops when disables is missing or empty.
  • Spot-check rendering against a synthetic disables: ["@feature:chat"] payload locally before merge.

🤖 Generated with Claude Code

Plugins that intentionally remove a baseline Etherpad feature
(ep_disable_chat, ep_disable_change_author_name, etc.) declare which
features they disable in their ep.json `disables` array — see the
contract proposal at ether/etherpad#7648.

Render that list in the plugin card with an amber note ("Disables: chat")
so users see what they're losing before they install. The badge is
gated on `disables` being present and non-empty, so plugins without
a disables field render unchanged.

Note: this UI change is safe to ship now even before the
plugins.viewer.json build pipeline is updated to source `disables`
from ep.json — when the field is absent the badge no-ops.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

Copy link
Copy Markdown
ⓘ You've reached your Qodo monthly free-tier limit. Reviews pause until next month — upgrade your plan to continue now, or link your paid account if you already have one.

JohnMcLear merged commit 01657b2 into ether:master May 2, 2026
JohnMcLear added a commit to ether/etherpad that referenced this pull request May 2, 2026
Companion to ether/ether.github.com#395 — the admin UI's "available
plugins" listing now also renders the plugin's declared `disables`
(see doc/PLUGIN_FEATURE_DISABLES.md) so an operator about to click
Install sees the same warning as a user browsing etherpad.org/plugins:
"Disables: chat".

- src/node/types/PackageInfo.ts: optional `disables?: string[]` on
  the registry payload type.
- admin/src/pages/Plugin.ts: same on the admin-side PluginDef.
- admin/src/pages/HomePage.tsx: render an amber callout under the
  description when `disables` is present and non-empty. Plugins
  without a disables field render unchanged.

The plugin-registry build pipeline still has to start surfacing
`disables` from ep.json into plugins.json/plugins.viewer.json — until
that lands, the new callout no-ops everywhere, which is fine.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
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


Back | FazBrowse Home | New Git URL