55import pytest
66
77from loopx .control_plane .todos import frontier_revision
8+ from loopx .control_plane .goals .goal_frontier .long_todo_chain import (
9+ long_todo_chain_successor_checkpoints ,
10+ )
811
912from loopx .control_plane .todos .frontier_revision import (
10- advancement_frontier_revision_from_index ,
1113 build_advancement_frontier_revision_index ,
12- selectable_advancement_frontier_revision ,
1314)
1415
1516
@@ -36,31 +37,29 @@ def test_excluded_unclaimed_work_does_not_rearm_this_agents_frontier():
3637 after = deepcopy (before )
3738 after [1 ]["priority" ] = "P0"
3839 after [1 ]["updated_at" ] = "2026-09-02T00:00:00Z"
39- for source in (before , after ):
40- direct = selectable_advancement_frontier_revision (source , agent_id = "worker-a" )
41- indexed = advancement_frontier_revision_from_index (
42- build_advancement_frontier_revision_index (source ), agent_id = "worker-a" ,
43- )
44- assert direct == indexed
45- assert selectable_advancement_frontier_revision (before , agent_id = "worker-a" ) == (
46- selectable_advancement_frontier_revision (after , agent_id = "worker-a" )
47- )
48- assert selectable_advancement_frontier_revision (before , agent_id = "worker-b" ) != (
49- selectable_advancement_frontier_revision (after , agent_id = "worker-b" )
50- )
40+ before_index = build_advancement_frontier_revision_index (before )
41+ after_index = build_advancement_frontier_revision_index (after )
42+ assert before_index ["by_agent" ] == after_index ["by_agent" ]
43+ assert before_index ["unclaimed" ] != after_index ["unclaimed" ]
44+ # The excluded-only lane must remain explicit even without claimed work.
45+ assert before_index ["by_agent" ][0 ]["agent_id" ] == "worker-a"
46+ assert before_index ["by_agent" ][0 ]["complete" ] is True
5147
5248
5349def test_duplicate_identity_cannot_be_a_complete_frontier ():
5450 source = rows ()
5551 source [1 ]["todo_id" ] = source [0 ]["todo_id" ]
56- assert selectable_advancement_frontier_revision (source , agent_id = None ) == (None , None , False )
52+ index = build_advancement_frontier_revision_index (source )
53+ assert index ["all" ] == index ["unclaimed" ] == {"complete" : False }
5754
5855
5956def test_removing_exclusion_rearms_newly_available_work ():
6057 source = rows ()
61- before = selectable_advancement_frontier_revision (source , agent_id = "worker-a" )
58+ before = build_advancement_frontier_revision_index (source )
6259 source [1 ].pop ("excluded_agents" )
63- assert selectable_advancement_frontier_revision (source , agent_id = "worker-a" ) != before
60+ after = build_advancement_frontier_revision_index (source )
61+ assert after ["by_agent" ] == []
62+ assert before ["by_agent" ][0 ]["frontier_revision" ] != after ["unclaimed" ]["frontier_revision" ]
6463
6564
6665def test_v0_codec_preserves_unicode_hash_and_microsecond_ordering ():
@@ -72,17 +71,23 @@ def test_v0_codec_preserves_unicode_hash_and_microsecond_ordering():
7271 expected = "todo_frontier_revision_v0:" + sha256 (encoded .encode ()).hexdigest ()[:24 ]
7372 source = [{** material [1 ], "completed_at" : "2026-09-01T08:00:00.000001+08:00" },
7473 {** material [0 ], "updated_at" : "2026-09-01T00:00:00.000002Z" }]
75- assert selectable_advancement_frontier_revision (source , agent_id = None ) == (
76- expected , "2026-09-01T00:00:00.000002Z" , True )
74+ checkpoint = build_advancement_frontier_revision_index (source )["all" ]
75+ assert checkpoint ["complete" ] is True
76+ assert checkpoint ["frontier_revision" ] == expected
77+ assert checkpoint ["frontier_updated_at" ] == "2026-09-01T00:00:00.000002Z"
7778
7879
7980def test_legacy_agent_spelling_in_index_remains_readable ():
8081 source = rows ()[:1 ]
8182 source [0 ]["claimed_by" ] = "Worker A"
8283 index = build_advancement_frontier_revision_index (source )
8384 index ["by_agent" ][0 ]["agent_id" ] = " Worker\u0085 A "
84- assert advancement_frontier_revision_from_index (index , agent_id = "worker-a" ) == (
85- selectable_advancement_frontier_revision (source , agent_id = "Worker A" ))
85+ result = long_todo_chain_successor_checkpoints (
86+ source , agent_id = "worker-a" , triggers = [], obligation_id = "replan-test" ,
87+ candidates = [], frontier_revision_index = index ,
88+ )
89+ assert result is not None
90+ assert result ["trigger_checkpoints" ][0 ]["frontier_revision" ] == index ["by_agent" ][0 ]["frontier_revision" ]
8691
8792
8893def test_large_frontier_transport_preserves_exact_v0_identity_and_tail_edits ():
@@ -92,10 +97,9 @@ def test_large_frontier_transport_preserves_exact_v0_identity_and_tail_edits():
9297 assert len (encoded .encode ()) > 2 * 1024 * 1024
9398 expected = "todo_frontier_revision_v0:" + sha256 (encoded .encode ()).hexdigest ()[:24 ]
9499 source = [{** item , "updated_at" : "2026-09-01T00:00:00Z" } for item in material ]
95- assert selectable_advancement_frontier_revision (source , agent_id = None ) == (
96- expected , "2026-09-01T00:00:00Z" , True )
97- assert advancement_frontier_revision_from_index (
98- build_advancement_frontier_revision_index (source ), agent_id = None ,
99- ) == (expected , "2026-09-01T00:00:00Z" , True )
100+ checkpoint = build_advancement_frontier_revision_index (source )["all" ]
101+ assert checkpoint ["complete" ] is True
102+ assert checkpoint ["frontier_revision" ] == expected
103+ assert checkpoint ["frontier_updated_at" ] == "2026-09-01T00:00:00Z"
100104 source [- 1 ]["text" ] += " Material edit at the tail."
101- assert selectable_advancement_frontier_revision (source , agent_id = None )[ 0 ] != expected
105+ assert build_advancement_frontier_revision_index (source )[ "all" ][ "frontier_revision" ] != expected
0 commit comments