Skip to main content

Type Alias: GestureDroppedReason

GestureDroppedReason = "data-changed" | "superseded" | "discarded" | "entry-gone" | "inverted-span"

Defined in: model/error-report.ts:217

Why core dropped a held gesture itself, instead of a before* handler saying no (#272, #273, #377). Never a consumer's own veto, so a dropped report carries no reason — there are no words to quote, only one of these.

'data-changed' — the rows the draft was measured from were replaced while a handler was still deciding. 'entry-gone' — the entry the settle would write was removed. 'superseded' — a new gesture armed before the handler decided. 'discarded' — the user pressed Escape, or the Gantt was destroyed, before the handler decided.

severity alone already tells "the user did this on purpose" ('superseded', 'discarded', severity: 'info') from "real work was lost" (the other two, severity: 'warning') — see buildGestureDroppedReport. What severity cannot do is tell 'data-changed' apart from 'entry-gone': two different failures a consumer may want to handle two different ways. droppedReason carries that, without matching on message's English sentence (ErrorReport.droppedReason, branch review).

'inverted-span' — an installed EditExtender cascaded an end that falls before its start. Core refuses to store that and drops the gesture. The entry keeps its stored dates, so nothing is lost but the gesture (#143, 2026-09-06: an inverted span is refused, never stored). This one reports by: <the plugin> and carries the InvertedSpanError as cause; every other reason reports by: 'core'.

A user gesture never raises it. layout/gesture-draft.ts's resizeEdit clamps the dragged edge at zero length, and nudge() runs the same draft, so neither a drag nor a key can invert a span.

ADR 0026 retired 'write-refused', which this used to carry, on the premise that the store only ever refused an envelope-only cascade against a several-Segment Entry. Branch review disproved it by running the case: isEnvelopeRefusal named two errors, and only SegmentsOutOfSyncError died with the Segment. InvertedSpanError never was Segment-specific. 'inverted-span' replaces the retired name rather than restoring it, because the envelope the old name described is gone and the condition it now reports is the one this name states.