diff --git a/docs/en/phase-0-reactflow-parity-audit.md b/docs/en/phase-0-reactflow-parity-audit.md index d0f34d9f..91108552 100644 --- a/docs/en/phase-0-reactflow-parity-audit.md +++ b/docs/en/phase-0-reactflow-parity-audit.md @@ -206,6 +206,10 @@ Phase 539 is GitHub #201 / `avalonia-node-map-rwr`, the rectangle/freehand drawi 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 541 Update + +Phase 541 is GitHub #205 / `avalonia-node-map-2z1`, the post-Phase-540 whiteboard implementation wave split. This docs/tests-only slice records the next implementation sequence after the model, persistence, and renderer readiness gates: Phase 542 owns the model identity/geometry/style contract, Phase 543 owns renderer projection and hit-testing proof, Phase 544 owns persistence/schema policy, and Phase 545 owns the Cookbook/screenshot proof route. Phase 541 records the post-Phase-540 whiteboard implementation wave split without taking any of those follow-up write sets itself. It authorizes no runtime behavior changes, no public API changes, no model/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. @@ -519,6 +523,8 @@ Phase 539 records the rectangle/freehand drawing primitive model gate through Gi 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. +Phase 541 records the post-Phase-540 whiteboard implementation wave split through GitHub #205 / `avalonia-node-map-2z1`. It keeps this slice limited to roadmap and test evidence, then assigns the next whiteboard implementation gates to Phase 542 model identity/geometry/style contract, Phase 543 renderer projection and hit-testing proof, Phase 544 persistence/schema policy, and Phase 545 Cookbook/screenshot proof route. It does not change runtime behavior, public API, model/schema, renderer layers, screenshot manifests, or full React Flow whiteboard parity claims. + | 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. | @@ -527,6 +533,11 @@ Phase 540 records the whiteboard persistence and render-layer readiness gate thr | #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. | | #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. | +| #205 | `avalonia-node-map-2z1` | Phase 541: post-Phase-540 whiteboard implementation wave split | P4 | parity roadmap docs and focused docs tests | Stacked after Phase 540 / PR #204; do not merge before Phase 540. This slice assigns the next whiteboard implementation gates without runtime/API/model/schema/renderer/screenshot-manifest changes. | +| #206 | `avalonia-node-map-b31` | Phase 542: whiteboard primitive core model contract gate | P2 | core/editor model tests, primitive identity/geometry/style contract docs, and API inventory | Future candidate after Phase 541. Owns the model identity/geometry/style contract before any renderer, persistence, or Cookbook proof work. | +| #207 | `avalonia-node-map-aj8` | Phase 543: whiteboard renderer projection and hit-testing proof gate | P2 | renderer projection tests, hit-testing proof, and bounded Avalonia/editor evidence | Future candidate after Phase 541 and the model contract gate. Owns renderer projection and hit-testing proof without persistence/schema policy or screenshot route expansion. | +| #208 | `avalonia-node-map-32n` | Phase 544: whiteboard primitive persistence schema policy gate | P3 | persistence/schema policy docs, migration criteria, and compatibility tests | Future candidate after Phase 541 and the model contract gate. Owns persistence/schema policy before any persisted whiteboard primitive claim. | +| #209 | `avalonia-node-map-7ns` | Phase 545: whiteboard Cookbook and screenshot proof route gate | P3 | Cookbook route, screenshot proof route, visual gate docs, and focused tests | Future candidate after Phase 541 plus the required model/renderer readiness. Owns the Cookbook/screenshot proof route without claiming full React Flow whiteboard parity. | ## Recommended Parallel Worktree Plan @@ -568,6 +579,11 @@ Phase 540 records the whiteboard persistence and render-layer readiness gate thr - `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`: 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. +- `docs/phase-541-post-whiteboard-wave-split`: owns #205 / `avalonia-node-map-2z1`; current stacked docs/test gate for the post-Phase-540 whiteboard implementation wave split, with no runtime behavior changes, no public API changes, no model/schema changes, no renderer-layer changes, no screenshot manifest expansion, and no full React Flow whiteboard parity. +- `feature/phase-542-whiteboard-primitive-core-model`: owns #206 / `avalonia-node-map-b31`; future candidate for the whiteboard primitive core model contract gate and model identity/geometry/style contract. +- `feature/phase-543-whiteboard-renderer-hit-testing`: owns #207 / `avalonia-node-map-aj8`; future candidate for the whiteboard renderer projection and hit-testing proof gate. +- `feature/phase-544-whiteboard-persistence-schema`: owns #208 / `avalonia-node-map-32n`; future candidate for the whiteboard primitive persistence schema policy gate. +- `visual/phase-545-whiteboard-cookbook-screenshot-proof`: owns #209 / `avalonia-node-map-7ns`; future candidate for the whiteboard Cookbook and screenshot proof route gate. ## UI Verification Policy @@ -624,4 +640,9 @@ Current coverage includes scene-level route captures plus ten manifest-driven fu - 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. - 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. +- Phase 541 is GitHub #205 / `avalonia-node-map-2z1`; it records the post-Phase-540 whiteboard implementation wave split without runtime behavior changes, public API changes, model/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. +- Phase 542 is GitHub #206 / `avalonia-node-map-b31`; it will own the whiteboard primitive core model contract gate and model identity/geometry/style contract. +- Phase 543 is GitHub #207 / `avalonia-node-map-aj8`; it will own the whiteboard renderer projection and hit-testing proof gate. +- Phase 544 is GitHub #208 / `avalonia-node-map-32n`; it will own the whiteboard primitive persistence schema policy gate and persistence/schema policy. +- Phase 545 is GitHub #209 / `avalonia-node-map-7ns`; it will own the whiteboard Cookbook and screenshot proof route gate and Cookbook/screenshot proof route. +- 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, and Phase 541 unless a focused test proves a specific missing contract. diff --git a/docs/zh-CN/phase-0-reactflow-parity-audit.md b/docs/zh-CN/phase-0-reactflow-parity-audit.md index 3cbb3496..f898a96e 100644 --- a/docs/zh-CN/phase-0-reactflow-parity-audit.md +++ b/docs/zh-CN/phase-0-reactflow-parity-audit.md @@ -206,6 +206,10 @@ Phase 539 是 GitHub #201 / `avalonia-node-map-rwr`,记录 rectangle/freehand Phase 540 是 GitHub #203 / `avalonia-node-map-91b`,记录 whiteboard persistence and render-layer readiness gate。本 docs/tests-only slice 记录当前 persistence 与 rendering evidence 只属于 graph-scene evidence:`GraphDocumentSerializer`、`GraphDocumentCompatibility`、`CurrentSchemaVersion` 和 `GraphWorkspaceService` 持久化 graph documents 与 workspaces;`GraphEditorSceneSnapshot`、`NodeCanvasConnectionSceneRenderer`、`CookbookScreenshotGateRoutes.json` 和 `CookbookShellVisualGateStates.json` 证明 graph-scene projection 与 screenshot fixtures。它们不实现 whiteboard annotation persistence 或 whiteboard annotation rendering。后续若要把 rectangle/freehand drawing state 作为 first-class whiteboard primitives 持久化或渲染,必须由后续 issue 先定义 persistence/schema contract、renderer projection contract、hit-testing/edit lifecycle、screenshot/Cookbook evidence、migration policy 和 explicit non-goals。Phase 540 不授权 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 或 no full React Flow whiteboard parity。 +## Phase 541 更新 + +Phase 541 是 GitHub #205 / `avalonia-node-map-2z1`,记录 post-Phase-540 whiteboard implementation wave split。本 docs/tests-only slice 记录 model、persistence 与 renderer readiness gates 之后的下一批实现顺序:Phase 542 承接 model identity/geometry/style contract,Phase 543 承接 renderer projection and hit-testing proof,Phase 544 承接 persistence/schema policy,Phase 545 承接 Cookbook/screenshot proof route。Phase 541 记录 post-Phase-540 whiteboard implementation wave split,但不接管这些后续 write sets。它不授权 no runtime behavior changes、no public API changes、no model/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 或 no full React Flow whiteboard parity。 + ## Phase 489 更新 Phase 489 通过 PR #102 关闭 GitHub #101 / `avalonia-node-map-6sc`,完成 `perf/renderer-virtualization-spike` 分支上的 renderer virtualization design spike。本 slice 只做 docs/tests:先定义未来声明 ItemsRepeater/Skia-style renderer virtualization、background graph index 或扩大 graph-size claim 前必须满足的 proof contract。不做 public API change,也不做 runtime change。当前证据仍只支持 viewport-budgeted scene projection/rendering,不是真正的 renderer virtualization contract;`xlarge` 继续保持 telemetry-only。 @@ -519,6 +523,8 @@ Phase 539 记录 rectangle/freehand drawing primitive model gate,通过 GitHub Phase 540 记录 whiteboard persistence and render-layer readiness gate,通过 GitHub #203 / `avalonia-node-map-91b`。它把当前 `GraphDocumentSerializer`、`GraphDocumentCompatibility`、`CurrentSchemaVersion`、`GraphWorkspaceService`、`GraphEditorSceneSnapshot`、`NodeCanvasConnectionSceneRenderer`、`CookbookScreenshotGateRoutes.json` 和 `CookbookShellVisualGateStates.json` evidence 限制在 graph documents、workspaces、graph-scene projection、committed connection rendering 与 screenshot fixtures;它不声明 whiteboard annotation persistence 或 whiteboard annotation rendering。 +Phase 541 记录 post-Phase-540 whiteboard implementation wave split,通过 GitHub #205 / `avalonia-node-map-2z1`。它把本 slice 限制在 roadmap 与 test evidence,然后把后续 whiteboard implementation gates 分配给 Phase 542 model identity/geometry/style contract、Phase 543 renderer projection and hit-testing proof、Phase 544 persistence/schema policy、Phase 545 Cookbook/screenshot proof route。它不改变 runtime behavior、public API、model/schema、renderer layers、screenshot manifests,也不扩大 full React Flow whiteboard parity claims。 + | GitHub | Bead | 标题 | 优先级 | 可能 write set | 并行边界 | | --- | --- | --- | --- | --- | --- | | #193 | `avalonia-node-map-8l6` | Phase 535: refresh post-lasso visual feedback parity queue | P2 | parity roadmap docs 和 focused docs tests | Current docs/test queue refresh。它用 tracker-backed follow-ups 替换 stale Phase 534 current row,因此会阻塞下一批 implementation wave。 | @@ -527,6 +533,11 @@ Phase 540 记录 whiteboard persistence and render-layer readiness gate,通过 | #199 | `avalonia-node-map-a3w` | Phase 538: eraser behavior/API feasibility gate | P3 | graph-selection deletion evidence、parity roadmap docs 和 focused docs tests | Current eraser feasibility slice。它把 `selection.delete` 限定为 graph-selection deletion evidence,不创建 eraser cursor、collision trail 或 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 和 whiteboard primitive API inventory | Current stacked drawing model gate,位于 Phase 538 / PR #200 之上。它保持 docs/model-only,不触碰 Avalonia pointer coordinators,并保留 Phase 540 作为后续 persistence/render-layer readiness work。 | | #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 和 focused docs tests | Stacked after Phase 539 / PR #202;不要早于 Phase 539 合并。本 slice 只记录 readiness criteria,不实现 persistence 或 renderer behavior。 | +| #205 | `avalonia-node-map-2z1` | Phase 541: post-Phase-540 whiteboard implementation wave split | P4 | parity roadmap docs 和 focused docs tests | Stacked after Phase 540 / PR #204;不要早于 Phase 540 合并。本 slice 只分配后续 whiteboard implementation gates,不做 runtime/API/model/schema/renderer/screenshot-manifest changes。 | +| #206 | `avalonia-node-map-b31` | Phase 542: whiteboard primitive core model contract gate | P2 | core/editor model tests、primitive identity/geometry/style contract docs 和 API inventory | Phase 541 后的 future candidate。负责 model identity/geometry/style contract,先于 renderer、persistence 或 Cookbook proof work。 | +| #207 | `avalonia-node-map-aj8` | Phase 543: whiteboard renderer projection and hit-testing proof gate | P2 | renderer projection tests、hit-testing proof 和 bounded Avalonia/editor evidence | Phase 541 与 model contract gate 之后的 future candidate。负责 renderer projection and hit-testing proof,不接管 persistence/schema policy 或 screenshot route expansion。 | +| #208 | `avalonia-node-map-32n` | Phase 544: whiteboard primitive persistence schema policy gate | P3 | persistence/schema policy docs、migration criteria 和 compatibility tests | Phase 541 与 model contract gate 之后的 future candidate。负责 persistence/schema policy,先于任何 persisted whiteboard primitive claim。 | +| #209 | `avalonia-node-map-7ns` | Phase 545: whiteboard Cookbook and screenshot proof route gate | P3 | Cookbook route、screenshot proof route、visual gate docs 和 focused tests | Phase 541 以及必要 model/renderer readiness 之后的 future candidate。负责 Cookbook/screenshot proof route,不声明 full React Flow whiteboard parity。 | ## 推荐并行 Worktree 计划 @@ -568,6 +579,11 @@ Phase 540 记录 whiteboard persistence and render-layer readiness gate,通过 - `feature/phase-538-eraser-feasibility`:负责 #199 / `avalonia-node-map-a3w`;当前 worktree,用 graph-selection deletion evidence 记录 eraser behavior/API feasibility。 - `docs/phase-539-drawing-primitive-model-gate`:负责 #201 / `avalonia-node-map-rwr`;当前 stacked docs/test gate,位于 Phase 538 / PR #200 之上,用于 rectangle/freehand drawing primitive model decisions,不做 runtime/API/UI/pointer coordinator/renderer/persistence changes。 - `docs/phase-540-whiteboard-render-persistence-gate`:负责 #203 / `avalonia-node-map-91b`;当前 stacked docs/test gate,用于 drawing model decisions 后的 persistence/render-layer readiness,不做 runtime/API/persistence/schema/renderer/screenshot-manifest/UI/pointer coordinator changes。 +- `docs/phase-541-post-whiteboard-wave-split`:负责 #205 / `avalonia-node-map-2z1`;当前 stacked docs/test gate,用于 post-Phase-540 whiteboard implementation wave split,不做 no runtime behavior changes、no public API changes、no model/schema changes、no renderer-layer changes、no screenshot manifest expansion 或 no full React Flow whiteboard parity。 +- `feature/phase-542-whiteboard-primitive-core-model`:负责 #206 / `avalonia-node-map-b31`;future candidate,用于 whiteboard primitive core model contract gate 和 model identity/geometry/style contract。 +- `feature/phase-543-whiteboard-renderer-hit-testing`:负责 #207 / `avalonia-node-map-aj8`;future candidate,用于 whiteboard renderer projection and hit-testing proof gate。 +- `feature/phase-544-whiteboard-persistence-schema`:负责 #208 / `avalonia-node-map-32n`;future candidate,用于 whiteboard primitive persistence schema policy gate。 +- `visual/phase-545-whiteboard-cookbook-screenshot-proof`:负责 #209 / `avalonia-node-map-7ns`;future candidate,用于 whiteboard Cookbook and screenshot proof route gate。 ## UI 验证策略 @@ -624,4 +640,9 @@ Phase 540 记录 whiteboard persistence and render-layer readiness gate,通过 - Phase 536 是 GitHub #195 / `avalonia-node-map-uvd`;它新增 `cookbook-interaction-lasso-screenshot-proof`、`interaction-lasso-screenshot-proof-route`、`shell-cookbook-lasso-screenshot-proof`、`full-window-shell-lasso-state` 和 `LASSO_SCREENSHOT_PROOF_BOUNDARY_OK`,不做 toolbar UX、eraser behavior、drawing primitives、persistence、renderer rewrite、strict pixel baseline enforcement、retained API removal 或 full whiteboard parity。 - Phase 539 是 GitHub #201 / `avalonia-node-map-rwr`;它记录 rectangle/freehand drawing primitive model gate,不做 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 或 full React Flow whiteboard parity。 - Phase 540 是 GitHub #203 / `avalonia-node-map-91b`;它记录 whiteboard persistence and render-layer readiness gate,不做 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 或 full React Flow whiteboard parity。 -- 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 都不修改产品代码;除非 focused test 证明存在具体 missing contract。 +- Phase 541 是 GitHub #205 / `avalonia-node-map-2z1`;它记录 post-Phase-540 whiteboard implementation wave split,不做 runtime behavior changes、public API changes、model/schema changes、renderer-layer changes、screenshot manifest expansion、Avalonia pointer coordinator edits、UI redesign、drawing tool implementation、eraser behavior、toolbar work、retained API removal 或 full React Flow whiteboard parity。 +- Phase 542 是 GitHub #206 / `avalonia-node-map-b31`;它将承接 whiteboard primitive core model contract gate 和 model identity/geometry/style contract。 +- Phase 543 是 GitHub #207 / `avalonia-node-map-aj8`;它将承接 whiteboard renderer projection and hit-testing proof gate。 +- Phase 544 是 GitHub #208 / `avalonia-node-map-32n`;它将承接 whiteboard primitive persistence schema policy gate 和 persistence/schema policy。 +- Phase 545 是 GitHub #209 / `avalonia-node-map-7ns`;它将承接 whiteboard Cookbook and screenshot proof route gate 和 Cookbook/screenshot proof route。 +- 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 都不修改产品代码;除非 focused test 证明存在具体 missing contract。 diff --git a/tests/AsterGraph.Demo.Tests/ReactFlowParityRoadmapDocsTests.cs b/tests/AsterGraph.Demo.Tests/ReactFlowParityRoadmapDocsTests.cs index 46e543ca..987a29d3 100644 --- a/tests/AsterGraph.Demo.Tests/ReactFlowParityRoadmapDocsTests.cs +++ b/tests/AsterGraph.Demo.Tests/ReactFlowParityRoadmapDocsTests.cs @@ -1173,6 +1173,57 @@ public void ParityRoadmapDocs_RecordPhase540WhiteboardPersistenceRenderGateInBot Assert.Contains("Phase 540 记录 whiteboard persistence and render-layer readiness gate", chineseParity, StringComparison.Ordinal); } + [Fact] + public void ParityRoadmapDocs_RecordPhase541PostPhase540WhiteboardWaveSplitInBothLocales() + { + var englishParity = ReadRepoFile("docs/en/phase-0-reactflow-parity-audit.md"); + var chineseParity = ReadRepoFile("docs/zh-CN/phase-0-reactflow-parity-audit.md"); + + foreach (var contents in new[] { englishParity, chineseParity }) + { + Assert.Contains("Phase 541", contents, StringComparison.Ordinal); + Assert.Contains("GitHub #205", contents, StringComparison.Ordinal); + Assert.Contains("avalonia-node-map-2z1", contents, StringComparison.Ordinal); + Assert.Contains("post-Phase-540 whiteboard implementation wave split", contents, StringComparison.OrdinalIgnoreCase); + Assert.Contains("Phase 542", contents, StringComparison.Ordinal); + Assert.Contains("GitHub #206", contents, StringComparison.Ordinal); + Assert.Contains("avalonia-node-map-b31", contents, StringComparison.Ordinal); + Assert.Contains("whiteboard primitive core model contract gate", contents, StringComparison.OrdinalIgnoreCase); + Assert.Contains("Phase 543", contents, StringComparison.Ordinal); + Assert.Contains("GitHub #207", contents, StringComparison.Ordinal); + Assert.Contains("avalonia-node-map-aj8", contents, StringComparison.Ordinal); + Assert.Contains("whiteboard renderer projection and hit-testing proof gate", contents, StringComparison.OrdinalIgnoreCase); + Assert.Contains("Phase 544", contents, StringComparison.Ordinal); + Assert.Contains("GitHub #208", contents, StringComparison.Ordinal); + Assert.Contains("avalonia-node-map-32n", contents, StringComparison.Ordinal); + Assert.Contains("whiteboard primitive persistence schema policy gate", contents, StringComparison.OrdinalIgnoreCase); + Assert.Contains("Phase 545", contents, StringComparison.Ordinal); + Assert.Contains("GitHub #209", contents, StringComparison.Ordinal); + Assert.Contains("avalonia-node-map-7ns", contents, StringComparison.Ordinal); + Assert.Contains("whiteboard Cookbook and screenshot proof route gate", contents, StringComparison.OrdinalIgnoreCase); + Assert.Contains("model identity/geometry/style contract", contents, StringComparison.OrdinalIgnoreCase); + Assert.Contains("renderer projection and hit-testing proof", contents, StringComparison.OrdinalIgnoreCase); + Assert.Contains("persistence/schema policy", contents, StringComparison.OrdinalIgnoreCase); + Assert.Contains("Cookbook/screenshot proof route", contents, StringComparison.OrdinalIgnoreCase); + Assert.Contains("no runtime behavior changes", contents, StringComparison.OrdinalIgnoreCase); + Assert.Contains("no public API changes", contents, StringComparison.OrdinalIgnoreCase); + Assert.Contains("no model/schema changes", contents, StringComparison.OrdinalIgnoreCase); + Assert.Contains("no renderer-layer changes", contents, StringComparison.OrdinalIgnoreCase); + Assert.Contains("no screenshot manifest expansion", contents, StringComparison.OrdinalIgnoreCase); + Assert.Contains("no full React Flow whiteboard parity", contents, StringComparison.OrdinalIgnoreCase); + Assert.DoesNotContain("| TBD | TBD | Phase 542", contents, StringComparison.Ordinal); + Assert.DoesNotContain("| TBD | TBD | Phase 543", contents, StringComparison.Ordinal); + Assert.DoesNotContain("| TBD | TBD | Phase 544", contents, StringComparison.Ordinal); + Assert.DoesNotContain("| TBD | TBD | Phase 545", contents, StringComparison.Ordinal); + } + + AssertPostPhase534Queue(ExtractIssueWaveTable(englishParity)); + AssertPostPhase534Queue(ExtractIssueWaveTable(chineseParity)); + + Assert.Contains("Phase 541 records the post-Phase-540 whiteboard implementation wave split", englishParity, StringComparison.Ordinal); + Assert.Contains("Phase 541 记录 post-Phase-540 whiteboard implementation wave split", chineseParity, StringComparison.Ordinal); + } + [Fact] public void ParityRoadmapDocs_RecordPhase501PostPhase500QueueRefreshInBothLocales() { @@ -1272,6 +1323,11 @@ private static void AssertPostPhase534Queue(string table) Assert.True( table.Contains("TBD", StringComparison.Ordinal) || table.Contains("| #203 | `avalonia-node-map-91b` | Phase 540: whiteboard persistence and render-layer readiness gate", StringComparison.Ordinal)); + Assert.Contains("Phase 541: post-Phase-540 whiteboard implementation wave split", table, StringComparison.Ordinal); + Assert.Contains("Phase 542: whiteboard primitive core model contract gate", table, StringComparison.Ordinal); + Assert.Contains("Phase 543: whiteboard renderer projection and hit-testing proof gate", table, StringComparison.Ordinal); + Assert.Contains("Phase 544: whiteboard primitive persistence schema policy gate", table, StringComparison.Ordinal); + Assert.Contains("Phase 545: whiteboard Cookbook and screenshot proof route gate", table, StringComparison.Ordinal); Assert.Contains("Cookbook screenshot manifest", table, StringComparison.OrdinalIgnoreCase); Assert.Contains("hosted authoring tools", table, StringComparison.OrdinalIgnoreCase); Assert.True(