From 30f6f516dd8970162d82594934be591cb2c4047f Mon Sep 17 00:00:00 2001 From: Jackson Moore Date: Fri, 4 Sep 2026 13:34:01 +0200 Subject: Inspect primary fold policy --- lua/clever_f/sequence_coordinator.lua | 20 +++++++++++++++++++- tests/run.lua | 13 +++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/lua/clever_f/sequence_coordinator.lua b/lua/clever_f/sequence_coordinator.lua index 10949bd..bcff504 100644 --- a/lua/clever_f/sequence_coordinator.lua +++ b/lua/clever_f/sequence_coordinator.lua @@ -75,8 +75,26 @@ function SequenceCoordinator:read_primary_invocation() } end +function SequenceCoordinator:inspect_fold_open_policy(invocation) + if type(invocation) ~= "table" or not domain.Position.is(invocation.position) then + fail("fold preflight requires primary invocation state", 2) + end + local host = coordinator_records[self].host + if type(host.read_fold_state) ~= "function" then + fail("SequenceCoordinator host must provide fold state", 2) + end + local fold_state = host:read_fold_state() + if not domain.FoldState.is(fold_state) then + fail("SequenceCoordinator host must return FoldState", 2) + end + return fold_state +end + function SequenceCoordinator:primary(value) - return self:validate_primary_descriptor(value) + local descriptor = self:validate_primary_descriptor(value) + local invocation = self:read_primary_invocation() + invocation.fold_state = self:inspect_fold_open_policy(invocation) + return descriptor end function M.new(options) diff --git a/tests/run.lua b/tests/run.lua index 6752ae3..fe67fd3 100644 --- a/tests/run.lua +++ b/tests/run.lua @@ -7098,6 +7098,19 @@ test("Primary coordination reads normalized invocation state", function() same("q", invocation.macro_state.register) end) +test("Primary coordination inspects fold policy during preflight", function() + local host = MemoryHost.new({ + fold_open_policy = { "horizontal" }, + closed_fold_levels = 1, + }) + local coordinator = sequence_coordinator.new({ host = host }) + + same(domain.Descriptor.FIND_FORWARD, coordinator:primary("f")) + local operations = host:operations() + same("read_fold_state", operations[#operations].operation) + truthy(host:read_fold_state():opens("horizontal")) +end) + for _, item in ipairs(tests) do local ok, failure = xpcall(item.body, debug.traceback) if not ok then -- cgit v1.2.3