tenseleyflow/loader / d14cf85

Browse files

Block declared output drift

Authored by mfwolffe <wolffemf@dukes.jmu.edu>
SHA
d14cf8591d1879c2e7526c3269b624b34a1aede0
Parents
a8a473a
Tree
6295ce2

2 changed files

StatusFile+-
M src/loader/runtime/hooks.py 15 0
M tests/test_permissions.py 6 2
src/loader/runtime/hooks.pymodified
@@ -1031,6 +1031,7 @@ class LateReferenceDriftHook(BaseToolHook):
10311031
             return None
10321032
 
10331033
         missing_label = ""
1034
+        declared_missing_label = ""
10341035
         completed_files = 0
10351036
         planned_roots: list[str] = []
10361037
         seen_roots: set[str] = set()
@@ -1055,9 +1056,23 @@ class LateReferenceDriftHook(BaseToolHook):
10551056
                 planned_roots.append(root)
10561057
                 seen_roots.add(root)
10571058
 
1059
+        if not missing_label:
1060
+            for target, _expect_directory in planned_targets:
1061
+                declared_missing = collect_missing_declared_html_output_files(
1062
+                    target=target,
1063
+                    project_root=self.project_root,
1064
+                )
1065
+                if not declared_missing:
1066
+                    continue
1067
+                declared_missing_label = str(declared_missing[0])
1068
+                missing_label = declared_missing_label
1069
+                break
1070
+
10581071
         if not missing_label:
10591072
             return None
10601073
         minimum_completed_files = self._MIN_COMPLETED_FILES
1074
+        if declared_missing_label and completed_files >= 1:
1075
+            minimum_completed_files = 1
10611076
         if completed_files >= 1 and self._reference_study_completed(dod):
10621077
             minimum_completed_files = 1
10631078
         if completed_files < minimum_completed_files:
tests/test_permissions.pymodified
@@ -2000,7 +2000,7 @@ async def test_late_reference_drift_hook_does_not_treat_empty_output_dir_as_comp
20002000
 
20012001
 
20022002
 @pytest.mark.asyncio
2003
-async def test_late_reference_drift_hook_does_not_block_when_html_outputs_still_link_to_missing_files(
2003
+async def test_late_reference_drift_hook_blocks_when_html_outputs_declare_missing_files(
20042004
     temp_dir: Path,
20052005
 ) -> None:
20062006
     registry = create_default_registry(temp_dir)
@@ -2061,7 +2061,11 @@ async def test_late_reference_drift_hook_does_not_block_when_html_outputs_still_
20612061
         )
20622062
     )
20632063
 
2064
-    assert result.decision == HookDecision.CONTINUE
2064
+    assert result.decision == HookDecision.DENY
2065
+    assert result.terminal_state == "blocked"
2066
+    assert result.message is not None
2067
+    assert "late reference drift" in result.message
2068
+    assert "02-installation.html" in result.message
20652069
 
20662070
 
20672071
 @pytest.mark.asyncio