2026 02 24_interaction_and_semantic_design_schemes - mark-ik/graphshell GitHub Wiki
Status: Research / Synthesis
Context: Leveraging the Registry Layer Architecture (2026-02-22_registry_layer_plan.md) to define high-level UX patterns.
See Also: ../implementation_strategy/graph/multi_view_pane_spec.md (pane-hosted multi-view contract; graph-view isolation semantics)
Graphshell's architecture has evolved from a monolithic application to a registry-driven ecosystem. This enables a shift in design philosophy: from "configuring a tool" to "applying a Lens". This document outlines the core and extended design schemes that leverage this architecture to provide semantic meaning through interaction and physics.
Concept: Users should not manage disparate settings (layout, theme, physics) individually. They should adopt Lenses. A Lens is a named configuration that defines the "Physics of Logic" for a viewport.
Architecture Leverage: LensCompositor (Coordinator) + CanvasRegistry (Topology/Layout) + PhysicsProfileRegistry (Motion) + ThemeRegistry (Visuals).
-
The "File Explorer" Lens:
-
Topology:
topology:dag(Strict hierarchy, no cycles). -
Layout:
layout:tree(Indented list or node tree). -
Physics:
physics:solid(Rigid, directional gravity). - Theme: High contrast, structural lines.
-
Topology:
-
The "Brainstorm" Lens:
-
Topology:
topology:free(Undirected, cycles allowed). -
Layout:
layout:force_directed(Organic). -
Physics:
physics:liquid(Clustering, languid motion). - Theme: Dark/Soft, focus on content.
-
Topology:
-
Progressive Lenses: Automatically switching Lenses based on zoom level (LOD).
-
Zoom Out: Switch to
physics:gas(High repulsion) for overview/heatmap. -
Zoom In: Switch to
physics:liquid(Clustering) for context.
-
Zoom Out: Switch to
Concept: Motion conveys meaning. The way nodes move tells the user about their relationships and the nature of the data. Physics is not just for preventing overlap; it is a semantic channel.
Architecture Leverage: PhysicsProfileRegistry + CanvasRegistry (Interaction Policy).
-
Liquid (Organic/Clustering)
- Behavior: Nodes move languidly, "pooling" together based on shared attributes.
- Semantic Meaning: "These things are related."
-
Mechanism: Semantic attraction forces (
apply_semantic_clustering_forcesinrender/mod.rs). - Use Case: Knowledge graph, research, finding hidden connections.
-
Gas (Volumetric/Expansive)
- Behavior: Nodes repel strongly, filling available space. High entropy.
- Semantic Meaning: "This is the scope of the dataset."
- Mechanism: High repulsion, zero gravity, high damping.
- Use Case: Search results, unconnected datasets, overview mode.
-
Solid (Structural/Rigid)
- Behavior: Nodes lock into place relative to neighbors or a grid.
- Semantic Meaning: "This structure is authoritative."
- Mechanism: Stiff springs, directional gravity, grid snapping.
- Use Case: File system, timeline, organizational charts.
Concept: The same graph can be projected into different spatial arrangements without mutating the underlying data.
Architecture Leverage: GraphViewState + per-view local simulation state.
- Primary View: A graph view's current local spatial arrangement.
-
Alternative Projection: A temporary or specialized arrangement in a different graph view.
-
Timeline View: Project nodes onto an X-axis based on
created_at. -
Kanban View: Project nodes into buckets based on
statustag. - Map View: Project nodes onto lat/long if geospatial data exists.
-
Timeline View: Project nodes onto an X-axis based on
UX Implication: Users can pivot data instantly by opening a new pane with a different graph view or lens, while keeping another view open for context.
Concept: Controls should appear at the point of attention, populated by the context of the target.
Architecture Leverage: ActionRegistry + InputRegistry + KnowledgeRegistry.
-
Command Palette (Contextual and Global):
- The canonical name for the configurable action list. Two scope modes, one surface. Contextual scope: triggered by right-click / gamepad
Aon a focused node; filtered to actions relevant to the target viaActionRegistry::list_actions_for_context. Global scope: triggered byCtrl+K/F2/ gamepadStart; full searchable registry with context-relevant actions ranked first. - Content:
ActionRegistry::list_actions_for_context(context), grouped byActionCategory. Disabled actions shown greyed with tooltip — not hidden. - Example (contextual): Right-clicking a "PDF Node" with the PDF Mod shows "Extract Text".
-
Example (global):
Ctrl+K→ "Toggle Physics", "Switch to Dark Theme". -
See:
2026-02-24_control_ui_ux_plan.mdfor full layout spec.
- The canonical name for the configurable action list. Two scope modes, one surface. Contextual scope: triggered by right-click / gamepad
-
Radial Menu (Directional):
- Trigger: Default in Gamepad mode (D-pad / stick navigation). Available in Mouse/KB mode via hotkey. 8-sector layout, one action per sector, labels outside the ring.
- Content:
ActionRegistry::list_actions_for_context(context)— contextual, not hardcoded. - Example: Focusing a node and pressing the gamepad confirm button opens the radial menu with node actions. A "PDF Node" with the PDF Mod loaded adds "Extract Text" to overflow.
-
See:
2026-02-24_control_ui_ux_plan.mdfor full layout spec and gamepad wiring.
-
Semantic Navigation:
- Navigation is graph traversal. "Back" follows
Historyedges. - "Focus" drives expansion. Selecting a node pulls related nodes (via
physics:liquidattraction) into view.
- Navigation is graph traversal. "Back" follows
This document is a UX design reference, not an implementation roadmap. Implementation is
covered by 2026-02-22_registry_layer_plan.md (registries), ../implementation_strategy/graph/multi_view_pane_spec.md
(pane-hosted multi-view dispatch + graph-view isolation), and
2026-02-24_physics_engine_extensibility_plan.md (physics
presets and ExtraForce). This section notes gaps and ordering constraints.
Registry status: ActionRegistry, InputRegistry, LensCompositor, PhysicsProfileRegistry,
and CanvasRegistry are all defined in 2026-02-22_registry_layer_plan.md. They are not
new concepts introduced here. The radial menu and command palette (§4) emit ActionIds through
ActionRegistry::execute — no new dispatch mechanism is needed.
Sequencing constraints:
- Lens Resolution (
LensCompositorfallback chain: Workspace → User → Default) — blocked on Phase 6.2 callsite migration completing. Do not begin physics-preset UI work untilLensCompositor.resolve_lens()is the active code path. - Physics Tuning (Liquid/Gas/Solid parameter refinement) — can proceed in parallel with
Phase 6.2. Target: perceptually distinct behaviors at default zoom (not just parameter
differences). Coordinate with
PhysicsProfileinapp.rs. - Semantic Forces (
apply_semantic_clustering_forcesexpansion beyond UDC to tag overlap, link density) — blocked on Level 2 ExtraForce implementation (2026-02-24_physics_engine_extensibility_plan.md §Level 2). The function referenced here may be aspirational; verify its existence before expanding it. - Visual Feedback (theme reinforcing physics states) — blocked on
ThemeRegistryPhase 4 being active. Low priority relative to physics correctness.
Progressive Lenses (§1) — resolved: trigger semantics are specified in
../implementation_strategy/graph/layout_behaviors_and_physics_spec.md §§5–6. Switching is threshold-based
(not continuous interpolation), governed by a ProgressiveLensAutoSwitch preference
(Always / Ask / Never, default Ask) with a ±10 % hysteresis band at each breakpoint.
The Lens-physics binding preference (LensPhysicsBindingPreference) is also formally
specified there and chains after the progressive-switch gate. Do not implement progressive
Lens switching or physics binding before the prerequisites in the canonical physics spec
and runtime dependency docs are met.
Alternative view types (§3): Timeline, Kanban, and Map projections are now tracked as
layout algorithm requirements in 2026-02-24_physics_engine_extensibility_plan.md §Layout Algorithm Reference Table and as graph-view projection use cases in ../implementation_strategy/graph/multi_view_pane_spec.md.