Skip to content

tracking: droppedFields write-observability is asymmetric across the Virtual Data Engine RPC boundary (update best-effort, create surfaces) #3476

Description

@os-zhuang

Split out from #3455 / #3468 (design note #3413).

The asymmetry

droppedFields (write-observability for LEGALLY-stripped fields — readonly #2948 / readonlyWhen #3042 / #3043 create ingress) reaches the caller via two different mechanisms with different reach:

#3468 extended both channels to the bulk paths, so bulk now inherits the exact same asymmetry the single-write path already had (acknowledged in #3413).

Why it matters

A cross-process deployment (Virtual Data Engine) gets reliable drop reporting on creates but silent success on updates — the very silent-success class #3407 set out to remove, re-appearing only at the process seam.

Options to consider

  1. Carry onFieldsDropped events across the RPC envelope (add a droppedFields field to the engine's remote write-response contract) so the remote engine reports its own strips.
  2. Recompute the update strip at the protocol layer via a before/after diff (as the create side does) — costs an extra read to know the pre-write values.
  3. Document the boundary as a known limitation and leave update-side remote reporting best-effort.

No runtime bug today (single-process/ObjectQL deployments are fully covered); this tracks closing the remote gap.

Refs: #3455, #3468, #3413, #3407.

Activity

  1. os-zhuang commented on Jul 25, 2026

    @os-zhuang
    ContributorAuthor

    Closing after verification (2026-07-25): the boundary this issue guards does not exist at runtime.

    Design constraint to carry forward if/when a VDE is actually implemented — treat this issue as an acceptance criterion for that work:

    • The write-path RPC response contract MUST carry `droppedFields` (option 1 here), so the remote engine reports its own strips.
    • Option 2 (recomputing update strips at the protocol layer via a pre/post diff) should not be built even then: it costs a pre-read per update and duplicates `readonlyWhen` predicate evaluation outside the engine — a permanent two-implementation drift tax.
    • Option 3 (document the limitation) is already done: the schema comment on `DroppedFieldsEventSchema` states the listener cannot cross the RPC boundary.

    Nothing to build until the VDE has a runtime.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions