navigator_backlog_pack - mark-ik/graphshell GitHub Wiki
Date: 2026-03-17 Status: Planning / handoff pack Scope: Dependency-ordered backlog for Navigator as a projection surface over graph truth and workbench arrangement state.
Related docs:
- NAVIGATOR.md โ Navigator domain spec and authority boundaries
- navigator_interaction_contract.md โ canonical Navigator click grammar and graph/workbench resolution rules
- navigator_projection_spec.md โ canonical projection pipeline, composition, annotation, and diff contract
- ../../../archive_docs/checkpoint_2026-04-23/graphshell_docs/implementation_strategy/navigator/2026-04-21_navigator_projection_pipeline_plan.md โ archived producing plan and projection-pipeline findings
- ../../technical_architecture/graphlet_model.md โ canonical graphlet semantics consumed by Navigator projection
-
../../technical_architecture/domain_interaction_scenarios.md โ canonical cross-domain scenario IDs (
DI01-DI06) - ../domain_interaction_acceptance_matrix.md โ compact review matrix for cross-domain scenario evidence
- ../workbench/WORKBENCH.md โ workbench domain ownership and arrangement authority
- ../workbench/graph_first_frame_semantics_spec.md โ graph/workbench frame semantics
- ../graph/graph_backlog_pack.md โ graph-side backlog dependencies used by Navigator projections
- Hub issue: #306 (
Hub: five-domain architecture adoption โ Shell host, graphlet model, cross-domain scenarios) - Primary implementation issue: #304 (
Adopt the canonical graphlet model across Navigator and Workbench) - Review/evidence issue: #305 (
Operationalize cross-domain scenario IDs and acceptance evidence)
Confirmed slices now landed in code:
- โ
Navigator intent surface canonicalization:
active reducer/view-action paths use
SetNavigator*andRebuildNavigatorProjection; legacySetFileTree*andRebuildFileTreeProjectionpaths are removed. Advances:NV01,NV06. - โ
Containment projection source is now graph-backed from
ContainmentRelationedges. Advances:NV04,NV18. - โ
Projection refresh now triggers from graph deltas affecting containment
(node add/remove and URL updates).
Advances:
NV10.
These deltas are partial closures and should be referenced when preparing the
full milestone closure receipt (NV25).
-
NV01Navigator Projection Boundary. Depends: none. Done gate: one canonical doc defines Navigator as a projection surface, not its own truth store. -
NV02Navigator Row-Type Inventory. Depends:NV01. Done gate: every row type is listed and tagged as node, frame, tile, section, family, or derived structural row. -
NV03Navigator Row Identity Contract. Depends:NV02. Done gate: every Navigator row has a stable identity source and no ad hoc ephemeral row IDs remain. -
NV04Navigator Section Mapping Audit. Depends:NV01,NV02. Done gate: each section is mapped to graph truth, relation-family projection, workbench projection, or recency projection. -
NV05Navigator Expansion State Contract. Depends:NV03,NV04. Done gate: expansion/collapse state is defined as projection/session state with persistence rules. -
NV06Navigator Click Grammar Lock. Depends:NV02,NV04. Done gate: row-type-specific single-click and double-click behavior is canonical. -
NV07Navigator Selection Contract. Depends:NV03,NV06. Done gate: selection behavior maps cleanly onto the global mixed-selection model. -
NV08Navigator Residency-Aware Navigation Contract. Depends:NV06,NV07. Done gate: double-click routes differently for live versus cold nodes and is documented in carrier terms. -
NV09Navigator Structural Row Focus Rule. Depends:NV06,NV07. Done gate: structural rows expand/collapse and become command focus without pretending to be nodes. -
NV10Navigator Projection Refresh Triggers. Depends:NV01,NV04. Done gate: graph, workbench, and state changes that refresh Navigator are routed through shared signals, not ad hoc observers.
-
NV11Navigator Reveal Rule. Depends:NV07,NV08. Done gate: reveal-on-select only happens when the graph is visible and the selected node is offscreen. -
NV12Navigator Multi-Selection Semantics. Depends:NV07. Done gate:Ctrl+Click, range/toggle behavior, and row focus rules are explicit. -
NV13Navigator Command Applicability Audit. Depends:NV07,NV12. Done gate: navigator-invoked commands obey the same "valid for every selected object" rule. -
NV14Navigator Recents Contract. Depends:NV04,NV08. Done gate:Recentis a recency-sorted projection with clear entry/exit semantics. -
NV15Navigator Arrangement Projection Contract. Depends:NV04,NV09. Done gate: frames, tiles, and canonically defined graphlets project consistently as expandable arrangement objects. -
NV16Navigator Search / Filter Model. Depends:NV04,NV10. Done gate: local filter/search semantics are explicit and do not mutate underlying truth. -
NV17Navigator Dismiss / Open Actions Audit. Depends:NV06,NV13. Done gate: Navigator row actions route through graph/workbench carriers instead of direct callsites. -
NV18Navigator Edge / Relation Surfacing Policy. Depends:NV04,NV15. Done gate: relation families shown in Navigator are explicit and tied to shared graph relation-family rules. -
NV19Navigator Empty / Degraded State Contract. Depends:NV10,NV16. Done gate: no-data, filtered-empty, and projection-error states are distinct and diagnosable. -
NV20Navigator Accessibility and Keyboard Model. Depends:NV03,NV06,NV12. Done gate: keyboard navigation, row focus, expand/collapse, and activate are specified.
-
NV21Navigator Diagnostics Pack. Depends:NV10,NV19,NV20. Done gate: invalid row targets, stale projection entries, and routing failures emit diagnostics. -
NV22Navigator Scenario Test Matrix. Depends:NV06-NV21. Done gate: tests/spec scenarios cover row-type clicks, selection, reveal, recents, search/filter, and arrangement rows. -
NV23Workbench-Navigator Contract Sync Pass. Depends:WB25,NV22. Done gate: workbench pane/focus semantics and Navigator projection semantics no longer contradict each other. -
NV24Graph-Navigator Contract Sync Pass. Depends:NV04,NV18, graph backlog equivalents. Done gate: Navigator sections and graph relation/view semantics align. -
NV24AGraph Overview Host-Form Contract. Depends:NV15,NV20,NV24. Done gate: the first graph-overview Navigator host is explicitly list-first in sidebars, optional-swatch gating is defined by host geometry, and toolbar hosts degrade to compact strips/counters rather than minimap semantics. -
NV24BGraph Overview Projection Density + Filters. Depends:NV18,NV24A. Done gate: archived graph views are hidden by default behind an explicit filter toggle, dense inter-view relationships degrade to aggregated hints, and overview-projection state remains distinct from graph truth. -
NV24CGraph Overview Routing Parity. Depends:NV17,NV24A, graph backlog equivalents. Done gate: focus/reveal actions route identically across toolbar and sidebar hosts, while structural editing hands off to the graph-owned Overview Plane rather than mutating Navigator-local state. -
NV24DNavigator Annotation Registry Contract. Depends:NV18,NV20,NV24. Done gate:NodeAnnotationregistry contributions, density classes, and cost/budget rules are canonical and row rendering no longer hard-codes every badge family. -
NV24ENavigator Portal Gesture Contract. Depends:NV11,NV17,NV24. Done gate:Locate,Reveal-in-place, andLiftare named, routed through graph/workbench intents, and do not contradict reducer-only mutation rules. -
NV24FNavigator Projection Diff Contract. Depends:NV10,NV20,NV24. Done gate: projection switches and refresh-trigger reruns animate via canonical diff identity and timing rules instead of teleporting rows. -
NV24GNavigator Time-Axis Projection Contract. Depends:NV10,NV14,NV24. Done gate: time-axis is specified as a specialty projection consumingmixed_timeline_entries, with host-local cursor semantics and composition rules. -
NV24HNavigator Layout Inheritance Contract. Depends:NV15,NV24A,NV24C. Done gate: every projection declaresown,canvas, orcanvas-compressedlayout inheritance so host rendering and canvas-derived updates do not guess. -
NV24INavigator Projection Cost Classification. Depends:NV10,NV24D,NV24H. Done gate: every projection and annotation contributor declareslive,debounced, oron-demandbehavior plus any incremental-update requirement. -
NV25Navigator Milestone Closure Receipt. Depends:NV01-NV24,NV24A-NV24I. Done gate: one closure doc states what another agent can now safely build on for sections, click grammar, routing, and projection behavior.
-
NV01maps to the pipeline boundary and the rule that Navigator is projection-and-routing only. -
NV04maps to stage 1 Scope and section/source alignment. -
NV10maps to refresh-trigger routing for projection reruns. -
NV14maps to recency-scored projections and declared cost class. -
NV15maps to arrangement-backed scopes, graphlets, and layout inheritance. -
NV18maps to relation surfacing through annotation, not silent suppression. -
NV24A-NV24Cmap to host-specific presentation and overview-swatch behavior. -
NV24D-NV24Icover the missing pipeline-wide primitives introduced bynavigator_projection_spec.md.
-
NVS01DI01Graph-first local exploration parity. Depends:NV06,NV10,NV16. Done gate: selection -> ego graphlet -> frontier transition flow is implemented or evidenced without Navigator absorbing graph truth. -
NVS02DI02Corridor transition parity. Depends:NV08,NV18,NV24. Done gate: anchor selection -> corridor graphlet -> graph/path emphasis flow is coherent and evidenced against the canonical scenario. -
NVS03DI05Shell overview graphlet reorientation handoff. Depends:NV17,NV21,NV23. Done gate: a Shell overview handoff back into Navigator graphlet context is explicit, routed, and diagnosable. -
NVS04Graph Overview swatch-to-plane handoff parity. Depends:NV24A,NV24B,NV24C. Done gate: compact Navigator overview surfaces orient and route successfully without pretending to be the full graph-view editor, and the handoff into Overview Plane is explicit and testable.
Captured from implementation session. These are concrete code-level drift points where the live code does not match the chrome scope split spec.
Spec says (subsystem_ux_semantics/2026-03-13_chrome_scope_split_plan.md ยง5.1):
"Disallowed here as primary command ownership: Back / Forward / Reload / StopLoad, Find in
page, Content zoom controls, Compat / backend toggle."
Code does: workbench_host.rs:2281-2288 calls render_navigation_buttons() which
renders Back/Forward/Reload/StopLoad/ZoomIn/ZoomOut/ZoomReset buttons, all dispatched via
toolbar_routing::run_nav_action().
Fix: Delete render_navigation_buttons() (lines 3528-3629) and its call site (lines
2281-2288).
Spec says: Navigator host projects read-only status badges only, not actionable viewer state.
Code does: render_workbench_host() takes focused_content_status: &FocusedContentStatus
(line 1802) and location_dirty: &mut bool (line 1803). Both are ONLY consumed by
render_navigation_buttons(). No other code in the function reads them.
Fix: Remove both parameters from render_workbench_host() signature and from the call
site in toolbar_dialog.rs.
Code has: use toolbar_routing::{self, ToolbarNavAction} (line 30) and
use gui_state::FocusedContentStatus (line 28). Both become unused after removing
render_navigation_buttons.
Fix: Remove both import lines.
Spec says (chrome_scope_split_plan.md ยง6, line 422): the struct still lists
pub nav: PaneNavState.
Code does: The real WorkbenchChromeProjection (workbench_host.rs:262-278) does NOT
have a nav field โ it was never implemented. The spec-only field contradicts the updated
ยง5.1 disallowed-controls list.
Fix: Remove pub nav: PaneNavState from the spec struct. The
focused_pane_status: Vec<PaneStatusBadge> field (lines 423-425) already covers read-only
badges and is the correct replacement.
Spec says: "Back/Forward/Reload live in the workbench-scoped host, not in the graph-scoped host" โ this is the OLD model.
Should say: "Back/Forward/Reload live in tile chrome, not in any Navigator host."
Fix: Update line 750 to match the tile-chrome-only model.
Spec says (pane_chrome_and_promotion_spec.md ยง2): pane tree should reflect
presentation mode (Floating/Docked/Tiled) with graduated row actions.
Code does: WorkbenchPaneEntry (workbench_host.rs:229-239) has no
presentation_mode field. All pane rows render identically.
Fix: Add pub(crate) presentation_mode: PanePresentationMode to WorkbenchPaneEntry.
Populate from NodePaneState.presentation_mode during pane_entry_for_tile(). Default to
PanePresentationMode::Tiled for graph and tool panes.
- Delete
render_navigation_buttons()(workbench_host.rs:3528-3629) and call site (lines 2281-2288). Therender_frame_pin_controlscall at line 2289 remains. - Remove
focused_content_statusandlocation_dirtyfromrender_workbench_host()signature; remove corresponding args fromgui_frame/toolbar_dialog.rscall site. - Remove dead imports (
FocusedContentStatus,toolbar_routing/ToolbarNavAction). - Add
pub(crate) presentation_mode: PanePresentationModetoWorkbenchPaneEntry; populate inpane_entry_for_tile(). - Spec fixes in
chrome_scope_split_plan.md: removepub nav: PaneNavState; update ยง12 line 750; addpresentation_modetoWorkbenchTreeRow.
Verification: cargo check + cargo test --lib -- --quiet clean.