diff options
| author | Jackson Moore <jacksonmoore@tuta.io> | 2026-09-04 13:38:06 +0200 |
|---|---|---|
| committer | Jackson Moore <jacksonmoore@tuta.io> | 2026-09-04 13:38:06 +0200 |
| commit | b3cf7ada375183a24f238a3a377b7de2c5671e92 (patch) | |
| tree | 6ed1dcce6899ba1c49626fc32f4213db78145a54 /lua/clever_f | |
| parent | a402497b8a75289ebd8b92c4641509ec4c30a020 (diff) | |
Evaluate primary repeat timeout
Diffstat (limited to 'lua/clever_f')
| -rw-r--r-- | lua/clever_f/sequence_coordinator.lua | 27 |
1 files changed, 26 insertions, 1 deletions
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) |
