tenseleyflow/loader / f4fe116

Browse files

Keep first-file retries focused

Authored by mfwolffe <wolffemf@dukes.jmu.edu>
SHA
f4fe1165473a8e6171e014c3cd83b157e635aee4
Parents
aa40a8b
Tree
c7d5de5

2 changed files

StatusFile+-
M src/loader/runtime/repair.py 13 3
M tests/test_repair.py 6 2
src/loader/runtime/repair.pymodified
@@ -623,9 +623,19 @@ class ResponseRepairer:
623623
             ),
624624
             (None, False),
625625
         )
626
-        if first_missing_target is not None and first_missing_is_directory:
626
+        detail_target = (
627
+            preferred_missing_artifact
628
+            if preferred_missing_artifact is not None
629
+            else (
630
+                (first_missing_target, first_missing_is_directory)
631
+                if first_missing_target is not None
632
+                else None
633
+            )
634
+        )
635
+        if detail_target is not None and detail_target[1]:
636
+            detail_path = detail_target[0]
627637
             next_output_file, next_output_source = infer_next_output_file(
628
-                target=first_missing_target,
638
+                target=detail_path,
629639
                 project_root=self.context.project_root,
630640
                 messages=list(getattr(self.context.session, "messages", []) or []),
631641
             )
@@ -637,7 +647,7 @@ class ResponseRepairer:
637647
                 )
638648
                 lines.append(
639649
                     next_output_detail
640
-                    + f"{self._format_artifact_label(first_missing_target, expect_directory=True)}: "
650
+                    + f"{self._format_artifact_label(detail_path, expect_directory=True)}: "
641651
                     f"{self._format_artifact_label(next_output_file, expect_directory=False)}"
642652
                 )
643653
         if len(missing_labels) > 1:
tests/test_repair.pymodified
@@ -947,6 +947,10 @@ def test_empty_response_retry_prefers_pending_index_over_broad_directory_headlin
947947
         in decision.retry_message
948948
     )
949949
     assert "Next missing planned artifact: `chapters/`" not in decision.retry_message
950
+    assert (
951
+        "Next observed output pattern under `chapters/`: `01-introduction.html`"
952
+        not in decision.retry_message
953
+    )
950954
 
951955
 
952956
 def test_empty_response_retry_prefers_output_index_over_reference_index_with_same_name(
@@ -1063,12 +1067,12 @@ def test_empty_response_retry_points_at_declared_child_file_within_incomplete_ou
10631067
     assert decision.should_continue is True
10641068
     assert decision.retry_message is not None
10651069
     assert "Next missing planned artifact: `introduction.html`" in decision.retry_message
1066
-    assert "Next declared output under `chapters/`: `introduction.html`" in decision.retry_message
10671070
     assert (
10681071
         "Resume with this exact next step: continue `Write the introduction chapter` "
10691072
         "by creating `introduction.html`."
10701073
         in decision.retry_message
10711074
     )
1075
+    assert "Next declared output under `chapters/`" not in decision.retry_message
10721076
     assert (
10731077
         f"Prefer one `write(content=...)` call for `{(chapters / 'introduction.html').resolve(strict=False)}` "
10741078
         "before more research."
@@ -1686,12 +1690,12 @@ def test_empty_response_retry_names_next_file_from_observed_sibling_directory(
16861690
     assert decision.should_continue is True
16871691
     assert decision.retry_message is not None
16881692
     assert "Next missing planned artifact: `01-introduction.html`" in decision.retry_message
1689
-    assert "Next observed output pattern under `chapters/`: `01-introduction.html`" in decision.retry_message
16901693
     assert (
16911694
         "Resume with this exact next step: continue `Write the introduction chapter` "
16921695
         "by creating `01-introduction.html`."
16931696
         in decision.retry_message
16941697
     )
1698
+    assert "Next observed output pattern under `chapters/`" not in decision.retry_message
16951699
     assert (
16961700
         "It mirrors the observed filename pattern from another `chapters/` directory "
16971701
         "you already inspected."