dorfteich/packages/shared/i18n/en
Claude Opus 4.8 621aa47244
Some checks failed
CI / Auth e2e pack (push) Waiting to run
CI / Import/export fidelity gate (push) Waiting to run
CI / Build container images (push) Waiting to run
CD / Build and push images (push) Failing after 1m33s
CD / Deploy to Test (push) Has been skipped
CD / Smoke tests against Test (push) Has been skipped
CD / Promote to Int (push) Has been skipped
CI / Lint, typecheck, test (push) Has been cancelled
Add plugin storage, install API, and directory watcher (#71)
Backend for installing plugin ZIPs (ADR 0008, plugin-architecture.md
§Lifecycle, security.md §Plugins). Consumes the #70 SDK for validation.

- Schema: `plugins` (id, name, version, apiVersion, kind, mode, manifest
  jsonb, removedAt soft-delete) + `pond_plugins` (per-pond activation) +
  `PluginInstanceMode` enum; migration 20260710130000_plugins.
- `PluginPackageService`: pure, stateless ZIP → validated package via
  fflate — structure check, manifest validation (SDK), apiVersion gate,
  kind/bundle/styles rules, CSS sanitation (no @import / external url() /
  expression()), zip-slip and unpacked-size guards. Each failure carries a
  stable PluginErrorCode; manifest issues travel as ApiError details.
- `PluginStorageService`: on-disk layout `<PLUGINS_DIR>/<id>/<version>/`;
  atomic writeVersion (staging dir + rename, no 404 window mid-update),
  removeVersion/removePlugin, traversal-safe asset resolution, dropzone +
  quarantine dirs.
- `PluginsService`: install/update (update only to a strictly higher
  version, preserving the admin's instance mode; files land before the
  metadata pointer flips) / uninstall (refused while required; soft-delete
  + files removed + pond activations dropped) / list / get.
- `POST/GET/DELETE /admin/plugins` (SiteAdminGuard, multer memory upload),
  error→HTTP-status mapping. Public version-pinned static serving at
  `GET /plugins/:id/:version/*rest` with immutable cache + nosniff, only for
  the installed current version.
- `PluginWatcherService`: watches `<PLUGINS_DIR>/_dropzone/`, runs the same
  validation, installs valid drops and quarantines invalid ones with the
  error logged; inert under NODE_ENV=test (tests drive processDropped).
- SDK: `compareVersions`/`isHigherVersion`. shared: `PluginView`,
  `PluginInstanceMode`, `PLUGIN_ERROR_CODES`, `PLUGINS_DIR` env, plugin
  error i18n (de+en). Compose: `plugins` volume + `PLUGINS_DIR`.
- Tests: package unit test (valid + each invalid class) and an e2e DB test
  (GUI install + immutable serving, non-admin 403, invalid-manifest details,
  dropzone install + quarantine, atomic higher-only update, required-guarded
  uninstall that removes files and tombstones metadata).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EwZ4jR4KFAPvpjWevfUGX1
2026-07-10 16:55:26 +02:00
..
access.json Add effective-permissions inspector (#57) 2026-07-10 00:00:27 +02:00
auth.json Add auth, settings, and admin UI to the SPA 2026-07-05 05:35:56 +02:00
common.json Add manual page ordering with drag-and-drop (#45) 2026-07-09 12:18:44 +02:00
editor.json Add wikilink node with autocomplete (#46) 2026-07-09 12:42:01 +02:00
errors.json Add plugin storage, install API, and directory watcher (#71) 2026-07-10 16:55:26 +02:00
export.json Add PDF export via Gotenberg (#67) 2026-07-10 12:11:12 +02:00
files.json Add non-image attachments with allowlist, SVG policy, and file managers (#61) 2026-07-10 02:52:40 +02:00
font.json Add per-pond fonts: catalog, build, application, and admin UI (#66) 2026-07-10 11:16:29 +02:00
import.json Add document import UI in the sidebar (#64) 2026-07-10 09:38:31 +02:00
labels.json Add label UI: tree management, page assignment, and sidebar filter (#44) 2026-07-09 11:41:42 +02:00
links.json Add backlinks panel and phantom-pages view (#48) 2026-07-09 13:05:32 +02:00
mails.json Add mail outbox with SMTP delivery worker and templates 2026-07-05 00:46:12 +02:00
members.json Add pond member management UI (#54) 2026-07-09 20:22:52 +02:00
public.json Add public read access and server-rendered page HTML (#56) 2026-07-09 23:46:25 +02:00
quotas.json Add Site-Admin quota override management UI (#58) 2026-07-10 00:14:28 +02:00
search.json Add search UI with scoping and snippets (#50) 2026-07-09 13:36:06 +02:00
settings.json Add self-service GDPR data export (#68) 2026-07-10 13:01:51 +02:00
users.json Add Site-Admin user management (#59) 2026-07-10 00:31:41 +02:00