1- """Windows-only owned disposable tests for the historical admission barrier."""
1+ """Windows-only owned disposable tests for the historical admission barrier.
2+
3+ Every case builds its own fixture inside a unique temporary directory created
4+ by this test, so it never depends on (or creates) any historical task state.
5+ """
26from __future__ import annotations
37
48import hashlib
1721from trace_gc .budget import RunBudget
1822
1923
20- OWNED = Path ( r"D:\codex-task-runs\issue90-real-historical-transition-disabled-plan-20260930-01\ fence-owned-tests" )
24+ TEMP_PREFIX = "jraphyte- fence-"
2125LIMITS = {"retrieval_requests" : 1 , "model_calls" : 1 , "retries" : 0 ,
2226 "solver_expansions" : 1 , "review_actions" : 1 , "request_bytes" : 1000 }
2327
@@ -38,11 +42,14 @@ def test_module_load_does_not_require_msvcrt(self):
3842 def setUp (self ):
3943 if os .name != "nt" :
4044 self .skipTest ("Windows ACL contract" )
41- OWNED . mkdir ( exist_ok = True )
42- self .temp = tempfile .TemporaryDirectory (dir = OWNED )
45+ self . sid = _current_sid ( )
46+ self .temp = tempfile .TemporaryDirectory (prefix = TEMP_PREFIX )
4347 self .addCleanup (self ._cleanup )
4448 self .base = Path (self .temp .name )
45- self .assertEqual (self .base .resolve ().parent , OWNED .resolve ())
49+ # The fixture owns this fresh directory; only paths beneath it are ever
50+ # given a barrier ACL or have one removed again.
51+ self .assertTrue (self .base .is_dir ())
52+ self .assertTrue (self .base .name .startswith (TEMP_PREFIX ))
4653 self .root = self .base / "old-app"
4754 self .root .mkdir ()
4855 self .old = self .root / "state"
@@ -73,14 +80,25 @@ def setUp(self):
7380 guarded .directory_dacl_sddl (self .old / name ).encode ()).hexdigest ()
7481 for name in guarded .NAMES }
7582
83+ def _owned (self , path : Path ) -> Path :
84+ resolved = Path (path ).resolve ()
85+ if not resolved .is_relative_to (self .base .resolve ()):
86+ raise AssertionError (f"refusing ACL change outside fixture: { path } " )
87+ return resolved
88+
7689 def _cleanup (self ):
90+ # Lift only this test's own deny ACEs so the owned tree can be removed;
91+ # no ancestor of the temporary directory has its ACL touched.
7792 if hasattr (self , "root" ) and self .root .exists ():
78- _call ("icacls.exe" , str (self .root ), "/remove:d" , "*" + self .sid )
93+ _call ("icacls.exe" , str (self ._owned ( self . root ) ), "/remove:d" , "*" + self .sid )
7994 for root in (getattr (self , "old" , None ), getattr (self , "archive" , None )):
8095 if root is not None and root .exists ():
8196 for name in guarded .NAMES :
82- _call ("icacls.exe" , str (root / name ), "/remove:d" , "*" + self .sid )
97+ if (root / name ).exists ():
98+ _call ("icacls.exe" , str (self ._owned (root / name )),
99+ "/remove:d" , "*" + self .sid )
83100 self .temp .cleanup ()
101+ self .assertFalse (self .base .exists ())
84102
85103 def invoke (self ):
86104 return guarded .fence_closed_old_phase_guarded (
0 commit comments