ARCHITECTURAL_OVERVIEW - mark-ik/graphshell GitHub Wiki

Graphshell Architectural Overview

Last Updated: 2026-04-22 (Focus and runtime-extraction rows refreshed for M4.1 slices 1aโ€“1d and M4.4 thumbnail work; see iced-host migration plan ยง10 Progress Log 2026-04-22) Status: Canonical orientation doc โ€” updated with subsystem status map and dependency topology Purpose: High-level orientation, subsystem status at a glance, and dependency map. Canonical model details live in subsystem and implementation-strategy specs.


0. Standards Policy

Graphshell should prefer external normative standards whenever they specify the behavior we want, and should define internal specifications only when:

  1. no relevant external standard exists,
  2. Graphshell must project multiple standards into one product-specific model,
  3. Graphshell intentionally constrains or deviates from an external standard,
  4. Graphshell is the only meaningful source of truth for the behavior.

Practical use of external standards in this codebase:

  • as the normative source for browser/content behavior,
  • as terminology discipline,
  • as a guardrail for host/embedder behavior and interoperability.

Use 2026-03-12_specification_coverage_register.md as the canonical map of:

  • which external standards families matter to current/planned features,
  • which internal specs already exist,
  • which parts of the codebase are still unspecified or underspecified,
  • which feature families are inherently Graphshell-defined.

1. What Graphshell Is

Graphshell is a spatial browser/workbench with three authority domains:

  • Graph Tree: semantic identity, node/edge truth, traversal/history truth, lifecycle truth.
  • Workbench Tree: panes, splits, tabs, focus regions, frame/workbench arrangement.
  • Viewer Runtime: live rendering attachments reconciled from graph/workbench intent.

These domains are strictly separated. Mutation authority, routing, and registry boundaries are defined in implementation_strategy/system/system_architecture_spec.md.


2. Canonical Authority Map

Concern Canonical doc
System authority boundaries and registries implementation_strategy/system/system_architecture_spec.md
Graph/canvas interaction semantics implementation_strategy/graph/graph_node_edge_interaction_spec.md
Traversal model, edge payloads, history manager behavior implementation_strategy/subsystem_history/edge_traversal_spec.md
History subsystem policy and diagnostics expectations implementation_strategy/subsystem_history/SUBSYSTEM_HISTORY.md
Node lifecycle and runtime reconcile implementation_strategy/viewer/node_lifecycle_and_runtime_reconcile_spec.md
Viewer selection, presentation, fallback implementation_strategy/viewer/viewer_presentation_and_fallback_spec.md
Node examination / object-query surface technical_architecture/node_object_query_model.md
Workbench/frame/tile semantics implementation_strategy/workbench/workbench_frame_tile_interaction_spec.md
Graph-first frame semantics implementation_strategy/workbench/graph_first_frame_semantics_spec.md
Input routing and modal ownership implementation_strategy/aspect_input/input_interaction_spec.md
Command surfaces and omnibar/radial/context parity implementation_strategy/aspect_command/command_surface_interaction_spec.md
Interdomain projection and graphlet-first correspondence rules implementation_strategy/aspect_projection/projection_interdomain_contract_spec.md
UX semantic projection, probes, scenarios implementation_strategy/subsystem_ux_semantics/SUBSYSTEM_UX_SEMANTICS.md
Diagnostics contracts and health summaries implementation_strategy/subsystem_diagnostics/SUBSYSTEM_DIAGNOSTICS.md
Render/compositor pass ownership implementation_strategy/aspect_render/frame_assembly_and_compositor_spec.md
Focus authority and region navigation implementation_strategy/subsystem_focus/SUBSYSTEM_FOCUS.md
Storage, persistence, WAL integrity implementation_strategy/subsystem_storage/SUBSYSTEM_STORAGE.md
Accessibility, AccessKit bridge, Graph Reader implementation_strategy/subsystem_accessibility/SUBSYSTEM_ACCESSIBILITY.md
Intelligence distillation and typed artifact ownership implementation_strategy/aspect_distillery/ASPECT_DISTILLERY.md

3. Subsystem Status Map

Implementation status at the subsystem level. For per-feature breakdown see implementation_strategy/2026-03-01_complete_feature_inventory.md.

Status legend: โœ… Done / ๐Ÿ”จ Active (current milestone) / ๐Ÿ“‹ Planned (spec exists) / ๐Ÿ”ญ Speculative

Core Subsystems

Subsystem Status Summary Canonical doc
Graph โ€” Data Model โœ… Done Force-directed canvas; node/edge CRUD; WAL persistence (AES-256-GCM); zoom/pan/select/lasso; traversal-derived + user-grouped edges canvas/graph_node_edge_interaction_spec.md
Graph โ€” Node Lifecycle โœ… Done Four-state lifecycle (Active โ†’ Warm โ†’ Cold โ†’ Tombstone); LRU eviction; RuntimeBlocked + recovery affordance viewer/node_lifecycle_and_runtime_reconcile_spec.md
Graph โ€” Physics & Layout โœ…/๐Ÿ”จ Core force-directed engine done; physics presets wiring active; grid/hierarchical/radial layouts planned canvas/2026-02-24_physics_engine_extensibility_plan.md
Workbench โ€” Tile Tree โœ… Done egui_tiles; Tab Group / Split / Grid; Graph/Node/Tool panes; PaneLock; drag-drop/reorder workbench/workbench_frame_tile_interaction_spec.md
Workbench โ€” Frame Management โœ… Done FrameSnapshot (Layout + Manifest + Metadata); frame switching/workbar; pane-close successor focus handoff workbench/graph_first_frame_semantics_spec.md
Workbench โ€” Multi-View โœ… Done Multiple GraphViewId panes; Canonical vs Divergent layout modes; per-view selection state canvas/view_dimension_spec.md
Viewer โ€” Servo/Web โœ… Done web_runtime provider bundle (Servo/Wry integration; formerly "Verso mod"); Servo WebRender GL output; compositor callback bridge; webview lifecycle; http/https/file; JS/CSS/cookies viewer/VIEWER.md
Viewer โ€” Routing Authority โœ… Done crates/verso is the shell's routing authority: select_viewer_for_content / resolve_route_for_content decide engine + viewer + reason + owner (VersoResolvedRoute). Registry (ViewerRegistry) now owns only non-web viewer selection + capability description. ../../archive_docs/checkpoint_2026-04-21/graphshell_docs/implementation_strategy/system/2026-04-21_verso_shell_authority_refactor_plan.md (archived 2026-04-21)
Viewer โ€” Routing & Fallback โœ… Done ViewerRegistry (MIME โ†’ non-web viewer); placeholder fallback; capability declarations; attachment lifecycle viewer/viewer_presentation_and_fallback_spec.md
Viewer โ€” Non-Web Types ๐Ÿ“‹ Planned Wry native overlay (scaffold); PDF; CSV; Markdown; Settings pane; DOM inspector viewer/universal_content_model_spec.md
Viewer โ€” TileRenderMode ๐Ÿ”จ Active CompositedTexture / NativeOverlay / EmbeddedEgui / Placeholder enum active; pane-targeted mode dispatch live aspect_render/frame_assembly_and_compositor_spec.md
Command Surfaces ๐Ÿ”จ Active ActionRegistry routing done; Command Palette + Omnibar + Radial + Context surfaces active; palette/radial contract in closure aspect_command/command_surface_interaction_spec.md
Projection Aspect ๐Ÿ“‹ Planned Cross-domain representation model for linked/unlinked hosting, descriptor-driven projection, and graphlet-first local-world derivation without truth transfer aspect_projection/ASPECT_PROJECTION.md
Input Architecture โœ… Done Input context stack; chord/sequence keybindings; Gamepad support; modal capture aspect_input/input_interaction_spec.md
Render / Compositor ๐Ÿ”จ Active Three-pass composition (UI Chrome โ†’ Content โ†’ Overlay Affordance) done; CompositorAdapter GL isolation active; differential composition planned aspect_render/frame_assembly_and_compositor_spec.md
Distillery Aspect ๐Ÿ”ญ Speculative Security-gated transform layer from approved graph/history/clip/AWAL sources into typed intelligence artifacts; local-first and policy-bound by design aspect_distillery/ASPECT_DISTILLERY.md

Cross-Cutting Subsystems

Subsystem Status Summary Canonical doc
Focus ๐Ÿ”จ Active Six-track taxonomy (SemanticRegion / PaneActivation / GraphView / LocalWidget / EmbeddedContent / ReturnCapture); F6 region cycle done; FocusAuthorityMut transitional bundle + FocusRingSettings (duration / curve / enabled / color override) landed via M4.1 slices 1aโ€“1d (2026-04-22); split-authority resolution ongoing subsystem_focus/2026-03-08_unified_focus_architecture_plan.md
History โœ…/๐Ÿ“‹ Traversal capture, WAL logging, History Manager timeline done; temporal navigation / replay / time-travel preview spec-landed but runtime-pending subsystem_history/SUBSYSTEM_HISTORY.md
Diagnostics ๐Ÿ”จ Active ChannelRegistry; DiagnosticEvent ring; Diagnostics Inspector pane; channel severity (Error/Warn/Info); recovery affordance S5 active; AnalyzerRegistry + health summaries planned subsystem_diagnostics/SUBSYSTEM_DIAGNOSTICS.md
Storage โœ…/๐Ÿ“‹ WAL append-only log; single-write-path invariant; frame save/load; workspace manifest done; AES-256-GCM at-rest encryption planned subsystem_storage/SUBSYSTEM_STORAGE.md
UX Semantics ๐Ÿ“‹ Planned UxTree runtime snapshot; UxNodeId (stable path-based); UxProbeSet; UxScenario runner; WebDriver bridge โ€” partial active, spec closure in progress subsystem_ux_semantics/SUBSYSTEM_UX_SEMANTICS.md
Accessibility ๐Ÿ”จ Active AccessKit + egui bridge (version mismatch degraded); WebView accessibility tree forwarding active; Graph Reader (virtual a11y tree) planned; WCAG 2.2 AA normative target subsystem_accessibility/SUBSYSTEM_ACCESSIBILITY.md

Registry Infrastructure (System Layer)

All registries use namespace:name key policy. The canonical registry hub is implementation_strategy/system/register/SYSTEM_REGISTER.md.

Registry Status Purpose
ActionRegistry โœ… Done Action invocation routing โ€” no hardcoded command enums
ViewerRegistry โœ… Done MIME โ†’ viewer resolution; capability declarations
ChannelRegistry ๐Ÿ”จ Active Diagnostic channel schema and severity (formerly DiagnosticsRegistry)
InputRegistry โœ… Done Keybinding resolution
PhysicsProfileRegistry โœ… Done Physics presets (Liquid/Gas/Solid/Frozen)
LensCompositor โœ… Done Resolves Lens (topology + layout + physics + theme)
KnowledgeRegistry ๐Ÿ“‹ Planned UDC semantic tagging
ModRegistry โœ… Done Native mod loading via inventory::submit!
AgentRegistry ๐Ÿ“‹ Planned Autonomous background agents
ProtocolRegistry โœ… Done Protocol handlers (http, https, file)

4. Dependency Topology

Data flow and authority dependencies between subsystems. Arrows indicate "depends on / receives authority from."

                        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                        โ”‚   Storage (WAL)      โ”‚
                        โ”‚  โœ… persistence layer โ”‚
                        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                   โ”‚ durable state
                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                    โ”‚        Graph Subsystem        โ”‚
                    โ”‚  โœ… node/edge/lifecycle truth  โ”‚
                    โ””โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”˜
                        โ”‚ node identity          โ”‚ traversal edges
              โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
              โ”‚  Workbench Subsys  โ”‚   โ”‚  History Subsystem   โ”‚
              โ”‚  โœ… tile tree/panes โ”‚   โ”‚  โœ… done / ๐Ÿ“‹ replay  โ”‚
              โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                        โ”‚ pane host               โ”‚ timeline data
                        โ–ผ                         โ–ผ
              โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
              โ”‚              Viewer Subsystem                โ”‚
              โ”‚  โœ… Servo/web  ๐Ÿ”จ TileRenderMode  ๐Ÿ“‹ non-web  โ”‚
              โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                        โ”‚ render mode
                                        โ–ผ
                              โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                              โ”‚  Render/Compositor   โ”‚
                              โ”‚  ๐Ÿ”จ three-pass active โ”‚
                              โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
         โ”‚                  Cross-Cutting Authorities                โ”‚
         โ”‚                                                          โ”‚
         โ”‚  Focus โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ arbitrates input routing for all above   โ”‚
         โ”‚  ๐Ÿ”จ active       F6 cycle done; unified model in progress โ”‚
         โ”‚                                                          โ”‚
         โ”‚  Command Surfaces โ”€โ”€ routes actions into all subsystems  โ”‚
         โ”‚  ๐Ÿ”จ active          ActionRegistry; palette/radial active โ”‚
         โ”‚                                                          โ”‚
         โ”‚  Diagnostics โ”€โ”€โ”€โ”€โ”€โ”€โ”€ observability outlet for all above  โ”‚
         โ”‚  ๐Ÿ”จ active           channel ring; health summaries TBD   โ”‚
         โ”‚                                                          โ”‚
         โ”‚  UX Semantics โ”€โ”€ runtime semantic tree; test/probe layer โ”‚
         โ”‚  ๐Ÿ“‹ planned       UxTree partial; scenario runner planned โ”‚
         โ”‚                                                          โ”‚
         โ”‚  Accessibility โ”€โ”€ AccessKit bridge; Graph Reader planned โ”‚
         โ”‚  ๐Ÿ”จ active         bridge active (degraded); WCAG AA goal โ”‚
         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Key dependency rules (from system_architecture_spec.md):

  • Graph semantics โ‰  tile-tree layout. Graph Reducer owns model mutations; Workbench Authority owns pane arrangement.
  • Workbench layout โ‰  graph truth. A pane closing does not imply a node deletion.
  • Viewers โ‰  graph semantics. ViewerRegistry resolves rendering; it does not own node identity.
  • Commands โ‰  action meaning. ActionRegistry routes; subsystems define semantics.
  • Focus is the arbiter of input routing. No subsystem should capture input without going through Focus authority.
  • Diagnostics is observability infrastructure only. It does not own state or make routing decisions.

5. Implementation Closure Register

Spec-landed features not yet implemented in the runtime โ€” most likely to be misread as done.

Feature Spec Runtime Blocker
Faceted filter surface โœ… canvas/faceted_filter_surface_spec.md โŒ Not started Reducer filter execution; UxTree surface; diagnostics
Facet pane routing โœ… canvas/facet_pane_routing_spec.md โŒ Not started Facet-rail context binding; pane target resolution
Temporal navigation / replay โœ… subsystem_history/SUBSYSTEM_HISTORY.md โŒ Not started Detached preview controller; no-side-effect gates; return-to-present
History diagnostics + health summary โœ… subsystem_diagnostics/SUBSYSTEM_DIAGNOSTICS.md โŒ Not started history.* channel wiring; health surface; CI watchdog
Wry native overlay lifecycle โœ… viewer/wry_integration_spec.md ๐Ÿ—๏ธ Scaffold only E2E attach/hide/destroy; overlay sync; platform validation

6. Active Architectural Concerns

Open concerns as of 2026-03-08. See ../../archive_docs/checkpoint_2026-03-27/graphshell_docs/technical_architecture/ARCHITECTURAL_CONCERNS.md for the archived concern history and resolved items.

Concern Severity Notes
AddressKind migration to typed Address enum โœ… Resolved 2026-03-27 Address enum fully landed; url: String and address_kind: AddressKind retired from Node; PersistedAddress in persistence layer. See ../../archive_docs/checkpoint_2026-03-27/graphshell_docs/technical_architecture/ARCHITECTURAL_CONCERNS.md O1.
GraphshellClip address family โœ… Resolved 2026-03-27 verso://clip/<id> is canonical; VersoAddress::Clip, Address::Clip, routing and capture all wired. See ../../archive_docs/checkpoint_2026-03-27/graphshell_docs/technical_architecture/ARCHITECTURAL_CONCERNS.md O2.
RendererKind vs viewer_override relationship โœ… Resolved 2026-03-27 RendererKind retired from core extraction plan. Canonical field is viewer_override: Option<ViewerId> per UCM spec ยง4.1.
graph_app.rs size โœ… Substantially resolved 2026-03-27 Now 2,108 lines (down from 11,269). render/mod.rs (3,166 lines) is the remaining active decomposition target.
render/mod.rs size (5,146 lines) ๐ŸŸก Active decomposition Stage 1 done. Follow-on staging needed. Plan: aspect_render/2026-03-08_render_mod_decomposition_plan.md

7. Current Product Summary

  • Core browsing graph is functional (force-directed canvas, node lifecycle, WAL persistence).
  • Workbench tile tree is functional (tabs, splits, multi-pane, frame snapshots).
  • Traversal-aware edge/history model is the canonical runtime model.
  • Four-state lifecycle (Active โ†’ Warm โ†’ Cold โ†’ Tombstone) is canonical.
  • History Manager timeline/dissolved-tabs surface is active.
  • Temporal preview/replay is spec-complete but runtime-pending.
  • Faceted filtering is spec-complete but runtime-pending.
  • TileRenderMode is active; non-web viewers (Wry/PDF/Markdown) are planned.
  • Graphshell's UI backend now runs on egui-wgpu. Remaining renderer work centers on WebRender/runtime convergence and retiring the Servo GL parent-render callback bridge.
  • v0.0.2 release gate: AG0โ€“AG8 all closed with evidence (see 2026-03-03_pre_wgpu_plot.md).

For status-by-feature, use implementation_strategy/2026-03-01_complete_feature_inventory.md.


8. Read This Next

  • If you are changing reducer/model behavior โ†’ start in the relevant subsystem spec.
  • If you are changing pane/open/focus behavior โ†’ start in workbench and focus specs.
  • If you are changing user-visible interaction โ†’ start in the UX coverage matrix and canonical interaction spec.
  • If you are changing observability or test gates โ†’ start in diagnostics and UxScenario specs.
  • If you are adding a registry key โ†’ follow namespace:name policy; see SYSTEM_REGISTER.md.
  • If you are adding a GraphIntent variant โ†’ it must be handled in apply_intents().
  • If you are adding a DiagnosticChannelDescriptor โ†’ it must have a severity field.

9. Anti-Pattern

Do not treat this document as authority for:

  • concrete Rust type shapes,
  • lifecycle transition tables,
  • traversal append rules,
  • route naming policy,
  • diagnostics channel lists,
  • acceptance criteria.

Those belong in canonical subsystem/spec docs and must be changed there first.

โš ๏ธ **GitHub.com Fallback** โš ๏ธ