2026 03 03_pre_wgpu_plot - mark-ik/graphshell GitHub Wiki
Date: 2026-03-03
Status: Historical release-plan snapshot; retained for v0.0.2 gate archaeology
Purpose: Define the overarching v0.0.2 release โ the first feature-complete pre-wgpu milestone where the application is usable.
Versioning policy reference: system/VERSIONING_POLICY.md โ v0.0.2 is a minor bump representing "significant architecture milestone + notable user-facing capability expansion."
v0.0.2 is the application readiness gate captured by the pre-cut plan: the point at which Graphshell was considered a usable spatial browser on the then-current rendering stack (historically egui_glow / Servo GL compositor). The egui-wgpu UI cut has since landed.
v0.0.2 ships when:
- All Application Gates (AG0โAG9) are closed with linked evidence.
- All P1โP2 spec conflict resolutions are landed.
- Per-view selection is implemented (per-
GraphViewId, not per-GraphBrowserApp). - Undo stack exists for destructive graph mutations.
- WCAG 2.2 AA remains the normative target; v0.0.2 requires Level A pass coverage across all 7 canonical surface classes plus explicit AA-waiver tracking for any remaining AA gaps.
- Active scaffolds impacting core UX closure are retired or explicitly de-scoped.
- Test guide ยง4 minimum acceptance checks are green.
v0.0.2 does NOT include:
- the historical
egui_glowโegui_wgpurenderer migration gate sequence (that cut has now landed). - WebRender wgpu backend (Track B, phases P0โP12).
- Speculative features (DOI/fisheye, SketchLay, advanced gesture modes).
- Verse intelligence subsystem (incubation lane).
This plan introduces a disambiguated gate namespace to prevent confusion between application-readiness gates and renderer-switch gates:
| Prefix | Scope | Source document |
|---|---|---|
| AG0โAG9 | Application readiness gates (pre-wgpu feature closure) | This document; derived from 2026-03-03_pre_wgpu_feature_validation_gate_checklist.md
|
| G1โG5 | Renderer switch authorization gates (Glow โ wgpu) | aspect_render/2026-03-01_webrender_readiness_gate_feature_guardrails.md |
Sequencing: AG0โAG9 must all close before G1โG5 evaluation begins. G1โG5 are post-v0.0.2.
The existing 2026-03-03_pre_wgpu_feature_validation_gate_checklist.md continues to use G0โG9 notation internally. When cross-referencing between documents, prepend AG to disambiguate. A future doc-maintenance pass should update the checklist itself.
These decisions were made during the doc audit that produced this plan. They are binding for v0.0.2 scope.
-
command_semantics_matrix.mdmarks most actions as "Undoable: Yes/Soft." -
ux_integration_research.mdยง7.2 states undo is NOT implemented (GraphIntent applied destructively, no undo stack). -
Decision: Undo stack for destructive
GraphIntentmutations is in v0.0.2 scope. The command semantics matrix describes target semantics that must be implemented, not just documented. -
Impact: New work item under AG4 (Command Surface Unification). Requires undo/redo stack architecture,
GraphIntentreversal model, and UI surface (Ctrl+Z / Ctrl+Shift+Z or equivalent).
-
pre_wgpu_feature_validation_gate_checklist.mduses G0โG9 (application readiness). -
webrender_readiness_gate_feature_guardrails.mduses G1โG5 (renderer switch). - Decision: Application gates become AG0โAG9. Renderer-switch gates keep G1โG5.
- Impact: Cross-references in this document use AG prefix. Source checklist retains G-prefix internally until a maintenance pass.
-
focus_and_region_navigation_spec.mdยง4.7 defines per-GraphViewIdselection truth (target architecture). -
ux_integration_research.mdยง5.3 gap G-PS-1 states selection is currently per-GraphBrowserApp(global). - Decision: Per-view selection migration is a v0.0.2 requirement. This closes gap G-PS-1.
-
Impact: New work item under AG1 (Graph Camera + Interaction Reliability). Selection state must be scoped to
GraphViewId, notGraphBrowserApp.
-
accessibility_baseline_checklist.mdshows most criteria as "Untested." -
accessibility_closure_bundle_audit_301.mdrecords a concrete fail (radial disabled contrast 3.21:1 vs 4.5:1 required for AA text). -
Decision: WCAG 2.2 AA remains the normative product target. For the v0.0.2 release gate, all 7 canonical surfaces must pass Level A, and any remaining AA gaps must be tracked in an explicit waiver register (owner, rationale, deadline):
design/accessibility_aa_waiver_register.md. - Impact: Expands AG0 scope. Accessibility baseline checklist must be updated to reflect audit results (currently shows "Untested" for rows with known test evidence), and AA deviations must be explicitly tracked rather than implicitly deferred.
Each gate corresponds to a gate in the pre_wgpu_feature_validation_gate_checklist.md with the AG prefix applied and v0.0.2-specific amendments from ยง3 incorporated.
A gate is closed only when: (1) feature semantics implemented end-to-end, (2) diagnostics evidence for the critical contract, (3) scenario coverage for the critical path, (4) spec/code parity artifacts updated.
Status: open
Feature objective: Core UX baseline from UX control-plane is coherent and executable.
Primary issues: #292โ#301, #302.
v0.0.2 amendments:
- WCAG 2.2 AA remains normative; v0.0.2 requires Level A pass coverage across all 7 canonical surfaces and explicit AA-waiver tracking (per CR4).
- Accessibility baseline checklist must be synchronized with audit results from
#298and#301.
Validation gate:
- Control-plane and matrix artifacts agree on status.
- No contradictory claim between docs and runtime behavior for active milestone slices.
- Accessibility baseline checklist reflects actual test results (no stale "Untested" rows).
Status: partial
Feature objective: Graph camera/navigation/selection interactions are deterministic.
Primary issues: #173, #104, #101, #103, #271, #185, #102.
v0.0.2 amendments:
- Per-view selection migration (per CR3): selection state scoped to
GraphViewId, notGraphBrowserApp. - Lasso metadata keying must be per-view (
egui_graphs_metadata_path indexed by view ID).
Validation gate:
- Camera pan/zoom/reset/fit pass in harness.
- Lasso + selection semantics work under modifier combinations and in multi-pane split layout.
- Per-view selection is implemented with test coverage for second pane / non-default
GraphViewId. - User-visible regressions in stabilization bug register are closed with scenario evidence.
Status: partial
Feature objective: Open/close/split/focus handoff and first-render activation are deterministic.
Primary issues: #174, #186, #187, #118, #119.
Validation gate:
- Spawn/activate, close-successor, focus handoff scenarios pass.
- No blank viewport / focus-race repros in active stabilization register.
Status: open
Feature objective: Content-opening actions always route through Graphshell semantic ownership.
Primary issues: #175.
Validation gate:
- No legacy context-menu bypass path creates pane state outside declared intent flow.
- Routing diagnostics include reason/path for open decisions.
Status: open
Feature objective: F2/global, contextual, and radial/menu command surfaces share one command model.
Primary issues: #176, #106, #107, #108, #178, #270.
v0.0.2 amendments:
- Undo/redo stack for destructive
GraphIntentmutations (per CR1).- Architecture: undo stack model for
GraphIntentreversal. - UI surface: Ctrl+Z / Ctrl+Shift+Z (or platform equivalent).
- Scope: graph mutations (node create/delete, edge create/delete, metadata changes). Non-graph actions (view state, UI toggles) may be excluded from v0.0.2 undo scope.
- Architecture: undo stack model for
Validation gate:
- Command naming/scope reflects canonical semantics.
- Command invocation parity exists across keyboard/pointer entry points.
- Disabled-state policy is explicit and test-covered.
- Undo/redo works for destructive graph mutations with test coverage.
Status: partial
Feature objective: Settings/history/control surfaces behave as first-class panes.
Primary issues: #109, #110, #177, #189.
Validation gate:
- Settings changes with persistence semantics have scenario tests.
- Tool pane entry/exit return-target is deterministic.
Status: partial
Feature objective: Viewer render mode behavior and fallback states are explicit, deterministic, and diagnostics-visible.
Primary issues: #162, #188, #111, #112.
Validation gate:
- Surface Composition Contract provable in runtime evidence (pass ordering, fallback visibility).
-
TileRenderMode-driven behavior test-covered.
Status: open
Feature objective: Reliability enforced through scenario + diagnostics + semantic probes.
Primary issues: #94, #251, #257, #261, #269, #272, #273.
Validation gate:
- Critical-path UxHarness scenarios exist and run as a required gate.
- UxTree/Probe invariants catch ownership/focus/routing regressions before merge.
Status: open
Feature objective: No pre-wgpu-critical feature remains in scaffold state for core UX closure paths.
Active scaffolds:
[SCAFFOLD:view-dimension-ui-wiring][SCAFFOLD:divergent-layout-commit][SCAFFOLD:viewer-wry-runtime-registration][SCAFFOLD:verse-protocol-handler][SCAFFOLD:wasm-mod-loader-runtime]
Validation gate:
- Core-UX-impacting scaffolds: closure criteria met and marker removed.
- Non-core scaffolds: explicitly de-scoped from v0.0.2 with rationale documented.
Status: blocked (by AG0โAG8)
Feature objective: Ship v0.0.2 on the then-current pre-cut stack when application readiness is true.
Historical note (updated 2026-04-10): This section records the 2026-03-12 deferral posture. The egui-wgpu UI cut has since landed; remaining renderer work now concerns deeper WebRender/runtime bridge convergence rather than the old egui backend swap itself.
Validation gate:
- All AG0โAG8 closed with evidence.
- Test guide ยง4 minimum acceptance checks are green on the then-current stack.
- Detail-view omnibar submit routing now resolves target deterministically by preferring focused node mapping, then preferred input webview mapping, before create-node fallback.
- Toolbar submit dispatch now ignores
lost_focus + Enteras an implicit submit trigger; submission requires focused-enter or explicit queued submit state. - Added regression tests for detail-submit target resolution and toolbar submit-dispatch gating to guard against focus/routing regressions.
- Added pane-transition focus handoff regression coverage to verify that frame activation retargets to the remaining mapped node after close transitions.
- AG2 follow-up complete: tile focus handoff after pane/tab transitions now has explicit regression coverage for stale-focused and stale-preferred transition paths, validating
preferred_input_webview_idalignment with expected toolbar submit targeting.
- Open-route orchestration now emits explicit diagnostics for open decision path (
ux:open_decision_path) and reason (ux:open_decision_reason) across settings/frame/tool/view/graph/note/node/clip URL handlers. - Added AG3 regression coverage for both routed and unresolved open-graph flows to assert decision diagnostics emission and fallback-path contract warning behavior.
- Semantic child-webview open routing now emits the same open-decision diagnostics and classifies deferred unmapped child-webview opens as target-missing, with regression coverage for both routed and deferred outcomes.
- Command-surface disabled-state parity now enforces
PersistUndo/PersistRedoavailability via sharedActionRegistrycontext (undo_available/redo_available), rather than leaving both actions always enabled. - Command palette now emits explicit disabled hover reasons for unavailable undo/redo paths, matching matrix preconditions (
undo stack available/redo stack available) while retaining sharedActionIddispatch semantics. - Added registry regression coverage asserting undo/redo disabled when stacks are empty and enabled when stack entries exist; validated in
action_registry,command_palette, andgui_orchestrationtest packs.
- AG0 checklist synchronization progressed:
design/accessibility_baseline_checklist.mdnow reflects#301evidence for keyboard-trap and explicit command-surface target-size/contrast rows instead of leaving those audited slices stale asUntested. - Radial disabled-state text contrast remediation is landed in
render/radial_menu.rsand guarded by regression testradial_disabled_text_contrast_meets_wcag_minimum_for_text. -
#301keyboard no-trap validation commands were re-run and remain green (cycle_focus_region_intent_cycles_graph_node_tool_regions,close_settings_tool_pane_restores_previous_graph_focus_via_orchestration,cycle_focus_region_success_does_not_emit_ux_navigation_violation_channel). - Modal isolation no-trap evidence now covers multiple floating command overlays (
radial,command palette,help panel) via global undo-shortcut consumption regressions ingui_orchestration_tests. - Semantic dispatch now consumes a unified modal-surface flag sourced from UI overlay state (including
show_clear_data_confirm), and regression coverage now includes clear-confirm modal shortcut consumption (global_shortcut_undo_is_consumed_when_clear_confirm_modal_is_active). - Input-layer keyboard capture behavior now has explicit AG0 regressions proving
F6focus-cycle suppression while text input is active andF9global shortcut survivability under capture ininput::tests. - Workbar command-surface keyboard operability now has explicit input-layer evidence for
F1/F2/F3shortcut detection (help, command palette, radial menu toggles). - Input-layer capture coverage now also proves
F1/F2/F3workbar toggles are suppressed while text-entry surfaces own keyboard focus, preventing accidental command-surface activation during omnibar editing. - Omnibar submit-dispatch helper coverage now includes queued-submit behavior after focus loss, alongside focused-enter and ignored lost-focus-enter paths, tightening keyboard submission semantics evidence for AG0.
- Omnibar submit-dispatch helper coverage now also includes an explicit no-implicit-submit case (
submit_dispatch_does_not_trigger_without_enter_or_queue), reinforcing deterministicOn Focusbehavior (focus transitions alone do not trigger context changes). - Dialog clear-data destructive action flow now has explicit confirmation-window regressions (
clear_data_confirm_is_not_armed_without_deadline,clear_data_confirm_is_armed_until_deadline_inclusive,clear_data_confirm_expires_after_deadline_passes) proving deterministic two-step confirmation and expiry behavior. - Dialog and omnibar instruction text invariants now have explicit regressions (
clear_data_confirm_warning_text_includes_instruction_and_timing,location_input_hint_text_provides_search_and_address_instruction) to preserve baseline Labels/Instructions semantics for destructive confirmation and primary input affordance copy. - Input-layer regressions now explicitly cover character-key shortcut suppression under text capture (
N,T,?), adding concrete AG0 evidence for deterministic Character Key Shortcut behavior in editing contexts. - Dialog clear-confirm flow now uses a deterministic input-action classifier (
ArmvsExecute) with regression coverage for active-deadline execution, initial arm, and expired-deadline re-arm paths, strengthening AG0On Inputsemantics evidence for destructive actions. - Command palette disabled-state policy now has explicit regressions proving every disabled action in default context exposes a textual precondition reason and that reason text is actionable/non-color-dependent, adding partial AG0 evidence for Sensory Characteristics and Use of Color criteria.
- Action registry label semantics now include targeted regressions asserting representative command labels convey purpose in context (open/copy/connect/delete/save/restore), adding partial AG0 evidence for Link Purpose clarity.
- Clipboard status/toast semantics now include deterministic message-contract regressions in
gui_orchestrationasserting stable success mapping by copy kind (URL/title) and explicit outcome wording for success/warning/error/unavailable states, adding partial AG0 evidence for4.1.3 Status Messageswhile AT announcement verification remains pending. - Clipboard error-message semantics now include deterministic failure-text regressions asserting stable
Copy failedprefixing and explicit missing-node failure wording, adding partial AG0 evidence for3.3.1 Error Identificationin command-surface feedback paths. - Clipboard missing-node failure messaging now includes explicit actionable recovery guidance (
select a node and try again) with regression coverage, adding partial AG0 evidence for3.3.3 Error Suggestionin command-surface error feedback. - AG0 remains open pending full WCAG 2.2 Level A gate coverage evidence across all seven canonical surface classes (non-radial surfaces still have unverified rows) and explicit AA waiver tracking for remaining AA gaps.
From 2026-03-03_spec_conflict_resolution_register.md. P1โP2 must be resolved before v0.0.2; P3โP4 should be resolved but may be deferred with explicit documentation.
| Priority | Item | Status | v0.0.2 required? |
|---|---|---|---|
| P1 | Rewrite pane_chrome_and_promotion_spec.md (separate Pane Opening Mode from chrome/promotion) |
landed |
Yes |
| P2.2 | Add internal frame address semantics (graphshell://frame/<FrameId> spec basis; verso://frame/<FrameId> runtime canonical alias) to graph_first_frame_semantics_spec.md
|
landed |
Yes |
| P2.3 | Add NavigationTrigger::PanePromotion to edge_traversal_spec.md
|
landed |
Yes |
| P3.4 | Terminology cleanup in workbench_tab_semantics_overlay_and_promotion_plan.md
|
landed |
Recommended |
| P3.5 | Add demotion-driven Tombstone path to node_lifecycle_and_runtime_reconcile_spec.md
|
landed |
Recommended |
| P3.6 | Clarify address-as-identity impact on storage_and_persistence_integrity_spec.md
|
landed |
Recommended |
| P4.7 | New plan: Pane Opening Mode + SimplificationSuppressed | landed |
Yes (D1) |
| P4.8 | New plan: internal address scheme implementation (graphshell:// original plan basis; verso:// runtime canonical namespace) |
landed |
Yes (D3) |
Key decisions backing this resolution order:
- D1: Pane Opening Mode is a separate plan (not folded into tab-semantics plan).
- D2: "Promotion" reserved exclusively for graph-enrollment semantics.
-
D3: Internal address scheme implementation is a closure prerequisite (
graphshell://as original spec baseline;verso://as current runtime canonical namespace with compatibility parsing).
How the 10 active execution lanes from PLANNING_REGISTER.md ยง1C map to AG gates. This determines lane priority for v0.0.2 closure.
| Lane | Rank | Primary AG gates served | v0.0.2 critical? |
|---|---|---|---|
lane:stabilization (#88) |
1 | AG0, AG1, AG2, AG6 | Yes โ blocks all interaction reliability gates |
lane:control-ui-settings (#89) |
2 | AG4, AG5 | Yes โ command surface + undo + settings |
lane:embedder-debt (#90) |
3 | AG3, AG6 | Yes โ content opening semantics + compositor pass contract |
lane:runtime-followon (#91) |
4 | AG7 (partial) | Partial โ SR2/SR3 contributes to diagnostics authority |
lane:viewer-platform (#92) |
5 | AG6, AG8 |
Yes โ TileRenderMode, viewer fallback, scaffold retirement |
lane:accessibility (#95) |
6 | AG0 | Yes โ all-surfaces WCAG Level A gate + AA waiver tracking (per CR4) |
lane:diagnostics (#94) |
7 | AG7 | Yes โ automation authority gate |
lane:subsystem-hardening (#96) |
8 | AG5, AG8 | Partial โ storage/history/security integrity |
lane:test-infra (#97) |
9 | AG7, AG9 | Yes โ CI gate infrastructure for release validation |
lane:knowledge-capture (#98) |
10 | AG8 | Partial โ UDC/badges/tagging if in scaffold scope |
Lanes 1โ3 are the critical path. They serve the gates with the most open items and the broadest failure-mode coverage.
These items are net-new requirements surfaced by the doc audit and contradiction resolution. They must be scoped, ticketed, and assigned to lanes.
Lane: lane:control-ui-settings (#89)
AG gate: AG4
Scope:
- Design undo stack architecture for
GraphIntentreversal (intent log with inverse operations, or snapshot-based rollback). - Implement undo/redo for destructive graph mutations (node/edge create, delete, metadata changes).
- Wire UI surface (Ctrl+Z / Ctrl+Shift+Z or platform equivalent).
- Add scenario tests for undo/redo across critical graph operations.
- Update
command_semantics_matrix.mdto annotate which "Undoable: Yes" rows are implemented vs. planned.
Done gate: Ctrl+Z reverts the last destructive graph mutation; Ctrl+Shift+Z re-applies it. Covered by tests.
Progress note (2026-03-05):
- Reducer-owned undo checkpoint capture is now wired for destructive graph intents (node create/delete, URL/metadata mutation, user-grouped edge create/remove, pin/tag transitions).
- New graph-app regressions now prove
Undo/Redoround-trips for create/delete, URL mutation, and edge create/remove flows, plus no-op checkpoint suppression for unchanged URL writes. -
design/command_semantics_matrix.mdnow includes explicit implemented-vs-planned annotation forUndoablerows (W1 doc parity complete).
Lane: lane:stabilization (#88)
AG gate: AG1
Scope:
- Refactor selection state from
GraphBrowserApp-global to per-GraphViewIdscope. - Update lasso metadata keying to per-view (
egui_graphs_metadata_indexed byGraphViewId). - Validate multi-pane selection independence (selecting in pane A does not affect pane B).
- Update
focus_and_region_navigation_spec.mdto mark per-view selection as implemented (not just target).
Done gate: Selection state is per-GraphViewId; multi-pane selection test passes; lasso metadata works in second pane.
Progress note (2026-03-03):
- W2 implementation work is landed on
mainfor runtime paths (selection reads/writes now route through focused/per-view selection helpers instead of global runtime consumers). - Final W2 sweep found no notable remaining runtime callsites requiring migration; residual
workspace.selected_nodesuses are test-only or compatibility-mirror plumbing insidegraph_app.rs. - W2 is treated as implementation-complete; AG1 remains
partialpending the other AG1 stabilization items.
Lane: lane:accessibility (#95)
AG gate: AG0
Scope:
- Run WCAG 2.2 audit across all 7 canonical surface classes from
design/accessibility_baseline_checklist.md(Graph Pane, Node Pane, Tool Pane, Floating Windows, Dialogs, Omnibar, Workbar), capturing both A and AA rows. - Fix known gating defects and verify radial disabled-state contrast remains compliant with AA text contrast requirements (audit #301 follow-through).
- Update
accessibility_baseline_checklist.mdto reflect actual test results (replace stale "Untested" rows). - Maintain an explicit AA waiver register for any remaining AA gaps (owner, rationale, deadline) in
design/accessibility_aa_waiver_register.md; no implicit AA deferrals.
Done gate: For v0.0.2, accessibility baseline checklist shows Pass or N/A for all Level A criteria across all 7 canonical surfaces, and any remaining AA gaps are explicitly tracked in the waiver register.
| Document | Date | Staleness | Recommended action |
|---|---|---|---|
archive_docs/checkpoint_2026-03-27/graphshell_docs/technical_architecture/ARCHITECTURAL_CONCERNS.md |
2026-02-17 | Archived | Historical concern register archived after its open items were resolved or superseded by active specs. |
technical_architecture/ARCHITECTURAL_OVERVIEW.md |
2026-02-17 | Partial | Update "Not Yet Implemented" list (diagnostics inspector, selection consolidation are now advanced). Reconcile crate versions and LOC counts. Remove archived checkpoint references as primary sources. |
../../archive_docs/checkpoint_2026-03-22/graphshell_docs/implementation_strategy/aspect_render/2026-02-20_embedder_decomposition_plan.md |
2026-02-21 | Historical | Archived after completion; line-number references in the historical Reality Check section are likely outdated after refactoring. |
viewer/2026-02-26_composited_viewer_pass_contract.md |
2026-02-26 | Partial | ยงA.0.3 overlay affordance "accidentally correct" debt claim needs validation against current code. If structurally enforced since then, update the debt assessment. |
The accessibility_baseline_checklist.md does not reflect concrete test results from #298 (keyboard focus audit) and #301 (accessibility closure bundle). WCAG 1.4.3 row shows "Untested" for surfaces where audit #301 recorded a specific fail. Must be updated before v0.0.2.
-
command_semantics_matrix.md"Undoable" column will be accurate once W1 (undo stack) is implemented โ no immediate rewrite needed, but an annotation distinguishing "implemented" from "target" is recommended. - Multiple subsystem UX semantics specs (
ux_tree_and_probe_spec.md,ux_event_dispatch_spec.md,ux_scenario_and_harness_spec.md) have unchecked acceptance criteria despite being tagged "Pre-renderer/WGPU required." This is expected โ they define the target contract, not current implementation.
Lanes: lane:stabilization (#88), lane:embedder-debt (#90)
- Close stabilization bug register regressions (camera, focus activation, lasso boundary, deselect).
- Implement per-view selection (W2).
- Close AG3 content-opening semantics (legacy context-menu bypass retirement).
- Close AG2 lifecycle determinism (spawn/activate, close-successor, focus handoff).
Exit criteria: AG1/AG2/AG3 moved from partial/open to closed.
Lanes: lane:control-ui-settings (#89)
- Unify F2/contextual/radial command surfaces.
- Implement undo/redo stack for graph mutations (W1).
- Close settings scaffold (AG5).
Exit criteria: AG4/AG5 moved to closed.
Lanes: lane:viewer-platform (#92), lane:embedder-debt (#90)
Execution note (2026-03-09):
-
TileRenderModeruntime authority is no longer just planned work: pane-aware render-mode lookup now drives compositor scheduling/diagnostics, and duplicate node panes no longer alias each other's render-mode state. - Foundation issue slices
#168,#169, and#170have first-pass implementations in code: byte-budget GPU degradation, pane-targeted backend-swap scaffolding, and local diagnostics-backed backend telemetry. - AG6 remains open because compositor pass-contract closure and adapter-level GL invariants are still separate work; the current landing removes ambiguity in pane/render identity and makes backend/degradation state observable.
- Land
TileRenderModeonNodePaneStatewith ViewerRegistry-driven resolution. - Close compositor pass contract (Content Pass โ Overlay Affordance Pass structurally enforced, not "accidentally correct").
- Validate viewer fallback/degraded-state clarity with diagnostics.
Exit criteria: AG6 moved to closed.
Lane: lane:roadmap (docs)
Status: in progress (all named P1โP4 doc slices landed; parity pass and any follow-on tracker synchronization remain)
- P1 rewrite landed (
pane_chrome_and_promotion_spec.md). - P2.2 and P2.3 landed (frame address semantics, navigation trigger).
- P3 terminology/lifecycle clarifications landed.
- P4 new plan docs landed (Pane Opening Mode, internal address scheme), and the implementation has since advanced to
verso://as the canonical system namespace with legacygraphshell://compatibility plus initialnotes://,graph://, andnode://domain-address scaffolds.
Post-P4 implementation delta (2026-03-03):
- Typed internal address parsing/formatting is live, with canonical
verso://emission and legacygraphshell://parse compatibility. - Workbench authority routing is live for
verso://settings/...,verso://frame/...,verso://tool/..., andverso://view/.... -
verso://view/...is no longer just a raw single-ID route:- legacy
verso://view/<id>remains as a compatibility graph-pane alias, - canonical routing shape is now
verso://view/<kind>/<id>, -
verso://view/note/<NoteId>routes to the note-open path, -
verso://view/node/<NodeId>routes to node-pane opening, -
verso://view/graph/<GraphId>now queues named graph restore when a matching snapshot exists.
- legacy
- Durable note scaffolding is landed in code (
notes://<NoteId>, in-memoryNoteRecord, note creation/open routing), but a real note pane/editor surface is still pending. -
graph://<GraphId>andnode://<NodeId>now participate in explicit route-intent handling (graphsnapshot restore;nodepane open/focus when resolvable). -
notes://<NoteId>andnode://<NodeId>are now emitted directly from address-bar domain routing;notesresolves into note-open queueing andnodeis intercepted by workbench authority. -
OpenNoteUrlis now intercepted in workbench authority (with reducer-side leak warning parity toOpenGraphUrl/OpenNodeUrl/OpenClipUrl). - Pending note-open requests are now consumed in the semantic lifecycle (open linked node pane when available and focus History manager as an interim note surface path).
- Graph-view address submission now has explicit non-mutation route parity for
verso://view/node/<NodeId>,verso://view/note/<NoteId>, andverso://view/graph/<GraphId>(all emitted as workbench route intents). - Graph-view address submission now also has explicit non-mutation parity for internal
settings,tool, andcliproutes (legacygraphshell://...canonicalized toverso://...intent emission). - Legacy
graphshell://view/node/<NodeId>submissions now have explicit canonicalization parity (verso://view/node/<NodeId>) with non-mutation route-intent coverage. - Legacy
graphshell://view/note/<NoteId>andgraphshell://view/graph/<GraphId>now also have explicit canonicalization parity tests (verso://view/note/...,verso://view/graph/...). - Legacy
graphshell://view/<GraphViewId>submissions now also have explicit canonicalization parity (verso://view/<GraphViewId>) with non-mutation route-intent coverage. -
OpenViewUrlnow has explicit reducer-boundary scenario coverage acrossview/node,view/note, andview/graphroute variants (OpenViewUrlremains workbench-authority and does not mutate graph state when reducer-applied). -
resolve_view_route(...)parser coverage now explicitly includes node/note/graph target variants for canonicalverso://view/<kind>/<id>routes. - Legacy
graphshell://frame/...andgraphshell://tool/...routes now have explicit canonicalization parity tests (verso://frame/...,verso://tool/...). -
OpenFrameUrlandOpenToolUrlnow have explicit reducer-boundary scenario coverage (workbench-authority only; no reducer graph mutation). - Legacy
graphshell://settings/...routes now have explicit canonicalization parity tests (verso://settings/...). - Invalid
OpenFrameUrlinputs now have explicit pass-through fallback coverage (unconsumed by orchestration authority when route parse fails). -
verso://clip/<id>now routes through workbench authority and its queued clip-open requests are consumed during the semantic lifecycle (History manager focus as interim clip surface path).
Current practical blocker after Phase 4 docs:
- The next meaningful closure is a durable note pane/editor authority so
notes://<NoteId>routes resolve into a first-class note surface rather than queue-only scaffolding.
Exit criteria: P1โP2 closed; P3โP4 landed or explicitly deferred.
Lanes: lane:accessibility (#95), lane:diagnostics (#94), lane:test-infra (#97)
- Run all-surfaces WCAG audit with Level A gating and AA waiver tracking (W3).
- Land UxHarness critical-path scenarios.
- Retire or de-scope active scaffolds.
- Update stale docs from ยง8.
Exit criteria: AG0/AG7/AG8 moved to closed.
Lane: All lanes converge.
- Verify all AG0โAG8 are closed with linked evidence.
- Run test guide ยง4 minimum acceptance checks.
- Bump
Cargo.tomlversion to0.0.2. - Tag
v0.0.2, build release artifacts, publish release notes.
Exit criteria: v0.0.2 tagged and released.
Phases are not strictly sequential. The following can run in parallel:
- Phase 1 + Phase 4: Stabilization code work and spec conflict resolution docs work touch different hotspots.
-
Phase 2 + Phase 3: Command surface unification and viewer/compositor work are in different lanes and different hotspot files (except where
render/mod.rsis shared โ serialize those PRs). - Phase 5 accessibility + Phase 5 diagnostics: Different subsystems, different code paths.
Serialization constraints:
- Phase 6 blocks on all other phases.
- AG7 (automation authority) should have progress before AG1/AG2/AG6 close, since UxHarness scenarios validate those gates.
- Undo stack (W1) may have architectural implications for graph intent dispatch; coordinate with stabilization work touching
GraphIntentpaths.
Historical decision snapshot: This section records the 2026-03-12 deferral posture before the later egui-wgpu UI cut landed. It should no longer be read as the current renderer status.
The following tracks are suspended until conditions change:
- Track B: deeper WebRender/runtime bridge work beyond the now-landed
egui-wgpuUI cut - WebRender wgpu implementation (P0โP12 phases)
- Servo wgpu upgrade work (
#180,#183,#245)
The related planning documents are archived/deferred:
-
aspect_render/2026-02-27_egui_wgpu_custom_canvas_migration_strategy.mdโ Deferred indefinitely -
aspect_render/2026-03-01_webrender_readiness_gate_feature_guardrails.mdโ Deferred indefinitely -
aspect_render/2026-03-01_webrender_wgpu_renderer_implementation_plan.mdโ Deferred indefinitely -
aspect_render/2026-03-03_servo_wgpu_upgrade_audit_report.mdโ Deferred indefinitely
What this means for AG9: The release gate is now simply all AG0โAG8 closed with evidence on the Glow stack. The #180 GL bridge is no longer a v0.0.2 blocker.
This plan subsumes, references, and deduplicates the following planning artifacts:
| Document | Relationship to this plan |
|---|---|
2026-03-03_pre_wgpu_feature_validation_gate_checklist.md |
Gates AG0โAG9 derived from this checklist's G0โG9 with CR amendments |
2026-03-03_spec_conflict_resolution_register.md |
ยง5 incorporates its P1โP4 backlog and D1โD3 decisions |
2026-03-01_complete_feature_inventory.md |
Feature counts and status codes provide the baseline; pre-wgpu closure checklist aligns with AG gates |
2026-03-02_scaffold_registry.md |
AG8 references its 5 active scaffolds |
2026-03-01_ux_migration_lifecycle_audit_register.md |
UX closure items feed AG0 and AG7 |
2026-03-01_ux_migration_feature_spec_coverage_matrix.md |
Spec coverage status informs AG0 and spec conflict resolution |
2026-03-01_ux_migration_design_spec.md |
Authoritative UX design target; v0.0.2 implements its Phase 1โ3 |
subsystem_ux_semantics/2026-03-01_ux_execution_control_plane.md |
Baseline done-gate and milestone checklist inform AG0 and Phase 5 |
aspect_render/2026-02-27_egui_wgpu_custom_canvas_migration_strategy.md |
Deferred indefinitely (2026-03-12); was deferral doctrine + application readiness gate |
aspect_render/2026-03-01_webrender_readiness_gate_feature_guardrails.md |
Deferred indefinitely (2026-03-12); was G1โG5 renderer-switch gates |
aspect_render/2026-03-01_webrender_wgpu_renderer_implementation_plan.md |
Deferred indefinitely (2026-03-12); was P0โP12 wgpu implementation phases |
PLANNING_REGISTER.md ยง1C |
Top 10 lanes mapped to AG gates in ยง6 |
system/VERSIONING_POLICY.md |
v0.0.2 bump semantics |
2026-02-28_stabilization_progress_receipt.md |
Evidence for AG1/AG2 partial closure |
design/accessibility_baseline_checklist.md |
AG0 accessibility gate; desync noted in ยง8 |
design/command_semantics_matrix.md |
AG4 command surface; undo annotation needed per CR1 |
testing/test_guide.md |
ยง4 minimum acceptance checks are the AG9 release gate |
From the pre-wgpu gate checklist, unchanged:
- No net-new UX feature expansion while AG1, AG2, AG3, or AG6 is open.
- Any PR touching a gate-owned area must include: contract-level scenario evidence, diagnostics evidence, parity doc delta.
- If a regression reopens a closed gate, that gate reverts to
openimmediately. - AG9 cannot be manually overridden by schedule pressure.
- Progress is measured only by feature closure + validation gate evidence, not time.
| Gate | Status | Blocking lanes | Key open items |
|---|---|---|---|
| AG0 | open |
stabilization, accessibility | All-surfaces WCAG Level A completion sweep + explicit AA waiver tracking (remaining unverified non-radial surfaces) |
| AG1 | partial |
stabilization | Camera/lasso/selection reliability evidence in multi-pane paths (W2 complete) |
| AG2 | partial |
stabilization, embedder-debt | Focus activation race, close-successor handoff |
| AG3 | open |
embedder-debt | Legacy context-menu bypass retirement |
| AG4 | open |
control-ui-settings | Command unification, undo/redo (W1) |
| AG5 | partial |
control-ui-settings, subsystem-hardening | Settings scaffold, tool pane return-target |
| AG6 | partial |
viewer-platform, embedder-debt |
TileRenderMode, compositor pass contract |
| AG7 | open |
diagnostics, test-infra | UxHarness scenarios, UxTree/Probe invariants |
| AG8 | open |
viewer-platform, knowledge-capture | 5 active scaffolds |
| AG9 | blocked |
All | Blocked by AG0โAG8 (wgpu migration deferred; #180 no longer a blocker) |
Gates closed: 0/10
Gates partial: 4/10 (AG1, AG2, AG5, AG6)
Gates open: 5/10 (AG0, AG3, AG4, AG7, AG8)
Gates blocked: 1/10 (AG9)