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
8 changes: 7 additions & 1 deletion docs/en/phase-0-reactflow-parity-audit.md
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,10 @@ Phase 540 is GitHub #203 / `avalonia-node-map-91b`, the whiteboard persistence a

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 542 Update

Phase 542 is GitHub #206 / `avalonia-node-map-b31`, the whiteboard primitive core model contract gate. This docs/tests-only slice records `WHITEBOARD_PRIMITIVE_CORE_MODEL_CONTRACT_GATE`: `GraphDocument`, `GraphNode`, `GraphConnection`, and `GraphNodeGroup` remain graph-scene models, while whiteboard primitives remain separate annotation concepts. GraphDocument, GraphNode, GraphConnection, and GraphNodeGroup remain graph-scene models; whiteboard primitives remain separate annotation concepts. Before any production model type or public API changes are allowed, the future contract must define primitive identity, primitive kind, geometry envelope, style/brush state, edit lifecycle metadata, and renderer-neutral, persistence-neutral, pointer-neutral ownership boundaries. Phase 542 records the whiteboard primitive core model contract gate with no production model type. It authorizes no public API changes, no runtime UI behavior, no renderer work, no persistence/schema migration, no screenshot manifest expansion, no toolbar/tool activation, no eraser behavior, 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 @@ -525,6 +529,8 @@ Phase 540 records the whiteboard persistence and render-layer readiness gate thr

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.

Phase 542 records the whiteboard primitive core model contract gate through GitHub #206 / `avalonia-node-map-b31`. It keeps `GraphDocument`, `GraphNode`, `GraphConnection`, and `GraphNodeGroup` scoped to graph-scene models, records whiteboard primitives as separate annotation concepts, and requires any later implementation issue to define primitive identity, primitive kind, geometry envelope, style/brush state, edit lifecycle metadata, plus renderer-neutral, persistence-neutral, and pointer-neutral boundaries before production model/API work.

| 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 @@ -641,7 +647,7 @@ Current coverage includes scene-level route captures plus ten manifest-driven fu
- 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.
- 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 542 is GitHub #206 / `avalonia-node-map-b31`; it records the whiteboard primitive core model contract gate and `WHITEBOARD_PRIMITIVE_CORE_MODEL_CONTRACT_GATE` without production model type, public API changes, runtime UI behavior, renderer work, persistence/schema migration, screenshot manifest expansion, toolbar/tool activation, eraser behavior, retained API removal, or full React Flow whiteboard parity.
- 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.
Expand Down
8 changes: 7 additions & 1 deletion docs/zh-CN/phase-0-reactflow-parity-audit.md
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,10 @@ Phase 540 是 GitHub #203 / `avalonia-node-map-91b`,记录 whiteboard persiste

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 542 更新

Phase 542 是 GitHub #206 / `avalonia-node-map-b31`,记录 whiteboard primitive core model contract gate。本 docs/tests-only slice 记录 `WHITEBOARD_PRIMITIVE_CORE_MODEL_CONTRACT_GATE`:`GraphDocument`、`GraphNode`、`GraphConnection` 和 `GraphNodeGroup` remain graph-scene models,而 whiteboard primitives remain separate annotation concepts。GraphDocument, GraphNode, GraphConnection, and GraphNodeGroup remain graph-scene models; whiteboard primitives remain separate annotation concepts。后续允许任何 production model type 或 public API changes 前,必须先定义 primitive identity、primitive kind、geometry envelope、style/brush state、edit lifecycle metadata,以及 renderer-neutral、persistence-neutral、pointer-neutral ownership boundaries。Phase 542 记录 whiteboard primitive core model contract gate,保持 no production model type。它不授权 no public API changes、no runtime UI behavior、no renderer work、no persistence/schema migration、no screenshot manifest expansion、no toolbar/tool activation、no eraser behavior、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。
Expand Down Expand Up @@ -525,6 +529,8 @@ Phase 540 记录 whiteboard persistence and render-layer readiness gate,通过

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。

Phase 542 记录 whiteboard primitive core model contract gate,通过 GitHub #206 / `avalonia-node-map-b31`。它继续把 `GraphDocument`、`GraphNode`、`GraphConnection` 和 `GraphNodeGroup` 限制为 graph-scene models,记录 whiteboard primitives 是 separate annotation concepts,并要求后续 implementation issue 在 production model/API work 前先定义 primitive identity、primitive kind、geometry envelope、style/brush state、edit lifecycle metadata,以及 renderer-neutral、persistence-neutral、pointer-neutral boundaries。

| 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。 |
Expand Down Expand Up @@ -641,7 +647,7 @@ Phase 541 记录 post-Phase-540 whiteboard implementation wave split,通过 Gi
- 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 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 542 是 GitHub #206 / `avalonia-node-map-b31`;它记录 whiteboard primitive core model contract gate 和 `WHITEBOARD_PRIMITIVE_CORE_MODEL_CONTRACT_GATE`,不新增 production model type,不做 public API changes、runtime UI behavior、renderer work、persistence/schema migration、screenshot manifest expansion、toolbar/tool activation、eraser behavior、retained API removal 或 full React Flow whiteboard parity
- 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。
Expand Down
36 changes: 36 additions & 0 deletions tests/AsterGraph.Demo.Tests/ReactFlowParityRoadmapDocsTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1224,6 +1224,42 @@ public void ParityRoadmapDocs_RecordPhase541PostPhase540WhiteboardWaveSplitInBot
Assert.Contains("Phase 541 记录 post-Phase-540 whiteboard implementation wave split", chineseParity, StringComparison.Ordinal);
}

[Fact]
public void ParityRoadmapDocs_RecordPhase542WhiteboardPrimitiveCoreModelContractGateInBothLocales()
{
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 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("WHITEBOARD_PRIMITIVE_CORE_MODEL_CONTRACT_GATE", contents, StringComparison.Ordinal);
Assert.Contains("GraphDocument, GraphNode, GraphConnection, and GraphNodeGroup remain graph-scene models", contents, StringComparison.OrdinalIgnoreCase);
Assert.Contains("whiteboard primitives remain separate annotation concepts", contents, StringComparison.OrdinalIgnoreCase);
Assert.Contains("primitive identity", contents, StringComparison.OrdinalIgnoreCase);
Assert.Contains("primitive kind", contents, StringComparison.OrdinalIgnoreCase);
Assert.Contains("geometry envelope", contents, StringComparison.OrdinalIgnoreCase);
Assert.Contains("style/brush state", contents, StringComparison.OrdinalIgnoreCase);
Assert.Contains("edit lifecycle metadata", contents, StringComparison.OrdinalIgnoreCase);
Assert.Contains("renderer-neutral", contents, StringComparison.OrdinalIgnoreCase);
Assert.Contains("persistence-neutral", contents, StringComparison.OrdinalIgnoreCase);
Assert.Contains("pointer-neutral", contents, StringComparison.OrdinalIgnoreCase);
Assert.Contains("no production model type", contents, StringComparison.OrdinalIgnoreCase);
Assert.Contains("no public API changes", contents, StringComparison.OrdinalIgnoreCase);
Assert.Contains("no runtime UI behavior", contents, StringComparison.OrdinalIgnoreCase);
Assert.Contains("no renderer work", contents, StringComparison.OrdinalIgnoreCase);
Assert.Contains("no persistence/schema migration", contents, StringComparison.OrdinalIgnoreCase);
Assert.Contains("no screenshot manifest expansion", contents, StringComparison.OrdinalIgnoreCase);
Assert.Contains("no full React Flow whiteboard parity", contents, StringComparison.OrdinalIgnoreCase);
}

Assert.Contains("Phase 542 records the whiteboard primitive core model contract gate", englishParity, StringComparison.Ordinal);
Assert.Contains("Phase 542 记录 whiteboard primitive core model contract gate", chineseParity, StringComparison.Ordinal);
}

[Fact]
public void ParityRoadmapDocs_RecordPhase501PostPhase500QueueRefreshInBothLocales()
{
Expand Down
Loading