Skip to content
Open
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
15 changes: 11 additions & 4 deletions docs/en/phase-0-reactflow-parity-audit.md
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,10 @@ Phase 538 is GitHub #199 / `avalonia-node-map-a3w`, the eraser behavior/API feas

Phase 539 is GitHub #201 / `avalonia-node-map-rwr`, the rectangle/freehand drawing primitive model gate. This docs/tests-only slice records that the current `GraphDocument` / `GraphNode` / `GraphConnection` model surface and `GraphEditorSelectionRectangleSnapshot` / `GraphEditorSelectionLassoSnapshot` evidence are graph-scene and selection contracts, not rectangle/freehand drawing primitives. It defines the minimum future contract needed before drawing behavior can be implemented or claimed: model identity, geometry, style/brush state, hit-testing/edit lifecycle, renderer projection, persistence, and Cookbook/screenshot evidence. It authorizes no runtime behavior changes, no public API changes, no Avalonia pointer coordinator edits, no renderer-layer changes, no persistence/schema changes, no screenshot manifest expansion, no UI redesign, no eraser behavior, no toolbar work, no retained API removal, and no full React Flow whiteboard parity.

## Phase 540 Update

Phase 540 is GitHub #203 / `avalonia-node-map-91b`, the whiteboard persistence and render-layer readiness gate. This docs/tests-only slice records that current persistence and rendering evidence is graph-scene evidence: `GraphDocumentSerializer`, `GraphDocumentCompatibility`, `CurrentSchemaVersion`, and `GraphWorkspaceService` persist graph documents and workspaces, while `GraphEditorSceneSnapshot`, `NodeCanvasConnectionSceneRenderer`, `CookbookScreenshotGateRoutes.json`, and `CookbookShellVisualGateStates.json` prove graph-scene projection and screenshot fixtures. They do not implement whiteboard annotation persistence or whiteboard annotation rendering. Before any future rectangle/freehand drawing state can be persisted or rendered as first-class whiteboard primitives, a later issue must define a persistence/schema contract, renderer projection contract, hit-testing/edit lifecycle, screenshot/Cookbook evidence, migration policy, and explicit non-goals. Phase 540 authorizes no runtime behavior changes, no public API changes, no persistence/schema changes, no renderer-layer changes, no screenshot manifest expansion, no Avalonia pointer coordinator edits, no UI redesign, no drawing tool implementation, no eraser behavior, no toolbar work, no retained API removal, and no full React Flow 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 @@ -378,7 +382,7 @@ Phase 529 records the whiteboard/lasso/eraser feasibility audit through GitHub #
| 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 | 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 | Model gate recorded / gap retained | Phase 539 / GitHub #201 / `avalonia-node-map-rwr` ties current reusable evidence to `GraphDocument`, `GraphNode`, `GraphConnection`, `GraphEditorSelectionRectangleSnapshot`, `GraphEditorSelectionLassoSnapshot`, `GetSelectionRectangleSnapshot`, `GetSelectionLassoSnapshot`, `interaction-selection-marquee-route`, `selection-marquee-workbench`, and `cookbook-interaction-lasso-screenshot-proof`. These prove graph-scene, selection, and visual-proof seams only. | Before rectangle/freehand drawing behavior can be implemented or claimed, a later API/model issue must define model identity, geometry, style/brush state, hit-testing/edit lifecycle, renderer projection, persistence/drawing persistence, and Cookbook/screenshot evidence. Phase 539 adds no runtime behavior changes, no public API changes, no Avalonia pointer coordinator edits, no renderer-layer changes, no persistence/schema changes, no screenshot manifest expansion, and no full React Flow whiteboard 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. |
| Whiteboard persistence/render layer | Readiness gate recorded / gap retained | Phase 540 / GitHub #203 / `avalonia-node-map-91b` ties current reusable evidence to `GraphDocumentSerializer`, `GraphDocumentCompatibility`, `CurrentSchemaVersion`, `GraphWorkspaceService`, `GraphEditorSceneSnapshot`, `NodeCanvasConnectionSceneRenderer`, `CookbookScreenshotGateRoutes.json`, and `CookbookShellVisualGateStates.json`. These prove graph document/workspace persistence, graph-scene projection, committed connection rendering, and screenshot fixture coverage only. | Future whiteboard annotation persistence and whiteboard annotation rendering need a later implementation issue with a persistence/schema contract, renderer projection contract, hit-testing/edit lifecycle, screenshot/Cookbook evidence, migration policy, and explicit non-goals. Phase 540 adds no runtime behavior changes, no public API changes, no persistence/schema changes, no renderer-layer changes, no screenshot manifest expansion, and no full React Flow whiteboard parity. |

## Completed Phase 0 Issue Wave

Expand Down Expand Up @@ -513,14 +517,16 @@ Phase 538 records the eraser behavior/API feasibility gate through GitHub #199 /

Phase 539 records the rectangle/freehand drawing primitive model gate through GitHub #201 / `avalonia-node-map-rwr`. It keeps current `GraphDocument`, `GraphNode`, `GraphConnection`, `GraphEditorSelectionRectangleSnapshot`, and `GraphEditorSelectionLassoSnapshot` evidence scoped to graph-scene and selection contracts, then defines the future model identity, geometry, style/brush state, hit-testing/edit lifecycle, renderer projection, persistence, and Cookbook/screenshot evidence required before any rectangle/freehand drawing parity claim.

Phase 540 records the whiteboard persistence and render-layer readiness gate through GitHub #203 / `avalonia-node-map-91b`. It keeps current `GraphDocumentSerializer`, `GraphDocumentCompatibility`, `CurrentSchemaVersion`, `GraphWorkspaceService`, `GraphEditorSceneSnapshot`, `NodeCanvasConnectionSceneRenderer`, `CookbookScreenshotGateRoutes.json`, and `CookbookShellVisualGateStates.json` evidence scoped to graph documents, workspaces, graph-scene projection, committed connection rendering, and screenshot fixtures; it does not claim whiteboard annotation persistence or whiteboard annotation rendering.

| 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 | 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. |
| #201 | `avalonia-node-map-rwr` | Phase 539: rectangle/freehand drawing primitive model gate | P3 | Core/Editor model contract docs/tests and whiteboard primitive API inventory | Current stacked drawing model gate on top of Phase 538 / PR #200. It stays docs/model-only, does not touch Avalonia pointer coordinators, and preserves Phase 540 as future persistence/render-layer readiness work. |
| 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. |
| #203 | `avalonia-node-map-91b` | 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 | Stacked after Phase 539 / PR #202; do not merge before Phase 539. This slice records readiness criteria only and does not implement persistence or renderer behavior. |

## Recommended Parallel Worktree Plan

Expand Down Expand Up @@ -561,7 +567,7 @@ Phase 539 records the rectangle/freehand drawing primitive model gate through Gi
- `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`: owns #201 / `avalonia-node-map-rwr`; current stacked docs/test gate for rectangle/freehand drawing primitive model decisions on top of Phase 538 / PR #200, with no runtime/API/UI/pointer coordinator/renderer/persistence changes.
- `docs/phase-540-whiteboard-render-persistence-gate`: future candidate for persistence/render-layer readiness after drawing model decisions.
- `docs/phase-540-whiteboard-render-persistence-gate`: owns #203 / `avalonia-node-map-91b`; current stacked docs/test gate for persistence/render-layer readiness after drawing model decisions, with no runtime/API/persistence/schema/renderer/screenshot-manifest/UI/pointer coordinator changes.

## UI Verification Policy

Expand Down Expand Up @@ -617,4 +623,5 @@ Current coverage includes scene-level route captures plus ten manifest-driven fu
- Phase 535 is GitHub #193 / `avalonia-node-map-8l6`; it refreshes the post-Phase-534 parity queue without runtime behavior changes, public API changes, UI redesign, screenshot manifest expansion, strict pixel baseline enforcement, retained API removal, or whiteboard implementation.
- Phase 536 is GitHub #195 / `avalonia-node-map-uvd`; it adds `cookbook-interaction-lasso-screenshot-proof`, `interaction-lasso-screenshot-proof-route`, `shell-cookbook-lasso-screenshot-proof`, `full-window-shell-lasso-state`, and `LASSO_SCREENSHOT_PROOF_BOUNDARY_OK` without toolbar UX, eraser behavior, drawing primitives, persistence, renderer rewrite, strict pixel baseline enforcement, retained API removal, or full whiteboard parity.
- Phase 539 is GitHub #201 / `avalonia-node-map-rwr`; it records the rectangle/freehand drawing primitive model gate without runtime behavior changes, public API changes, Avalonia pointer coordinator edits, renderer-layer changes, persistence/schema changes, screenshot manifest expansion, UI redesign, eraser behavior, toolbar work, retained API removal, or full React Flow whiteboard parity.
- Product code remains out of scope for Phase 478, Phase 484, Phase 490, Phase 491, Phase 492, Phase 493, Phase 494, Phase 495, Phase 497, Phase 498, Phase 499, Phase 500, Phase 501, Phase 502, Phase 503, Phase 504, Phase 505, Phase 506, Phase 507, Phase 508, Phase 509, Phase 510, Phase 511, Phase 512, Phase 513, Phase 520, Phase 521, Phase 522, Phase 523, Phase 524, Phase 525, Phase 526, Phase 527, Phase 528, Phase 529, Phase 535, and Phase 539 unless a focused test proves a specific missing contract.
- Phase 540 is GitHub #203 / `avalonia-node-map-91b`; it records the whiteboard persistence and render-layer readiness gate without runtime behavior changes, public API changes, persistence/schema changes, renderer-layer changes, screenshot manifest expansion, Avalonia pointer coordinator edits, UI redesign, drawing tool implementation, eraser behavior, toolbar work, retained API removal, or full React Flow whiteboard parity.
- Product code remains out of scope for Phase 478, Phase 484, Phase 490, Phase 491, Phase 492, Phase 493, Phase 494, Phase 495, Phase 497, Phase 498, Phase 499, Phase 500, Phase 501, Phase 502, Phase 503, Phase 504, Phase 505, Phase 506, Phase 507, Phase 508, Phase 509, Phase 510, Phase 511, Phase 512, Phase 513, Phase 520, Phase 521, Phase 522, Phase 523, Phase 524, Phase 525, Phase 526, Phase 527, Phase 528, Phase 529, Phase 535, Phase 539, and Phase 540 unless a focused test proves a specific missing contract.
Loading
Loading