Architecture
Follow the components and messages that connect Warlock’s Elm interface to the desktop.
Main coordinates interaction through The Elm Architecture. Adapters carry messages between Elm and the desktop runtime; the runtime integrates with Hyprland and desktop services. Choose a component to inspect its source and connections, or step through a flow.
The controlled-preview entries describe an alternative QA path. The default runtime uses the controller, bar and popup documents.
Production architecture & migration note
Warlock-authored production code uses Elm and Haskell only: every GUI surface is Elm, Haskell owns the backend and reviewed native/runtime integration (including standalone elf-observation, held-document, the published process-custody persistent custody and callback-drain component 6e6ad828c, and the published Store / Catalog / PinStore retention foundation a327c8f7f), and no Python runtime may ship.
The verified 35-node / 68-edge reference graph below preserves historical baseline entries (such as the earlier prototype Adapter daemon and Notification service nodes) for traceability against frozen evidence while ports earn their own source-bound acceptance (currently 19 of 242 whole requirements and 42 of 417 scenarios accepted; native/release acceptance remains open). Development QA and formal Quint tools remain separate from production deliverables.
Component explorer
Choose a component to see its details and connections. Arrow keys move between components in the same layer or to the nearest component in an adjacent layer. Focus and selection are independent. Escape returns focus to the selected component.
Component details
Select a component to inspect it.
Selected connections
Each connection shows its direction, channel and messages. Select a connection to highlight it on the map.
Walk through a flow
Each step shows the exact message and its connection. The highlighted line follows the current hop; the numbered list remains available below.
All flow steps
Open Applications from the taskbar
A taskbar gesture reaches Main through native checks and opens Applications in the shared popup.
- activation.js → bar-adapter.js: . Captures the completed Applications gesture.
- bar-adapter.js → Bar: . Requests validation against the displayed taskbar.
- Bar → bar-adapter.js: . Returns the admitted action.
- bar-adapter.js → Shared GTK native host: . Sends the action through the native surface gate.
- Shared GTK native host → adapter.js: . Adds the originating output scope after native checks.
- adapter.js → Main controller: . Delivers the Applications choice to Main.
- Main controller → adapter.js: . Publishes launcher controls, popup ownership, and focus targets.
- adapter.js → Shared GTK native host: . Submits the coordinated presentation.
- Shared GTK native host → popup-adapter.js: . Delivers the launcher frame to the popup document.
- popup-adapter.js → Popup: . Renders search and application controls.
- popup-adapter.js → Shared GTK native host: . Acknowledges the current presentation after two animation frames.
- Shared GTK native host → popup-adapter.js: . Directs keyboard focus to the current launcher target.
Search and launch an application
Committed text filters the catalog, and selecting a result submits a launch whose receipt remains separate from window observation.
- Popup → popup-adapter.js: . Emits committed search text after local composition handling.
- popup-adapter.js → Shared GTK native host: . Sends the query after its presentation acknowledgment.
- Shared GTK native host → adapter.js: . Routes the query with the popup owner's scope.
- adapter.js → Main controller: . Updates the search and ranks matching catalog entries.
- Main controller → adapter.js: . Publishes the filtered application controls.
- adapter.js → Shared GTK native host: . Submits the updated launcher presentation.
- Shared GTK native host → popup-adapter.js: . Delivers the matching results.
- popup-adapter.js → Popup: . Renders the filtered list.
- activation.js → popup-adapter.js: . Captures the user's explicit result selection.
- popup-adapter.js → Popup: . Validates the selection against the displayed results.
- Popup → popup-adapter.js: . Returns the admitted entry action.
- popup-adapter.js → Shared GTK native host: . Sends the launch choice through native input checks.
- Shared GTK native host → adapter.js: . Routes the choice to the controller.
- adapter.js → Main controller: . Creates an intent bound to the catalog identity and generation.
- Main controller → adapter.js: . Publishes pending feedback and the launch request.
- adapter.js → Shared GTK native host: . Submits the launch request in its controller batch.
- Shared GTK native host → Adapter daemon: . Forwards the admitted request to the catalog authority.
- Adapter daemon → Installed applications: . Revalidates the desktop entry and submits it to Gio.
- Adapter daemon → Shared GTK native host: . Reports Submitted, Refused, or Unknown.
- Shared GTK native host → adapter.js: . Delivers the launch receipt.
- adapter.js → Main controller: . Settles launch feedback while compositor observations establish any new window.
Activate a window from the taskbar
Selecting an inactive single-window group creates an activation request that the plugin applies and checks inside Hyprland.
- activation.js → bar-adapter.js: . Captures the selected taskbar group.
- bar-adapter.js → Bar: . Checks the captured action against the current presentation.
- Bar → bar-adapter.js: . Returns the admitted group choice.
- bar-adapter.js → Shared GTK native host: . Sends the choice through the native surface gate.
- Shared GTK native host → adapter.js: . Associates the action with its output.
- adapter.js → Main controller: . Resolves activation from the group's current window facts.
- Main controller → adapter.js: . Publishes pending feedback and the activation intent.
- adapter.js → Shared GTK native host: . Submits the batch for native admission.
- Shared GTK native host → Desktop data and Warlock state: . Records the pending window intent durably before delivery.
- Shared GTK native host → Adapter daemon: . Forwards the admitted activation.
- Adapter daemon → Hyprland observation authority plugin: . Submits the operation after recording backend custody.
- Hyprland observation authority plugin → Hyprland on Omarchy: . Focuses the eligible family recipient and raises the focused window.
- Hyprland observation authority plugin → Adapter daemon: . Reports the result after checking native state.
- Adapter daemon → Shared GTK native host: . Persists the settlement and returns its admission record and effect receipt.
- Shared GTK native host → adapter.js: . Consumes the admission settlement locally and delivers the effect outcome.
- adapter.js → Main controller: . Settles pending activation while fresh observations determine the taskbar's active state.
Switch to an empty workspace from Task View
Go to workspace navigates to an observed empty destination while Task View filters only change the displayed list.
- activation.js → popup-adapter.js: . Captures the explicit navigation choice in the open Task View.
- popup-adapter.js → Popup: . Checks the destination action against the current presentation.
- Popup → popup-adapter.js: . Returns the admitted navigation action.
- popup-adapter.js → Shared GTK native host: . Sends the destination choice.
- Shared GTK native host → adapter.js: . Routes the action under its popup owner.
- adapter.js → Main controller: . Binds navigation to the observed source and destination workspace generations.
- Main controller → adapter.js: . Publishes the navigation request and pending state.
- adapter.js → Shared GTK native host: . Submits the navigation batch.
- Shared GTK native host → Desktop data and Warlock state: . Records the admitted navigation durably before delivery.
- Shared GTK native host → Adapter daemon: . Passes the request to its backend coordinator.
- Adapter daemon → Hyprland observation authority plugin: . Submits the recorded intent without automatically replaying uncertain delivery.
- Hyprland observation authority plugin → Hyprland on Omarchy: . Activates the checked destination monitor and empty workspace.
- Hyprland observation authority plugin → Adapter daemon: . Reports the result after checking workspace, monitor, and focus.
- Adapter daemon → Shared GTK native host: . Persists and forwards the settlement.
- Shared GTK native host → adapter.js: . Delivers the navigation result.
- adapter.js → Main controller: . Settles navigation and reconciles the desktop presentation.
Show an application notification
An application notification updates bounded history, taskbar state, and the designated accessible announcement.
- Installed applications → Notification service: . Submits notification text and actions under the producer's D-Bus identity.
- Notification service → Installed applications: . Returns the notification identifier.
- Notification service → Adapter daemon: . Signals changed history and supplies its current snapshot when read.
- Adapter daemon → Shared GTK native host: . Sends the unsolicited snapshot over the backend pipe.
- Shared GTK native host → adapter.js: . Routes the update to the controller.
- adapter.js → Main controller: . Updates notification state and applies announcement policy.
- Main controller → adapter.js: . Publishes taskbar state, visible history controls, and any permitted announcement.
- adapter.js → Shared GTK native host: . Submits the coordinated notification presentation.
- Shared GTK native host → bar-adapter.js: . Updates the taskbar and sends an announcement when it is the designated recipient.
- bar-adapter.js → Bar: . Renders notification state and the admitted accessible announcement.
- Shared GTK native host → popup-adapter.js: . Updates notification history when its panel is open.
- popup-adapter.js → Popup: . Renders current history entries and their valid actions.
Save appearance in Settings
Saving an edited Settings draft persists the proposal before committed appearance reaches each document's CSS.
- activation.js → popup-adapter.js: . Captures Save settings after the user edits the draft.
- popup-adapter.js → Popup: . Checks Save against the current enabled presentation.
- Popup → popup-adapter.js: . Returns the admitted save action.
- popup-adapter.js → Shared GTK native host: . Sends the explicit save request.
- Shared GTK native host → adapter.js: . Routes the Settings action to its controller.
- adapter.js → Main controller: . Creates a proposal using the captured storage revision.
- Main controller → adapter.js: . Publishes pending save feedback and proposed values.
- adapter.js → Shared GTK native host: . Submits the settings batch.
- Shared GTK native host → Adapter daemon: . Forwards the admitted proposal to preference storage.
- Adapter daemon → Desktop data and Warlock state: . Checks the revision and atomically saves the validated values.
- Adapter daemon → Shared GTK native host: . Returns the saved snapshot and new revision.
- Shared GTK native host → adapter.js: . Delivers the storage receipt.
- adapter.js → Main controller: . Accepts the matching saved result as committed appearance.
- Main controller → adapter.js: . Publishes the committed appearance.
- adapter.js → Shared GTK native host: . Submits the updated presentation.
- Shared GTK native host → popup-adapter.js: . Delivers committed appearance to Settings.
- popup-adapter.js → Popup: . Renders the committed appearance attributes.
- Popup → appearance.js: . Exposes the saved appearance in the surface DOM.
- appearance.js → WebKitGTK renderer: . Updates the root so shell.css paints the saved appearance.
Apply a snap layout
Apply requests checked placement of an eligible floating Wayland window within its observed work area.
- activation.js → popup-adapter.js: . Captures Apply for the selected snap region.
- popup-adapter.js → Popup: . Validates Apply against the current chooser.
- Popup → popup-adapter.js: . Returns the admitted snap action.
- popup-adapter.js → Shared GTK native host: . Sends Apply through the native popup gate.
- Shared GTK native host → adapter.js: . Routes the action under its current output owner.
- adapter.js → Main controller: . Builds the snap intent from the selected region and current geometry facts.
- Main controller → adapter.js: . Publishes pending feedback and a placement bound to observed native revisions.
- adapter.js → Shared GTK native host: . Submits the geometry batch.
- Shared GTK native host → Desktop data and Warlock state: . Records the snap intent durably before backend delivery.
- Shared GTK native host → Adapter daemon: . Forwards the admitted placement request.
- Adapter daemon → Hyprland observation authority plugin: . Records the operation and submits its exact placement.
- Hyprland observation authority plugin → Hyprland on Omarchy: . Applies the region after rechecking window eligibility, work-area identity, and size policy.
- Hyprland observation authority plugin → Adapter daemon: . Reports the result after checking geometry and preserved focus.
- Adapter daemon → Shared GTK native host: . Persists the settlement and forwards the admission record and effect receipt.
- Shared GTK native host → adapter.js: . Consumes the admission settlement locally and delivers the snap result.
- adapter.js → Main controller: . Settles pending feedback and reconciles subsequent geometry observations.
Component table
Every component in the model, grouped by layer. Select a component name when JavaScript is available.
| Component | Layer | Kind and language | Summary | Sources, ports, windows and variant |
|---|---|---|---|---|
| Elm interface | elm-program; Elm | Owns desktop interaction state and publishes presentations, native requests, and focus targets from a hidden controller document. | Files: implementation/warlock/src/Main.elm, implementation/warlock/src/Desktop.elm, implementation/warlock/src/OutputController.elm, implementation/warlock/src/SurfaceController.elm, implementation/warlock/src/Surface.elm, implementation/warlock/assets/index.html, implementation/warlock/adapter/current_build.py Ports: nativeBatchDispositions, nativeViews, nativeEvents, rendererActions, nativeReflows, nativeDismissals, nativeEscapes, surfaceCommits, inspections Rendered windows: None listed Variant: default | |
| Elm interface | elm-program; Elm | Renders an output's taskbar, validates captured actions, and delivers announcements assigned to that surface. | Files: implementation/warlock/src/Bar.elm, implementation/warlock/src/Presentation.elm, implementation/warlock/src/SurfaceRenderer.elm, implementation/warlock/src/Announcement.elm, implementation/warlock/assets/bar.html Ports: presentation, requestAction, actions, announcements Rendered windows: Taskbar on each output, Pinned applications and window groups, Utility, status, and recovery controls, Assigned accessible announcements Variant: default | |
| Elm interface | elm-program; Elm | Renders the shared popup and manages local text composition, validated actions, announcements, and preview lifecycles. | Files: implementation/warlock/src/Popup.elm, implementation/warlock/src/SurfaceRenderer.elm, implementation/warlock/src/Presentation.elm, implementation/warlock/src/RetainedPreviewPresenter.elm, implementation/warlock/src/PreviewLifecycle.elm, implementation/warlock/src/PreviewPaintGate.elm, implementation/warlock/assets/popup.html Ports: presentation, requestAction, actions, announcements, nativePreviews, previewCommands, previewPaintRequests, previewPainted, nativePreviewGrants, nativePreviewQuarantine, nativePreviewClosed, nativePreviewIssued, nativePreviewRetry, nativePreviewRetirement Rendered windows: Applications launcher and search, Application window picker, Window switcher, Task View and workspace transfer controls, Window context menu, Snap chooser, Settings and help, Notification history, Files navigation panel, System menu and confirmation panel, Application actions and recent items, Window previews and fallbacks within popup panels Variant: default | |
| JavaScript adapters | js-adapter; JavaScript | Starts Elm.Main and connects its ports to native callbacks and the WebKit script message handler. | Files: implementation/warlock/assets/adapter.js, implementation/warlock/assets/index.html Ports: Elm.Main.init, receiveBatchDisposition, receiveTopology, receiveNative, receiveAction, receiveDismiss, receiveEscape, receiveReflow, receiveFocus, window.webkit.messageHandlers.native.postMessage Rendered windows: None listed Variant: default | |
| JavaScript adapters | js-adapter; JavaScript | Starts Elm.Bar, routes its ports, acknowledges presentation and focus, and keeps keyboard selection visible. | Files: implementation/warlock/assets/bar-adapter.js, implementation/warlock/assets/bar.html Ports: Elm.Bar.init, submitSurfaceAction, receivePresentation, receiveAnnouncement, receiveFocus, presentation-ready, presentation-applied, focus-applied Rendered windows: None listed Variant: default | |
| JavaScript adapters | js-adapter; JavaScript | Starts Elm.Popup, orders committed queries after presentation acknowledgment, maintains focus, and transports preview commands and paint acknowledgments. | Files: implementation/warlock/assets/popup-adapter.js, implementation/warlock/assets/popup.html Ports: Elm.Popup.init, submitSurfaceAction, receivePresentation, receiveAnnouncement, receiveFocus, receiveNativePreview, receiveNativePreviewBatch, receiveNativePreviewRetirement, presentation-ready, presentation-applied, focus-applied, surface-notification-focus, preview-commands Rendered windows: None listed Variant: default | |
| JavaScript adapters | js-adapter; JavaScript | Captures context-menu gestures and menu navigation with the originating control and current presentation identity. | Files: implementation/warlock/assets/context.js Ports: mousedown, mousemove, mouseup, contextmenu, keydown, keyup, surface-context, surface-menu-navigation, window.webkit.messageHandlers.native.postMessage Rendered windows: None listed Variant: default | |
| JavaScript adapters | js-adapter; JavaScript | Preserves the captured control through press and release and rejects stale, cancelled, or mismatched activation gestures. | Files: implementation/warlock/assets/activation.js Ports: pointerdown, pointerup, pointercancel, mousedown, mouseup, click, keydown, keyup, blur, submitSurfaceAction, surface-action Rendered windows: None listed Variant: default | |
| JavaScript adapters | js-adapter; JavaScript | Copies committed Elm appearance attributes to the document root so CSS applies theme, text scale, effects, and transparency. | Files: implementation/warlock/assets/appearance.js, implementation/warlock/assets/shell.css Ports: MutationObserver, data-theme, data-text-scale, data-effects, data-reduced-transparency, document.documentElement.style.fontSize Rendered windows: None listed Variant: default | |
| Desktop runtime | native-host; C and C++ | Owns the hidden controller, output taskbars, popup placement, input admission, backend subprocess, admission journal, and GTK crash recovery. | Files: implementation/warlock/native/shared-host.c, implementation/warlock/native/host.c, implementation/warlock/native/surface.h, implementation/warlock/native/host-journal.h, implementation/warlock/native/announcement-transport.h, implementation/warlock/native/motion-preference.h, implementation/warlock/native/controlled-preview-host.h, implementation/warlock/adapter/release_builder.py Ports: script-message-received::native, surface_eval, evaluate_delivery, backend_start, admission_bind, admission_batch, admission_write, workspace_admission_write, admission_retire, gtk_layer_init_for_window, gtk_layer_set_exclusive_zone, gtk_layer_set_keyboard_mode, --authority-config, --backend, --qa-preview-controlled Rendered windows: GTK recovery bar with Desktop display stopped. and Restart Variant: default | |
| Desktop runtime | renderer; C/C++ with JavaScript, HTML, and CSS | Executes compiled Elm and JavaScript in sandboxed WebViews and paints their HTML and CSS inside GTK surfaces. | Files: implementation/warlock/native/shared-host.c, implementation/warlock/native/host.c, implementation/warlock/assets/index.html, implementation/warlock/assets/bar.html, implementation/warlock/assets/popup.html, implementation/warlock/assets/shell.css Ports: WebKitWebContext, WebKitWebView, WebKitUserContentManager, webkit_web_view_load_uri, webkit_web_view_evaluate_javascript, webkit_web_context_register_uri_scheme, script-message-received::native, web-process-terminated, elm-shell://app/, elm-shell://preview/, elm-shell://icon/ Rendered windows: Taskbar WebViews, Shared popup WebView Variant: default | |
| Desktop runtime | native-host; C++ with a C interface | Runs inside the host to obtain compositor captures, retain preview resources and receipts, and serve preview images and fallback icons. | Files: implementation/warlock/native/preview-provider-bootstrap.cpp, implementation/warlock/native/preview_client.hpp, implementation/warlock/native/preview_metadata.hpp, implementation/warlock/native/client-producer.cpp, implementation/warlock/native/picker-previews.h, implementation/warlock/native/picker-previews.inc, implementation/warlock/native/family_producer.hpp, implementation/warlock/native/imported-clients.cpp, implementation/warlock/native/preview_uri.cpp, implementation/warlock/native/preview-uri-webkit.cpp Ports: warlock_preview_bootstrap_open, warlock_preview_bootstrap_catalog, warlock_preview_bootstrap_native_transport, warlock_picker_previews_open, warlock_picker_previews_poll, warlock_picker_previews_command, warlock_picker_previews_stream, warlock_picker_previews_icon_stream, warlock_picker_previews_close, warlock_imported_clients_propose_envelope, warlock_imported_clients_dispatch_control, warlock_imported_clients_confirm_control, previewFdAddress Rendered windows: None listed Variant: default | |
| Desktop runtime | daemon; Python | Runs as the host's child process to authenticate compositor requests, maintain recovery records, and connect desktop services and preferences. | Files: implementation/warlock/adapter/daemon.py, implementation/warlock/adapter/endpoint.py, implementation/warlock/adapter/effect_endpoint.py, implementation/warlock/adapter/geometry_endpoint.py, implementation/warlock/adapter/grant_endpoint.py, implementation/warlock/adapter/catalog_transport.py, implementation/warlock/adapter/recovery_store.py, implementation/warlock/adapter/reconciliation.py, implementation/warlock/adapter/workspace_navigation.py, implementation/warlock/adapter/cancellation_coordinator.py Ports: stdin, stdout, handle_request, j/elm_observe, .socket.sock, .socket2.sock, projection-request, window-effect, geometry-attach, geometry-facts-request, workspace-navigation, catalog-request, application-launch, notification-request, notification-effect, files-request, files-open, system-menu-request, system-menu-effect, jump-list-request, jump-list-effect, shell-settings-write, motion-preferences-write, shortcut-preferences-write, taskbar-pins-write, cancellationOptIn Rendered windows: None listed Variant: default | |
| Desktop runtime | daemon; Python | Runs in a Gio thread inside the adapter process to acquire the notification D-Bus name and maintain bounded notification history. | Files: implementation/warlock/adapter/notification_service.py, implementation/warlock/adapter/daemon.py Ports: org.freedesktop.Notifications, /org/freedesktop/Notifications, GetCapabilities, GetServerInformation, Notify, CloseNotification, ActionInvoked, NotificationClosed, NameOwnerChanged, Service.read, Service.effect, Service.observation, Service.drain, wake Rendered windows: None listed Variant: default | |
| Hyprland integration | compositor-plugin; C++ | Runs inside Hyprland to assign window identities, report native facts, execute checked operations, route shortcuts, and provide preview captures. | Files: implementation/warlock/native/authority.cpp, implementation/warlock/native/geometry.inc, implementation/warlock/native/geometry-effects.inc, implementation/warlock/native/snap-placement.inc, implementation/warlock/native/workspace-navigation.inc, implementation/warlock/native/shortcut-bindings.inc, implementation/warlock/native/picker-preview.inc, implementation/warlock/native/capture-fd-server.inc Ports: PLUGIN_API_VERSION, PLUGIN_INIT, PLUGIN_EXIT, elm_observe, warlock.apps_menu, warlock.system_menu, warlock.notification_history, warlock.switcher_forward, warlock.switcher_reverse, hello, scene-facts-request, snapshot-request, window-effect, geometry-attach, geometry-facts-request, workspace-navigation, shortcut-bindings-request, shortcut-bindings-apply, binding-retire-request, binding-retirement-state-request, preview-picker-family-scope-request, preview-picker-family-capture-request, preview-picker-family-retire-request, previewFdAddress Rendered windows: None listed Variant: default | |
| Hyprland integration | compositor; C++ and Lua | Composes shell and application surfaces and owns native focus, input, workspaces, and window geometry on the Omarchy desktop. | Files: implementation/warlock/native/core/Window.cpp, implementation/warlock/native/core/Renderer.cpp, implementation/warlock/native/core/SeatManager.cpp, implementation/warlock/native/core/InputManager.cpp, implementation/warlock/native/core/WorkspacePlacementController.cpp, docs/warlock-compatibility/omarchy-v1/sources/user/hyprland.lua, docs/warlock-compatibility/omarchy-v1/sources/packaged/omarchy.lua Ports: HyprlandAPI::registerHyprCtlCommand, HyprlandAPI::addLuaFunction, Event::bus, Desktop::windowState, Desktop::focusState, Desktop::WindowPolicy::applyMinimized, Fullscreen::controller, Wayland, CXDGSurfaceResource, CXWaylandSurface, gtk-layer-shell, .socket.sock, .socket2.sock Rendered windows: Composited desktop containing Warlock surfaces and application windows Variant: default | |
| Hyprland integration | external; C++ | Supplies Hyprland's output buffers and presentation backend, including the repository's nested Wayland backend. | Files: implementation/warlock/native/aquamarine/Wayland.cpp, implementation/warlock/native/core/Renderer.cpp, implementation/warlock/adapter/release_builder.py Ports: Aquamarine::IBuffer, Aquamarine::IOutput, Aquamarine::CWaylandBackend::start, Aquamarine::CWaylandBackend::dispatchEvents, Aquamarine::CWaylandOutput::commit, Aquamarine::CWaylandOutput::scheduleFrame, events.frame, events.present Rendered windows: None listed Variant: default | |
| Applications and desktop services | external; C with C++ compositor integration | Connects X11 applications to the Wayland desktop and exposes their surfaces, metadata, lifecycle, and configuration requests to Hyprland. | Files: implementation/warlock/native/core/Window.cpp, implementation/warlock/native/core/ViewHitTester.cpp, implementation/warlock/native/core/InputManager.cpp Ports: X11, Wayland, CXWaylandSurface, map, unmap, destroy, commit, configureRequest, stateChanged, metadataChanged, resourceChange, activate, setGeometry, configure Rendered windows: None listed Variant: default | |
| Elm interface | elm-program; Elm | A headless Elm worker that the native host runs (native/elm-preview-policy.cpp) to apply Warlock's window preview policy. | Files: implementation/warlock/src/NativePreviewPolicy.elm, implementation/warlock/src/RetainedPreviewPresenter.elm, implementation/warlock/native/elm-preview-policy.cpp, implementation/warlock/native/preview-policy-driver.cpp, implementation/warlock/native/controlled-preview-host.h Ports: incoming, outgoing Rendered windows: None listed Variant: default | |
| Elm interface | elm-program; Elm | Renders and validates the initial popup presentation before the controlled-preview QA path installs its visual receiver. | Files: implementation/warlock/src/NativePreviewAdmission.elm, implementation/warlock/assets/controlled-popup.html Ports: presentation, requestAction, actions Rendered windows: Initial controlled-preview popup in QA mode Variant: controlled-preview | |
| Elm interface | elm-program; Elm | Renders visual snapshots bound to a native grant and acknowledges accepted sequences in the controlled-preview QA path. | Files: implementation/warlock/src/NativePreviewRenderer.elm, implementation/warlock/src/NativePreviewReceiver.elm, implementation/warlock/src/NativePreviewVisual.elm, implementation/warlock/assets/controlled-popup.html Ports: visualSnapshots, acceptedSnapshots, surfaceActions Rendered windows: Controlled-preview popup and preview visuals in QA mode Variant: controlled-preview | |
| JavaScript adapters | js-adapter; JavaScript | Connects the admission and visual-receiver Elm programs to native initialization, snapshots, actions, and acknowledgments in controlled-preview QA mode. | Files: implementation/warlock/assets/controlled-popup-adapter.js, implementation/warlock/assets/controlled-popup.html, implementation/warlock/native/controlled-preview-host.h Ports: submitSurfaceAction, receivePresentation, receiveFocus, initializeNativePreviewRenderer, receiveNativeVisualProjection, native-preview-projection-accepted, presentation-ready, presentation-applied, focus-applied Rendered windows: None listed Variant: controlled-preview | |
| JavaScript adapters | js-adapter; JavaScript | Runs in the host's JavaScriptCore context to retain exact preview command tickets until delivery receipts arrive in controlled-preview QA mode. | Files: implementation/warlock/assets/native-preview-control-outbox.js, implementation/warlock/native/preview-policy-driver.cpp, implementation/warlock/native/controlled-preview-host.h Ports: WarlockNativePreviewControlOutbox, retain, acknowledge, retry, snapshot, heldRetain, heldAcknowledge, heldRetry, heldSnapshot, nativePost, nativeConfirm, preview-control-ticket, preview-control-delivered, preview-control-confirmed Rendered windows: None listed Variant: default | |
| Standalone Haskell packages | haskell-package; Haskell | Parses captured GNU readelf output and resolves declared dependency graphs with explicit bounds and unresolved obligations as a standalone library. | Files: implementation/warlock/haskell/elf-observation/elf-observation.cabal, implementation/warlock/haskell/elf-observation/src/Warlock/Elf/Readelf.hs, implementation/warlock/haskell/elf-observation/src/Warlock/Elf/Graph.hs Ports: warlock-elf-observation-proposal, Warlock.Elf.Readelf, Warlock.Elf.Graph, parseReadelf, resolveDeclared, resolveDeclaredWithOrigins, resolveDeclaredWithSearchPlans Rendered windows: None listed Variant: default | |
| Standalone Haskell packages | haskell-package; Haskell and hsc2hs FFI | Reads identity-checked snapshots through held file descriptors and prepares hash-verified HTML with script and style hashes as a standalone library. | Files: implementation/warlock/haskell/held-document/held-document.cabal, implementation/warlock/haskell/held-document/src/Warlock/Platform/Resolver.hs, implementation/warlock/haskell/held-document/src/Warlock/Platform/Resolver/Internal.hsc, implementation/warlock/haskell/held-document/src/Warlock/Platform/Descriptor.hs, implementation/warlock/haskell/held-document/src/Warlock/Http/Document.hs Ports: warlock-held-document-proposal, Warlock.Platform.Resolver, Warlock.Http.Document, withRoot, resolveSnapshot, prepareHtml Rendered windows: None listed Variant: default | |
| Standalone Haskell packages | haskell-package; Haskell and hsc2hs FFI | Controls bounded tool execution and selected child-process sessions with deadlines, descriptor ownership, transfer records, and cleanup tracking as a standalone library. | Files: implementation/warlock/haskell/process-custody/process-custody.cabal, implementation/warlock/haskell/process-custody/src/Warlock/Capture/Process.hs, implementation/warlock/haskell/process-custody/src/Warlock/Capture/Process/Internal.hsc, implementation/warlock/haskell/process-custody/src/Warlock/Capture/Process/Owner.hs, implementation/warlock/haskell/process-custody/src/Warlock/Capture/Process/Lease.hs, implementation/warlock/haskell/process-custody/src/Warlock/Capture/Process/Transfer.hs, implementation/warlock/haskell/process-custody/src/Warlock/Capture/Process/Whitelist.hsc Ports: warlock-process-custody, Warlock.Capture.Process, newOwner, status, runTool, Pactree, Readelf, selectedHeld, deadlineAfter, remainingMicros, runSelectedUntil, awaitLeader, observeSession, closeCallerTransfer, transferDisposition Rendered windows: None listed Variant: default | |
| Applications and desktop services | external; Various | Supply desktop entries, Wayland or X11 windows, declared actions, and notifications while owning their window contents. | Files: implementation/warlock/adapter/taskbar_catalog.py, implementation/warlock/adapter/catalog_authority.py, implementation/warlock/adapter/jump_list.py, implementation/warlock/adapter/notification_service.py, implementation/warlock/native/core/Window.cpp Ports: *.desktop, GioUnix.DesktopAppInfo, launch, launch_action, Wayland, X11, org.freedesktop.Notifications Rendered windows: None listed Variant: default | |
| Applications and desktop services | external; Quickshell/QML | Provides the installed Files application that Warlock opens or navigates through verified Quickshell instance commands. | Files: implementation/warlock/adapter/explorer.py Ports: /usr/bin/qs, list --json, ipc --id, files migrationStatus, files uiState, files open, --no-duplicate, --daemonize, FILES_OPEN Rendered windows: None listed Variant: default | |
| Applications and desktop services | external; External implementation | Reports the default audio sink and applies volume or mute changes through the selected local audio server. | Files: implementation/warlock/adapter/system_menu.py Ports: /usr/bin/pactl, PULSE_SERVER, pulse/native, info, list sinks, set-sink-volume, set-sink-mute Rendered windows: None listed Variant: default | |
| Applications and desktop services | external; External implementation | Supplies network state and permissions and handles explicit networking enable or disable requests. | Files: implementation/warlock/adapter/system_menu.py Ports: org.freedesktop.NetworkManager, /org/freedesktop/NetworkManager, org.freedesktop.DBus.Properties.GetAll, GetPermissions, Enable Rendered windows: None listed Variant: default | |
| Applications and desktop services | external; External implementation | Reports session and power capabilities and handles lock, logout, suspend, reboot, and power-off requests. | Files: implementation/warlock/adapter/system_menu.py Ports: org.freedesktop.login1, org.freedesktop.login1.Manager, org.freedesktop.login1.Session, CanSuspend, CanReboot, CanPowerOff, GetSessionByPID, Lock, TerminateSession, Suspend, Reboot, PowerOff Rendered windows: None listed Variant: default | |
| Applications and desktop services | external; External implementation | Supplies the host's motion preference through the desktop portal with GTK animation settings as the fallback. | Files: implementation/warlock/native/motion-preference.h Ports: org.freedesktop.portal.Desktop, org.freedesktop.portal.Settings.ReadOne, org.freedesktop.portal.Settings.SettingChanged, org.freedesktop.appearance, reduced-motion, gtk-enable-animations Rendered windows: None listed Variant: default | |
| Applications and desktop services | external; JSON, desktop-entry files, and XBEL | Stores desktop data, saved preferences, the native host's admission records, and the adapter's separate recovery ledgers. | Files: implementation/warlock/native/host-journal.h, implementation/warlock/adapter/taskbar_catalog.py, implementation/warlock/adapter/taskbar_preferences.py, implementation/warlock/adapter/shell_preferences.py, implementation/warlock/adapter/motion_preferences.py, implementation/warlock/adapter/shortcut_preferences.py, implementation/warlock/adapter/jump_list.py, implementation/warlock/adapter/recovery_store.py, implementation/warlock/adapter/admission_ledger.py, implementation/warlock/adapter/retirement_ledger.py, implementation/warlock/adapter/delivery_ledger.py, implementation/warlock/adapter/cancellation_ledger.py, implementation/warlock/adapter/workspace_navigation.py Ports: XDG_DATA_HOME, XDG_DATA_DIRS, XDG_CACHE_HOME, XDG_STATE_HOME, taskbar.json, settings.json, motion.json, shortcuts.json, recently-used.xbel, admissions-v1, host-owner.lock, host-writer.lock, ledger-v5.json, ledger-v6.json, release-deliveries-v1.json, workspace-navigation-v1.json, flock, rename, fsync Rendered windows: None listed Variant: default |
Connection table
All directed connections, including parallel channels. Messages are shown as recorded in the model.
| From | To | Channel | Messages | Summary |
|---|---|---|---|---|
| adapter.js | Main controller | Elm initialization and inbound ports | Elm.Main.init; nativeViews: view-topology; nativeEvents; rendererActions: view-action; nativeBatchDispositions: batch-disposition; nativeDismissals; nativeEscapes; nativeReflows | Delivers observations, scoped input, topology, and batch admission results to Main. |
| Main controller | adapter.js | surfaceCommits; inspections | view-commit; surface-inspection | Emits coordinated presentation batches and optional QA inspection packets. |
| adapter.js | Shared GTK native host | WebKit script message handler: native.postMessage | host-ready; view-commit; surface-inspection; surface-report | Serializes controller output and optional QA reports through the registered native handler. |
| Shared GTK native host | adapter.js | webkit_web_view_evaluate_javascript | receiveTopology; receiveNative; receiveAction; receiveBatchDisposition; receiveDismiss; receiveEscape; receiveReflow | Calls controller receivers with native events and input scoped to the owning output and presentation. |
| activation.js | bar-adapter.js | submitSurfaceAction | surface-action | Submits a completed taskbar gesture with its captured control and presentation stamp. |
| activation.js | popup-adapter.js | submitSurfaceAction | surface-action | Submits a completed popup gesture while its captured target remains current. |
| bar-adapter.js | Bar | Elm initialization; presentation; requestAction; announcements | Elm.Bar.init; presentation; surface-action; announcement-projection | Starts Bar and supplies presentations, captured actions, and assigned announcements. |
| Bar | bar-adapter.js | actions | surface-action | Returns actions validated against the current taskbar presentation. |
| bar-adapter.js | Shared GTK native host | WebKit script message handler: native.postMessage | presentation-ready; presentation-applied; focus-applied; surface-action; surface-report | Reports readiness, applied presentation and focus, admitted actions, and optional QA observations. |
| Shared GTK native host | bar-adapter.js | webkit_web_view_evaluate_javascript | receivePresentation; receiveAnnouncement; receiveFocus | Delivers each output's taskbar presentation, announcements, and focus requests. |
| popup-adapter.js | Popup | Elm initialization and inbound ports | Elm.Popup.init; presentation; requestAction: surface-action; announcements: announcement-projection; nativePreviews; nativePreviewRetirement; previewPainted | Supplies popup presentations, captured actions, announcements, native preview events, and paint acknowledgments. |
| Popup | popup-adapter.js | actions; previewCommands; previewPaintRequests | surface-action; surface-query; acquire; cancel; release; acknowledge; reconcile; previewPaintRequests | Emits admitted actions, committed queries, preview commands, and paint tickets while retaining composition drafts locally. |
| popup-adapter.js | Shared GTK native host | WebKit script message handler: native.postMessage | presentation-ready; presentation-applied; focus-applied; surface-action; surface-query; surface-notification-focus; preview-commands; surface-report | Sends popup input, acknowledgments, protocol-2 preview command packets, and optional QA observations. |
| Shared GTK native host | popup-adapter.js | webkit_web_view_evaluate_javascript | receivePresentation; receiveAnnouncement; receiveFocus; receiveNativePreview; receiveNativePreviewBatch; receiveNativePreviewRetirement | Delivers popup content, focus, announcements, and native preview observations to the owning document. |
| context.js | Shared GTK native host | WebKit script message handler: native.postMessage | surface-context; surface-menu-navigation; Escape; Close; ArrowUp; ArrowDown; Home; End; Enter | Routes context invocation and menu navigation through native source and presentation checks. |
| Bar | appearance.js | DOM attributes observed by MutationObserver | data-theme; data-text-scale; data-effects; data-reduced-transparency | Exposes committed taskbar appearance for projection onto the document root. |
| Popup | appearance.js | DOM attributes observed by MutationObserver | data-theme; data-text-scale; data-effects; data-reduced-transparency | Exposes the committed appearance included in the popup presentation. |
| appearance.js | WebKitGTK renderer | Document root attributes and CSS | document.documentElement.dataset.theme; document.documentElement.dataset.textScale; document.documentElement.dataset.effects; document.documentElement.dataset.reducedTransparency; document.documentElement.style.fontSize | Updates root attributes and font size consumed by shell.css. |
| Shared GTK native host | WebKitGTK renderer | WebKitGTK library calls | webkit_web_context_new_ephemeral; webkit_web_context_set_sandbox_enabled; webkit_web_context_register_uri_scheme; webkit_user_content_manager_register_script_message_handler; webkit_web_view_load_uri; webkit_web_view_evaluate_javascript; webkit_uri_scheme_request_finish_with_response | Creates WebViews, installs the bridge, loads local documents, evaluates receivers, and returns scoped resource streams. |
| WebKitGTK renderer | Shared GTK native host | WebKitGTK callbacks and custom URI requests | script-message-received::native; web-process-terminated; decide-policy; elm-shell://app/; elm-shell://preview/; elm-shell://icon/ | Delivers script messages, resource requests, navigation decisions, and renderer failures to the host. |
| Shared GTK native host | Hyprland on Omarchy | GTK/GDK Wayland surfaces and gtk-layer-shell | gtk_layer_init_for_window; gtk_layer_set_monitor; gtk_layer_set_namespace; gtk_layer_set_layer; gtk_layer_set_anchor; gtk_layer_set_exclusive_zone; gtk_layer_set_keyboard_mode; gtk_layer_try_force_commit | Places taskbars across output tops, reserves their height, and manages shell-surface keyboard ownership. |
| Shared GTK native host | Adapter daemon | GSubprocess stdin pipe; newline-delimited JSON | /usr/bin/python3 -B; projection-request; geometry-attach; geometry-facts-request; window-effect; workspace-navigation; workspace-navigation-recover; catalog-request; application-launch; taskbar-pins-write; shell-settings-request; shell-settings-write; motion-preferences-request; motion-preferences-write; shortcut-preferences-request; shortcut-preferences-write; notification-request; notification-effect; files-request; files-open; system-menu-request; system-menu-effect; jump-list-request; jump-list-effect; motion-profile-set; activation-history-request; switcher-selection-request; switcher-cancel-request; reconciliation-ready | Starts the Python backend and forwards admitted controller requests over its owned input pipe. |
| Adapter daemon | Shared GTK native host | Subprocess stdout pipe; newline-delimited JSON | attached; host-refresh; host-disconnected; host-geometry-negotiate; action-projection; projection-unavailable; geometry-attached; geometry-facts; effect-outcome; workspace-navigation-outcome; workspace-navigation-recovery; application-catalog; application-launch-outcome; taskbar-pins-outcome; shell-settings; shell-settings-outcome; motion-preferences; motion-preferences-outcome; shortcut-preferences; shortcut-preferences-outcome; notification-snapshot; notification-update; notification-outcome; files-snapshot; files-outcome; system-menu-snapshot; system-menu-outcome; jump-list-snapshot; jump-list-outcome; motion-profile; activation-history; pointer-ownership; shell-shortcuts; switcher-journal; host-recovery-failed; host-recovery-watermarks; host-reservation-unknown; host-reservation-released; host-admission-settled | Returns observations, service snapshots, operation outcomes, recovery records, and admission settlements. |
| Adapter daemon | Hyprland observation authority plugin | Hyprland IPC over .socket.sock: j/elm_observe | hello; scene-facts-request; snapshot-request; window-effect; geometry-attach; geometry-facts-request; activation-history-request; pointer-ownership-request; shell-shortcuts-request; switcher-journal-request; switcher-selection-request; switcher-cancel-request; motion-profile-set; shortcut-bindings-request; shortcut-bindings-apply; workspace-navigation-attach; workspace-navigation; workspace-navigation-state-request; binding-retire-request; binding-retirement-state-request | Sends bounded requests after authenticating the compositor socket and process identity. |
| Hyprland observation authority plugin | Adapter daemon | Hyprland IPC replies | attached; scene-facts; snapshot; geometry-attached; geometry-facts; effect-outcome; activation-history; pointer-ownership; shell-shortcuts; switcher-journal; motion-profile; shortcut-bindings; shortcut-bindings-outcome; workspace-navigation-attached; workspace-navigation-outcome; workspace-navigation-state; binding-retirement; refused | Returns correlated native facts, checked outcomes, shortcut inventory, and retirement proofs. |
| Adapter daemon | Hyprland observation authority plugin | Hyprland IPC; cancellationOptIn path | effect-cancellation-negotiate; effect-prepare; effect-commit; effect-cancel; effect-decision-request; effect-decision-ack | Uses the cancellation protocol when explicit configuration enables the cancellation coordinator. |
| Hyprland observation authority plugin | Adapter daemon | Hyprland IPC replies; cancellationOptIn path | effect-cancellation-capabilities; effect-prepared; effect-outcome; effect-decision-acknowledged | Returns cancellation capabilities, prepared-operation identities, terminal evidence, and acknowledgment receipts. |
| Hyprland on Omarchy | Adapter daemon | Hyprland event socket .socket2.sock | openwindow; closewindow; activewindow; windowtitle; windowtitlev2; workspace; workspacev2; focusedmon; focusedmonv2; movewindow; movewindowv2; monitoradded; monitoraddedv2; monitorremoved; fullscreen; pin; urgent; changefloatingmode; elmwindowstate; warlockpointer; warlockshortcuts; warlockswitcher | Prompts fresh authenticated observations when window, workspace, pointer, or shortcut state changes. |
| Hyprland observation authority plugin | Hyprland on Omarchy | In-process plugin and compositor APIs | HyprlandAPI::registerHyprCtlCommand; HyprlandAPI::addLuaFunction; Desktop::WindowPolicy::applyMinimized; Desktop::focusState()->fullWindowFocus; Desktop::focusState()->rawMonitorFocus; Desktop::windowState()->raise; changeWorkspace; Fullscreen::controller()->setFullscreenMode; window->layoutTarget()->setPositionGlobal | Registers shell integration and applies validated window, focus, workspace, and placement operations. |
| Hyprland on Omarchy | Hyprland observation authority plugin | Event::bus and registered Lua callbacks | window.open; window.close; window.active; render.pre; input.keyboard.key; config.preReload; config.reloaded; monitor.added; monitor.removed; warlock.apps_menu; warlock.system_menu; warlock.notification_history; warlock.switcher_forward; warlock.switcher_reverse | Supplies lifecycle and input events that update window identities, shortcut journals, and preview validity. |
| Hyprland on Omarchy | Aquamarine display backend | In-process output and buffer APIs | Aquamarine::IBuffer; swapchain->next; state->addDamage; state->setPresentationMode; swapchain->rollback | Obtains output buffers and submits damage and presentation settings through the display backend. |
| Aquamarine display backend | Hyprland on Omarchy | In-process backend events | events.frame; events.present; events.state; events.destroy; events.newOutput; events.newKeyboard; events.newPointer | Reports output and presentation events, including devices and output changes supplied by the nested Wayland backend. |
| Shared GTK native host | Native preview provider | C library interface | warlock_preview_bootstrap_open; warlock_preview_bootstrap_catalog; warlock_preview_bootstrap_native_transport; warlock_picker_previews_open; warlock_picker_previews_poll; warlock_picker_previews_command; warlock_picker_previews_stream; warlock_picker_previews_icon_stream; warlock_picker_previews_close | Enrolls popup preview families, forwards lifecycle commands, and obtains scoped image streams. |
| Native preview provider | Shared GTK native host | C return values, JSON event batches, and GInputStream | catalog; source-seed; metadata; event; request; offer; fence; source-denied; receipt; released; cancelled; refused; image/png | Returns metadata, lifecycle events, resource receipts, and preview or icon streams. |
| Native preview provider | Hyprland observation authority plugin | Hyprland IPC and Unix SOCK_SEQPACKET transport | j/elm_observe; hello; snapshot-request; preview-picker-family-scope-request; preview-picker-family-capture-request; preview-picker-family-retire-request; previewFdAddress | Uses a separate native connection to obtain family capture facts and owned image resources. |
| Hyprland observation authority plugin | Native preview provider | Hyprland IPC replies and Unix descriptor transfer | attached; snapshot; preview-picker-family-scope; preview-picker-family-owned; preview-picker-family-retired; SCM_RIGHTS; refused | Returns family capture metadata and transferred image descriptors under the preview ownership protocol. |
| Adapter daemon | Notification service | Python calls within the adapter process | Service.read; Service.effect; Service.observation; Service.drain | Reads notification history and submits explicit notification actions to the in-process service. |
| Notification service | Adapter daemon | Wake descriptor and Python return values | wake; notification-update; notification-snapshot; notification-outcome | Signals history changes and returns notification snapshots and action outcomes. |
| Installed applications | Notification service | Session D-Bus: org.freedesktop.Notifications | GetCapabilities; GetServerInformation; Notify; CloseNotification | Creates, replaces, or closes notifications under the sending application's D-Bus identity. |
| Notification service | Installed applications | Session D-Bus replies and signals | Notify return value; ActionInvoked; NotificationClosed | Returns notification identifiers and reports user actions or notification closure to the producer. |
| Adapter daemon | Installed applications | GioUnix.DesktopAppInfo and Gio launch APIs | DesktopAppInfo.new_from_filename; launch; launch_action; Gio.File.new_for_uri; Gio.AppLaunchContext | Launches a validated desktop entry, a declared application action, or an application-bound recent file. |
| Installed applications | Hyprland on Omarchy | Wayland and XDG shell | CXDGSurfaceResource; map; unmap; commit; stateChanged; metadataChanged; requestMove; requestResize | Supplies native Wayland application surfaces and requests through the compositor's XDG surface handlers. |
| Installed applications | XWayland | X11 display protocol | X11 | Connects X11 applications through XWayland so their windows participate in the Wayland desktop. |
| XWayland | Hyprland on Omarchy | Wayland surfaces and compositor XWayland integration | CWindow::create(SP<CXWaylandSurface>); map; unmap; destroy; commit; configureRequest; stateChanged; metadataChanged; resourceChange; activate; setGeometry | Creates X11-marked compositor windows and delivers their lifecycle, metadata, state, and geometry requests. |
| Hyprland on Omarchy | XWayland | Compositor XWayland surface API | m_xwaylandSurface->configure | Returns compositor-selected position and size through the XWayland surface configuration interface. |
| Adapter daemon | Omarchy Files | Fixed qs commands and Quickshell IPC | qs -p <root> list --json; qs -p <root> ipc --id <instance> call files migrationStatus; qs -p <root> ipc --id <instance> call files uiState; qs -p <root> ipc --id <instance> call files open <target>; qs -p <root> --no-duplicate --daemonize; FILES_OPEN | Reads a verified Files instance and opens Home, a supported collection, or an explicit folder. |
| Adapter daemon | PulseAudio-compatible audio service | pactl subprocess and local Unix audio socket | pactl --server=<server> --format=json info; pactl --server=<server> --format=json list sinks; pactl --server=<server> set-sink-volume; pactl --server=<server> set-sink-mute | Reads the default sink and applies explicit volume or mute changes with identity checks and readback. |
| Adapter daemon | NetworkManager | System D-Bus | GetAll; GetPermissions; Enable; NetworkingEnabled; State | Reads network state and permissions and confirms requested changes through fresh properties. |
| Adapter daemon | systemd-logind | System D-Bus | CanSuspend; CanReboot; CanPowerOff; GetSessionByPID; GetAll; Lock; TerminateSession; Suspend; Reboot; PowerOff | Reads session and power capabilities and submits the user's confirmed operation. |
| Shared GTK native host | Desktop portal and GTK motion preference | Session D-Bus and GtkSettings | ReadOne; org.freedesktop.appearance; reduced-motion; gtk-enable-animations | Reads the desktop motion preference through the portal or GTK fallback. |
| Desktop portal and GTK motion preference | Shared GTK native host | D-Bus signals and GObject property notification | SettingChanged; NameOwnerChanged; notify::gtk-enable-animations | Updates the native preference observation delivered to Main as host-motion-preference. |
| Adapter daemon | Desktop data and Warlock state | Filesystem reads, locked writes, atomic rename, and fsync | *.desktop; recently-used.xbel; taskbar.json; settings.json; motion.json; shortcuts.json; RecoveryStore.begin; RecoveryStore.settle; ledger-v5.json; ledger-v6.json; release-deliveries-v1.json; workspace-navigation-v1.json; CancellationLedger | Reads desktop data and writes preferences and recovery ledgers, selecting the cancellation ledger when cancellationOptIn is enabled. |
| Shared GTK native host | Desktop data and Warlock state | Native admission journal; openat, flock, renameat, and fsync | admission_bind; admission_write; admission_retire; workspace_admission_write; admissions-v1; host-owner.lock; host-writer.lock; workspace-navigation-v1.json | Records admitted window and workspace requests durably before backend delivery and retires matching settled window admissions. |
| Shared GTK native host | Preview policy worker | JavaScriptCore invocation of incoming.send; QA-only | presentation; grant; native; legacy; quarantine; issued; retry; closed | Feeds the retained Elm preview worker through the controlled preview driver. |
| Preview policy worker | Shared GTK native host | outgoing port through JavaScriptCore; QA-only | models; commands; realm; metadata; enrollment; feedback; visuals | Returns retained preview state, command proposals, and visual observations to the native owner. |
| Shared GTK native host | Native preview control outbox | JavaScriptCore function calls; QA-only | WarlockNativePreviewControlOutbox; heldRetain; preview-control-ticket; heldAcknowledge; preview-control-delivered; heldRetry; heldSnapshot | Retains native-issued command tickets and supplies delivery receipts to the original outbox. |
| Native preview control outbox | Shared GTK native host | JavaScriptCore nativePost and nativeConfirm callbacks; QA-only | preview-commands; preview-control-confirmed | Returns exact retained command wires and receipt-observation confirmations to the native driver. |
| Shared GTK native host | Native preview provider | Controlled preview C interface; QA-only | warlock_imported_clients_propose_envelope; warlock_imported_clients_dispatch_control; warlock_imported_clients_confirm_control | Obtains command tickets, dispatches retained controls, and confirms receipt observation for the controlled preview realm. |
| controlled-popup-adapter.js | NativePreviewAdmission | Elm initialization; presentation; requestAction; QA-only | Elm.NativePreviewAdmission.init; presentation; surface-action | Starts the initial admission renderer and supplies its presentation and captured actions. |
| NativePreviewAdmission | controlled-popup-adapter.js | actions; QA-only | surface-action | Returns actions admitted against the initial controlled popup presentation. |
| controlled-popup-adapter.js | NativePreviewRenderer | Elm initialization and visualSnapshots; QA-only | Elm.NativePreviewRenderer.init; native-preview-renderer-grant; native-preview-projection | Replaces the initial renderer with a receiver bound to a native grant and sends ordered visual snapshots. |
| NativePreviewRenderer | controlled-popup-adapter.js | acceptedSnapshots; surfaceActions; QA-only | native-preview-projection-accepted; surface-action | Reports accepted visual sequences and admitted ordinary surface actions. |
| Shared GTK native host | controlled-popup-adapter.js | webkit_web_view_evaluate_javascript; QA-only | receivePresentation; receiveFocus; initializeNativePreviewRenderer; receiveNativeVisualProjection | Initializes and updates the controlled popup selected by the host's explicit QA option. |
| controlled-popup-adapter.js | Shared GTK native host | WebKit script message handler: native.postMessage; QA-only | presentation-ready; presentation-applied; focus-applied; surface-action; native-preview-projection-accepted | Returns controlled popup actions and acknowledgments while the host owns visibility and preview resources. |
| activation.js | controlled-popup-adapter.js | submitSurfaceAction; QA-only | surface-action | Applies captured activation checks to the controlled popup's current receiver. |
Source and scope
The explorer uses the local verified architecture model. Source links in component details open GitHub at the inspected commit. The model distinguishes the default runtime from the controlled-preview alternative.