diff options
| author | Jackson Moore <jacksonmoore@tuta.io> | 2026-09-04 12:07:18 +0200 |
|---|---|---|
| committer | Jackson Moore <jacksonmoore@tuta.io> | 2026-09-04 12:07:18 +0200 |
| commit | b3459a82c42c62442ee4d7713b0fc5f9e6a4bf82 (patch) | |
| tree | 8098882516df75d677582301ff438af0cbceaf34 | |
| parent | c22cf010d5f1f31e18514f7f5c4c17379057e40b (diff) | |
Store timed acquisition clock
| -rw-r--r-- | lua/clever_f/acquisition_service.lua | 12 | ||||
| -rw-r--r-- | tests/run.lua | 38 |
2 files changed, 49 insertions, 1 deletions
diff --git a/lua/clever_f/acquisition_service.lua b/lua/clever_f/acquisition_service.lua index 37e13cf..a8471f6 100644 --- a/lua/clever_f/acquisition_service.lua +++ b/lua/clever_f/acquisition_service.lua @@ -144,6 +144,7 @@ function AcquisitionResult.new(request, options) previous_target_source = options.previous_target_source, cached_target = options.cached_target, missing_previous_input = options.missing_previous_input == true, + acquisition_time_ms = options.acquisition_time_ms, completed = outcome ~= nil or target ~= nil, } return result @@ -669,9 +670,18 @@ function AcquisitionService:acquire(descriptor, context, position, count, macro_ end end scope:set_resolved_target(target) - record.transitions:CommitAcquiredTarget(request.context, target) + local acquisition_time_ms + if record.policy:sample_timeouts().repeat_timeout_ms > 0 then + acquisition_time_ms = record.host:read_time_ms() + end + record.transitions:CommitAcquiredTarget( + request.context, + target, + acquisition_time_ms + ) return AcquisitionResult.new(request, { target = target, + acquisition_time_ms = acquisition_time_ms, previous_input_trigger = trigger, previous_target_source = scope.previous_target_source, cached_target = scope.cached_target, diff --git a/tests/run.lua b/tests/run.lua index 603baad..fa9930e 100644 --- a/tests/run.lua +++ b/tests/run.lua @@ -5298,6 +5298,44 @@ test("Missing previous input preserves cursor and emits exact diagnostic", funct ) end) +test("Positive repeat timeout stores acquisition time", function() + local state, transitions = fresh_sequence_state() + transitions:SetRepeatTimestamp(17) + local host = MemoryHost.new({ + time_ms = 84.75, + configuration = { + mark_cursor = false, + repeat_timeout_ms = 50, + }, + input_packets = { { kind = "text", text = "a" } }, + }) + local result = acquisition_service.new({ + host = host, + transitions = transitions, + }):acquire("f", "n", domain.Position.new(1, 1), nil, nil) + same(84.75, result.acquisition_time_ms) + same(84.75, state.repeat_timestamp_ms) + + fresh_sequence_state() + transitions:SetRepeatTimestamp(17) + local zero_host = MemoryHost.new({ + configuration = { + mark_cursor = false, + repeat_timeout_ms = 0, + }, + input_packets = { { kind = "text", text = "a" } }, + }) + local zero_result = acquisition_service.new({ + host = zero_host, + transitions = transitions, + }):acquire("f", "n", domain.Position.new(1, 1), nil, nil) + same(nil, zero_result.acquisition_time_ms) + same(17, state.repeat_timestamp_ms) + for _, operation in ipairs(zero_host:operations()) do + falsy(operation.operation == "read_time_ms") + end +end) + for _, item in ipairs(tests) do local ok, failure = xpcall(item.body, debug.traceback) if not ok then |
