Skip to content

Phase 558: internal whiteboard annotation store contract skeleton #239

@ExplodingUFO

Description

@ExplodingUFO

Context

Phase 557 / GitHub #237 records the separate whiteboard annotation-store contract gate. It requires future persistence work to define store ownership, lifetime, annotation identity, primitive reference rules, style/geometry serialization, edit lifecycle serialization, migration metadata, read/write API boundaries, and compatibility proof before saved whiteboard primitive state can exist.

The current stack has transient internal whiteboard primitives, renderer-neutral projection, pointer capture, hosted activation, eraser behavior, and a deferred persistence decision. The next narrow implementation step is an internal contract skeleton that captures the annotation-store shape without adding persistence behavior.

Scope

Add an internal, non-public whiteboard annotation-store contract skeleton:

  • define internal Core contract/model types for annotation-store metadata, annotation records, primitive references, serialized geometry/style/lifecycle payload shape, and migration/version metadata;
  • define an internal read/write boundary shape that is persistence-neutral and does not touch GraphDocument, workspace save/load, clipboard fragments, scene export, or screenshot artifacts;
  • add focused contract tests proving the skeleton remains internal, graph-document-free, persistence-neutral, and compatible with the Phase 557 boundary wording;
  • update EN/ZH parity docs and focused docs tests to record Phase 558 after Phase 557.

Out of scope

No production annotation store implementation, no file/database I/O, no GraphDocument schema change, no schema version bump, no workspace persistence behavior change, no clipboard/export serialization change, no screenshot manifest expansion, no renderer rewrite, no pointer coordinator edits, no toolbar changes, no eraser changes, no public API exposure, no retained API removal, and no full React Flow whiteboard parity claim.

Dependency / stacking

Depends on Phase 557 / PR #238 and must not merge before Phase 557 and the lower whiteboard stack land. May be implemented as a stacked branch on top of docs/phase-557-whiteboard-annotation-store-contract while PR #238 is blocked.

Acceptance Criteria

  • Internal Core annotation-store contract/model types exist for store metadata, annotation identity/reference, primitive record payload shape, serialized geometry/style/edit-lifecycle, migration/version metadata, and a persistence-neutral read/write boundary.
  • Focused tests prove these types remain internal and do not add GraphDocument properties, workspace persistence behavior, clipboard/export serialization behavior, screenshot artifacts, renderer behavior, pointer behavior, or public API surface.
  • EN/ZH React Flow parity docs record Phase 558 with GitHub Phase 557: record whiteboard annotation store contract gate #238+ and the matching Beads issue while preserving Phase 557 as the contract gate.
  • Focused docs tests fail if Phase 558 claims saved whiteboard primitive state, GraphDocument schema changes, or full React Flow whiteboard parity.
  • Verification includes focused annotation-store contract tests, focused Phase 558 roadmap-doc tests, affected Editor/Demo tests, public API validation, and git diff --check.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions