Repository navigation
graph_tree_spec
Date: 2026-04-10
Status: Architecture design — pre-implementation
Scope: API design for the graph-tree crate — a framework-agnostic,
graphlet-native tile tree that replaces egui_tiles and collapses the
Navigator/Workbench projection gap.
Related:
-
graph_canvas_spec.md— sibling graph-view canvas subsystem -
graphlet_model.md— canonical graphlet semantics -
unified_view_model.md— five-domain model (Graph, Navigator, Workbench, Viewer, Shell) -
../implementation_strategy/workbench/2026-04-11_graph_tree_egui_tiles_decoupling_follow_on_plan.md— authority migration after crate extraction -
../implementation_strategy/navigator/NAVIGATOR.md— Navigator domain spec -
../implementation_strategy/navigator/navigator_interaction_contract.md— click grammar -
../implementation_strategy/workbench/graphlet_projection_binding_spec.md— graphlet binding -
../implementation_strategy/graph/2026-03-14_graph_relation_families.md— relation families -
../implementation_strategy/subsystem_ux_semantics/ux_tree_and_probe_spec.md— UxTree contract -
../implementation_strategy/graph/view_dimension_spec.md— GraphViewId -
2026-03-29_portable_web_core_host_envelopes.md— host envelope model -
../research/2026-04-10_ui_framework_alternatives_and_graph_tree_discovery.md— research backing
egui_tiles models spatial geometry: binary splits, tab groups, proportional
shares. Its Container types are Linear | Tabs | Grid. It has no concept of:
- why panes are grouped together (graph topology vs. manual arrangement)
- parent-child relationships between panes (opening B from A)
- graphlet membership, anchors, or derivation rules
- tree-style navigation (expandable hierarchy reflecting graph structure)
- linked vs. unlinked binding to a graphlet definition
- causality (why a node was added to a group)
Graphshell already works around this by layering workbench semantics on top
(GraphshellTileBehavior, GraphletBinding, TileCoordinator, frame grouping,
focus routing). But the core data structure doesn't speak graphlet — it speaks
rectangles.
A portable GraphTree<N> where the tree structure comes from graph topology:
GraphTree<N>
├── Structure: derived from graphlet edges (parent → child = "opened from")
├── Anchors: primary + secondary anchors from graphlet definition
├── Members: node set with lifecycle state (Active/Warm/Cold)
├── Layout projection: how structure maps to spatial arrangement
│ ├── TreeStyleTabs → sidebar tree (Navigator chrome)
│ ├── FlatTabs → traditional tab bar
│ ├── SplitPanes → spatial layout (current egui_tiles behavior)
│ └── Hybrid → tree in sidebar, splits in main area
├── Binding: Linked | UnlinkedSessionGroup | ForkedPinned
└── Causality: per-member attachment reason (traversal, manual, spawn)
Key differences from egui_tiles:
- Semantic tree: parent-child comes from graph edges, not spatial splits
- Multiple layout projections: same tree, different spatial renderings
- Navigator and workbench share the structure: tree-style tab sidebar IS the graphlet tree; split panes are a spatial projection of it
- Cold members are visible: egui_tiles only knows about open panes; a graphlet tree knows about all members including cold ones
- egui_tiles as the workbench layout data structure
- The ad hoc
GraphletBinding→ tile group correspondence - Navigator's separate projection over workbench arrangement state
- The semantic gap between "tab management" and "graph navigation"
- egui_tiles' layout computation (simple proportional split is still needed for the spatial projection — ~200 lines of pure math, inlined or vendored)
- Graph truth (GraphTree is still a projection, not owned truth)
- The three-pass compositor (chrome → content → overlay still applies)
Navigator's graphlet projection (§8A of NAVIGATOR.md) already describes:
- ego/corridor/component/frontier/session graphlets
- tree or list presentation when hierarchy is clearer than space
- radial or corridor layouts when spatial relation is the point
A GraphTree IS the Navigator's graphlet in tree form. The Navigator doesn't need a separate projection — it reads the same tree and renders it as:
- tree-style tabs in a sidebar (expandable, with lifecycle badges)
- breadcrumb trail (path from anchor to focused node)
- section headers (frames = sub-trees with shared anchors)
The workbench reads the same tree and renders it as:
- spatial split panes (for active/warm members)
- tab groups (for members sharing a container)
- placeholder slots (for cold members that could be activated)
The core data structure has zero rendering dependencies. Framework adapters:
-
graph-tree-egui: renders tree as egui widgets (sidebar + split panes) -
graph-tree-iced: renders tree as iced views -
graph-tree-web: renders tree as DOM elements (extension/PWA)
In an extension/PWA context:
- The tree serializes naturally as JSON (same as
GraphIntentWAL format) - Tree-style tabs in a sidebar IS the primary navigation UI (no spatial split panes needed in a constrained viewport)
- The same data structure renders as a DOM tree (ul/li) in a browser extension sidebar, or as native split panes on desktop
- Cold members are visible in all hosts (the tree knows about them even without open panes)
- Navigation actions (
expand,activate,dismiss,scope) are the same across hosts — only the rendering differs
This is the "one portable core, many host envelopes" principle applied to the tile tree itself.
graph-tree/
├── Cargo.toml # deps: serde, taffy, petgraph (optional)
├── src/
│ ├── lib.rs # public API re-exports
│ ├── tree.rs # GraphTree<N> — the core
│ ├── topology.rs # TreeTopology — graph-derived parent/child
│ ├── member.rs # MemberEntry, Lifecycle, Provenance
│ ├── graphlet.rs # GraphletRef — connected sub-structures
│ ├── lens.rs # ProjectionLens — how to slice the tree
│ ├── layout.rs # Layout projection via taffy
│ ├── nav.rs # Navigation actions and intents
│ ├── query.rs # Tree queries (ancestors, descendants, siblings)
│ ├── ux.rs # UxNode emission for accessibility/testing
│ └── serde_compat.rs # Serialization + backward compat
No egui. No iced. No winit. No wgpu. Pure data + pure functions.
petgraph feature for deriving topology from a petgraph graph.
taffy for layout computation (flexbox/grid-capable, not just proportional).
Why "GraphTree" not "GraphletTree": The tree reflects the state of a graph view. Graphlets are connected groupings within that view — like documents in a folder, not the folder itself. A graph view may contain many graphlets (disconnected clusters, session groups, derived sub-structures). Naming the tree after its leaves instead of its trunk would be misleading.
One GraphTree per GraphViewId. Multiple graph views of the same graph get independent trees (different expansion state, focus, scroll, active lens).
use std::collections::{HashMap, HashSet, BTreeMap};
use serde::{Serialize, Deserialize};
/// Portable rectangle — no framework dependency.
#[derive(Clone, Copy, Debug, Serialize, Deserialize)]
pub struct Rect { pub x: f32, pub y: f32, pub w: f32, pub h: f32 }
/// Identity of a tree member. Generic so Graphshell uses NodeKey,
/// extensions use Uuid, tests use u64.
pub trait MemberId:
Clone + Eq + std::hash::Hash + std::fmt::Debug
+ Serialize + for<'de> Deserialize<'de> {}
impl<T> MemberId for T where T:
Clone + Eq + std::hash::Hash + std::fmt::Debug
+ Serialize + for<'de> Deserialize<'de> {}
/// Identity of a graph view. Lets the host manage multiple trees.
pub trait ViewId: MemberId {}
impl<T: MemberId> ViewId for T {}/// The core data structure. One per GraphViewId. Contains all members
/// of a graph view — active, warm, and cold — organized by graph
/// topology with multiple projection lenses.
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct GraphTree<N: MemberId> {
// --- Membership ---
members: HashMap<N, MemberEntry<N>>,
// --- Topology (graph-derived parent/child) ---
topology: TreeTopology<N>,
// --- Graphlet index (connected sub-structures) ---
graphlets: Vec<GraphletRef<N>>,
// --- Active projection lens ---
active_lens: ProjectionLens,
// --- Session state (not graph truth) ---
active: Option<N>,
expanded: HashSet<N>,
scroll_anchor: Option<N>,
// --- Layout ---
layout_mode: LayoutMode,
}#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct MemberEntry<N: MemberId> {
/// Display lifecycle. The tree does NOT own transitions —
/// it receives them from the host via SetLifecycle.
pub lifecycle: Lifecycle,
/// Why this member is in the tree. Maps to Provenance family
/// edge sub-kinds. Preserved for reconciliation and undo.
pub provenance: Provenance<N>,
/// Which graphlet(s) this member belongs to.
pub graphlet_membership: Vec<GraphletId>,
/// Optional taffy layout overrides (min size, flex grow, etc.).
pub layout_override: Option<LayoutOverride>,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub enum Lifecycle {
Active, // open in a pane, rendering, may have focus
Warm, // has runtime state, not focused
Cold, // in the graph view but not in a pane
}
/// Why this member is in the tree. Aligned with Provenance family
/// and arrangement edge sub-kinds from graph_relation_families.md.
#[derive(Clone, Debug, Serialize, Deserialize)]
pub enum Provenance<N: MemberId> {
/// Opened by following a link/edge from another member.
/// Maps to Traversal family edge.
Traversal { source: N, edge_kind: Option<String> },
/// Manually added by user action (drag, command palette, import).
/// Maps to UserGrouped family edge.
Manual { source: Option<N>, context: Option<String> },
/// Present as a graphlet anchor or graph view root.
Anchor,
/// Derived by graphlet computation (component, ego, corridor, etc.).
/// Placed as sibling of its connection point in the topology.
Derived { connection: Option<N>, derivation: String },
/// Agent-inferred (AI enrichment). Carries confidence + decay.
/// Maps to AgentDerived family edge.
AgentDerived { confidence: f32, agent: String, source: Option<N> },
/// Restored from persistence.
Restored,
}
/// Taffy-compatible layout overrides per member.
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct LayoutOverride {
pub min_width: Option<f32>,
pub min_height: Option<f32>,
pub flex_grow: Option<f32>,
pub flex_shrink: Option<f32>,
pub preferred_split: Option<SplitDirection>,
}
#[derive(Clone, Copy, Debug, Serialize, Deserialize)]
pub enum SplitDirection { Horizontal, Vertical }/// The tree's parent-child structure, derived from graph edges.
/// This is NOT spatial layout — it's semantic grouping.
///
/// Placement rules:
/// - Traversal: child of source node ("opened B from A" → B is child of A)
/// - Manual add: sibling of connection point (same parent as the node
/// you were looking at when you added it)
/// - Derived (graphlet computation): sibling of connection point,
/// or child of graphlet anchor if no specific connection
/// - AgentDerived: sibling of source, pending user accept
/// - Anchor: root
/// - Restored: original position from persistence
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct TreeTopology<N: MemberId> {
parent: HashMap<N, N>,
children: HashMap<N, Vec<N>>,
roots: Vec<N>,
insertion_order: Vec<N>,
}
impl<N: MemberId> TreeTopology<N> {
pub fn attach_child(&mut self, child: N, parent: &N) { ... }
pub fn attach_sibling(&mut self, member: N, sibling_of: &N) { ... }
pub fn attach_root(&mut self, member: N) { ... }
pub fn reparent(&mut self, member: &N, new_parent: &N) { ... }
pub fn detach(&mut self, member: &N) -> Option<DetachedSubtree<N>> { ... }
pub fn reorder_children(&mut self, parent: &N, new_order: Vec<N>) { ... }
/// Depth-first walk respecting expansion state.
pub fn visible_walk<'a>(
&'a self,
expanded: &'a HashSet<N>,
lens: &ProjectionLens,
) -> impl Iterator<Item = TreeRow<'a, N>> { ... }
pub fn descendants(&self, member: &N) -> Vec<&N> { ... }
pub fn ancestors(&self, member: &N) -> Vec<&N> { ... }
pub fn siblings(&self, member: &N) -> Vec<&N> { ... }
pub fn depth_of(&self, member: &N) -> usize { ... }
}
pub struct TreeRow<'a, N: MemberId> {
pub member: &'a N,
pub depth: usize,
pub is_expanded: bool,
pub has_children: bool,
pub is_last_sibling: bool,
pub graphlet_id: Option<GraphletId>,
}
/// Derive topology from a petgraph graph using edge selectors.
#[cfg(feature = "petgraph")]
pub fn derive_topology<N, E>(
graph: &petgraph::Graph<N, E>,
roots: &[petgraph::NodeIndex],
selector: impl Fn(&E) -> bool,
placement: PlacementPolicy,
) -> TreeTopology<N>
where N: MemberId { ... }
/// How derived members are placed in the topology.
#[derive(Clone, Debug)]
pub enum PlacementPolicy {
/// Child of the node they're connected to.
ChildOfConnection,
/// Sibling of the node they're connected to (same parent).
SiblingOfConnection,
/// Child of the graphlet anchor.
ChildOfAnchor,
}pub type GraphletId = u32;
/// A graphlet is a connected sub-structure within the GraphTree.
/// Multiple graphlets exist in a graph view — like document groups
/// in a folder. Each tracks its own binding and anchor state.
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct GraphletRef<N: MemberId> {
pub id: GraphletId,
pub anchors: Vec<N>,
pub primary_anchor: Option<N>,
pub binding: GraphletBinding,
pub kind: Option<GraphletKind>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub enum GraphletBinding {
UnlinkedSession,
Linked { spec: GraphletSpec },
Forked { parent_spec: GraphletSpec, reason: String },
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct GraphletSpec {
pub kind: GraphletKind,
pub anchors: Vec<String>,
pub primary_anchor: Option<String>,
pub selectors: Vec<String>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub enum GraphletKind {
Ego { radius: u8 }, Corridor, Component, Loop, Frontier,
Facet, Session, Bridge, WorkbenchCorrespondence,
}/// A lens controls which topology drives the visible tree hierarchy.
/// This replaces Navigator's separate section model — sections become
/// lenses over the same GraphTree.
///
/// The underlying membership and topology don't change; the lens
/// controls which edges drive parent-child and how members are grouped.
#[derive(Clone, Debug, Serialize, Deserialize)]
pub enum ProjectionLens {
/// Traversal-first: parent-child from navigation history.
/// "I opened B from A" → B is child of A.
/// Natural tree-style-tabs view. **Default.**
Traversal,
/// Arrangement-first: group by graphlet → frame → tab group.
/// The workbench-scope view.
Arrangement,
/// Containment-first: group by origin/domain → url-path → member.
/// Derived from Containment family edges (domain, url-path).
/// Good for origin-based lifecycle management and cleanup.
Containment,
/// Semantic-first: group by UserGrouped/AgentDerived relations.
Semantic,
/// Recency-first: ordered by last-touched timestamp.
Recency,
/// All members: flat with optional graphlet grouping.
All,
}
impl ProjectionLens {
pub fn primary_edge_families(&self) -> &[&str] {
match self {
Self::Traversal => &["traversal", "navigation-history"],
Self::Arrangement => &["frame-member", "tile-member", "tab-neighbor"],
Self::Containment => &["domain", "url-path", "user-folder"],
Self::Semantic => &["user-grouped", "agent-derived"],
Self::Recency => &[],
Self::All => &[],
}
}
}#[derive(Clone, Copy, Debug, Serialize, Deserialize)]
pub enum LayoutMode {
/// Tree-style tabs + single focused content pane. **Default.**
/// The tree IS the navigation; one member is active at a time.
TreeStyleTabs,
/// Flat tab bar: warm/active members as tabs, topology-ordered.
FlatTabs,
/// Split panes: active members get taffy-computed rects.
/// Supports min/max, flex grow/shrink, nested splits.
SplitPanes,
}
#[derive(Clone, Debug)]
pub struct LayoutResult<N: MemberId> {
pub pane_rects: HashMap<N, Rect>, // SplitPanes
pub tab_order: Vec<TabEntry<N>>, // FlatTabs
pub tree_rows: Vec<TreeRow<N>>, // Always (powers sidebar)
pub active: Option<N>,
}
#[derive(Clone, Debug)]
pub struct TabEntry<N: MemberId> {
pub member: N,
pub lifecycle: Lifecycle,
pub is_anchor: bool,
pub depth: usize,
pub graphlet_id: Option<GraphletId>,
}
/// Compute layout. Tree rows always computed (sidebar in every mode).
/// Pane rects only in SplitPanes mode, via taffy.
pub fn compute_layout<N: MemberId>(
tree: &GraphTree<N>, available: Rect,
) -> LayoutResult<N> { ... }
fn build_taffy_tree<N: MemberId>(
tree: &GraphTree<N>, available: Rect,
) -> (taffy::TaffyTree, HashMap<taffy::NodeId, N>) { ... }/// Verbs from NAVIGATOR.md §6 + lens switching + arrangement edges.
#[derive(Clone, Debug)]
pub enum NavAction<N: MemberId> {
Select(N),
Activate(N),
Dismiss(N),
ToggleExpand(N),
Reveal(N),
/// Attach with placement derived from provenance.
/// Traversal → child of source. Manual → sibling of connection.
/// Derived → sibling of connection or child of anchor.
Attach { member: N, provenance: Provenance<N> },
Detach { member: N, recursive: bool },
Reparent { member: N, new_parent: N },
Reorder { parent: N, new_order: Vec<N> },
SetLifecycle(N, Lifecycle),
SetLayoutMode(LayoutMode),
SetLens(ProjectionLens),
CycleFocus(FocusDirection),
CycleFocusRegion(FocusCycleRegion),
}
#[derive(Clone, Copy, Debug)]
pub enum FocusDirection { Next, Previous }
#[derive(Clone, Copy, Debug)]
pub enum FocusCycleRegion { Roots, Branches, Leaves }
#[derive(Clone, Debug)]
pub struct NavResult<N: MemberId> {
pub intents: Vec<TreeIntent<N>>,
pub structure_changed: bool,
pub session_changed: bool,
}
#[derive(Clone, Debug)]
pub enum TreeIntent<N: MemberId> {
SelectionChanged(N),
RequestActivation(N),
RequestDismissal(N),
RequestFocus(N),
ReconciliationNeeded { graphlet: GraphletId, reason: String },
/// Emitted when lens changes — host may update edge visibility.
LensChanged(ProjectionLens),
}
pub fn apply_nav<N: MemberId>(
tree: &mut GraphTree<N>, action: NavAction<N>,
) -> NavResult<N> { ... }/// Emit UxNode descriptors for the accessibility/automation tree.
/// Follows the ux_tree_and_probe_spec.md contract: every visible
/// pane produces at least one UxNode when ux-semantics is active.
///
/// This gives testing/automation a structural view of the GraphTree
/// without coupling to any framework's accessibility API.
#[derive(Clone, Debug)]
pub struct UxNodeDescriptor<N: MemberId> {
pub ux_node_id: String,
pub role: UxRole,
pub label: String,
pub state: UxState,
pub member: Option<N>,
pub depth: usize,
pub children: Vec<UxNodeDescriptor<N>>,
}
#[derive(Clone, Debug)]
pub enum UxRole {
TreeView, // the sidebar tree itself
TreeItem, // a member row
TabList, // flat tab bar
Tab, // individual tab
SplitContainer, // split pane group
Pane, // content pane
}
#[derive(Clone, Debug)]
pub struct UxState {
pub focused: bool,
pub selected: bool,
pub expanded: Option<bool>, // None if not expandable
pub lifecycle: Lifecycle,
}
/// Build the UxNode tree from a GraphTree. Pure function.
/// Host bridges this to AccessKit (egui), platform a11y (mobile),
/// or DOM aria (extension/PWA).
pub fn emit_ux_tree<N: MemberId>(
tree: &GraphTree<N>,
) -> UxNodeDescriptor<N> { ... }impl<N: MemberId> GraphTree<N> {
// --- Construction ---
pub fn new(layout: LayoutMode, lens: ProjectionLens) -> Self;
pub fn from_members(
members: Vec<(N, MemberEntry<N>)>,
topology: TreeTopology<N>,
graphlets: Vec<GraphletRef<N>>,
layout: LayoutMode,
lens: ProjectionLens,
) -> Self;
// --- Membership ---
pub fn contains(&self, member: &N) -> bool;
pub fn get(&self, member: &N) -> Option<&MemberEntry<N>>;
pub fn member_count(&self) -> usize;
pub fn active_count(&self) -> usize;
pub fn cold_count(&self) -> usize;
pub fn members(&self) -> impl Iterator<Item = (&N, &MemberEntry<N>)>;
// --- Topology ---
pub fn topology(&self) -> &TreeTopology<N>;
pub fn parent_of(&self, member: &N) -> Option<&N>;
pub fn children_of(&self, member: &N) -> &[N];
pub fn depth_of(&self, member: &N) -> usize;
// --- Graphlets ---
pub fn graphlets(&self) -> &[GraphletRef<N>];
pub fn graphlet_of(&self, member: &N) -> Option<&GraphletRef<N>>;
pub fn graphlet_members(&self, id: GraphletId) -> Vec<&N>;
// --- Lens & layout ---
pub fn active_lens(&self) -> &ProjectionLens;
pub fn layout_mode(&self) -> LayoutMode;
pub fn active(&self) -> Option<&N>;
pub fn is_expanded(&self, member: &N) -> bool;
// --- Layout computation ---
pub fn compute_layout(&self, rect: Rect) -> LayoutResult<N>;
pub fn visible_rows(&self) -> Vec<TreeRow<'_, N>>;
// --- Navigation ---
pub fn apply(&mut self, action: NavAction<N>) -> NavResult<N>;
// --- Accessibility ---
pub fn emit_ux_tree(&self) -> UxNodeDescriptor<N>;
}/// Each framework implements this once. Thin — the tree does the
/// heavy lifting; the adapter just paints.
pub trait GraphTreeRenderer<N: MemberId> {
type Ctx;
type Out;
fn render_tree_tabs(
&mut self, tree: &GraphTree<N>,
rows: &[TreeRow<'_, N>], ctx: &mut Self::Ctx,
) -> Self::Out;
fn render_flat_tabs(
&mut self, tree: &GraphTree<N>,
tabs: &[TabEntry<N>], ctx: &mut Self::Ctx,
) -> Self::Out;
fn render_pane_chrome(
&mut self, tree: &GraphTree<N>,
rects: &HashMap<N, Rect>, ctx: &mut Self::Ctx,
) -> Self::Out;
}| Current | New (GraphTree) |
|---|---|
Tree<TileKind> |
GraphTree<NodeKey> |
TileKind enum variants |
MemberEntry<NodeKey> with lifecycle + provenance |
Container::Tabs / Linear |
TreeTopology parent-child + taffy layout |
GraphshellTileBehavior |
GraphTreeRenderer impl for egui |
GraphletBinding in binding spec |
Per-graphlet GraphletBinding inside the tree |
FrameLayout persistence |
GraphTree serialized directly |
tile_view_ops.rs (40 functions) |
apply_nav() with typed NavAction |
tile_compositor.rs iteration |
compute_layout() + per-pane render dispatch |
| Navigator sidebar (separate projection) |
visible_rows() with active lens |
| Navigator sections (Recent/Frames/etc.) |
ProjectionLens variants |
FocusCycleRegion |
CycleFocusRegion in NavAction |
| Navigator / Workbench scope split | Eliminated — one tree, lens chooses projection |
The GraphTree does NOT:
- Own graph truth (node identity, edge topology, metadata)
- Execute lifecycle transitions (host tells tree via
SetLifecycle) - Render content (host dispatches per-pane rendering)
- Manage GPU resources (compositor is host-owned)
- Own selection truth (emits
SelectionChangedintent) - Resolve viewer routing (host decides backend per pane)
- Own containment/domain edges (reads them from graph truth)
- Own arrangement edges (reads frame-member, tile-member from graph)
The GraphTree sits at the Navigator/Workbench boundary and serves both. Navigator becomes a set of projection lenses over the tree. Workbench becomes the spatial layout projection. The five-domain model is preserved: Graph owns truth, GraphTree owns projection + arrangement, Viewer owns realization, Shell owns orchestration.
Origin-based grouping for lifecycle management (e.g., "close all tabs from example.com") works through the Containment lens:
[Containment lens active]
├── example.com
│ ├── /docs/api (Active)
│ ├── /blog/post (Warm)
│ └── /about (Cold)
├── gemini://station.smolweb
│ └── /~user/log (Active)
└── [unresolved / local]
└── note-2026-04-10 (Warm)
This is NOT a separate data structure — it's the same GraphTree with the Containment lens applied. The domain/url-path hierarchy comes from Containment family derived edges that graph truth already computes.
Lifecycle management actions ("dismiss all from origin X") apply to the
subtree under that origin node in the containment projection. The tree
emits RequestDismissal intents for each affected member.
The arrangement-edge correspondence is extensible because:
-
Edge families are registered sub-kinds, not hard-coded enum variants. New sub-kinds (
pinned-in-frame,active-tab,constellation-member) can be added without changing the tree's core types. -
ProjectionLens::primary_edge_families()returns a list of family tags. A custom lens can reference any combination of registered families. -
Provenancecarries the edge kind as aString, not a closed enum. New provenance sources (e.g., "constellation-thread", "feed-subscription") slot in without API changes. -
The topology is rebuilt when the lens changes — different lenses see different parent-child structures from the same underlying edge set.
Navigator was trying to be three things:
- A projection engine (derive graphlets, sections, rankings)
- A navigation surface (tree-style sidebar, breadcrumbs)
- A scope arbiter (graph scope vs. workbench scope)
GraphTree absorbs all three:
-
Projection:
ProjectionLens+GraphletRef+visible_walk() -
Navigation surface:
TreeRow+GraphTreeRenderer::render_tree_tabs() - Scope: eliminated. There's one tree. You pick your lens.
What remains of Navigator as a domain:
- Graphlet derivation algorithms (ego, corridor, component, etc.)
- Scoped search over graph truth
- Specialty layouts (radial, timeline) for specific graphlet kinds
- Security/permission chrome projection
These are services that feed the GraphTree, not a separate data model. Navigator becomes a set of algorithms and projections that operate on GraphTree, not a parallel universe of sections and rows.
Core crate (framework-agnostic tree + layout + navigation):
- Tree model + topology: ~500 lines
- Layout computation (split/tab/tree modes): ~400 lines
- Navigation actions: ~300 lines
- Serialization: ~200 lines
- Total: ~1400 lines
egui adapter (replaces current egui_tiles usage):
- Sidebar tree renderer: ~400 lines
- Split pane renderer: ~300 lines (vendor egui_tiles' proportional split math)
- Tab bar renderer: ~200 lines
- Drag-drop interaction: ~500 lines
- Total: ~1400 lines
Migration from current egui_tiles usage:
- Replace
Tree<TileKind>withGraphTree<NodeKey> - Replace
GraphshellTileBehaviorwith adapter that reads GraphTree - Preserve persistence format (backward compat migration)
- Core tree + UnlinkedSessionGroup mode (works like current egui_tiles)
- Tree-style tab rendering in Navigator sidebar
- Linked graphlet binding (automatic roster updates)
- Reconciliation UI (fork/rebase/unlink choices)
Phase 1-2 deliver the "tree-style tabs reflecting graph structure" value. Phase 3-4 deliver the "graphlet-native arrangement" value.
The main risk is scope creep: the graphlet binding/reconciliation spec is complex (§4-7 of graphlet_projection_binding_spec.md). The tile tree replacement must implement enough binding semantics to be useful without trying to solve all of graphlet reconciliation at once.
- 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
- 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
-
checkpoint_2026-04-15
-
graphshell_docs
-
implementation_strategy
- aspect_render
- graph
- system
- workbench
-
implementation_strategy
-
graphshell_docs
-
checkpoint_2026-04-17
-
graphshell_docs
- implementation_strategy
-
verse_docs
- technical_architecture
-
graphshell_docs
-
checkpoint_2026-04-19
-
graphshell_docs
- implementation_strategy
-
graphshell_docs
-
checkpoint_2026-04-20
- graphshell_docs
-
verso_docs
- implementation_strategy
-
checkpoint_2026-04-21
-
graphshell_docs
-
implementation_strategy
- aspect_control
- system
-
implementation_strategy
-
graphshell_docs
-
checkpoint_2026-04-23
-
graphshell_docs
- implementation_strategy
-
graphshell_docs
-
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-12_compositor_expansion_plan
- 2026-03-23_webrender_wgpu_backend_implementation_plan
- 2026-03-27_egui_retained_state_efficiency_and_physics_worker_evaluation_plan
- 2026-03-27_physics_spike_metrics
- 2026-04-10_wgpu_gui_bridge_interop_architecture_plan
- 2026-04-12_rendering_pipeline_status_quo_plan
- 2026-04-30_renderer_and_host_refactor_plan
- ASPECT_RENDER
- frame_assembly_and_compositor_spec
- gl_to_wgpu_plan
- render_backend_contract_spec
- running_app_state_boundary_spec
- theme_and_tokens_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-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
- 2026-04-19_layouts_as_pluggable_mods_plan
- 2026-04-19_step5_spatial_pattern_layouts_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
- 2026-04-03_shell_command_bar_execution_plan
- 2026-04-14_iced_host_migration_execution_plan
- 2026-04-17_chrome_port_cleanup_plan
- 2026-04-19_graph_canvas_input_accessibility_followon_plan
- 2026-04-20_configurability_sweep_phase2_plan
- 2026-04-24_blitz_shaped_chrome_scoping
- 2026-04-24_graphshell_runtime_crate_plan
- 2026-04-24_iced_content_surface_scoping
- 2026-04-25_servo_into_verso_plan
- 2026-04-27_gpui_host_integration_plan
- 2026-04-28_egui_tiles_retirement_plan
- 2026-04-28_iced_jump_ship_plan
- 2026-04-29_gpui_research_lanes
- iced_agent_pane_spec
- iced_browser_amenities_spec
- iced_command_palette_spec
- iced_composition_skeleton_spec
- iced_node_finder_spec
- iced_omnibar_spec
- search_providers_and_fuzzy_spec
- SHELL
- shell_backlog_pack
- shell_composition_model_spec
- shell_overview_surface_spec
- 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
- 2026-04-17_graph_memory_architecture_note
- 2026-04-21_graph_runtime_projection_layer_plan
- 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
- 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-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
- 2026-04-23_execution_isolation_and_worker_runtime_plan
- control_panel_spec
- coop_session_spec
- graphshell_net_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
- 2026-04-16_smolweb_compliance_and_middlenet_html_contract
- 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
- 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
- 2026-04-20_middlenet_direct_lane_v1_5_plan
- 2026-05-01_workspace_architecture_proposal
- 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
- 2026-04-14_wasm_portable_renderer_feasibility
- 2026-04-16_rendering_architecture_vision
- 2026-04-24_iced_renderer_boot_and_isolation_model
- 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
- 2026-04-16_middlenet_lane_architecture_spec
- 2026-04-20_graphshell_gpu_spec
- 2026-04-22_browser_subsystem_taxonomy_and_mapping
- 2026-04-22_portable_shell_state_in_graphshell_core
- ARCHITECTURAL_OVERVIEW
- BUILD
- codebase_guide
- domain_interaction_scenarios
- domain_projection_matrix
- 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
- 2026-05-03_lexicon_brief
- AI_USAGE
- DOC_POLICY
- DOC_README
- OPERATOR_GUIDE
- PROJECT_DESCRIPTION
- TERMINOLOGY
-
archive_docs