Block declared output drift
Authored by
mfwolffe <wolffemf@dukes.jmu.edu>
- SHA
d14cf8591d1879c2e7526c3269b624b34a1aede0- Parents
-
a8a473a - Tree
6295ce2
d14cf85
d14cf8591d1879c2e7526c3269b624b34a1aede0a8a473a
6295ce2| Status | File | + | - |
|---|---|---|---|
| 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): | ||
| 1031 | 1031 | return None |
| 1032 | 1032 | |
| 1033 | 1033 | missing_label = "" |
| 1034 | + declared_missing_label = "" | |
| 1034 | 1035 | completed_files = 0 |
| 1035 | 1036 | planned_roots: list[str] = [] |
| 1036 | 1037 | seen_roots: set[str] = set() |
@@ -1055,9 +1056,23 @@ class LateReferenceDriftHook(BaseToolHook): | ||
| 1055 | 1056 | planned_roots.append(root) |
| 1056 | 1057 | seen_roots.add(root) |
| 1057 | 1058 | |
| 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 | + | |
| 1058 | 1071 | if not missing_label: |
| 1059 | 1072 | return None |
| 1060 | 1073 | minimum_completed_files = self._MIN_COMPLETED_FILES |
| 1074 | + if declared_missing_label and completed_files >= 1: | |
| 1075 | + minimum_completed_files = 1 | |
| 1061 | 1076 | if completed_files >= 1 and self._reference_study_completed(dod): |
| 1062 | 1077 | minimum_completed_files = 1 |
| 1063 | 1078 | 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 | ||
| 2000 | 2000 | |
| 2001 | 2001 | |
| 2002 | 2002 | @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( | |
| 2004 | 2004 | temp_dir: Path, |
| 2005 | 2005 | ) -> None: |
| 2006 | 2006 | registry = create_default_registry(temp_dir) |
@@ -2061,7 +2061,11 @@ async def test_late_reference_drift_hook_does_not_block_when_html_outputs_still_ | ||
| 2061 | 2061 | ) |
| 2062 | 2062 | ) |
| 2063 | 2063 | |
| 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 | |
| 2065 | 2069 | |
| 2066 | 2070 | |
| 2067 | 2071 | @pytest.mark.asyncio |