ARCHITECTURAL_OVERVIEW - mark-ik/graphshell GitHub Wiki
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.
Graphshell should prefer external normative standards whenever they specify the behavior we want, and should define internal specifications only when:
- no relevant external standard exists,
- Graphshell must project multiple standards into one product-specific model,
- Graphshell intentionally constrains or deviates from an external standard,
- 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.
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.
| 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 |
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
| 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 |
| 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 |
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) |
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.
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 |
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
|
- 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.
- 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:namepolicy; seeSYSTEM_REGISTER.md. - If you are adding a
GraphIntentvariant โ it must be handled inapply_intents(). - If you are adding a
DiagnosticChannelDescriptorโ it must have aseverityfield.
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.