diff options
| author | Jackson Moore <jacksonmoore@tuta.io> | 2026-09-04 14:14:32 +0200 |
|---|---|---|
| committer | Jackson Moore <jacksonmoore@tuta.io> | 2026-09-04 14:14:32 +0200 |
| commit | e192a496e9264249ff60b625453a3f1227af2221 (patch) | |
| tree | ccac8668f16ee015190364bf1fb62fb82fc439b0 /lua | |
| parent | 294d7efdf06efbaab0c68e0a2cf01185622c9241 (diff) | |
Fix reset action flow
Diffstat (limited to 'lua')
| -rw-r--r-- | lua/clever_f/action_facade.lua | 10 | ||||
| -rw-r--r-- | lua/clever_f/sequence_coordinator.lua | 13 |
2 files changed, 23 insertions, 0 deletions
diff --git a/lua/clever_f/action_facade.lua b/lua/clever_f/action_facade.lua index 1dd5052..e8ea356 100644 --- a/lua/clever_f/action_facade.lua +++ b/lua/clever_f/action_facade.lua @@ -54,6 +54,16 @@ end ActionFacade.invoke_primary = ActionFacade.primary ActionFacade.start = ActionFacade.primary +function ActionFacade:reset() + local outcome = self:coordinator():reset() + if not domain.ActionOutcome.is(outcome) then + fail("SequenceCoordinator must return an ActionOutcome", 2) + end + return outcome +end + +ActionFacade.Reset = ActionFacade.reset + local function explicit_outcome(facade, method_name) local coordinator = facade:coordinator() local outcome = coordinator[method_name](coordinator) diff --git a/lua/clever_f/sequence_coordinator.lua b/lua/clever_f/sequence_coordinator.lua index 59dc332..a83c75f 100644 --- a/lua/clever_f/sequence_coordinator.lua +++ b/lua/clever_f/sequence_coordinator.lua @@ -480,6 +480,19 @@ function SequenceCoordinator:last_explicit_resolution() return coordinator_records[self].last_explicit_resolution end +function SequenceCoordinator:reset() + local record = coordinator_records[self] + local position = domain.Position.coerce(record.host:read_cursor()) + local cleanup = record.transitions:PublicReset(record.host:read_window()) + if type(record.feedback.release_transition_cleanup) ~= "function" then + fail("FeedbackService must release reset cleanup", 2) + end + record.feedback:release_transition_cleanup(cleanup) + return domain.ActionOutcome.neutral(position) +end + +SequenceCoordinator.Reset = SequenceCoordinator.reset + function SequenceCoordinator:read_explicit_invocation() local host = coordinator_records[self].host if type(host) ~= "table" |
