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
4 changes: 2 additions & 2 deletions .beads/issues.jsonl

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions docs/en/authoring-surface-recipe.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ Use one hosted handoff from definitions to proof instead of stitching together s
4. Write values back through `TrySetSelectedNodeParameterValue(...)` or `TrySetNodeParameterValue(...)`; keep validation on the shared session command path instead of adding a second editor model.
5. Project host commands from `GetCommandDescriptors()` so toolbars, menus, shortcuts, and palette actions stay on the same shared command route.
6. For hosted pointer-mode controls, render `AsterGraphAuthoringToolActionFactory.CreatePointerSelectionModeActions(canvas)` into the same authoring toolbar row. These actions set `NodeCanvas.SelectionMode` to `NodeCanvasSelectionMode.Marquee` or `NodeCanvasSelectionMode.Lasso`; they do not add a session command, a parallel selection model, or whiteboard drawing state.
7. For hosted whiteboard drawing-tool activation, render `AsterGraphAuthoringToolActionFactory.CreateWhiteboardDrawingToolActions(canvas)` beside the pointer-mode controls. These actions set only `NodeCanvas.WhiteboardDrawingMode` to `NodeCanvasWhiteboardDrawingMode.Rectangle` or `NodeCanvasWhiteboardDrawingMode.Freehand`; `whiteboard-drawing.rectangle` and `whiteboard-drawing.freehand` have no runtime command id. The stock canvas now consumes that activation on subsequent left-drag pointer gestures to create transient internal whiteboard primitive state only.
7. For hosted whiteboard drawing-tool activation, render `AsterGraphAuthoringToolActionFactory.CreateWhiteboardDrawingToolActions(canvas)` beside the pointer-mode controls. These actions set only `NodeCanvas.WhiteboardDrawingMode` to `NodeCanvasWhiteboardDrawingMode.Rectangle`, `NodeCanvasWhiteboardDrawingMode.Freehand`, or `NodeCanvasWhiteboardDrawingMode.Eraser`; `whiteboard-drawing.rectangle`, `whiteboard-drawing.freehand`, and `whiteboard-drawing.eraser` have no runtime command id. The stock canvas consumes rectangle/freehand activation on subsequent left-drag pointer gestures to create transient internal whiteboard primitive state, and consumes eraser activation to hit-test/remove those transient primitives without using graph `selection.delete`.
8. Close the handoff with `src/AsterGraph.Demo -- --proof` and expect `PORT_HANDLE_ID_OK:True`, `PORT_GROUP_AUTHORING_OK:True`, `PORT_CONNECTION_HINT_OK:True`, `PORT_AUTHORING_SCOPE_BOUNDARY_OK:True`, `CUSTOM_EXTENSION_SURFACE_OK:True`, and `AUTHORING_SURFACE_OK:True`.

## Copy path
Expand All @@ -92,7 +92,7 @@ Use one hosted handoff from definitions to proof instead of stitching together s
4. Replace editor bodies through `INodeParameterEditorRegistry`.
5. Render any host-owned edge overlay from `GetConnectionGeometrySnapshots()`.
6. Add lasso activation through `CreatePointerSelectionModeActions(...)` when the host needs a toolbar affordance for `NodeCanvasSelectionMode.Lasso`.
7. Add rectangle/freehand whiteboard activation through `CreateWhiteboardDrawingToolActions(...)` when the host needs a public activation affordance for `NodeCanvas.WhiteboardDrawingMode`, `NodeCanvasWhiteboardDrawingMode.Rectangle`, and `NodeCanvasWhiteboardDrawingMode.Freehand`. The stock hosted Authoring Tools toolbar now projects those actions as `PART_WhiteboardDrawingRectangleButton` and `PART_WhiteboardDrawingFreehandButton`; custom hosts can project the same descriptors in their own chrome. This remains hosted activation plus internal pointer capture only: no runtime command id, no eraser behavior, no persistence/schema changes, no renderer changes, and no full React Flow whiteboard parity.
7. Add rectangle/freehand/eraser whiteboard activation through `CreateWhiteboardDrawingToolActions(...)` when the host needs a public activation affordance for `NodeCanvas.WhiteboardDrawingMode`, `NodeCanvasWhiteboardDrawingMode.Rectangle`, `NodeCanvasWhiteboardDrawingMode.Freehand`, and `NodeCanvasWhiteboardDrawingMode.Eraser`. The stock hosted Authoring Tools toolbar now projects those actions as `PART_WhiteboardDrawingRectangleButton`, `PART_WhiteboardDrawingFreehandButton`, and `PART_WhiteboardEraserButton`; custom hosts can project the same descriptors in their own chrome. This remains hosted activation plus internal pointer capture/primitive erasing only: no runtime command id, no persistence/schema changes, no renderer changes, and no full React Flow whiteboard parity.
8. Keep runtime decorations on `IGraphRuntimeOverlayProvider` and inspector snapshots; do not move graph execution into the editor.

## Related docs
Expand Down
8 changes: 4 additions & 4 deletions docs/en/demo-cookbook.md

Large diffs are not rendered by default.

9 changes: 8 additions & 1 deletion docs/en/phase-0-reactflow-parity-audit.md
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,10 @@ Phase 553 is GitHub #227 / `avalonia-node-map-9f0`, the whiteboard primitive poi

Phase 554 is GitHub #228 / `avalonia-node-map-kpy`, the whiteboard authoring toolbar and Cookbook UX route. This hosted Avalonia + Demo/Cookbook slice projects `AsterGraphAuthoringToolActionFactory.CreateWhiteboardDrawingToolActions(...)` through the stock Authoring Tools row as `PART_WhiteboardDrawingRectangleButton` and `PART_WhiteboardDrawingFreehandButton`, backed by `AuthoringToolsChrome_ProjectsWhiteboardDrawingActionsThroughNodeCanvasDrawingMode`. It also adds `whiteboard-authoring-cookbook-route`, the screenshot route `cookbook-whiteboard-authoring-cookbook-route`, the shell state `shell-cookbook-whiteboard-authoring-cookbook-route`, and proof marker `WHITEBOARD_AUTHORING_COOKBOOK_UX_OK` on the existing `selection-marquee-workbench` fixture. Phase 554 is stacked after PR #233 and must not merge before Phase 553. It adds no new core model design, no pointer coordinator redesign, no eraser behavior, no persisted whiteboard primitive state, no GraphDocument schema changes, no renderer rewrite, no retained API removal, and no full React Flow whiteboard parity.

## Phase 555 Update

Phase 555 is GitHub #229 / `avalonia-node-map-71c`, the whiteboard primitive eraser behavior route. This hosted Avalonia slice extends `AsterGraphAuthoringToolActionFactory.CreateWhiteboardDrawingToolActions(...)` with `NodeCanvasWhiteboardDrawingMode.Eraser`, `whiteboard-drawing.eraser`, and the stock hosted `PART_WhiteboardEraserButton`; the action remains a host-source activation with no runtime command id. The existing pointer coordinator consumes eraser mode on left press by hit-testing current transient whiteboard primitives through `TryEraseWhiteboardPrimitive(...)`, removing only the topmost hit primitive and keeping graph-selection delete separate from graph `selection.delete`. `TryEraseWhiteboardPrimitive_RemovesTopmostHitPrimitiveWithoutClearingOthers` and `HandlePressed_WithWhiteboardEraserMode_RemovesHitPrimitiveWithoutDeletingGraphSelection` guard primitive hit-testing, no-hit behavior, active-gesture cleanup, and graph-deletion separation. Phase 555 is stacked on Phase 554 and must not merge before PR #234. It adds no broad eraser cursor redesign, no persisted whiteboard primitive state, no GraphDocument schema changes, no renderer rewrite, 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 @@ -603,6 +607,8 @@ Phase 553 records the whiteboard primitive pointer gesture capture route through

Phase 554 records the whiteboard authoring toolbar and Cookbook UX route through GitHub #228 / `avalonia-node-map-kpy`. It projects `CreateWhiteboardDrawingToolActions(...)` into the stock hosted Authoring Tools chrome as `PART_WhiteboardDrawingRectangleButton` and `PART_WhiteboardDrawingFreehandButton`, guards it with `AuthoringToolsChrome_ProjectsWhiteboardDrawingActionsThroughNodeCanvasDrawingMode`, and records `whiteboard-authoring-cookbook-route`, `cookbook-whiteboard-authoring-cookbook-route`, `shell-cookbook-whiteboard-authoring-cookbook-route`, and `WHITEBOARD_AUTHORING_COOKBOOK_UX_OK` on `selection-marquee-workbench`. It adds no new core model design, no pointer coordinator redesign, no eraser behavior, no persisted whiteboard primitive state, no GraphDocument schema changes, no renderer rewrite, or full React Flow whiteboard parity.

Phase 555 records the whiteboard primitive eraser behavior route through GitHub #229 / `avalonia-node-map-71c`. It adds `NodeCanvasWhiteboardDrawingMode.Eraser`, `whiteboard-drawing.eraser`, and `PART_WhiteboardEraserButton`, then routes eraser-mode press handling through `TryEraseWhiteboardPrimitive(...)` so transient whiteboard primitives are hit-tested and removed without invoking graph `selection.delete`. It guards that graph-selection delete remains separate through `TryEraseWhiteboardPrimitive_RemovesTopmostHitPrimitiveWithoutClearingOthers` and `HandlePressed_WithWhiteboardEraserMode_RemovesHitPrimitiveWithoutDeletingGraphSelection`, while leaving broad eraser cursor redesign, persisted whiteboard primitive state, GraphDocument schema changes, renderer rewrites, retained API removal, and full React Flow whiteboard parity out of scope.

| 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. |
Expand Down Expand Up @@ -682,7 +688,7 @@ Phase 554 records the whiteboard authoring toolbar and Cookbook UX route through
- `feature/phase-552-whiteboard-tool-activation`: owns #226 / `avalonia-node-map-718`; future activation-contract worktree after Phase 551.
- `feature/phase-553-whiteboard-pointer-capture`: owns #227 / `avalonia-node-map-9f0`; future pointer gesture capture worktree after Phase 552.
- `visual/phase-554-whiteboard-authoring-cookbook`: owns #228 / `avalonia-node-map-kpy`; future hosted authoring toolbar and Cookbook UX worktree after Phase 553.
- `feature/phase-555-whiteboard-eraser-behavior`: owns #229 / `avalonia-node-map-71c`; future eraser-on-primitive behavior worktree after Phase 554.
- `feature/phase-555-whiteboard-eraser-behavior`: owns #229 / `avalonia-node-map-71c`; current stacked implementation worktree for eraser-on-primitive behavior after Phase 554, with graph `selection.delete`, persistence/schema, renderer rewrite, and full whiteboard parity out of scope.
- `feature/phase-556-whiteboard-persistence-decision`: owns #230 / `avalonia-node-map-bck`; future persistence implementation decision worktree after Phase 555.

## UI Verification Policy
Expand Down Expand Up @@ -754,4 +760,5 @@ Current coverage includes scene-level route captures plus ten manifest-driven fu
- Phase 552 is GitHub #226 / `avalonia-node-map-718`; it records the whiteboard drawing tool public activation contract through `NodeCanvas.WhiteboardDrawingMode`, `NodeCanvasWhiteboardDrawingMode.Rectangle`, `NodeCanvasWhiteboardDrawingMode.Freehand`, `CreateWhiteboardDrawingToolActions(...)`, `whiteboard-drawing.rectangle`, and `whiteboard-drawing.freehand`, with no runtime command id, pointer gesture capture, runtime drawing creation, toolbar UI implementation, eraser behavior, persistence/schema changes, renderer changes, screenshot manifest expansion, or full React Flow whiteboard parity.
- Phase 553 is GitHub #227 / `avalonia-node-map-9f0`; it records the whiteboard primitive pointer gesture capture route through `NodeCanvasPointerInteractionCoordinator`, `NodeCanvasInteractionSession`, transient internal `GraphWhiteboardPrimitive` state, world-space rectangle/freehand geometry, release commit lifecycle, and capture-loss cancellation. Runtime command ids, toolbar UI implementation, eraser behavior, persisted whiteboard primitive state, GraphDocument schema changes, renderer changes, screenshot manifest expansion, and full React Flow whiteboard parity remain out of scope.
- Phase 554 is GitHub #228 / `avalonia-node-map-kpy`; it records the whiteboard authoring toolbar and Cookbook UX route through `whiteboard-authoring-cookbook-route`, `CreateWhiteboardDrawingToolActions(...)`, `AuthoringToolsChrome_ProjectsWhiteboardDrawingActionsThroughNodeCanvasDrawingMode`, `PART_WhiteboardDrawingRectangleButton`, `PART_WhiteboardDrawingFreehandButton`, `cookbook-whiteboard-authoring-cookbook-route`, `shell-cookbook-whiteboard-authoring-cookbook-route`, and `WHITEBOARD_AUTHORING_COOKBOOK_UX_OK`. New core model design, pointer coordinator redesign, eraser behavior, persisted whiteboard primitive state, GraphDocument schema changes, renderer rewrites, and full React Flow whiteboard parity remain out of scope.
- Phase 555 is GitHub #229 / `avalonia-node-map-71c`; it records the whiteboard primitive eraser behavior route through `NodeCanvasWhiteboardDrawingMode.Eraser`, `whiteboard-drawing.eraser`, `PART_WhiteboardEraserButton`, `TryEraseWhiteboardPrimitive_RemovesTopmostHitPrimitiveWithoutClearingOthers`, and `HandlePressed_WithWhiteboardEraserMode_RemovesHitPrimitiveWithoutDeletingGraphSelection`. Graph-selection delete remains separate through graph `selection.delete`; broad eraser cursor redesign, persisted whiteboard primitive state, GraphDocument schema changes, renderer rewrites, retained API removal, and full React Flow whiteboard parity remain out of scope.
- 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, Phase 540, Phase 541, Phase 546, Phase 550, and Phase 551 unless a focused test proves a specific missing contract.
Loading
Loading