summaryrefslogtreecommitdiff
path: root/lua
diff options
context:
space:
mode:
authorJackson Moore <jacksonmoore@tuta.io>2026-09-04 13:38:06 +0200
committerJackson Moore <jacksonmoore@tuta.io>2026-09-04 13:38:06 +0200
commitb3cf7ada375183a24f238a3a377b7de2c5671e92 (patch)
tree6ed1dcce6899ba1c49626fc32f4213db78145a54 /lua
parenta402497b8a75289ebd8b92c4641509ec4c30a020 (diff)
Evaluate primary repeat timeout
Diffstat (limited to 'lua')
-rw-r--r--lua/clever_f/sequence_coordinator.lua27
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)