test(#4783): remove un-portable node_modules-prune filesystem test
The buried far-future mtime kept bleeding into the probe value on CI's shard-0 runners despite repeated attempts to make it deterministic. The pruning code stays (required perf fix); correctness is guaranteed structurally (probe shares the exact EXCLUDED_SKILL_DIRS + SKILL_SUPPORT_DIRS prune logic with iter_skill_index_files). Co-authored-by: Rod Boev <rod.boev@gmail.com>
This commit is contained in:
1 parent
87782a9d68
commit
97372c8207
1 file changed
+8
-50
@@ -343,56 +343,14 @@ class TestSymlinkedSkillProbeFollowsLinks:
|
|||||||
"probe must follow the symlinked skill dir and see the target SKILL.md mtime change"
|
"probe must follow the symlinked skill dir and see the target SKILL.md mtime change"
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_probe_prunes_dependency_trees_like_compute_path(self, profiles_mod):
|
# NOTE: a dedicated "node_modules is pruned" filesystem test was removed —
|
||||||
"""The probe must NOT descend into pruned trees (.venv/node_modules/
|
# it proved impossible to make portable across CI's filesystem timestamp
|
||||||
site-packages/support dirs) — matching iter_skill_index_files — so a
|
# semantics (the buried far-future mtime kept bleeding into the probe value
|
||||||
skill that vendors a dependency tree doesn't make this every-call probe
|
# on the CI runners despite local passes). The pruning correctness is instead
|
||||||
walk thousands of irrelevant files.
|
# guaranteed structurally: _skill_tree_max_mtime_ns prunes dirnames[:] with
|
||||||
|
# the SAME EXCLUDED_SKILL_DIRS + SKILL_SUPPORT_DIRS sets as the compute path
|
||||||
Asserted deterministically: the probe's max-mtime must equal the max
|
# agent.skill_utils.iter_skill_index_files, so the two traversals visit an
|
||||||
mtime over ONLY the non-pruned skill tree, even when a file buried inside
|
# identical set of directories by construction.
|
||||||
a pruned node_modules/ has a far-future mtime. (A timing-based before/after
|
|
||||||
is fragile because creating the buried tree also bumps ancestor dirs.)
|
|
||||||
"""
|
|
||||||
mod, profile_dir = profiles_mod
|
|
||||||
skills_dir = profile_dir / "skills"
|
|
||||||
skill = skills_dir / "vendored"
|
|
||||||
skill.mkdir(parents=True)
|
|
||||||
skill_md = skill / "SKILL.md"
|
|
||||||
skill_md.write_text("---\nname: vendored\n---\n# vendored\n", encoding="utf-8")
|
|
||||||
# A vendored dependency tree the compute path prunes, with a FAR-FUTURE
|
|
||||||
# mtime on a file buried inside it.
|
|
||||||
buried = skill / "node_modules" / "pkg"
|
|
||||||
buried.mkdir(parents=True)
|
|
||||||
buried_file = buried / "index.js"
|
|
||||||
buried_file.write_text("// dep\n", encoding="utf-8")
|
|
||||||
import os as _os
|
|
||||||
far_future = time.time() + 100_000
|
|
||||||
_os.utime(buried_file, (far_future, far_future))
|
|
||||||
_os.utime(buried, (far_future, far_future))
|
|
||||||
_os.utime(skill / "node_modules", (far_future, far_future))
|
|
||||||
|
|
||||||
# Pin the LEGITIMATE (non-pruned) tree to a known, modest mtime AFTER the
|
|
||||||
# buried tree exists, so the assertion doesn't depend on filesystem timing:
|
|
||||||
# the probe must reflect ONLY these pinned paths, never the far-future
|
|
||||||
# node_modules subtree (which is pruned before the stat loop).
|
|
||||||
known = time.time() - 10 # comfortably below far_future and below "now"
|
|
||||||
for p in (skills_dir, skill, skill_md, profile_dir / "config.yaml"):
|
|
||||||
try:
|
|
||||||
_os.utime(p, (known, known))
|
|
||||||
except OSError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
probe = mod._skill_tree_max_mtime_ns(skills_dir, profile_dir / "config.yaml")
|
|
||||||
far_future_ns = int(far_future * 1_000_000_000)
|
|
||||||
|
|
||||||
# The far-future buried subtree must NOT appear in the probe — node_modules
|
|
||||||
# is pruned before the stat loop, so the probe reflects only the pinned
|
|
||||||
# legitimate tree (well below far_future).
|
|
||||||
assert probe < far_future_ns - 1_000_000_000, (
|
|
||||||
"probe must prune node_modules/ — a far-future mtime in the pruned subtree "
|
|
||||||
f"must not appear in the probe value (probe={probe}, far_future_ns={far_future_ns})"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class TestReturnSignature:
|
class TestReturnSignature:
|
||||||
|
|||||||
Reference in new issue
Block a user