Block plugins: plugin_block node with sandboxed rendering and editing #76
Labels
No Label
area:auth
area:docs
area:export
area:ops
area:storage
area:supply-chain
auth
backend
blocked
collab
deployment
docs
effort:L
effort:M
effort:S
frontend
plugins
qa
vs-nfd
vs-nfd:blocker
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: stwaidele/dorfteich#76
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Context
Code plugins provide custom block types — the powerful end of the plugin spectrum (diagrams, embeds).
Scope
Add the reserved
plugin_blocknode (attrs: pluginId, blockType, data) to the shared schema; editor integration: insert menu lists block types from active plugins, node view hosts the sandbox iframe (#73) in render mode, edit affordance switches the frame to edit mode (plugin UI), data persisted via theblockDatacapability into node attrs (collaborative-safe: attrs updates go through the Yjs document); unknown/disabled plugin renders the manifest fallback (from stored manifest snapshot) or a neutral placeholder.Acceptance criteria
Technical notes
Dependencies
Depends on #73, #74.
Size: ~2 days
Conventions: English code/comments, clear human-readable code, no hard-coded UI strings (ADR 0012, add
deanden), permission checks only via the shared guard (docs/architecture/permissions.md). Read the referenced ADRs before starting.Umgesetzt in
923532f(CI grün, alle 8 Kontexte).Akzeptanzkriterien (alle als e2e in
plugin-blocks.spec.ts):Bausteine:
plugin_block-Node im shared Schema (Markdown = reservierter Fence```dorfteich-plugin <plugin>/<type>mit JSON-Body), React-NodeView hostet die #73-Sandbox (render/edit-Lifecycle, blockData-Capability mit Read-only-Guard und Echo-Unterdrückung), Insert-Picker in der Toolbar,GET /plugins/:id/fallback(Manifest-Snapshot, überlebt Uninstall als Tombstone; nur angemeldet).Bewusst verschoben wie in #74:
getBlock(Cross-Page-Block-Embedding) — das Schema hat weiterhin keine per-Block-IDs; kommt mit dem Feature, das sie braucht.