Parent PRD
Milestone: Action-based Transactions (UserOperation) — see milestone description for full PRD.
Discussion: #5960
What to decide
Operation::Update carries several auxiliary fields that do not map onto any action type defined in milestone 11 (#6450–#6453):
fields_modified
merged_generations
fields_for_preserving_frag_bitmap
update_mode
inserted_rows_filter
updated_fragment_offsets
These are mostly stats/flags consumed during apply or by downstream code paths (e.g. index maintenance, MemWAL), not state mutations of the manifest. They block lossless translation of Operation::Update to actions.
Options
- Ride-along on
UserAction — extend UserAction (or UserOperation) with an optional metadata payload for these fields. They participate in serialization but not in apply or conflict detection. Cheapest; preserves round-trip.
- First-class actions — define one action per field (e.g.
RecordMergedGenerations, SetUpdateMode). Heaviest; uniform but most ceremony.
- Audit and drop — determine which fields are actually read downstream and deprecate the rest. Likely correct for at least some (e.g.
inserted_rows_filter, updated_fragment_offsets may be stats only).
- Hybrid — audit first (option 3); for any survivors, ride-along (option 1).
Recommended starting point: option 4. Audit fields_modified, merged_generations, update_mode, inserted_rows_filter, updated_fragment_offsets, fields_for_preserving_frag_bitmap for actual consumers, then decide per-field.
Acceptance criteria
Blocked by
User stories addressed
- User story 9: old operations translated to actions
- User story 11: lossless round-trip
Parent PRD
Milestone: Action-based Transactions (UserOperation) — see milestone description for full PRD.
Discussion: #5960
What to decide
Operation::Updatecarries several auxiliary fields that do not map onto any action type defined in milestone 11 (#6450–#6453):fields_modifiedmerged_generationsfields_for_preserving_frag_bitmapupdate_modeinserted_rows_filterupdated_fragment_offsetsThese are mostly stats/flags consumed during apply or by downstream code paths (e.g. index maintenance, MemWAL), not state mutations of the manifest. They block lossless translation of
Operation::Updateto actions.Options
UserAction— extendUserAction(orUserOperation) with an optional metadata payload for these fields. They participate in serialization but not inapplyor conflict detection. Cheapest; preserves round-trip.RecordMergedGenerations,SetUpdateMode). Heaviest; uniform but most ceremony.inserted_rows_filter,updated_fragment_offsetsmay be stats only).Recommended starting point: option 4. Audit
fields_modified,merged_generations,update_mode,inserted_rows_filter,updated_fragment_offsets,fields_for_preserving_frag_bitmapfor actual consumers, then decide per-field.Acceptance criteria
UpdateOperation translation (separate follow-up implementation issue)Blocked by
User stories addressed