Private
Public Access
feat(tests): add check_test_toml_paths.py audit script
This commit is contained in:
+3
-3
@@ -25,7 +25,7 @@ separate_tool_calls_panel = true
|
|||||||
bg_shader_enabled = false
|
bg_shader_enabled = false
|
||||||
crt_filter_enabled = false
|
crt_filter_enabled = false
|
||||||
separate_task_dag = false
|
separate_task_dag = false
|
||||||
separate_usage_analytics = false
|
separate_usage_analytics = true
|
||||||
separate_tier1 = false
|
separate_tier1 = false
|
||||||
separate_tier2 = false
|
separate_tier2 = false
|
||||||
separate_tier3 = false
|
separate_tier3 = false
|
||||||
@@ -38,7 +38,7 @@ separate_external_tools = false
|
|||||||
"AI Settings" = true
|
"AI Settings" = true
|
||||||
"MMA Dashboard" = false
|
"MMA Dashboard" = false
|
||||||
"Task DAG" = false
|
"Task DAG" = false
|
||||||
"Usage Analytics" = false
|
"Usage Analytics" = true
|
||||||
"Tier 1" = false
|
"Tier 1" = false
|
||||||
"Tier 2" = false
|
"Tier 2" = false
|
||||||
"Tier 3" = false
|
"Tier 3" = false
|
||||||
@@ -65,7 +65,7 @@ Diagnostics = false
|
|||||||
palette = "10x Dark"
|
palette = "10x Dark"
|
||||||
font_path = "C:/projects/manual_slop/assets/fonts/MapleMono-Regular.ttf"
|
font_path = "C:/projects/manual_slop/assets/fonts/MapleMono-Regular.ttf"
|
||||||
font_size = 20.0
|
font_size = 20.0
|
||||||
scale = 1.2000000476837158
|
scale = 1.0
|
||||||
transparency = 0.46000000834465027
|
transparency = 0.46000000834465027
|
||||||
child_transparency = 1.0
|
child_transparency = 1.0
|
||||||
|
|
||||||
|
|||||||
+26
-26
@@ -44,20 +44,20 @@ Collapsed=0
|
|||||||
DockId=0x00000010,0
|
DockId=0x00000010,0
|
||||||
|
|
||||||
[Window][Message]
|
[Window][Message]
|
||||||
Pos=506,37
|
Pos=1816,32
|
||||||
Size=1510,1403
|
Size=2024,2128
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000006,0
|
DockId=0x00000006,0
|
||||||
|
|
||||||
[Window][Response]
|
[Window][Response]
|
||||||
Pos=0,37
|
Pos=0,32
|
||||||
Size=504,1403
|
Size=1814,2128
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000010,5
|
DockId=0x00000010,5
|
||||||
|
|
||||||
[Window][Tool Calls]
|
[Window][Tool Calls]
|
||||||
Pos=506,37
|
Pos=1816,32
|
||||||
Size=1510,1403
|
Size=2024,2128
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000006,3
|
DockId=0x00000006,3
|
||||||
|
|
||||||
@@ -76,8 +76,8 @@ Collapsed=0
|
|||||||
DockId=0xAFC85805,2
|
DockId=0xAFC85805,2
|
||||||
|
|
||||||
[Window][Theme]
|
[Window][Theme]
|
||||||
Pos=0,37
|
Pos=0,32
|
||||||
Size=504,1403
|
Size=1814,2128
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000010,0
|
DockId=0x00000010,0
|
||||||
|
|
||||||
@@ -105,26 +105,26 @@ Collapsed=0
|
|||||||
DockId=0x0000000D,0
|
DockId=0x0000000D,0
|
||||||
|
|
||||||
[Window][Discussion Hub]
|
[Window][Discussion Hub]
|
||||||
Pos=506,37
|
Pos=1816,32
|
||||||
Size=1510,1403
|
Size=2024,2128
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000006,1
|
DockId=0x00000006,1
|
||||||
|
|
||||||
[Window][Operations Hub]
|
[Window][Operations Hub]
|
||||||
Pos=0,37
|
Pos=0,32
|
||||||
Size=504,1403
|
Size=1814,2128
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000010,4
|
DockId=0x00000010,4
|
||||||
|
|
||||||
[Window][Files & Media]
|
[Window][Files & Media]
|
||||||
Pos=0,37
|
Pos=0,32
|
||||||
Size=504,1403
|
Size=1814,2128
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000010,3
|
DockId=0x00000010,3
|
||||||
|
|
||||||
[Window][AI Settings]
|
[Window][AI Settings]
|
||||||
Pos=0,37
|
Pos=0,32
|
||||||
Size=504,1403
|
Size=1814,2128
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000010,2
|
DockId=0x00000010,2
|
||||||
|
|
||||||
@@ -140,8 +140,8 @@ Collapsed=0
|
|||||||
DockId=0x00000006,2
|
DockId=0x00000006,2
|
||||||
|
|
||||||
[Window][Log Management]
|
[Window][Log Management]
|
||||||
Pos=506,37
|
Pos=1816,32
|
||||||
Size=1510,1403
|
Size=2024,2128
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000006,2
|
DockId=0x00000006,2
|
||||||
|
|
||||||
@@ -332,8 +332,8 @@ Size=967,499
|
|||||||
Collapsed=0
|
Collapsed=0
|
||||||
|
|
||||||
[Window][Usage Analytics]
|
[Window][Usage Analytics]
|
||||||
Pos=605,71
|
Pos=1264,22
|
||||||
Size=369,459
|
Size=517,560
|
||||||
Collapsed=1
|
Collapsed=1
|
||||||
|
|
||||||
[Window][Tool Preset Manager]
|
[Window][Tool Preset Manager]
|
||||||
@@ -409,8 +409,8 @@ Collapsed=0
|
|||||||
DockId=0x00000006,1
|
DockId=0x00000006,1
|
||||||
|
|
||||||
[Window][Project Settings]
|
[Window][Project Settings]
|
||||||
Pos=0,37
|
Pos=0,32
|
||||||
Size=504,1403
|
Size=1814,2128
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000010,1
|
DockId=0x00000010,1
|
||||||
|
|
||||||
@@ -693,13 +693,13 @@ Column 1 Weight=1.0000
|
|||||||
DockNode ID=0x00000008 Pos=3125,170 Size=593,1157 Split=Y
|
DockNode ID=0x00000008 Pos=3125,170 Size=593,1157 Split=Y
|
||||||
DockNode ID=0x00000009 Parent=0x00000008 SizeRef=1029,147 Selected=0x0469CA7A
|
DockNode ID=0x00000009 Parent=0x00000008 SizeRef=1029,147 Selected=0x0469CA7A
|
||||||
DockNode ID=0x0000000A Parent=0x00000008 SizeRef=1029,145 Selected=0xDF822E02
|
DockNode ID=0x0000000A Parent=0x00000008 SizeRef=1029,145 Selected=0xDF822E02
|
||||||
DockSpace ID=0xAFC85805 Window=0x079D3A04 Pos=0,37 Size=2016,1403 Split=X
|
DockSpace ID=0xAFC85805 Window=0x079D3A04 Pos=0,32 Size=3840,2128 Split=X
|
||||||
DockNode ID=0x00000003 Parent=0xAFC85805 SizeRef=2357,1183 Split=X
|
DockNode ID=0x00000003 Parent=0xAFC85805 SizeRef=2357,1183 Split=X
|
||||||
DockNode ID=0x0000000B Parent=0x00000003 SizeRef=404,1186 Split=X Selected=0xF4139CA2
|
DockNode ID=0x0000000B Parent=0x00000003 SizeRef=404,1186 Split=X Selected=0xF4139CA2
|
||||||
DockNode ID=0x00000005 Parent=0x0000000B SizeRef=1320,1681 Split=Y Selected=0x3F1379AF
|
DockNode ID=0x00000005 Parent=0x0000000B SizeRef=1814,1681 Split=Y Selected=0x3F1379AF
|
||||||
DockNode ID=0x00000010 Parent=0x00000005 SizeRef=983,1140 CentralNode=1 Selected=0x0D5A5273
|
DockNode ID=0x00000010 Parent=0x00000005 SizeRef=983,1140 CentralNode=1 Selected=0x7BD57D6A
|
||||||
DockNode ID=0x00000011 Parent=0x00000005 SizeRef=983,184 Selected=0x432BAE4E
|
DockNode ID=0x00000011 Parent=0x00000005 SizeRef=983,184 Selected=0x432BAE4E
|
||||||
DockNode ID=0x00000006 Parent=0x0000000B SizeRef=1510,1681 Selected=0x2C0206CE
|
DockNode ID=0x00000006 Parent=0x0000000B SizeRef=2024,1681 Selected=0x66CFB56E
|
||||||
DockNode ID=0x0000000D Parent=0x00000003 SizeRef=435,1186 Selected=0x363E93D6
|
DockNode ID=0x0000000D Parent=0x00000003 SizeRef=435,1186 Selected=0x363E93D6
|
||||||
DockNode ID=0x00000004 Parent=0xAFC85805 SizeRef=488,1183 Selected=0x3AEC3498
|
DockNode ID=0x00000004 Parent=0xAFC85805 SizeRef=488,1183 Selected=0x3AEC3498
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,63 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Detect tests that read/write real TOML files. Used as a CI gate.
|
||||||
|
|
||||||
|
Run from repo root: python scripts/check_test_toml_paths.py
|
||||||
|
Exits 0 if all tests use sandboxed paths, 1 otherwise.
|
||||||
|
"""
|
||||||
|
from __future__ import annotations
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
TOML_BASENAMES = {
|
||||||
|
"manual_slop", "config", "credentials",
|
||||||
|
"presets", "personas", "tool_presets",
|
||||||
|
"workspace_profiles", "tool_presets",
|
||||||
|
}
|
||||||
|
|
||||||
|
PATTERNS = [
|
||||||
|
re.compile(rf'Path\(["\'](?:{"|".join(TOML_BASENAMES)})\.toml["\']'),
|
||||||
|
re.compile(rf'open\(["\'](?:{"|".join(TOML_BASENAMES)})\.toml["\']'),
|
||||||
|
re.compile(rf'["\']\.{{1,2}}/(?:{"|".join(TOML_BASENAMES)})\.toml["\']'),
|
||||||
|
re.compile(rf'Path\(["\']\.\./(?:{"|".join(TOML_BASENAMES)})\.toml["\']'),
|
||||||
|
]
|
||||||
|
|
||||||
|
EXCLUDE_DIRS = {"artifacts", "logs", "__pycache__", "snapshots"}
|
||||||
|
|
||||||
|
|
||||||
|
def find_violations(tests_dir: Path) -> list[tuple[Path, int, str]]:
|
||||||
|
violations = []
|
||||||
|
for test_file in tests_dir.rglob("test_*.py"):
|
||||||
|
if any(excluded in test_file.parts for excluded in EXCLUDE_DIRS):
|
||||||
|
continue
|
||||||
|
try:
|
||||||
|
content = test_file.read_text(encoding="utf-8")
|
||||||
|
except (OSError, UnicodeDecodeError):
|
||||||
|
continue
|
||||||
|
for lineno, line in enumerate(content.splitlines(), start=1):
|
||||||
|
for pattern in PATTERNS:
|
||||||
|
if pattern.search(line):
|
||||||
|
violations.append((test_file, lineno, line.strip()))
|
||||||
|
break
|
||||||
|
return violations
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> int:
|
||||||
|
repo_root = Path(__file__).resolve().parent.parent
|
||||||
|
tests_dir = repo_root / "tests"
|
||||||
|
if not tests_dir.exists():
|
||||||
|
print(f"Tests dir not found: {tests_dir}", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
violations = find_violations(tests_dir)
|
||||||
|
if not violations:
|
||||||
|
print("OK: No tests reference real TOML files.")
|
||||||
|
return 0
|
||||||
|
print(f"FAIL: {len(violations)} test(s) reference real TOML files:")
|
||||||
|
for path, lineno, line in violations:
|
||||||
|
rel = path.relative_to(repo_root)
|
||||||
|
print(f" {rel}:{lineno}: {line}")
|
||||||
|
return 1
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
sys.exit(main())
|
||||||
Reference in New Issue
Block a user