-
Notifications
You must be signed in to change notification settings - Fork 0
shell_composition_model_spec
Date: 2026-03-25
Status: Canonical / Active — Phases 1–4 implemented
Scope: How Shell mounts and composes its major surfaces using egui's
named-panel system; how egui_tiles is scoped to the Workbench area only;
the three graph canvas hosting contexts; and the Navigator/Shell omnibar seam.
Related:
- SHELL.md — Shell domain spec (authority boundaries, what Shell owns)
- ../subsystem_ux_semantics/2026-04-05_command_surface_observability_and_at_plan.md — companion closure lane for command-surface provenance, semantic modeling, and AT validation
- ../navigator/NAVIGATOR.md — Navigator domain spec
- ../graph/GRAPH.md — Graph domain spec; the canvas is its primary rendered surface
- ../workbench/WORKBENCH.md — Workbench domain spec
- ../../technical_architecture/unified_view_model.md — §3 host model, §13 not-everything-is-a-tile
- ../../TERMINOLOGY.md — canonical term definitions
Implementation anchors (current code):
-
shell/desktop/ui/toolbar/toolbar_ui.rs— currentTopBottomPanel::top("graph_bar")andTopBottomPanel::top("fullscreen_origin_strip") -
shell/desktop/ui/workbench_host.rs— currentSidePanelworkbench host rendering -
shell/desktop/ui/gui_frame.rs— frame phase facade; ownsTree<TileKind>and panel sequence -
shell/desktop/ui/gui_orchestration.rs— orchestration layer above gui_frame
The current rendering path calls egui panels in sequence across multiple files with no formal composition structure:
toolbar_ui.rs:
TopBottomPanel::top("fullscreen_origin_strip") // conditional
TopBottomPanel::top("graph_bar") // toolbar + omnibar
workbench_host.rs:
SidePanel::right(...) // workbench host
gui_frame.rs (remaining central area):
egui_tiles Tree<TileKind> // tile tree — owns everything remaining
Two problems follow from this:
-
egui_tilesclaims the whole remaining area, which means the graph canvas must always be aTileKind::Graphguest inside the tile tree. The graph does not exist independently of the Workbench. -
graph_barmixes controls from three distinct authorities — Shell (commands, settings, omnibar input), Navigator (graph view tabs, lens menu, physics menu, +Node, +Edge), and Viewer (back/forward/reload for the focused pane). This is the exact scope conflation documented inchrome_scope_split_plan.md §1.
This spec defines the replacement: a formal ShellLayout using egui's named
panel system where each slot has a declared authority, and egui_tiles governs
only the Workbench area slot.
Shell owns the top-level window composition. The layout is a named-slot skeleton
using egui's TopBottomPanel and SidePanel hierarchy, with the remaining
CentralPanel area allocated to the primary graph canvas.
┌──────────────────────────────────────────────────────────┐
│ ShellSlot::CommandBar (TopBottomPanel::top) │ Shell
│ omnibar input, command palette, Shell status │
├───────────────────────┬──────────────────────────────────┤
│ ShellSlot:: │ ShellSlot::GraphPrimary │
│ NavigatorLeft │ (CentralPanel) │
│ (SidePanel::left) │ graph canvas — direct mount, │ Navigator /
│ │ no egui_tiles wrapper │ Graph
│ Navigator hosts │ │
│ (sidebar form factor) │ when WorkbenchActive or Pinned: │
│ │ graph canvas shrinks or hides; │
├───────────────────────┤ WorkbenchArea takes precedence │
│ ShellSlot:: │ │ Workbench
│ WorkbenchArea ├──────────────────────────────────┤
│ (SidePanel::right │ ShellSlot::NavigatorBottom │
│ or overlay region) │ (TopBottomPanel::bottom) │
│ │ optional toolbar-form Navigator │ Navigator
│ egui_tiles lives here │ host │
└───────────────────────┴──────────────────────────────────┘
│ ShellSlot::StatusBar (TopBottomPanel::bottom) │ Shell
│ ambient system status, background task indicators │
└──────────────────────────────────────────────────────────┘
| Slot | egui primitive | Authority | Contents |
|---|---|---|---|
CommandBar |
TopBottomPanel::top("shell_command_bar") |
Shell | Omnibar (input + Navigator context display), command palette trigger, settings access, sync status |
NavigatorLeft |
SidePanel::left("navigator_host_left") |
Navigator (content) / Shell (lifecycle, resize handle) | Navigator sidebar host when anchor = Left |
NavigatorRight |
SidePanel::right("navigator_host_right") |
Navigator (content) / Shell (lifecycle, resize handle) | Navigator sidebar host when anchor = Right — only active when WorkbenchArea is not occupying right edge |
WorkbenchArea |
SidePanel::right("workbench_area") or overlay |
Workbench |
egui_tiles::Tree<TileKind> — panes, frames, splits. Active only in WorkbenchActive / WorkbenchPinned states |
GraphPrimary |
CentralPanel (remaining area) |
Graph (content) / Shell (mount) | Primary graph canvas — direct egui render, no tile wrapper. Always present unless fullscreen pane overrides |
NavigatorBottom |
TopBottomPanel::bottom("navigator_host_bottom") |
Navigator (content) / Shell (lifecycle) | Optional toolbar-form Navigator host when anchor = Bottom |
StatusBar |
TopBottomPanel::bottom("shell_status_bar") |
Shell | Ambient system status, process indicators, background task count |
egui resolves panels by declaration order. The required order is:
-
StatusBar(bottom — must be declared before CentralPanel) -
NavigatorBottom(bottom — above status bar) -
CommandBar(top) -
NavigatorLeft(left — only when enabled) -
WorkbenchArea(right — only whenWorkbenchActiveorWorkbenchPinned) -
NavigatorRight(right — only when enabled and WorkbenchArea not on right) -
GraphPrimary(CentralPanel — always last)
This is formalised as ShellLayoutPass::render(&self, ctx, slots) — a single
function that owns the panel declaration sequence and routes each slot to the
appropriate authority's render function.
GraphOverlayActive is the only state where WorkbenchArea is not a docked
named panel. In this state, Shell renders GraphPrimary first, then renders
the Workbench as a floating overlay above it.
The overlay contract is:
-
Z-order:
GraphPrimaryrenders first; the Workbench overlay renders after it and appears visually above it. -
Input routing: pointer and keyboard input inside the overlay rect target
the overlay only. Input outside the overlay rect targets
GraphPrimary. -
Graph continuity:
GraphPrimaryremains live and continues rendering behind the overlay. The overlay may dim the graph beneath it, but does not freeze graph state. - Dismissal: overlay dismissal policy is Shell-owned. Clicking outside the overlay does not implicitly dismiss it unless Shell explicitly enables that policy for a given command surface state.
- Geometry authority: Shell computes the overlay rect and applies its z-order and hit-testing policy. Workbench renders only within the rect Shell assigns.
One concrete representation is:
pub struct WorkbenchOverlayLayout {
pub rect: egui::Rect,
pub modal: bool,
pub blocks_graph_input: bool,
pub dim_graph_primary: bool,
}The exact fields may evolve, but the authority rule does not: Shell owns overlay geometry, z-order, and hit-testing behavior.
WorkbenchArea is conditional. It is shown only when WorkbenchLayerState is
WorkbenchActive or WorkbenchPinned. In GraphOnly and GraphOverlayActive
states the slot is not declared, so GraphPrimary expands to fill the full
window width.
When WorkbenchArea is declared, GraphPrimary shrinks to the remaining
central area. The graph canvas renders in that remaining area — it is still
present, just smaller.
This replaces the current model where the tile tree claims the central area
unconditionally and the graph canvas must be a TileKind::Graph tile to appear
at all.
egui_tiles::Tree<TileKind> is rendered inside WorkbenchArea only.
// CORRECT: tile tree rendered inside the WorkbenchArea slot
SidePanel::right("workbench_area")
.show(ctx, |ui| {
tree.ui(&mut tile_behavior, ui);
});
// INCORRECT (current): tile tree rendered in CentralPanel, claiming all remaining space
CentralPanel::default()
.show(ctx, |ui| {
tree.ui(&mut tile_behavior, ui); // ← this is what we are replacing
});Consequences:
- A
TileKind::Graph(GraphViewId)tile is now one of three valid hosting modes for a graph canvas, not the mandatory wrapper. A graph canvas can exist without any tile tree entry. - The graph canvas renders in
GraphPrimarywhen it is the primary Shell surface. When the user explicitly brings a graph view into the Workbench for a split,TileKind::Graph(GraphViewId)hosts it there instead. - A zero-Workbench product state (shell + graph only, no open panes) is valid
and complete.
WorkbenchAreais simply not rendered.
A graph canvas (GraphViewId + layout state + camera state) is a render unit
that is agnostic to its hosting context. The context determines lifecycle,
surrounding chrome, and rect allocation — not what is rendered.
pub enum GraphCanvasHostCtx {
/// Mounted directly by Shell in GraphPrimary (CentralPanel).
/// No surrounding chrome. Lifecycle owned by Shell.
ShellPrimary,
/// Hosted as TileKind::Graph(GraphViewId) inside the Workbench tile tree.
/// Surrounded by a tab strip. Lifecycle owned by Workbench.
WorkbenchTile { tile_id: TileId },
/// Hosted inside a Navigator specialty host for a scoped graphlet view
/// (ego, corridor, component, atlas, etc.).
/// Surrounded by Navigator chrome. Lifecycle owned by Navigator.
NavigatorSpecialty { graphlet_kind: GraphletKind },
}| Property | ShellPrimary |
WorkbenchTile |
NavigatorSpecialty |
|---|---|---|---|
| Rect source |
CentralPanel remaining area |
tile rect from egui_tiles
|
Navigator host inner rect |
| Chrome | none | tab strip | Navigator chrome (graphlet label, scope controls) |
| Lifecycle owner | Shell | Workbench | Navigator |
GraphViewId persistence |
persisted as primary view | persisted with tile tree | session-scoped or pinned graphlet |
| Edge family mask | full (user's active lens) | full or lens-filtered | graphlet-specific (may be more restricted) |
| Camera state | independent per GraphViewId
|
independent per GraphViewId
|
independent per GraphViewId
|
| Layout algorithm | user-chosen (GraphLayoutMode) |
user-chosen | Navigator-chosen for graphlet shape (may differ from primary) |
| Mutation authority | Graph domain — full | Graph domain — full | Graph domain — full (Navigator emits intents, Graph executes) |
The invariant: all three contexts render the same graph truth via the same
GraphCanvas render unit. The hosting context changes presentation and
lifecycle; it does not change what graph truth is shown or who owns mutation.
Currently the primary graph canvas is always TileKind::Graph(GraphViewId)
inside the tile tree, rendered in the central area. The migration:
- Add
ShellPrimaryas a valid hosting context; the canvas can render inGraphPrimary(CentralPanel) without a tile tree entry. - When
WorkbenchLayerStateisGraphOnlyorGraphOverlayActive, the canvas renders inShellPrimarycontext — no tile tree involved. - When the user explicitly opens a graph view pane in the Workbench, the
canvas renders as
WorkbenchTile— this is the existing behavior, unchanged. - Navigator specialty graph views use
NavigatorSpecialty— new context, added when Navigator graphlet views are implemented.
The migration is additive: TileKind::Graph continues to work as-is.
ShellPrimary is a new path that replaces the forced-tile path for the default
zero-Workbench state.
The CommandBar slot is Shell-owned. The omnibar within it is a composite
widget: Shell owns the widget frame and input handling; Navigator contributes
a read-only context projection to a designated display region.
Navigator produces one NavigatorContextProjection per frame. Shell reads it
at render time.
/// Produced by Navigator each frame. Read by Shell for omnibar display mode.
/// Navigator owns the content; Shell owns the rendering context and widget.
pub struct NavigatorContextProjection {
/// Stable breadcrumb path: active scope root + containment ancestry if present.
/// Uses containment ancestry, NOT shortest path (per unified_view_model §15).
/// None if no meaningful graph context is active.
pub breadcrumb: Option<BreadcrumbPath>,
/// Active graphlet label if a named or pinned graphlet is active.
pub graphlet_label: Option<String>,
/// Compact scope badge text for input mode (one word or short phrase).
/// Shown even when omnibar is in input mode.
pub scope_badge: Option<String>,
}
pub struct BreadcrumbPath {
/// Ordered tokens: [scope_root?, containment_ancestors*, active_node_address]
pub tokens: Vec<BreadcrumbToken>,
}
pub struct BreadcrumbToken {
pub label: String,
pub node_key: Option<NodeKey>, // None for scope roots without a graph node
}| Mode | Trigger | Shell renders | Navigator contributes |
|---|---|---|---|
| Display | omnibar not focused | full widget background + right-side controls |
breadcrumb rendered left-aligned in a read-only region; graphlet_label as a badge |
| Input | user clicks omnibar or presses shortcut | full widget background + text input field + completions | only scope_badge (small, non-interactive label beside input field) |
| Fullscreen |
fullscreen_origin_strip active |
condensed strip showing current URL | not shown |
The transition between display mode and input mode is Shell-owned. When the
omnibar gains focus (click, keyboard shortcut, or command palette invocation),
Shell switches to input mode and the breadcrumb region collapses to just the
scope_badge.
Navigator does not own the input field, completion list, or dispatch logic. Shell does not own the breadcrumb content. The seam is the struct.
CommandBar is a Shell host-thread surface even when it depends on
background data.
The threading contract is:
- input state, mode switches, and completion-list presentation are Shell-owned frame-loop state
- Navigator contributes only frame-readable context projection
(
NavigatorContextProjection) - any background provider fetch, index lookup, or remote suggestion request
must run under Shell/Register supervision (
ControlPanelor equivalent), not via ad hoc toolbar-owned detached threads - background results are ingested by Shell at frame boundaries through an explicit mailbox/receiver owned by the current omnibar session
Current-state note: the landed baseline already follows this split through the
Shell-owned omnibar session carrier plus supervised HostRequestMailbox<T> and
typed frame-inbox drainage for longer-lived relays. The remaining work is to
prove and document that boundary consistently, not to reopen it as speculative design.
This keeps the omnibar aligned with the broader Shell-as-host rule: Shell owns the widget, focus, and visible state; background runtime work only feeds it through explicit host-owned seams.
The CommandBar may submit actions whose target depends on the currently
focused surface. That target resolution is not inferred ad hoc from whichever
subsystem most recently rendered; it is a first-class per-frame input to Shell.
One concrete shape is:
pub struct CommandBarFocusTarget {
pub focused_surface: FocusedSurface,
pub focused_node: Option<NodeKey>,
}
pub enum FocusedSurface {
GraphPrimary(GraphViewId),
WorkbenchTile { tile_id: TileId, pane_id: PaneId },
NavigatorHost { host_id: NavigatorHostId },
}The required precedence rule is:
- keyboard focus owner wins
- otherwise, last pointer-interacted surface wins
- otherwise, no focused command target is exposed in
CommandBar
This rule is Shell-owned and evaluated once per frame before rendering the
CommandBar. The bar itself no longer hosts viewer chrome directly; this
target carrier exists so omnibar submission, command entry, and other
Shell-owned routing can resolve the correct graph/workbench target without
depending on render order.
rather than re-deriving focus inside toolbar code.
Current-state note: CommandBarFocusTarget is now the landed baseline carrier.
The remaining closure work is its provenance/evidence model: diagnostics
receipts, UxTree trace projection, and focus-return / AT validation are tracked
in ../subsystem_ux_semantics/2026-04-05_command_surface_observability_and_at_plan.md.
toolbar_ui.rs still renders these in shell_command_bar today, but the
prototype target architecture is stricter than "better labeled mixed chrome."
The CommandBar should converge to a Shell-owned bar containing only
Shell-owned controls plus the explicit Navigator read-only omnibar-context
seam.
| Current control | Correct authority | Prototype target |
|---|---|---|
| Omnibar input field | Shell | Keep in CommandBar input region |
| Omnibar breadcrumb / context display | Navigator (read-only seam) | Keep only as the explicit read-only omnibar-context seam |
| Graph view tabs | Navigator | Relocate to a Navigator host slot (NavigatorLeft, NavigatorRight, or NavigatorBottom) |
| Wry / Servo compat toggle | Viewer | Remove from CommandBar; relocate only if a viewer-local debug/control surface still needs it |
| Back / Forward buttons | Viewer (per-pane) | Relocate to pane-local viewer chrome, not CommandBar
|
| Reload / Stop / Zoom controls | Viewer (per-pane) | Relocate to pane-local viewer chrome, not CommandBar
|
| Undo / Redo | Graph | Relocate to graph-local chrome or command surfaces |
| +Node / +Edge / +Tag | Graph | Relocate to graph-local chrome or command surfaces |
| Lens menu | Graph / Navigator-adjacent | Relocate to graph-view or Navigator-owned chrome |
| Physics menu | Shell policy or graph-facing config, depending on final contract | Remove from CommandBar; if retained, expose through a Shell control surface rather than primary command chrome |
| Fit | Graph | Relocate to graph-local chrome |
| Settings button | Shell | Keep in CommandBar right region |
| Command palette button | Shell | Keep in CommandBar right region |
| Sync status dot | Shell (ambient system status) | Keep in CommandBar right region or StatusBar
|
The redistribution therefore does require some controls to move or disappear, not merely to be re-labeled inside the same mixed bar.
The composition model is formalized as a single render coordinator:
/// Owns the egui panel declaration sequence for one frame.
/// Prevents panel order drift and makes slot authority explicit.
pub struct ShellLayoutPass<'a> {
ctx: &'a egui::Context,
layer_state: WorkbenchLayerState,
navigator_ctx: &'a NavigatorContextProjection,
navigator_hosts: &'a [NavigatorHostLayout],
}
impl<'a> ShellLayoutPass<'a> {
/// Renders all Shell panels in the correct declaration order.
/// Calls into Shell, Navigator, and Workbench render functions
/// for each slot. Returns slot rects for downstream use.
pub fn render(self, slots: &mut ShellSlotRenderArgs) -> ShellSlotRects;
}
pub struct ShellSlotRects {
pub command_bar: egui::Rect,
pub graph_primary: egui::Rect,
pub workbench_area: Option<egui::Rect>,
pub navigator_left: Option<egui::Rect>,
pub navigator_right: Option<egui::Rect>,
pub navigator_bottom: Option<egui::Rect>,
pub status_bar: Option<egui::Rect>,
}ShellLayoutPass replaces the current scattered panel calls in toolbar_ui.rs
and workbench_host.rs. It is called once per frame from gui_frame.rs (or
its successor) after pre-frame ingest completes.
WorkbenchLayerState continues to govern when WorkbenchArea is shown. The
mapping to ShellLayoutPass behavior:
WorkbenchLayerState |
WorkbenchArea slot |
GraphPrimary |
Navigator hosts |
|---|---|---|---|
GraphOnly |
not rendered | full remaining area | rendered if enabled |
GraphOverlayActive |
rendered as floating overlay | full area behind overlay | rendered if enabled |
WorkbenchActive |
rendered as right sidebar | shrunk to remaining area | rendered if enabled |
WorkbenchPinned |
rendered as pinned right sidebar | shrunk to remaining area | rendered if enabled |
Input routing expectations:
WorkbenchLayerState |
Pointer input inside Workbench rect | Pointer input outside Workbench rect | Keyboard focus precedence |
|---|---|---|---|
GraphOnly |
n/a | GraphPrimary |
graph or active Shell widget |
GraphOverlayActive |
Workbench overlay | GraphPrimary |
keyboard focus owner wins |
WorkbenchActive |
WorkbenchArea |
GraphPrimary / other Shell slots |
keyboard focus owner wins |
WorkbenchPinned |
WorkbenchArea |
GraphPrimary / other Shell slots |
keyboard focus owner wins |
ChromeExposurePolicy continues to derive from WorkbenchLayerState and
governs which Navigator hosts are shown in each state (per
2026-03-13_chrome_scope_split_plan.md §8).
- Define
ShellSlotenum andShellLayoutPassstruct - Move panel declaration sequence into
ShellLayoutPass::render() - Rename
"graph_bar"panel ID to"shell_command_bar"with a settings key migration (no behavioral change) -
egui_tilescontinues to render in CentralPanel for now (deferred to Phase 2)
Acceptance: panel order is owned by one function; no behavioral change.
- Add
WorkbenchAreaas a namedSidePanel::rightslot - Move
Tree<TileKind>render call insideWorkbenchArea -
GraphPrimary(CentralPanel) renders the graph canvas directly viaGraphCanvas::render(GraphViewId, ui, GraphCanvasHostCtx::ShellPrimary)whenWorkbenchLayerStateisGraphOnlyorGraphOverlayActive -
TileKind::GraphinsideWorkbenchAreacontinues to work as-is
Acceptance: zero-Workbench state renders the graph canvas without a tile
tree entry; WorkbenchActive state renders both the canvas in GraphPrimary
and the tile tree in WorkbenchArea; no existing tile behavior changes.
- Define
NavigatorContextProjectionstruct - Navigator computes it each frame from current graphlet / scope / selection
- Shell reads it in omnibar display mode
- Graph view tabs move from
CommandBarinterior to Navigator projection or to a dedicated Navigator toolbar host
Acceptance: omnibar display mode shows Navigator breadcrumb; input mode shows only scope badge; graph view tabs are not rendered by Shell-owned code.
Status: Implemented 2026-04-07
- Added
NavigatorSpecialtytoGraphCanvasHostCtx - Navigator hosts now carry specialty graphlet state via
navigator_specialty_viewsand render a scoped graph canvas inside the host using aGraphletKind-parameterized transientGraphViewId - Specialty views now derive from the current focused selection, not an ad hoc local host cache
- Navigator now chooses specialty-view policy at activation time: corridor / bridge graphlets use tree layout, workbench-correspondence views use grid layout, and other current specialty kinds default to the standard force-directed graph canvas policy
- Specialty edge-projection override is applied when the graphlet kind implies
a constrained family projection (
Session,WorkbenchCorrespondence)
Implementation receipt (2026-04-07):
-
shell/desktop/ui/shell_layout_pass.rsdefinesGraphCanvasHostCtx::NavigatorSpecialty { graphlet_kind } -
app/intent_phases.rsderives and maintains transient specialty graph views underworkbench_session.navigator_specialty_views -
shell/desktop/ui/workbench_host.rsexposes ego / corridor / component specialty controls, clears the active specialty view, and mounts the graphlet canvas inside the Navigator host -
shell/desktop/workbench/tile_render_pass.rsrenders the scoped specialty graph canvas and routes its mutation intents through Graph/Workbench paths
Acceptance: ego graphlet / corridor view renders in a Navigator host with Navigator chrome; mutation intents from within it route to Graph domain normally.
- Panel declaration sequence is owned by one function (
ShellLayoutPass::render). -
egui_tiles::Tree<TileKind>is rendered insideWorkbenchAreaonly — not inCentralPanel. - With no open panes (
WorkbenchLayerState::GraphOnly), the graph canvas renders directly inCentralPanelwith noTileKind::Graphentry. - Opening a pane transitions to
WorkbenchActive;WorkbenchAreaappears;GraphPrimaryshrinks to its remaining area. -
TileKind::Graph(GraphViewId)inside the tile tree continues to work identically to its current behavior. - Existing Navigator host resize, show/hide, and pinning behavior is unchanged.
- All current tests pass. Snapshot assertions for
WorkbenchLayerStateandChromeExposurePolicypass without modification.
-
WorkbenchLayerStatevariants and their semantics -
ChromeExposurePolicyderivation fromWorkbenchLayerState -
TileKind,TileId,egui_tilestree structure, or tile behavior contracts -
GraphViewIdidentity model -
GraphMutation / WorkbenchIntent / RuntimeEffectauthority split - Navigator host scope settings (
Both/GraphOnly/WorkbenchOnly/Auto) - Any existing test scenarios or snapshot fixtures
- Home
-
design_docs
-
archive_docs
- checkpoint_2026-01-29
- checkpoint_2026-02-01
-
checkpoint_2026-02-09
- [Claude ANALYSIS 2.9.26](design_docs/archive_docs/checkpoint_2026-02-09/Claude ANALYSIS 2.9.26)
- [Gemini Graphshell Analysis 2.9.26](design_docs/archive_docs/checkpoint_2026-02-09/Gemini Graphshell Analysis 2.9.26)
- GRAPHSHELL_CHANGELOG
- checkpoint_2026-02-10
- checkpoint_2026-02-11
- checkpoint_2026-02-12
- checkpoint_2026-02-14_no_legacy_cleanup
-
checkpoint_2026-02-16
- 2026-02-11_camera_zoom_plan
- 2026-02-11_center_camera_plan
- 2026-02-11_graph_persistence_plan
- 2026-02-11_phase1_refinement_plan
- 2026-02-11_search_filtering_plan
- 2026-02-11_thumbnails_favicons_plan
- 2026-02-12_architecture_reconciliation
- 2026-02-12_egui_tiles_implementation_guide
- 2026-02-12_egui_tiles_implementation_plan
- 2026-02-12_persistence_ux_plan
- 2026-02-12_physics_selection_plan
- 2026-02-12_servoshell_inheritance_analysis
- 2026-02-13_committed_vs_planned_architecture
- 2026-02-13_graph_tile_architecture_research
- 2026-02-13_graph_tile_unification_plan
- 2026-02-14_graph_tile_parity_research
- 2026-02-14_servo_architecture_constraints
- 2026-02-15_navigation_control_plane_plan
- NAVIGATION_NEXT_STEPS_OPTIONS
- SERVO_INTEGRATION_BRIEF
- checkpoint_2026-02-17
- checkpoint_2026-02-19
- checkpoint_2026-02-20
-
checkpoint_2026-02-21
- .claude
- readmes
- checkpoint_2026-02-22
- checkpoint_2026-02-23
-
checkpoint_2026-02-24
- 2026-02-11_performance_optimization_plan
- 2026-02-16_architecture_and_navigation_plan
- 2026-02-18_edge_operations_and_cmd_palette_plan
- 2026-02-19_graph_ux_polish_plan
- 2026-02-19_layout_advanced_plan
- 2026-02-20_cross_platform_sync_and_extension_plan
- 2026-02-24_input_surface_polish_plan
- 2026-02-24_step5_5_workspace_access_control
- 2026-02-24_sync_logic_validation_plan
- 2026-02-24_workspace_routing_polish_plan
- GRAPHSHELL_P2P_COLLABORATION
-
checkpoint_2026-02-25
-
stubs
- 2026-02-21_control_panel_async_scaling
- 2026-02-25_planning_register_backlog_and_copilot_guides
- 2026-02-25_subsystem_accessibility
- 2026-02-25_subsystem_diagnostics
- 2026-02-25_subsystem_history_temporal_integrity
- 2026-02-25_subsystem_persistence_integrity
- 2026-02-25_subsystem_security_access_control
- IMPLEMENTATION_ROADMAP.pointer_stub
- 2026-02-24_immediate_priorities
- 2026-02-24_spatial_accessibility_plan
- 2026-02-25_accessibility_contracts_diagnostics_and_validation_strategy
- 2026-02-25_backlog_ticket_stubs
- 2026-02-25_copilot_implementation_guides
- 2026-02-25_planning_register_lane_sequence_receipt
- IMPLEMENTATION_ROADMAP
-
stubs
- checkpoint_2026-02-26
-
checkpoint_2026-02-27
-
graphshell_docs
- technical_architecture
- testing
- 2026-02-27_planning_register_historical_tail_archive_receipt
-
graphshell_docs
-
checkpoint_2026-03-01
- 2026-02-27_ux_baseline_done_definition
- 2026-02-28_current_milestone_ux_contract_checklist
- 2026-02-28_ux_issue_domain_map
- 2026-03-01_embedder_debt_host_ui_boundary_ownership_receipt
- 2026-03-01_issue_171_compositor_chaos_mode_receipt
- 2026-03-01_issue_175_content_open_routing_receipt
- 2026-03-01_issue_180_bridge_diagnostics_wishlist_receipt
- 2026-03-01_issue_180_bridge_probe_instrumentation_receipt
- 2026-03-01_issue_180_bridge_spike_export_harness_receipt
- 2026-03-01_issue_180_bridge_spike_run_01_receipt
- 2026-03-01_issue_180_bridge_spike_run_02_receipt
- 2026-03-01_issue_180_bridge_spike_run_03_receipt
- 2026-03-01_issue_180_bridge_spike_sample_schema_receipt
- 2026-03-01_issue_180_gl_to_wgpu_bridge_baseline_receipt
- 2026-03-01_issue_180_scissor_box_restoration_fix_receipt
- checkpoint_2026-03-05
- checkpoint_2026-03-07
-
checkpoint_2026-03-10
-
graphshell_docs
- implementation_strategy
- 2026-03-10_planning_register_audit_cleanup_receipt
-
graphshell_docs
-
checkpoint_2026-03-18
-
graphshell_docs
- implementation_strategy
- 2026-03-18_event_log_fact_store_query_architecture
- 2026-03-18_fact_query_type_sketch
- node_navigation_history_spec
-
graphshell_docs
-
checkpoint_2026-03-19
-
graphshell_docs
- implementation_strategy
-
graphshell_docs
- checkpoint_2026-03-21
-
checkpoint_2026-03-22
-
graphshell_docs
- implementation_strategy
-
graphshell_docs
-
checkpoint_2026-03-27
-
graphshell_docs
- technical_architecture
-
graphshell_docs
-
checkpoint_2026-03-28
-
graphshell_docs
- implementation_strategy
-
graphshell_docs
-
checkpoint_2026-04-01
-
graphshell_docs
-
implementation_strategy
-
graph
- 2026-02-20_node_badge_and_tagging_plan
- 2026-02-22_multi_graph_pane_plan
- 2026-02-23_graph_interaction_consistency_plan
- 2026-02-23_udc_semantic_tagging_plan
- 2026-02-25_progressive_lens_and_physics_binding_plan
- 2026-03-05_hybrid_graph_view_overview_atlas_plan
- 2026-03-31_node_badge_and_tagging_follow_on_plan
-
graph
-
implementation_strategy
-
graphshell_docs
-
checkpoint_2026-04-02
-
graphshell_docs
- implementation_strategy
-
graphshell_docs
-
checkpoint_2026-04-03
-
graphshell_docs
- implementation_strategy
-
graphshell_docs
-
checkpoint_2026-04-06
-
graphshell_docs
-
implementation_strategy
- subsystem_ux_semantics
-
implementation_strategy
-
graphshell_docs
-
checkpoint_2026-04-07
-
graphshell_docs
-
implementation_strategy
- subsystem_ux_semantics
-
implementation_strategy
-
graphshell_docs
-
checkpoint_2026-04-09
-
wr-wgpu-notes
- 2026-03-01_webrender_wgpu_renderer_implementation_plan
- 2026-04-03_p6_progress_report
- 2026-04-03_p8_progress_report
- 2026-04-04_p10_progress_report
- 2026-04-04_p9_progress_report
- 2026-04-05_p11_progress_report
- 2026-04-05_p12_progress_report
- 2026-04-07_p13_progress_report
- 2026-04-07_p14_progress_report
- 2026-04-08_live_full_reftest_confirmation
- draw_context_plan
- PROGRESS
- project_wgpu_backend
- servo_wgpu_integration
- shader_translation_journal
- texture_cache_cleanup_plan
- typed_pipeline_metadata_plan
- wasm-portability-checklist
- wgpu-backend-minimal-plan
- wr_wgpu_debug_plan
- wr_wgpu_diagnostics_archive
-
wr-wgpu-notes
-
graphshell_docs
- design
-
implementation_strategy
- aspect_command
- aspect_control
- aspect_distillery
- aspect_input
- aspect_projection
-
aspect_render
- 2026-03-03_servo_wgpu_upgrade_audit_report
- 2026-03-08_render_mod_decomposition_plan
- 2026-03-12_compositor_expansion_plan
- 2026-03-27_egui_retained_state_efficiency_and_physics_worker_evaluation_plan
- 2026-03-27_physics_spike_metrics
- 2026-04-12_rendering_pipeline_status_quo_plan
- ASPECT_RENDER
- frame_assembly_and_compositor_spec
- gl_to_wgpu_plan
- render_backend_contract_spec
- running_app_state_boundary_spec
-
graph
- 2026-02-24_physics_engine_extensibility_plan
- 2026-02-25_doi_fisheye_plan
- 2026-02-27_roadmap_lane_19_readiness_plan
- 2026-02-27_viewdimension_acceptance_contract
- 2026-03-05_hybrid_graph_view_overview_atlas_plan
- 2026-03-11_graph_enrichment_plan
- 2026-03-14_canvas_behavior_contract
- 2026-03-14_edge_operability_matrix
- 2026-03-14_edge_visual_encoding_spec
- 2026-03-14_graph_relation_families
- 2026-03-21_edge_family_and_provenance_expansion_plan
- 2026-03-21_edge_payload_type_sketch
- 2026-04-01_swatch_spec_extraction_plan
- 2026-04-02_parry2d_scene_enrichment_plan
- 2026-04-02_scene_mode_ux_plan
- 2026-04-03_damping_profile_follow_on_plan
- 2026-04-03_edge_routing_follow_on_plan
- 2026-04-03_layout_backend_state_ownership_plan
- 2026-04-03_layout_transition_and_history_plan
- 2026-04-03_layout_variant_follow_on_plan
- 2026-04-03_node_glyph_spec
- 2026-04-03_physics_preferences_surface_plan
- 2026-04-03_physics_region_plan
- 2026-04-03_semantic_clustering_follow_on_plan
- 2026-04-03_twod_twopointfive_isometric_plan
- 2026-04-03_wasm_layout_runtime_plan
- 2026-04-10_vello_scene_canvas_rapier_scene_mode_architecture_plan
- 2026-04-11_graph_canvas_crate_plan
- 2026-04-13_graph_canvas_phase0_plan
- agent_derived_edges_spec
- facet_pane_routing_spec
- faceted_filter_surface_spec
- force_layout_and_barnes_hut_spec
- frame_graph_representation_spec
- GRAPH
- graph_backlog_pack
- graph_node_edge_interaction_spec
- layout_algorithm_portfolio_spec
- layout_behaviors_and_physics_spec
- multi_view_pane_spec
- node_badge_and_tagging_spec
- petgraph_algorithm_utilization_spec
- semantic_tagging_and_knowledge_spec
- view_dimension_spec
- navigator
- shell
- social
- subsystem_accessibility
- subsystem_diagnostics
- subsystem_focus
-
subsystem_history
- 2026-03-08_unified_history_architecture_plan
- 2026-03-18_mixed_timeline_contract
- 2026-04-02_bookmarks_import_plan
- 2026-04-02_browser_history_import_plan
- 2026-04-09_owner_scoped_temporal_branching_follow_on
- 2026-04-11_browser_import_normalized_carrier_sketch
- edge_traversal_spec
- history_timeline_and_temporal_navigation_spec
- node_audit_log_spec
- SUBSYSTEM_HISTORY
- subsystem_mods
- subsystem_security
- subsystem_storage
-
subsystem_ux_semantics
- 2026-02-28_ux_contract_register
- 2026-03-01_automated_ux_testing_research
- 2026-03-01_ux_execution_control_plane
- 2026-03-04_model_boundary_control_matrix
- 2026-03-04_per_control_audit_grid
- 2026-03-08_unified_ux_semantics_architecture_plan
- 2026-03-13_chrome_scope_split_plan
- 2026-04-05_command_surface_observability_and_at_plan
- SUBSYSTEM_UX_SEMANTICS
- ux_event_dispatch_spec
- ux_scenario_and_harness_spec
- ux_tree_and_probe_spec
-
system
-
register
- 2026-03-08_registry_development_plan
- 2026-03-08_sector_b_input_dispatch_plan
- 2026-03-08_sector_c_identity_verse_plan
- 2026-03-08_sector_e_workbench_surface_plan
- 2026-03-08_sector_g_mod_agent_plan
- 2026-03-08_sector_h_signal_infrastructure_plan
- action_registry_contract_spec
- action_registry_spec
- agent_registry_spec
- canvas_registry_spec
- diagnostics_registry_spec
- identity_registry_spec
- index_registry_spec
- input_registry_spec
- knowledge_registry_spec
- layout_domain_registry_spec
- layout_registry_spec
- lens_compositor_spec
- mod_registry_spec
- physics_profile_registry_spec
- presentation_domain_registry_spec
- protocol_registry_spec
- SYSTEM_REGISTER
- theme_registry_spec
- viewer_registry_spec
- viewer_surface_registry_spec
- workbench_surface_registry_spec
- workflow_registry_spec
- 2026-02-21_lifecycle_intent_model
- 2026-03-03_graphshell_address_scheme_implementation_plan
- 2026-03-05_cp4_p2p_sync_plan
- 2026-03-05_network_architecture
- 2026-03-06_foundational_reset_implementation_plan
- 2026-03-06_reducer_only_mutation_enforcement_plan
- 2026-03-08_graph_app_decomposition_plan
- 2026-03-12_architectural_inconsistency_register
- 2026-03-12_workspace_decomposition_and_renaming_plan
- 2026-03-17_multi_identity_binding_rules
- 2026-03-17_runtime_task_budget
- control_panel_spec
- coop_session_spec
- register_layer_spec
- registry_runtime_spec
- signal_bus_spec
- system_architecture_spec
- VERSIONING_POLICY
-
register
-
viewer
- 2026-02-24_universal_content_model_plan
- 2026-02-25_interactive_html_export_plan
- 2026-02-26_composited_viewer_pass_contract
- 2026-02-26_visual_tombstones_plan
- 2026-03-02_filesystem_ingest_graph_mapping_plan
- 2026-03-02_unified_source_directory_mapping_plan
- 2026-03-05_node_viewport_preview_minimal_slice_plan
- 2026-03-08_servo_text_editor_architecture_plan
- 2026-03-28_wry_composited_texture_feasibility_spike
- 2026-04-03_clipping_viewer_follow_on_plan
- clipping_and_dom_extraction_spec
- node_lifecycle_and_runtime_reconcile_spec
- node_viewport_preview_spec
- universal_content_model_spec
- VIEWER
- viewer_presentation_and_fallback_spec
- visual_tombstones_spec
- webview_backpressure_spec
- webview_lifecycle_and_crash_recovery_spec
- wry_integration_spec
-
workbench
- 2026-03-03_pane_opening_mode_and_simplification_suppressed_plan
- 2026-03-26_frame_layout_hint_spec
- 2026-04-10_graph_tree_implementation_plan
- 2026-04-11_egui_tiles_retirement_strategy
- 2026-04-11_graph_tree_egui_tiles_decoupling_follow_on_plan
- frame_persistence_format_spec
- graph_first_frame_semantics_spec
- graphlet_projection_binding_spec
- navigator_backlog_pack
- navigator_graph_isomorphism_spec
- pane_chrome_and_promotion_spec
- pane_presentation_and_locking_spec
- tile_view_ops_spec
- WORKBENCH
- workbench_backlog_pack
- workbench_frame_tile_interaction_spec
- workbench_layout_policy_spec
- workbench_profile_and_workflow_composition_spec
- 2026-02-28_ux_contract_register
- 2026-03-01_complete_feature_inventory
- 2026-03-01_ux_migration_design_spec
- 2026-03-01_ux_migration_feature_spec_coverage_matrix
- 2026-03-01_ux_migration_lifecycle_audit_register
- 2026-03-01_webrender_readiness_gate_feature_guardrails
- 2026-03-02_scaffold_registry
- 2026-03-03_pre_wgpu_feature_validation_gate_checklist
- 2026-03-03_pre_wgpu_plot
- 2026-03-03_spec_conflict_resolution_register
- 2026-03-11_boa_scripting_engine_plan
- core-interaction-model-plan
- domain_interaction_acceptance_matrix
- plan-featureFirstNowRefactorFriendlyLater.prompt
- PLANNING_REGISTER
-
research
- 2026-02-18_graph_ux_research_report
- 2026-02-20_edge_traversal_model_research
- 2026-02-24_diagnostics_research
- 2026-02-24_interaction_and_semantic_design_schemes
- 2026-02-24_spatial_accessibility_research
- 2026-02-24_visual_tombstones_research
- 2026-02-26_architecture_terminology_alignment_gap_analysis
- 2026-02-26_original_vision_to_current_architecture_mapping
- 2026-02-27_all_docs_context_bootstrap
- 2026-02-27_egui_stack_assessment
- 2026-02-27_egui_wgpu_custom_canvas_migration_requirements
- 2026-02-27_freenet_takeaways_for_graphshell
- 2026-02-27_viewer_state_matrix
- 2026-02-28_graphshell_ux_research_agenda
- 2026-02-28_knowledge_capture_research_agenda
- 2026-02-28_navigation_semantics_mental_models_research
- 2026-02-28_performance_visual_scaling_research_agenda
- 2026-02-28_viewer_backend_research_agenda
- 2026-03-01_servo_script_engine_alternatives
- 2026-03-01_webrender_wgpu_renderer_research
- 2026-03-02_ux_integration_research
- 2026-03-04_standards_alignment_report
- 2026-03-24_tool_comparison_product_lessons
- 2026-03-27_ambient_graph_visual_effects
- 2026-03-29_graph_interaction_brainstorm
- 2026-03-30_middlenet_vision_synthesis
- 2026-04-02_intelligence_capability_tiers_and_blockers
- 2026-04-02_intelligence_taxonomy
- 2026-04-02_scene_mode_ux_sketch
- 2026-04-03_servo_slint_wgpu_hal_interop_research
- 2026-04-09_smolweb_browser_capability_gaps
- 2026-04-09_smolweb_discovery_and_aggregation_signal_model
- 2026-04-09_smolweb_graph_enrichment_and_accessibility_note
- 2026-04-10_servo_wpt_mountain_and_wr_wgpu_leverage
- 2026-04-10_ui_framework_alternatives_and_graph_tree_discovery
- 2026-04-11_linked_data_over_middlenet_relevance_note
- 2026-04-11_tabfs_tablab_graphshell_relevance_note
- scene_customization
- STANDALONE_EXTRACTION
-
technical_architecture
- 2026-02-18_universal_node_content_model
- 2026-02-27_presentation_provider_and_ai_orchestration
- 2026-03-01_dependency_inventory
- 2026-03-08_graphshell_core_extraction_plan
- 2026-03-12_specification_coverage_register
- 2026-03-29_middlenet_engine_spec
- 2026-03-29_portable_web_core_host_envelopes
- 2026-03-29_workspace_restructuring_plan
- 2026-03-30_protocol_modularity_and_host_capability_model
- 2026-04-09_browser_envelope_coop_and_degradation_policy
- 2026-04-09_graph_object_classification_model
- 2026-04-09_graphshell_verse_uri_scheme
- 2026-04-09_identity_convergence_and_person_node_model
- 2026-04-11_core_intent_inventory
- ARCHITECTURAL_OVERVIEW
- BUILD
- codebase_guide
- domain_interaction_scenarios
- graph_canvas_spec
- graph_tree_spec
- graphlet_model
- GRAPHSHELL_AS_BROWSER
- node_object_query_model
- QUICKSTART
- TERM_ARCHITECTURE_DESC
- unified_view_model
- testing
- matrix_docs
-
nostr_docs
- implementation_strategy
- technical_architecture
-
verse_docs
-
implementation_strategy
- 2026-02-26_intelligence_memory_architecture_stm_ltm_engrams_plan
- 2026-03-09_agent_wal_and_distillery_architecture_plan
- 2026-03-28_decentralized_storage_bank_spec
- 2026-04-06_sync_badge_verse_controls_plan
- community_governance_spec
- engram_spec
- flora_submission_checkpoint_spec
- lineage_dag_spec
- proof_of_access_ledger_spec
- self_hosted_model_spec
- self_hosted_verse_node_spec
- verseblob_content_addressing_spec
-
research
- 2026-02-22_aspirational_protocols_and_tools
- 2026-02-23_modern_yacy_gap_analysis
- 2026-02-23_storage_economy_and_indices
- 2026-02-24_local_intelligence_research
- 2026-02-24_wasm_mod_abi_research
- 2026-02-27_freenet_takeaways_for_verse
- 2026-02-28_verse_concrete_research_agenda
- 2026-03-28_libp2p_nostr_synergy_for_verse
- 2026-04-13_storage_system_comparison_for_verse
- SEARCH_FINDINGS_SUMMARY
- VERSE
- technical_architecture
-
implementation_strategy
-
verso_docs
-
implementation_strategy
- 2026-02-22_verse_implementation_strategy
- 2026-02-23_verse_tier1_sync_plan
- 2026-02-25_verse_presence_plan
- 2026-03-08_simple_document_engine_target_spec
- 2026-03-27_session_capsule_ledger_plan
- 2026-03-28_cable_coop_minichat_spec
- 2026-03-28_gemini_capsule_server_plan
- coop_session_spec
- PHASE5_STEP5.1_COMPLETE
- PHASE5_STEP5.2_COMPLETE
- PHASE5_STEP5.3_COMPLETE
- research
- technical_architecture
-
implementation_strategy
- 2026-03-14_documentation_compression_plan
- AI_USAGE
- DOC_POLICY
- DOC_README
- OPERATOR_GUIDE
- PROJECT_DESCRIPTION
- TERMINOLOGY
-
archive_docs