From b3cf7ada375183a24f238a3a377b7de2c5671e92 Mon Sep 17 00:00:00 2001 From: Jackson Moore Date: Fri, 4 Sep 2026 13:38:06 +0200 Subject: Evaluate primary repeat timeout --- lua/clever_f/sequence_coordinator.lua | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) (limited to 'lua/clever_f') diff --git a/lua/clever_f/sequence_coordinator.lua b/lua/clever_f/sequence_coordinator.lua index e369a8b..9e6a9b6 100644 --- a/lua/clever_f/sequence_coordinator.lua +++ b/lua/clever_f/sequence_coordinator.lua @@ -242,6 +242,25 @@ function SequenceCoordinator:resolve_acquisition(descriptor, invocation) return self:fresh_primary_resolution(descriptor, result, invocation) end +function SequenceCoordinator:evaluate_repeat_timeout(invocation) + if type(invocation) ~= "table" then + fail("repeat timeout requires primary invocation state", 2) + end + local record = coordinator_records[self] + if type(record.repeat_resolver.evaluate_timeout) ~= "function" then + fail("SequenceCoordinator repeat resolver must evaluate timeout", 2) + end + local window = record.host:read_window() + local decision, elapsed_ms, cleanup = + record.repeat_resolver:evaluate_timeout(window) + return { + decision = decision, + elapsed_ms = elapsed_ms, + cleanup = cleanup, + window = window, + } +end + function SequenceCoordinator:primary(value) local descriptor = self:validate_primary_descriptor(value) local invocation = self:read_primary_invocation() @@ -254,7 +273,13 @@ function SequenceCoordinator:primary(value) if invocation.repeat_decision == repeat_resolver_factory.Decision.ACQUIRE then return self:resolve_acquisition(descriptor, invocation) end - return descriptor + local timeout = self:evaluate_repeat_timeout(invocation) + return { + kind = "repeat", + invocation = invocation, + pressed_descriptor = descriptor, + timeout = timeout, + } end function M.new(options) -- cgit v1.2.3