Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 11 additions & 5 deletions docs/en/phase-0-reactflow-parity-audit.md
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,10 @@ Phase 536 is GitHub #195 / `avalonia-node-map-uvd`, the lasso screenshot route a

Phase 537 is GitHub #197 / `avalonia-node-map-w9h`, the lasso toolbar UX and public activation ergonomics boundary. This implementation slice adds `AsterGraphAuthoringToolActionFactory.CreatePointerSelectionModeActions(...)` and the hosted Authoring Tools buttons `PART_PointerModeMarqueeButton` / `PART_PointerModeLassoButton`. The actions set the existing `NodeCanvas.SelectionMode` property to `NodeCanvasSelectionMode.Marquee` or `NodeCanvasSelectionMode.Lasso`; they stay `GraphEditorCommandSourceKind.Host` actions with no runtime command id, so they do not create a parallel selection model. `HostedActions_PointerModeActionsSwitchNodeCanvasSelectionModeWithoutRuntimeCommandRoute` and `AuthoringToolsChrome_ProjectsPointerModeActionsThroughNodeCanvasSelectionMode` guard the public helper and hosted toolbar route. This authorizes no eraser, no drawing primitives, no persistence, no renderer rewrite, no strict pixel baselines, no retained API removal, and no full whiteboard parity.

## Phase 538 Update

Phase 538 is GitHub #199 / `avalonia-node-map-a3w`, the eraser behavior/API feasibility gate. This docs/tests-only slice records that AsterGraph's current source-backed deletion evidence is graph-selection deletion through `selection.delete`, the `Delete Selection` command descriptor, and the stock `selection-delete` placement. That route can delete selected graph nodes through the existing command system, but it is not an eraser cursor, collision trail, or eraser-specific hit-testing behavior. It authorizes no eraser cursor, no collision trail, no eraser-specific hit-testing, no drawing primitives, no persistence, no renderer rewrite, no strict pixel baseline enforcement, no retained API removal, and no full whiteboard parity.

## Phase 489 Update

Phase 489 closed GitHub #101 / `avalonia-node-map-6sc` through PR #102 as a renderer virtualization design spike on branch `perf/renderer-virtualization-spike`. This slice was docs/tests only: it defined the proof contract required before any future ItemsRepeater/Skia-style renderer virtualization, background graph index, or graph-size claim expansion. It made no public API change and no runtime change. The current evidence remains viewport-budgeted scene projection/rendering, not a true renderer virtualization contract; `xlarge` stays telemetry-only.
Expand Down Expand Up @@ -368,7 +372,7 @@ Phase 529 records the whiteboard/lasso/eraser feasibility audit through GitHub #
| Rectangle marquee selection | Present / guarded | `GetSelectionRectangleSnapshot`, `UpdateMarqueeSelection`, `Queries_GetSelectionRectangleSnapshot_ReturnsNodesAndConnectionsInRectangle`, `UpdateMarqueeSelection_WithFinalizeTrue_UsesBackendSelectionRectangleQuery`, `interaction-selection-marquee-route`, `selection-marquee-workbench`, and `v079-selection-rectangle-route` prove rectangular selection evidence. | This is axis-aligned rectangle/marquee selection, not lasso/freehand selection or a drawing tool. |
| Multi-select and command projection | Present / guarded | `selection.select-all`, `selection.select-none`, `selection.invert`, `selection.delete`, and `selection.transform.move` expose current selection and manipulation commands. | Command projection operates on graph selections; it does not add eraser hit trails, drawn shape lifecycle, or whiteboard-specific edit modes. |
| Lasso/freehand selection | Public Avalonia lasso selection mode with hosted toolbar activation and transient visual feedback / whiteboard gap retained | `GetSelectionLassoSnapshot`, `GraphEditorSelectionLassoSnapshot`, `Queries_GetSelectionLassoSnapshot_ReturnsCenterContainedNodesAndConnections`, `Queries_GetSelectionLassoSnapshot_UsesNodeCenterInsteadOfBoundsIntersection`, `Queries_GetSelectionLassoSnapshot_WithOpenOrDegeneratePath_ReturnsDeterministicResults`, `UpdateLassoSelection_WithFinalizeTrue_UsesBackendSelectionLassoQuery`, `LassoSelection_RoutesThroughCanvasBridge_AndSelectsContainedNodes`, `NodeCanvasSelectionGestureKind.Lasso`, `TryBeginLassoSelection_WithLassoGestureKind_RecordsStartAndMoveAfterThreshold`, `HandleMoved_WhenCanvasSelectionUsesLassoGesture_RecordsLassoPointAndSkipsMarqueeUpdate`, `HandleReleased_AfterLassoSelection_FinalizesLassoSelectionAndResetsSession`, `NodeCanvasSelectionMode.Lasso`, `LassoSelectionMode_RoutesThroughCanvasPointerHandlers_AndSelectsContainedNodes`, `UpdateLassoFeedback`, `ClearLassoFeedback`, `LassoSelectionMode_RendersTransientFeedbackPathOnlyDuringDrag`, `CreatePointerSelectionModeActions`, `pointer-mode.lasso-selection`, `PART_PointerModeLassoButton`, `HostedActions_PointerModeActionsSwitchNodeCanvasSelectionModeWithoutRuntimeCommandRoute`, and `AuthoringToolsChrome_ProjectsPointerModeActionsThroughNodeCanvasSelectionMode` prove the active-scope backend query, internal Avalonia bridge, internal gesture capture route, public pointer-mode activation route, hosted toolbar route, and transient visual feedback route. The query treats freeform points as a closed polygon, selects nodes by center-point containment, and selects connections when both endpoint nodes are selected. | No eraser behavior, drawing primitives, persistence, renderer layer, strict pixel baselines, retained API removal, or full React Flow whiteboard parity is implemented. This remains not full React Flow whiteboard parity. |
| Eraser tool | Gap retained | `selection.delete` can delete the current graph selection, but there is no eraser cursor, collision trail, or eraser-specific hit-testing path. | Needs a later behavior/API issue before claiming eraser tool parity; this slice adds no runtime UI behavior changes. |
| Eraser tool | Feasibility gate recorded / gap retained | `selection.delete`, the `Delete Selection` descriptor, and the stock `selection-delete` placement prove graph-selection deletion evidence only. | Phase 538 records that graph-selection deletion is not an eraser cursor, collision trail, or eraser-specific hit-testing path. No eraser cursor, no collision trail, no eraser-specific hit-testing, no drawing primitives, no persistence, no renderer rewrite, no strict pixel baseline enforcement, no retained API removal, and no full whiteboard parity are implemented. |
| Rectangle/freehand drawing | Gap retained | Existing rectangle evidence is selection-only. There are no rectangle/freehand drawing tools, whiteboard primitives, shape nodes, brush/color state, or drawing persistence contracts. | Needs later API/model/renderer work before claiming rectangle draw or freehand draw parity. |
| Whiteboard persistence/render layer | Gap retained | Current Cookbook and screenshot rows cover graph scenes and built-in components, not whiteboard annotations or drawing state. | Future work would need persistence, renderer layer, hit-testing, React Flow-like examples, and screenshot manifest expansion; Phase 529 adds none of those. |

Expand Down Expand Up @@ -501,12 +505,14 @@ Phase 536 adds the bounded lasso screenshot proof through GitHub #195 / `avaloni

Phase 537 adds the lasso toolbar ergonomics route through GitHub #197 / `avalonia-node-map-w9h`. It adds `CreatePointerSelectionModeActions(...)`, `pointer-mode.lasso-selection`, and `PART_PointerModeLassoButton` as host-facing activation over `NodeCanvas.SelectionMode` / `NodeCanvasSelectionMode.Lasso`, while retaining eraser behavior, drawing primitives, persistence, renderer rewrite, strict pixel baselines, retained API removal, and full whiteboard parity as gaps.

Phase 538 records the eraser behavior/API feasibility gate through GitHub #199 / `avalonia-node-map-a3w`. It keeps `selection.delete`, `Delete Selection`, and `selection-delete` tied to graph-selection deletion evidence only, while retaining eraser cursor, collision trail, eraser-specific hit-testing, drawing primitives, persistence, renderer rewrite, strict pixel baselines, retained API removal, and full whiteboard parity as gaps.

| GitHub | Bead | Title | Priority | Likely write set | Parallelism |
| --- | --- | --- | --- | --- | --- |
| #193 | `avalonia-node-map-8l6` | Phase 535: refresh post-lasso visual feedback parity queue | P2 | parity roadmap docs and focused docs tests | Current docs/test queue refresh. Blocks the next implementation wave because it replaces the stale Phase 534 current row with tracker-backed follow-ups. |
| #195 | `avalonia-node-map-uvd` | Phase 536: lasso screenshot route and Cookbook proof boundary | P2 | Cookbook screenshot manifest, Demo fixture route, scene/shell screenshot tests, and parity docs | Current visual proof slice. Blocks lasso toolbar work until the screenshot route and Cookbook proof boundary are stable. |
| #197 | `avalonia-node-map-w9h` | Phase 537: lasso toolbar UX and public activation ergonomics boundary | P2 | hosted authoring tools, `NodeCanvas.SelectionMode` activation surface, Demo/Cookbook route, and editor/Avalonia tests | Current toolbar ergonomics slice. It stays on hosted actions over the existing canvas selection mode and does not create whiteboard primitives. |
| TBD | TBD | Phase 538: eraser behavior/API feasibility gate | P3 | editor selection/delete commands, Avalonia hit-testing route, parity docs, and focused feasibility tests | Can run after Phase 535 in parallel with drawing model planning if it avoids shared pointer-mode state edits. |
| #197 | `avalonia-node-map-w9h` | Phase 537: lasso toolbar UX and public activation ergonomics boundary | P2 | hosted authoring tools, `NodeCanvas.SelectionMode` activation surface, Demo/Cookbook route, and editor/Avalonia tests | Merged toolbar ergonomics slice. It stays on hosted actions over the existing canvas selection mode and does not create whiteboard primitives. |
| #199 | `avalonia-node-map-a3w` | Phase 538: eraser behavior/API feasibility gate | P3 | graph-selection deletion evidence, parity roadmap docs, and focused docs tests | Current eraser feasibility slice. It keeps `selection.delete` scoped to graph-selection deletion evidence and does not create an eraser cursor, collision trail, or eraser-specific hit-testing path. |
| TBD | TBD | Phase 539: rectangle/freehand drawing primitive model gate | P3 | Core/Editor model contract docs/tests and whiteboard primitive API inventory | Can run after Phase 535 in parallel with eraser feasibility if it stays docs/model-only and does not touch Avalonia pointer coordinators. |
| TBD | TBD | Phase 540: whiteboard persistence and render-layer readiness gate | P4 | persistence/schema planning docs, renderer-layer boundary docs, screenshot policy notes, and focused docs tests | Depends on Phase 539 model decisions; do not implement persistence or renderer behavior in the queue refresh. |

Expand Down Expand Up @@ -546,8 +552,8 @@ Phase 537 adds the lasso toolbar ergonomics route through GitHub #197 / `avaloni
- `docs/phase-528-panel-overlay-boundary`: owns #179 / `avalonia-node-map-9ow`; current docs/test worktree for the Panel versus viewport-attached overlay boundary.
- `docs/phase-535-post-lasso-queue-refresh`: owns #193 / `avalonia-node-map-8l6`; current docs/test queue refresh after transient lasso feedback, with no runtime/API/UI/screenshot-manifest/whiteboard implementation changes.
- `visual/phase-536-lasso-screenshot-proof`: owns #195 / `avalonia-node-map-uvd`; current slice for `cookbook-interaction-lasso-screenshot-proof`, `shell-cookbook-lasso-screenshot-proof`, and the bounded lasso screenshot proof boundary.
- `feature/phase-537-lasso-toolbar-ergonomics`: future candidate for lasso toolbar UX and public activation ergonomics after Phase 535.
- `feature/phase-538-eraser-feasibility`: future candidate for eraser behavior/API feasibility after Phase 535.
- `feature/phase-537-lasso-toolbar-ergonomics`: owned #197 / `avalonia-node-map-w9h`; merged worktree for lasso toolbar UX and public activation ergonomics.
- `feature/phase-538-eraser-feasibility`: owns #199 / `avalonia-node-map-a3w`; current worktree for eraser behavior/API feasibility with graph-selection deletion evidence only.
- `docs/phase-539-drawing-primitive-model-gate`: future candidate for rectangle/freehand drawing primitive model decisions after Phase 535.
- `docs/phase-540-whiteboard-render-persistence-gate`: future candidate for persistence/render-layer readiness after drawing model decisions.

Expand Down
Loading
Loading