Tamale. Op
(tamale v0.1.0)
Copy Markdown
Edit operations — the kernel's first-class edit intent.
Every write to a Tamale.Space is expressed as one of these ops and
appended to the space's log. Anchors are transported along the log;
nothing is re-inferred from state diffs.
Identity conventions (kernel-level, not policy)
Split— the first child inherits the parent's id (childrenmust be[parent_id | new_ids]). Point anchors on the parent survive on the first child; whole-span semantics belong toTamale.Anchor.Metric+ warps.Merge—intomust behd(ids); the remaining ids die.Delete— terminal for anchors referencing the id. Relocation is policy, not transport.Retime— carries before/after spans so warp construction (adapter layer) has its inputs. Structure and identity are unaffected, but note-timing edits MUST go through this op: an op log with holes where timing changed silently is worse than no log.
When edits arrive as two raw states instead of ops (file import, reload,
collaboration), they must be lowered into ops by a diff(old, new)
fallback adapter — heuristics live in that one function, never in the
kernel's decision paths.
Summary
Types
@type t() :: Tamale.Op.Insert.t() | Tamale.Op.Delete.t() | Tamale.Op.Split.t() | Tamale.Op.Merge.t() | Tamale.Op.Move.t() | Tamale.Op.Retime.t()