WIP: Vendoo 1.44.0 – UX Foundation & Guided Workspaces #29
@@ -0,0 +1,141 @@
|
||||
# Vendoo 1.44.0 – UX Slice 17: Universal Action Registry
|
||||
|
||||
## Referenz
|
||||
|
||||
- Branch: `release/1.44.0-ux-foundation-production-update-v1`
|
||||
- Ausgangs-Head: `7bc8a81bba5a220f4dda5bcc6911d40060c257a5`
|
||||
- App-Ziel: Vendoo `1.44.0`
|
||||
- Updater: `3.4.0`
|
||||
|
||||
## Ziel
|
||||
|
||||
Vendoo erhält eine zentrale, erweiterbare Action-Plattform. Fachmodule und UX-Workspaces registrieren Aktionen künftig einmalig. Aus demselben Vertrag können Command Palette, Toolbars, Kontextmenüs, Mobile Action Sheets, Shortcuts, Mehrfachauswahl und Plugin-Surfaces gespeist werden, ohne Handler oder Berechtigungslogik zu duplizieren.
|
||||
|
||||
## Öffentliche API
|
||||
|
||||
`window.VendooActions`
|
||||
|
||||
- `register(action, options)`
|
||||
- `registerMany(actions, options)`
|
||||
- `unregister(id)`
|
||||
- `get(id)`
|
||||
- `list(options)`
|
||||
- `resolve(id, context)`
|
||||
- `canExecute(id, context)`
|
||||
- `execute(id, context)`
|
||||
- `refresh(id?)`
|
||||
- `renderSurface(container, options)`
|
||||
- `mountSurface(container, options)`
|
||||
- `normalizeShortcut(shortcut)`
|
||||
- `setConfirmationProvider(provider)`
|
||||
- `setAuditSink(sink)`
|
||||
- `subscribe(listener)`
|
||||
|
||||
## Action-Vertrag
|
||||
|
||||
Verbindliche Felder:
|
||||
|
||||
- `id`
|
||||
- `title`
|
||||
- `handler`
|
||||
|
||||
Unterstützte Metadaten:
|
||||
|
||||
- `description`, `icon`, `group`
|
||||
- `aliases`, `keywords`
|
||||
- `surfaces`, `shortcut`, `priority`
|
||||
- `permission`, `visible`, `enabled`, `disabledReason`
|
||||
- `contexts`, `selection.min`, `selection.max`
|
||||
- `danger`: `none`, `caution`, `destructive`
|
||||
- `confirm`
|
||||
- `concurrency`: `single` oder `parallel`
|
||||
- `allowInInput`
|
||||
- `rollback`
|
||||
- `commandId`
|
||||
|
||||
Doppelte Action-IDs werden standardmäßig abgewiesen. Eine bewusste Ersetzung ist nur mit `{ replace: true }` möglich.
|
||||
|
||||
## Sicherheitsmodell
|
||||
|
||||
- Permissions werden vor Darstellung und unmittelbar vor Ausführung geprüft.
|
||||
- Eine deklarierte Permission ohne verfügbaren Resolver wird nach Deny-by-default nicht freigegeben.
|
||||
- Destruktive Actions benötigen immer eine zusätzliche Bestätigung.
|
||||
- `window.confirm` wird nicht verwendet; die Standardbestätigung ist ein barrierearmer Vendoo-Dialog.
|
||||
- Optional kann eine Bestätigungsphrase verlangt werden.
|
||||
- Single-Flight verhindert unbeabsichtigte Doppelausführungen.
|
||||
- Ein optionaler Rollback-Hook wird bei fehlgeschlagenen Actions kontrolliert ausgeführt.
|
||||
- Registry und UI-Surfaces implementieren keine Fachlogik und keine direkten Netzwerkaufrufe.
|
||||
- Serverseitige Berechtigungs-, CSRF- und Validierungsregeln bleiben maßgeblich.
|
||||
|
||||
## Plattformintegration
|
||||
|
||||
Actions mit der Surface `command-palette` werden automatisch als `kind: action` in `window.VendooCommands` registriert. Die Ctrl+K-Palette bleibt dadurch weiterhin vollständig Registry-getrieben.
|
||||
|
||||
Deklarative UI-Elemente können mit `data-vendoo-action="<action-id>"` gebunden werden. Die Registry synchronisiert `disabled`, `aria-disabled`, Running- und Danger-Zustände. Dynamische Surfaces können über `renderSurface(...)` oder `mountSurface(...)` aufgebaut werden.
|
||||
|
||||
## Events und Audit-Anbindung
|
||||
|
||||
Die Registry emittiert unter anderem:
|
||||
|
||||
- `vendoo:actions-ready`
|
||||
- `vendoo:actions-changed`
|
||||
- `vendoo:action-state-changed`
|
||||
- `vendoo:action-executing`
|
||||
- `vendoo:action-executed`
|
||||
- `vendoo:action-failed`
|
||||
- `vendoo:action-blocked`
|
||||
- `vendoo:action-cancelled`
|
||||
- `vendoo:action-rolled-back`
|
||||
- `vendoo:action-rollback-failed`
|
||||
- `vendoo:action-shortcut-conflict`
|
||||
|
||||
Ein optionaler Audit Sink kann diese bereits bereinigten Lifecycle-Ereignisse übernehmen. Die Registry selbst sendet keine Telemetrie und speichert keine fachlichen Nutzdaten.
|
||||
|
||||
## Accessibility und UX
|
||||
|
||||
- semantische Buttons und ARIA-Zustände
|
||||
- vollständige Tastaturbedienung
|
||||
- Shortcuts mit Konflikterkennung und Prioritäten
|
||||
- keine Shortcut-Ausführung in Eingabefeldern ohne explizites `allowInInput`
|
||||
- Fokusfalle und Fokus-Rückgabe im Bestätigungsdialog
|
||||
- responsive Toolbar-, Menü- und Sheet-Surfaces
|
||||
- Reduced-Motion-Unterstützung
|
||||
- Theme-Token statt fest verdrahteter Produktfarben
|
||||
|
||||
## Verifikation
|
||||
|
||||
Neues Gate: `npm run verify:universal-actions`
|
||||
|
||||
Das Gate prüft statisch und in einer isolierten Runtime:
|
||||
|
||||
- öffentlichen Registry-Vertrag
|
||||
- Command-Palette-Adapter
|
||||
- Kontext-, Permission- und Auswahlauflösung
|
||||
- Duplicate-ID-Schutz
|
||||
- destruktive Bestätigung
|
||||
- Single-Flight
|
||||
- Rollback
|
||||
- Lifecycle-Events
|
||||
- Shortcut-Normalisierung
|
||||
- DOM-/Surface-Vertrag
|
||||
- Asset-Ladereihenfolge
|
||||
- Ausschluss von Netzwerk-, Polling-, innerHTML- und direkten Fachaktionen
|
||||
- Einbindung in `verify:all`
|
||||
|
||||
## Daten-, Release- und Rollback-Grenzen
|
||||
|
||||
- keine Datenbankänderung
|
||||
- keine Migration
|
||||
- keine Route, API oder Modul-ID umbenannt
|
||||
- keine bestehende Fachaktion automatisch migriert oder ausgelöst
|
||||
- kein Merge, Deployment oder Release
|
||||
|
||||
Rollback erfolgt durch Rücknahme von:
|
||||
|
||||
- `public/action-registry.js`
|
||||
- `public/action-registry.css`
|
||||
- Loader-Erweiterung in `public/module-extension-workspace.js`
|
||||
- `tools/verify-universal-action-registry-1.44.0.mjs`
|
||||
- `package.json`
|
||||
|
||||
Persistente Artikel-, Medien-, Benutzer-, Modul-, Publishing- oder Einstellungsdaten werden nicht verändert.
|
||||
Reference in New Issue
Block a user