pub fn row_change_to_json(table: &str, change: &SourceChange) -> ValueExpand description
One row change in the change-source ingest shape — the changes[] element
rindled’s /apply-row-change-txn consumes (rindle-replica’s mutation_from_json
is the decode dual): add → {row}, remove → {old}, edit → {old, row} where row
is the NEW image. Deliberately distinct from normalized_op_to_json — that is the
OUTBOUND batch wire, where remove carries row and edit carries new. The
room’s write-behind flush emits this shape (RINDLE-REALTIME-DESIGN.md §5.3), with
old carrying the base image the CAS precondition asserts. NOTE: this emitter
renders cells via owned_to_json, which is FLOAT-FORM for Int — it is NOT the
integer-exact ingest codec (rindle-replica::wire_json::mutation_to_json, design
226 Stage D). Room cells are Number-plane today so nothing is lost; unify onto the
exact codec before any exact-int producer feeds this path.