diff --git a/docs/en/phase-0-reactflow-parity-audit.md b/docs/en/phase-0-reactflow-parity-audit.md index 89e46ab3..d9b766e7 100644 --- a/docs/en/phase-0-reactflow-parity-audit.md +++ b/docs/en/phase-0-reactflow-parity-audit.md @@ -282,6 +282,10 @@ Phase 563 is GitHub #245 / `avalonia-node-map-kri`, the whiteboard annotation sc Phase 564 is GitHub #246 / `avalonia-node-map-vyg`, the whiteboard annotation migration and compatibility proof. It adds `WHITEBOARD_ANNOTATION_MIGRATION_COMPATIBILITY_PROOF` as a docs/tests planning gate only: future implementation must define annotation-store versions, primitive references, style/geometry payloads, migration metadata validation, and coverage required before persistence, clipboard/export, or screenshot proof expands. It depends on Phase 560, Phase 561, and Phase 562 after Phase 559. This proof gate keeps no production migration implementation, no persisted annotation state, no file/database I/O, no GraphDocument schema change, no schema version bump, no workspace persistence behavior change, no clipboard/export serialization behavior change, no screenshot manifest expansion, no renderer or pointer behavior change, no public API exposure, and no full React Flow whiteboard parity. +## Phase 565 Update + +Phase 565 is GitHub #253 / `avalonia-node-map-wml`, the post-annotation proof implementation queue refresh. It adds `WHITEBOARD_ANNOTATION_POST_PROOF_IMPLEMENTATION_QUEUE_REFRESH` as a docs/tests-only queue refresh after Phase 560 through Phase 564: the next annotation work is split into Phase 566 sidecar serializer contract, Phase 567 workspace sidecar save/load integration, Phase 568 clipboard/export eligibility proof, Phase 569 Cookbook screenshot implementation gate, and Phase 570 public API readiness gate. This queue refresh keeps no production annotation persistence, no file/database I/O, no GraphDocument schema change, no schema version bump, no workspace save/load behavior change, no clipboard/export serialization behavior change, no screenshot manifest expansion, no new Cookbook route, no renderer or pointer behavior change, no toolbar or eraser change, no public API exposure, no saved whiteboard primitive state, 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. @@ -675,6 +679,12 @@ Phase 564 records the whiteboard annotation migration and compatibility proof th | #244 | `avalonia-node-map-0gi` | Phase 562: whiteboard annotation clipboard/export serialization boundary | P4 | clipboard/export serialization boundary docs and focused compatibility tests | Depends on Phase 559. Owns a boundary gate only for annotation identity/reference and primitive payload eligibility across clipboard fragments, scene export artifacts, and workspace sidecar persistence, with compatibility and migration proof required before serialization behavior changes; no production serialization implementation, clipboard/export behavior change, file/database I/O, GraphDocument schema change, schema version bump, workspace persistence behavior change, screenshot manifest expansion, renderer or pointer behavior change, public API exposure, saved whiteboard primitive state, or full whiteboard parity claim. | | #245 | `avalonia-node-map-kri` | Phase 563: whiteboard annotation screenshot and Cookbook proof expansion | P4 | screenshot/Cookbook proof planning, route criteria, and non-overlap evidence requirements | Depends on Phase 559. Owns screenshot/Cookbook proof expansion planning only, including Cookbook route expectations, screenshot proof metadata, non-overlap requirements, and separation from persistence/serialization implementation before screenshot manifest expansion, renderer changes, or toolbar/eraser changes. No screenshot manifest expansion, no new Cookbook route, no UI behavior change, no production annotation store, no file/database I/O, no GraphDocument schema change, no workspace persistence behavior change, no clipboard/export behavior change, no renderer or pointer behavior change, no public API exposure, no saved whiteboard primitive state, or full whiteboard parity claim. | | #246 | `avalonia-node-map-vyg` | Phase 564: whiteboard annotation migration and compatibility proof | P4 | migration/compatibility proof docs, schema policy criteria, and compatibility test plan | Depends on Phase 559 plus Phase 560, Phase 561, and Phase 562. Owns migration/compatibility proof planning only for annotation-store versions, primitive references, style/geometry payloads, migration metadata validation, and coverage required before persistence, clipboard/export, or screenshot proof expands. No production migration implementation, persisted annotation state, file/database I/O, GraphDocument schema change, schema version bump, workspace persistence behavior change, clipboard/export serialization behavior change, screenshot manifest expansion, renderer or pointer behavior change, public API exposure, schema version bumps, saved whiteboard primitive state, or full whiteboard parity claims. | +| #253 | `avalonia-node-map-wml` | Phase 565: refresh post-annotation proof implementation queue | P4 | parity roadmap docs and focused docs tests | Depends on Phase 564; stacked after PR #252 and do not merge before Phase 564. This is a docs/test queue refresh only: it assigns Phase 566 through Phase 570 without production annotation persistence, file/database I/O, GraphDocument schema changes, schema version bumps, workspace save/load behavior changes, clipboard/export serialization behavior changes, screenshot manifest expansion, new Cookbook routes, renderer or pointer behavior changes, toolbar or eraser changes, public API exposure, saved whiteboard primitive state, or full whiteboard parity claim. | +| #254 | `avalonia-node-map-47v` | Phase 566: whiteboard annotation sidecar serializer contract | P3 | internal sidecar document and serializer contract tests | Depends on Phase 565. Owns sidecar payload shape and serializer round-trip validation for annotation metadata, identity/reference, primitive payload, and migration metadata; no workspace save/load integration, GraphDocument schema change, schema version bump, public API exposure, screenshot manifest expansion, renderer or pointer behavior change, or full whiteboard parity claim. | +| #255 | `avalonia-node-map-40h` | Phase 567: whiteboard annotation workspace sidecar save/load integration | P3 | workspace sidecar save/load tests and persistence boundary docs | Depends on Phase 565 and should follow Phase 566. Owns workspace sidecar integration after serializer proof while keeping graph document serialization unchanged; no GraphDocument schema change, schema version bump, clipboard/export serialization behavior change, screenshot manifest expansion, renderer or pointer behavior change, public API exposure, broad database abstraction, or full whiteboard parity claim. | +| #256 | `avalonia-node-map-ctd` | Phase 568: whiteboard annotation clipboard/export eligibility proof | P4 | clipboard/export eligibility docs and focused compatibility tests | Depends on Phase 565 and may reuse Phase 566 payload validation. Owns eligible and ineligible annotation payload boundaries for clipboard fragments and scene export artifacts only; no production clipboard/export annotation serialization, workspace save/load behavior change, GraphDocument schema change, schema version bump, screenshot manifest expansion, renderer or pointer behavior change, public API exposure, or full whiteboard parity claim. | +| #257 | `avalonia-node-map-79a` | Phase 569: whiteboard annotation Cookbook screenshot implementation gate | P4 | screenshot/Cookbook proof planning, route metadata criteria, and non-overlap evidence requirements | Depends on Phase 565 and should wait for sidecar/compatibility proof boundaries. Owns annotation-backed Cookbook route expectations, shell/scene screenshot metadata, and non-overlap criteria only; no screenshot manifest expansion, new Cookbook route implementation, UI behavior change, workspace persistence behavior change, clipboard/export behavior change, GraphDocument schema change, renderer or pointer behavior change, public API exposure, or full whiteboard parity claim. | +| #258 | `avalonia-node-map-k0d` | Phase 570: whiteboard annotation public API readiness gate | P4 | public API readiness docs, exported API guard tests, and host-facing shape decision | Depends on Phase 565 and should wait for internal persistence/compatibility proof candidates. Owns the evidence checklist and API-shape decision before public annotation APIs; no public API exposure, runtime behavior change, workspace persistence behavior change, clipboard/export behavior change, screenshot manifest expansion, renderer or pointer behavior change, GraphDocument schema change, schema version bump, or full whiteboard parity claim. | ## Recommended Parallel Worktree Plan @@ -740,6 +750,12 @@ Phase 564 records the whiteboard annotation migration and compatibility proof th - `docs/phase-562-whiteboard-annotation-clipboard-export-boundary`: owns #244 / `avalonia-node-map-0gi`; future clipboard/export serialization boundary worktree after Phase 559. - `visual/phase-563-whiteboard-annotation-cookbook-screenshot-proof`: owns #245 / `avalonia-node-map-kri`; future screenshot/Cookbook proof expansion worktree after Phase 559. - `docs/phase-564-whiteboard-annotation-migration-compatibility-proof`: owns #246 / `avalonia-node-map-vyg`; future migration/compatibility proof worktree after Phase 559 and the adapter/persistence/serialization boundary slices. +- `docs/phase-565-post-annotation-proof-queue-refresh`: owns #253 / `avalonia-node-map-wml`; current stacked docs/test queue refresh after Phase 564, assigning Phase 566-570 without production annotation persistence, file/database I/O, GraphDocument schema changes, workspace save/load behavior changes, clipboard/export serialization behavior changes, screenshot manifest expansion, new Cookbook routes, renderer or pointer behavior changes, toolbar or eraser changes, public API exposure, or full whiteboard parity. +- `feature/phase-566-whiteboard-annotation-sidecar-serializer`: owns #254 / `avalonia-node-map-47v`; future worktree for the internal sidecar document and serializer contract after Phase 565. +- `feature/phase-567-whiteboard-annotation-workspace-sidecar`: owns #255 / `avalonia-node-map-40h`; future worktree for workspace sidecar save/load integration after the serializer contract. +- `docs/phase-568-whiteboard-annotation-clipboard-export-eligibility`: owns #256 / `avalonia-node-map-ctd`; future worktree for clipboard/export annotation eligibility proof without production serialization. +- `visual/phase-569-whiteboard-annotation-cookbook-screenshot-gate`: owns #257 / `avalonia-node-map-79a`; future worktree for annotation-backed Cookbook screenshot implementation gate planning before manifest changes. +- `docs/phase-570-whiteboard-annotation-public-api-readiness`: owns #258 / `avalonia-node-map-k0d`; future worktree for public annotation API readiness evidence without exposing public APIs. ## UI Verification Policy @@ -820,4 +836,10 @@ Current coverage includes scene-level route captures plus ten manifest-driven fu - Phase 562 is GitHub #244 / `avalonia-node-map-0gi`; it records `WHITEBOARD_ANNOTATION_CLIPBOARD_EXPORT_SERIALIZATION_BOUNDARY` as a docs/tests boundary gate for annotation identity/reference and primitive payload eligibility across clipboard fragments, scene export artifacts, and workspace sidecar persistence, with compatibility and migration proof required before serialization behavior changes, while keeping no production serialization implementation, no clipboard/export behavior change, no file/database I/O, no GraphDocument schema change, no schema version bump, no workspace persistence behavior change, no screenshot manifest expansion, no renderer or pointer behavior change, no public API exposure, no saved whiteboard primitive state, and no full React Flow whiteboard parity. - Phase 563 is GitHub #245 / `avalonia-node-map-kri`; it records `WHITEBOARD_ANNOTATION_SCREENSHOT_COOKBOOK_PROOF_EXPANSION` as a docs/tests planning gate for Cookbook route expectations, screenshot proof metadata, non-overlap requirements, and separation from persistence/serialization implementation before screenshot manifest expansion. It keeps no screenshot manifest expansion, no new Cookbook route, no UI behavior change, no production annotation store, no file/database I/O, no GraphDocument schema change, no workspace persistence behavior change, no clipboard/export behavior change, no renderer or pointer behavior change, no public API exposure, no saved whiteboard primitive state, and no full React Flow whiteboard parity. - Phase 564 is GitHub #246 / `avalonia-node-map-vyg`; it records `WHITEBOARD_ANNOTATION_MIGRATION_COMPATIBILITY_PROOF` as a docs/tests planning gate for annotation-store versions, primitive references, style/geometry payloads, migration metadata validation, and coverage required before persistence, clipboard/export, or screenshot proof expands. It depends on Phase 560, Phase 561, and Phase 562 after Phase 559, while keeping no production migration implementation, no persisted annotation state, no file/database I/O, no GraphDocument schema change, no schema version bump, no workspace persistence behavior change, no clipboard/export serialization behavior change, no screenshot manifest expansion, no renderer or pointer behavior change, no public API exposure, and no full React Flow whiteboard parity. +- Phase 565 is GitHub #253 / `avalonia-node-map-wml`; it records `WHITEBOARD_ANNOTATION_POST_PROOF_IMPLEMENTATION_QUEUE_REFRESH` and assigns Phase 566 through Phase 570 to the sidecar serializer contract, workspace sidecar save/load integration, clipboard/export eligibility proof, Cookbook screenshot implementation gate, and public API readiness gate. It keeps no production annotation persistence, no file/database I/O, no GraphDocument schema change, no schema version bump, no workspace save/load behavior change, no clipboard/export serialization behavior change, no screenshot manifest expansion, no new Cookbook route, no renderer or pointer behavior change, no toolbar or eraser change, no public API exposure, no saved whiteboard primitive state, and no full React Flow whiteboard parity. +- Phase 566 is GitHub #254 / `avalonia-node-map-47v`; it will own the internal sidecar document and serializer contract for annotation metadata, identity/reference, primitive payload, and migration metadata after Phase 565, while keeping workspace save/load integration, GraphDocument schema changes, public API exposure, screenshot manifest expansion, renderer or pointer behavior, and full React Flow whiteboard parity out of scope. +- Phase 567 is GitHub #255 / `avalonia-node-map-40h`; it will own workspace sidecar save/load integration after Phase 565 and the serializer contract, while keeping GraphDocument serialization unchanged and excluding clipboard/export behavior, screenshot manifest expansion, renderer or pointer behavior, public API exposure, broad database abstractions, and full React Flow whiteboard parity. +- Phase 568 is GitHub #256 / `avalonia-node-map-ctd`; it will own annotation clipboard/export eligibility proof after Phase 565, while keeping production clipboard/export annotation serialization, workspace save/load behavior changes, GraphDocument schema changes, screenshot manifest expansion, public API exposure, and full React Flow whiteboard parity out of scope. +- Phase 569 is GitHub #257 / `avalonia-node-map-79a`; it will own the annotation Cookbook screenshot implementation gate after Phase 565 and the persistence/compatibility proof boundaries, while keeping screenshot manifest expansion, new Cookbook route implementation, UI behavior changes, workspace persistence behavior changes, renderer or pointer behavior, public API exposure, and full React Flow whiteboard parity out of scope. +- Phase 570 is GitHub #258 / `avalonia-node-map-k0d`; it will own the public annotation API readiness gate after Phase 565 and internal persistence/compatibility proof candidates, while keeping public API exposure, runtime behavior changes, persistence behavior changes, screenshot manifest expansion, GraphDocument schema changes, and full React Flow whiteboard parity 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, Phase 551, and Phase 557 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 1e9a4087..165a36c2 100644 --- a/docs/zh-CN/phase-0-reactflow-parity-audit.md +++ b/docs/zh-CN/phase-0-reactflow-parity-audit.md @@ -635,6 +635,10 @@ Phase 563 记录 whiteboard annotation screenshot and Cookbook proof expansion Phase 564 记录 whiteboard annotation migration and compatibility proof,通过 GitHub #246 / `avalonia-node-map-vyg`。它把 `WHITEBOARD_ANNOTATION_MIGRATION_COMPATIBILITY_PROOF` 作为 docs/tests planning gate only:后续 implementation 必须先定义 annotation-store versions、primitive references、style/geometry payloads、migration metadata validation,以及 coverage required before persistence, clipboard/export, or screenshot proof expands。它 depends on Phase 560, Phase 561, and Phase 562,且位于 Phase 559 之后。本 proof gate 保持 no production migration implementation、no persisted annotation state、no file/database I/O、no GraphDocument schema change、no schema version bump、no workspace persistence behavior change、no clipboard/export serialization behavior change、no screenshot manifest expansion、no renderer or pointer behavior change、no public API exposure 和 no full React Flow whiteboard parity。 +## Phase 565 Update + +Phase 565 记录 post-annotation proof implementation queue refresh,通过 GitHub #253 / `avalonia-node-map-wml`。它把 `WHITEBOARD_ANNOTATION_POST_PROOF_IMPLEMENTATION_QUEUE_REFRESH` 作为 docs/tests-only queue refresh,承接 Phase 560 through Phase 564:下一批 annotation work 被拆成 Phase 566 sidecar serializer contract、Phase 567 workspace sidecar save/load integration、Phase 568 clipboard/export eligibility proof、Phase 569 Cookbook screenshot implementation gate 和 Phase 570 public API readiness gate。本 queue refresh 保持 no production annotation persistence、no file/database I/O、no GraphDocument schema change、no schema version bump、no workspace save/load behavior change、no clipboard/export serialization behavior change、no screenshot manifest expansion、no new Cookbook route、no renderer or pointer behavior change、no toolbar or eraser change、no public API exposure、no saved whiteboard primitive state 和 no full React Flow whiteboard parity。 + | 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。 | @@ -667,6 +671,12 @@ Phase 564 记录 whiteboard annotation migration and compatibility proof,通 | #244 | `avalonia-node-map-0gi` | Phase 562: whiteboard annotation clipboard/export serialization boundary | P4 | clipboard/export serialization boundary docs 和 focused compatibility tests | Depends on Phase 559。只负责 boundary gate only,用于定义 clipboard fragments、scene export artifacts 和 workspace sidecar persistence 中 annotation identity/reference 与 primitive payload eligibility,并要求 compatibility and migration proof required before serialization behavior changes;不做 production serialization implementation、clipboard/export behavior change、file/database I/O、GraphDocument schema change、schema version bump、workspace persistence behavior change、screenshot manifest expansion、renderer or pointer behavior change、public API exposure、saved whiteboard primitive state 或 full whiteboard parity claim。 | | #245 | `avalonia-node-map-kri` | Phase 563: whiteboard annotation screenshot and Cookbook proof expansion | P4 | screenshot/Cookbook proof planning、route criteria 和 non-overlap evidence requirements | Depends on Phase 559。只负责 screenshot/Cookbook proof expansion planning only,包括 Cookbook route expectations、screenshot proof metadata、non-overlap requirements,以及 separation from persistence/serialization implementation,先于 screenshot manifest expansion、renderer changes 或 toolbar/eraser changes;不做 no screenshot manifest expansion、no new Cookbook route、no UI behavior change、no production annotation store、no file/database I/O、no GraphDocument schema change、no workspace persistence behavior change、no clipboard/export behavior change、no renderer or pointer behavior change、no public API exposure、no saved whiteboard primitive state 或 full whiteboard parity claim。 | | #246 | `avalonia-node-map-vyg` | Phase 564: whiteboard annotation migration and compatibility proof | P4 | migration/compatibility proof docs、schema policy criteria 和 compatibility test plan | Depends on Phase 559 plus Phase 560, Phase 561, and Phase 562。只负责 migration/compatibility proof planning only,用于 annotation-store versions、primitive references、style/geometry payloads、migration metadata validation,以及 coverage required before persistence, clipboard/export, or screenshot proof expands;不做 no production migration implementation、no persisted annotation state、no file/database I/O、no GraphDocument schema change、no schema version bump、no workspace persistence behavior change、no clipboard/export serialization behavior change、no screenshot manifest expansion、no renderer or pointer behavior change、no public API exposure、schema version bumps、saved whiteboard primitive state 或 full whiteboard parity claims。 | +| #253 | `avalonia-node-map-wml` | Phase 565: refresh post-annotation proof implementation queue | P4 | parity roadmap docs 和 focused docs tests | Depends on Phase 564;stacked after PR #252,并且 do not merge before Phase 564。This is a docs/test queue refresh only:分配 Phase 566 through Phase 570,不做 production annotation persistence、file/database I/O、GraphDocument schema changes、schema version bumps、workspace save/load behavior changes、clipboard/export serialization behavior changes、screenshot manifest expansion、new Cookbook routes、renderer or pointer behavior changes、toolbar or eraser changes、public API exposure、saved whiteboard primitive state 或 full whiteboard parity claim。 | +| #254 | `avalonia-node-map-47v` | Phase 566: whiteboard annotation sidecar serializer contract | P3 | internal sidecar document and serializer contract tests | Depends on Phase 565。只负责 sidecar payload shape 和 serializer round-trip validation,覆盖 annotation metadata、identity/reference、primitive payload 和 migration metadata;不做 workspace save/load integration、GraphDocument schema change、schema version bump、public API exposure、screenshot manifest expansion、renderer or pointer behavior change 或 full whiteboard parity claim。 | +| #255 | `avalonia-node-map-40h` | Phase 567: whiteboard annotation workspace sidecar save/load integration | P3 | workspace sidecar save/load tests 和 persistence boundary docs | Depends on Phase 565,并应 follow Phase 566。serializer proof 之后负责 workspace sidecar integration,同时保持 graph document serialization unchanged;不做 GraphDocument schema change、schema version bump、clipboard/export serialization behavior change、screenshot manifest expansion、renderer or pointer behavior change、public API exposure、broad database abstraction 或 full whiteboard parity claim。 | +| #256 | `avalonia-node-map-ctd` | Phase 568: whiteboard annotation clipboard/export eligibility proof | P4 | clipboard/export eligibility docs 和 focused compatibility tests | Depends on Phase 565,并可复用 Phase 566 payload validation。只负责 clipboard fragments 和 scene export artifacts 的 eligible and ineligible annotation payload boundaries;不做 production clipboard/export annotation serialization、workspace save/load behavior change、GraphDocument schema change、schema version bump、screenshot manifest expansion、renderer or pointer behavior change、public API exposure 或 full whiteboard parity claim。 | +| #257 | `avalonia-node-map-79a` | Phase 569: whiteboard annotation Cookbook screenshot implementation gate | P4 | screenshot/Cookbook proof planning、route metadata criteria 和 non-overlap evidence requirements | Depends on Phase 565,并应等待 sidecar/compatibility proof boundaries。只负责 annotation-backed Cookbook route expectations、shell/scene screenshot metadata 和 non-overlap criteria;不做 screenshot manifest expansion、new Cookbook route implementation、UI behavior change、workspace persistence behavior change、clipboard/export behavior change、GraphDocument schema change、renderer or pointer behavior change、public API exposure 或 full whiteboard parity claim。 | +| #258 | `avalonia-node-map-k0d` | Phase 570: whiteboard annotation public API readiness gate | P4 | public API readiness docs、exported API guard tests 和 host-facing shape decision | Depends on Phase 565,并应等待 internal persistence/compatibility proof candidates。只负责 public annotation APIs 前的 evidence checklist 和 API-shape decision;不做 public API exposure、runtime behavior change、workspace persistence behavior change、clipboard/export behavior change、screenshot manifest expansion、renderer or pointer behavior change、GraphDocument schema change、schema version bump 或 full whiteboard parity claim。 | ## 推荐并行 Worktree 计划 @@ -732,6 +742,12 @@ Phase 564 记录 whiteboard annotation migration and compatibility proof,通 - `docs/phase-562-whiteboard-annotation-clipboard-export-boundary`:负责 #244 / `avalonia-node-map-0gi`;Phase 559 之后的 future clipboard/export serialization boundary worktree。 - `visual/phase-563-whiteboard-annotation-cookbook-screenshot-proof`:负责 #245 / `avalonia-node-map-kri`;Phase 559 之后的 future screenshot/Cookbook proof expansion worktree。 - `docs/phase-564-whiteboard-annotation-migration-compatibility-proof`:负责 #246 / `avalonia-node-map-vyg`;Phase 559 以及 adapter/persistence/serialization boundary slices 之后的 future migration/compatibility proof worktree。 +- `docs/phase-565-post-annotation-proof-queue-refresh`:负责 #253 / `avalonia-node-map-wml`;Phase 564 之后的 current stacked docs/test queue refresh,用于分配 Phase 566-570,不做 production annotation persistence、file/database I/O、GraphDocument schema changes、workspace save/load behavior changes、clipboard/export serialization behavior changes、screenshot manifest expansion、new Cookbook routes、renderer or pointer behavior changes、toolbar or eraser changes、public API exposure 或 full whiteboard parity。 +- `feature/phase-566-whiteboard-annotation-sidecar-serializer`:负责 #254 / `avalonia-node-map-47v`;Phase 565 之后的 future worktree,用于 internal sidecar document and serializer contract。 +- `feature/phase-567-whiteboard-annotation-workspace-sidecar`:负责 #255 / `avalonia-node-map-40h`;serializer contract 之后的 future worktree,用于 workspace sidecar save/load integration。 +- `docs/phase-568-whiteboard-annotation-clipboard-export-eligibility`:负责 #256 / `avalonia-node-map-ctd`;future worktree,用于 clipboard/export annotation eligibility proof,不做 production serialization。 +- `visual/phase-569-whiteboard-annotation-cookbook-screenshot-gate`:负责 #257 / `avalonia-node-map-79a`;future worktree,用于 annotation-backed Cookbook screenshot implementation gate planning,先于 manifest changes。 +- `docs/phase-570-whiteboard-annotation-public-api-readiness`:负责 #258 / `avalonia-node-map-k0d`;future worktree,用于 public annotation API readiness evidence,不暴露 public APIs。 ## UI 验证策略 @@ -812,4 +828,10 @@ Phase 564 记录 whiteboard annotation migration and compatibility proof,通 - Phase 562 是 GitHub #244 / `avalonia-node-map-0gi`;它把 `WHITEBOARD_ANNOTATION_CLIPBOARD_EXPORT_SERIALIZATION_BOUNDARY` 记录为 docs/tests boundary gate,用于定义 clipboard fragments、scene export artifacts 和 workspace sidecar persistence 中 annotation identity/reference 与 primitive payload eligibility,并要求 compatibility and migration proof required before serialization behavior changes,同时保持 no production serialization implementation、no clipboard/export behavior change、no file/database I/O、no GraphDocument schema change、no schema version bump、no workspace persistence behavior change、no screenshot manifest expansion、no renderer or pointer behavior change、no public API exposure、no saved whiteboard primitive state 和 no full React Flow whiteboard parity。 - Phase 563 是 GitHub #245 / `avalonia-node-map-kri`;它把 `WHITEBOARD_ANNOTATION_SCREENSHOT_COOKBOOK_PROOF_EXPANSION` 记录为 docs/tests planning gate,用于定义 Cookbook route expectations、screenshot proof metadata、non-overlap requirements,以及 separation from persistence/serialization implementation before screenshot manifest expansion。它保持 no screenshot manifest expansion、no new Cookbook route、no UI behavior change、no production annotation store、no file/database I/O、no GraphDocument schema change、no workspace persistence behavior change、no clipboard/export behavior change、no renderer or pointer behavior change、no public API exposure、no saved whiteboard primitive state 和 no full React Flow whiteboard parity。 - Phase 564 是 GitHub #246 / `avalonia-node-map-vyg`;它把 `WHITEBOARD_ANNOTATION_MIGRATION_COMPATIBILITY_PROOF` 记录为 docs/tests planning gate,用于 annotation-store versions、primitive references、style/geometry payloads、migration metadata validation,以及 coverage required before persistence, clipboard/export, or screenshot proof expands。它 depends on Phase 560, Phase 561, and Phase 562,且位于 Phase 559 之后,同时保持 no production migration implementation、no persisted annotation state、no file/database I/O、no GraphDocument schema change、no schema version bump、no workspace persistence behavior change、no clipboard/export serialization behavior change、no screenshot manifest expansion、no renderer or pointer behavior change、no public API exposure 和 no full React Flow whiteboard parity。 +- Phase 565 是 GitHub #253 / `avalonia-node-map-wml`;它记录 `WHITEBOARD_ANNOTATION_POST_PROOF_IMPLEMENTATION_QUEUE_REFRESH`,并把 Phase 566 through Phase 570 分配给 sidecar serializer contract、workspace sidecar save/load integration、clipboard/export eligibility proof、Cookbook screenshot implementation gate 和 public API readiness gate。它保持 no production annotation persistence、no file/database I/O、no GraphDocument schema change、no schema version bump、no workspace save/load behavior change、no clipboard/export serialization behavior change、no screenshot manifest expansion、no new Cookbook route、no renderer or pointer behavior change、no toolbar or eraser change、no public API exposure、no saved whiteboard primitive state 和 no full React Flow whiteboard parity。 +- Phase 566 是 GitHub #254 / `avalonia-node-map-47v`;它将在 Phase 565 后负责 annotation metadata、identity/reference、primitive payload 和 migration metadata 的 internal sidecar document and serializer contract,同时保持 workspace save/load integration、GraphDocument schema changes、public API exposure、screenshot manifest expansion、renderer or pointer behavior 和 full React Flow whiteboard parity out of scope。 +- Phase 567 是 GitHub #255 / `avalonia-node-map-40h`;它将在 Phase 565 和 serializer contract 之后负责 workspace sidecar save/load integration,同时保持 GraphDocument serialization unchanged,并排除 clipboard/export behavior、screenshot manifest expansion、renderer or pointer behavior、public API exposure、broad database abstractions 和 full React Flow whiteboard parity。 +- Phase 568 是 GitHub #256 / `avalonia-node-map-ctd`;它将在 Phase 565 后负责 annotation clipboard/export eligibility proof,同时保持 production clipboard/export annotation serialization、workspace save/load behavior changes、GraphDocument schema changes、screenshot manifest expansion、public API exposure 和 full React Flow whiteboard parity out of scope。 +- Phase 569 是 GitHub #257 / `avalonia-node-map-79a`;它将在 Phase 565 和 persistence/compatibility proof boundaries 之后负责 annotation Cookbook screenshot implementation gate,同时保持 screenshot manifest expansion、new Cookbook route implementation、UI behavior changes、workspace persistence behavior changes、renderer or pointer behavior、public API exposure 和 full React Flow whiteboard parity out of scope。 +- Phase 570 是 GitHub #258 / `avalonia-node-map-k0d`;它将在 Phase 565 和 internal persistence/compatibility proof candidates 之后负责 public annotation API readiness gate,同时保持 public API exposure、runtime behavior changes、persistence behavior changes、screenshot manifest expansion、GraphDocument schema changes 和 full React Flow whiteboard parity out of scope。 - 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、Phase 551 和 Phase 557 都不修改产品代码;除非 focused test 证明存在具体 missing contract。 diff --git a/tests/AsterGraph.Demo.Tests/ReactFlowParityRoadmapDocsTests.cs b/tests/AsterGraph.Demo.Tests/ReactFlowParityRoadmapDocsTests.cs index e812f580..918129ef 100644 --- a/tests/AsterGraph.Demo.Tests/ReactFlowParityRoadmapDocsTests.cs +++ b/tests/AsterGraph.Demo.Tests/ReactFlowParityRoadmapDocsTests.cs @@ -2198,6 +2198,80 @@ public void ParityRoadmapDocs_RecordPhase564MigrationCompatibilityProofInBothLoc Assert.Contains("Phase 564 记录 whiteboard annotation migration and compatibility proof", chineseParity, StringComparison.Ordinal); } + [Fact] + public void ParityRoadmapDocs_RecordPhase565PostAnnotationProofQueueRefreshInBothLocales() + { + 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 565", contents, StringComparison.Ordinal); + Assert.Contains("GitHub #253", contents, StringComparison.Ordinal); + Assert.Contains("avalonia-node-map-wml", contents, StringComparison.Ordinal); + Assert.Contains("WHITEBOARD_ANNOTATION_POST_PROOF_IMPLEMENTATION_QUEUE_REFRESH", contents, StringComparison.Ordinal); + Assert.Contains("Phase 566", contents, StringComparison.Ordinal); + Assert.Contains("Phase 567", contents, StringComparison.Ordinal); + Assert.Contains("Phase 568", contents, StringComparison.Ordinal); + Assert.Contains("Phase 569", contents, StringComparison.Ordinal); + Assert.Contains("Phase 570", contents, StringComparison.Ordinal); + Assert.Contains("sidecar serializer contract", contents, StringComparison.OrdinalIgnoreCase); + Assert.Contains("workspace sidecar save/load integration", contents, StringComparison.OrdinalIgnoreCase); + Assert.Contains("clipboard/export eligibility proof", contents, StringComparison.OrdinalIgnoreCase); + Assert.Contains("Cookbook screenshot implementation gate", contents, StringComparison.OrdinalIgnoreCase); + Assert.Contains("public API readiness gate", contents, StringComparison.OrdinalIgnoreCase); + Assert.Contains("no production annotation persistence", contents, StringComparison.OrdinalIgnoreCase); + Assert.Contains("no file/database I/O", contents, StringComparison.OrdinalIgnoreCase); + Assert.Contains("no GraphDocument schema change", contents, StringComparison.OrdinalIgnoreCase); + Assert.Contains("no schema version bump", contents, StringComparison.OrdinalIgnoreCase); + Assert.Contains("no workspace save/load behavior change", contents, StringComparison.OrdinalIgnoreCase); + Assert.Contains("no clipboard/export serialization behavior change", contents, StringComparison.OrdinalIgnoreCase); + Assert.Contains("no screenshot manifest expansion", contents, StringComparison.OrdinalIgnoreCase); + Assert.Contains("no new Cookbook route", contents, StringComparison.OrdinalIgnoreCase); + Assert.Contains("no renderer or pointer behavior change", contents, StringComparison.OrdinalIgnoreCase); + Assert.Contains("no toolbar or eraser change", contents, StringComparison.OrdinalIgnoreCase); + Assert.Contains("no public API exposure", contents, StringComparison.OrdinalIgnoreCase); + Assert.Contains("no saved whiteboard primitive state", contents, StringComparison.OrdinalIgnoreCase); + Assert.Contains("no full React Flow whiteboard parity", contents, StringComparison.OrdinalIgnoreCase); + Assert.DoesNotContain("whiteboard annotations are persisted", contents, StringComparison.OrdinalIgnoreCase); + Assert.DoesNotContain("workspace save/load now writes annotations", contents, StringComparison.OrdinalIgnoreCase); + Assert.DoesNotContain("public annotation API is exposed", contents, StringComparison.OrdinalIgnoreCase); + } + + foreach (var table in new[] { ExtractIssueWaveTable(englishParity), ExtractIssueWaveTable(chineseParity) }) + { + Assert.Contains("| #253 | `avalonia-node-map-wml` | Phase 565: refresh post-annotation proof implementation queue", table, StringComparison.Ordinal); + Assert.Contains("| #254 | `avalonia-node-map-47v` | Phase 566: whiteboard annotation sidecar serializer contract", table, StringComparison.Ordinal); + Assert.Contains("| #255 | `avalonia-node-map-40h` | Phase 567: whiteboard annotation workspace sidecar save/load integration", table, StringComparison.Ordinal); + Assert.Contains("| #256 | `avalonia-node-map-ctd` | Phase 568: whiteboard annotation clipboard/export eligibility proof", table, StringComparison.Ordinal); + Assert.Contains("| #257 | `avalonia-node-map-79a` | Phase 569: whiteboard annotation Cookbook screenshot implementation gate", table, StringComparison.Ordinal); + Assert.Contains("| #258 | `avalonia-node-map-k0d` | Phase 570: whiteboard annotation public API readiness gate", table, StringComparison.Ordinal); + Assert.Contains("Depends on Phase 564", table, StringComparison.OrdinalIgnoreCase); + Assert.Contains("docs/test queue refresh only", table, StringComparison.OrdinalIgnoreCase); + Assert.Contains("Depends on Phase 565", table, StringComparison.OrdinalIgnoreCase); + Assert.Contains("follow Phase 566", table, StringComparison.OrdinalIgnoreCase); + Assert.DoesNotContain("| TBD | TBD | Phase 565", table, StringComparison.Ordinal); + Assert.DoesNotContain("| TBD | TBD | Phase 566", table, StringComparison.Ordinal); + Assert.DoesNotContain("| TBD | TBD | Phase 570", table, StringComparison.Ordinal); + Assert.DoesNotContain("production annotation persistence is implemented", table, StringComparison.OrdinalIgnoreCase); + Assert.DoesNotContain("public API exposure is complete", table, StringComparison.OrdinalIgnoreCase); + } + + foreach (var plan in new[] { ExtractRecommendedWorktreePlan(englishParity), ExtractRecommendedWorktreePlan(chineseParity) }) + { + Assert.Contains("docs/phase-565-post-annotation-proof-queue-refresh", plan, StringComparison.Ordinal); + Assert.Contains("avalonia-node-map-wml", plan, StringComparison.Ordinal); + Assert.Contains("feature/phase-566-whiteboard-annotation-sidecar-serializer", plan, StringComparison.Ordinal); + Assert.Contains("feature/phase-567-whiteboard-annotation-workspace-sidecar", plan, StringComparison.Ordinal); + Assert.Contains("docs/phase-568-whiteboard-annotation-clipboard-export-eligibility", plan, StringComparison.Ordinal); + Assert.Contains("visual/phase-569-whiteboard-annotation-cookbook-screenshot-gate", plan, StringComparison.Ordinal); + Assert.Contains("docs/phase-570-whiteboard-annotation-public-api-readiness", plan, StringComparison.Ordinal); + } + + Assert.Contains("Phase 565 is GitHub #253 / `avalonia-node-map-wml`", englishParity, StringComparison.Ordinal); + Assert.Contains("Phase 565 是 GitHub #253 / `avalonia-node-map-wml`", chineseParity, StringComparison.Ordinal); + } + [Fact] public void ParityRoadmapDocs_RecordPhase501PostPhase500QueueRefreshInBothLocales() {