atdd 0.4.0__py3-none-any.whl → 0.4.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- atdd/coach/validators/shared_fixtures.py +24 -16
- atdd/coder/conventions/commons.convention.yaml +1 -1
- atdd/coder/conventions/tests/test_component_urn_naming.py +6 -2
- atdd/coder/validators/test_commons_structure.py +6 -1
- atdd/coder/validators/test_dto_testing_patterns.py +6 -1
- atdd/coder/validators/test_green_cross_stack_layers.py +6 -2
- atdd/coder/validators/test_green_layer_dependencies.py +6 -2
- atdd/coder/validators/test_green_python_layer_structure.py +5 -1
- atdd/coder/validators/test_green_supabase_layer_structure.py +6 -2
- atdd/coder/validators/test_python_architecture.py +6 -1
- atdd/coder/validators/test_train_infrastructure.py +6 -1
- atdd/coder/validators/test_train_urns.py +6 -1
- atdd/coder/validators/test_typescript_architecture.py +7 -2
- atdd/coder/validators/test_wagon_boundaries.py +6 -1
- atdd/planner/validators/test_wmbt_vocabulary.py +6 -1
- atdd/tester/validators/test_acceptance_urn_filename_mapping.py +6 -2
- atdd/tester/validators/test_acceptance_urn_separator.py +6 -2
- atdd/tester/validators/test_contract_schema_compliance.py +6 -1
- atdd/tester/validators/test_dual_ac_reference.py +3 -1
- atdd/tester/validators/test_isolation.py +6 -1
- atdd/tester/validators/test_red_layer_validation.py +5 -1
- atdd/tester/validators/test_red_python_layer_structure.py +5 -1
- atdd/tester/validators/test_red_supabase_layer_structure.py +5 -1
- atdd/tester/validators/test_telemetry_structure.py +6 -1
- {atdd-0.4.0.dist-info → atdd-0.4.1.dist-info}/METADATA +1 -1
- {atdd-0.4.0.dist-info → atdd-0.4.1.dist-info}/RECORD +30 -30
- {atdd-0.4.0.dist-info → atdd-0.4.1.dist-info}/WHEEL +0 -0
- {atdd-0.4.0.dist-info → atdd-0.4.1.dist-info}/entry_points.txt +0 -0
- {atdd-0.4.0.dist-info → atdd-0.4.1.dist-info}/licenses/LICENSE +0 -0
- {atdd-0.4.0.dist-info → atdd-0.4.1.dist-info}/top_level.txt +0 -0
|
@@ -3,8 +3,13 @@ Shared fixtures for platform tests.
|
|
|
3
3
|
|
|
4
4
|
Provides schemas, file discovery, and validation utilities for E2E platform tests.
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
Path resolution strategy:
|
|
7
|
+
- REPO_ROOT (via find_repo_root()) = consumer repository artifacts (plan/, contracts/, etc.)
|
|
8
|
+
- ATDD_PKG_DIR (via atdd.__file__) = installed package resources (schemas, conventions)
|
|
9
|
+
|
|
10
|
+
Validators should use:
|
|
11
|
+
- REPO_ROOT for consumer repo artifacts (plan/, contracts/, telemetry/, web/, python/)
|
|
12
|
+
- ATDD_PKG_DIR for package-bundled resources (schemas, conventions, templates)
|
|
8
13
|
"""
|
|
9
14
|
import json
|
|
10
15
|
import yaml
|
|
@@ -12,53 +17,56 @@ from pathlib import Path
|
|
|
12
17
|
from typing import Dict, Any, List, Tuple
|
|
13
18
|
import pytest
|
|
14
19
|
|
|
20
|
+
import atdd
|
|
15
21
|
from atdd.coach.utils.repo import find_repo_root
|
|
16
22
|
|
|
17
23
|
|
|
18
|
-
# Path constants
|
|
19
|
-
#
|
|
24
|
+
# Path constants
|
|
25
|
+
# Consumer repo artifacts - use find_repo_root() to locate consumer repository
|
|
20
26
|
REPO_ROOT = find_repo_root()
|
|
21
27
|
PLAN_DIR = REPO_ROOT / "plan"
|
|
22
|
-
ATDD_DIR = REPO_ROOT / "atdd"
|
|
23
28
|
CONTRACTS_DIR = REPO_ROOT / "contracts"
|
|
24
29
|
TELEMETRY_DIR = REPO_ROOT / "telemetry"
|
|
25
30
|
WEB_DIR = REPO_ROOT / "web"
|
|
26
31
|
|
|
32
|
+
# Package resources - use atdd.__file__ to locate installed package
|
|
33
|
+
ATDD_PKG_DIR = Path(atdd.__file__).resolve().parent
|
|
34
|
+
|
|
27
35
|
|
|
28
|
-
# Schema fixtures - Planner schemas
|
|
36
|
+
# Schema fixtures - Planner schemas (loaded from installed package)
|
|
29
37
|
@pytest.fixture(scope="module")
|
|
30
38
|
def wagon_schema() -> Dict[str, Any]:
|
|
31
39
|
"""Load wagon.schema.json for validation."""
|
|
32
|
-
with open(
|
|
40
|
+
with open(ATDD_PKG_DIR / "planner/schemas/wagon.schema.json") as f:
|
|
33
41
|
return json.load(f)
|
|
34
42
|
|
|
35
43
|
|
|
36
44
|
@pytest.fixture(scope="module")
|
|
37
45
|
def wmbt_schema() -> Dict[str, Any]:
|
|
38
46
|
"""Load wmbt.schema.json for validation."""
|
|
39
|
-
with open(
|
|
47
|
+
with open(ATDD_PKG_DIR / "planner/schemas/wmbt.schema.json") as f:
|
|
40
48
|
return json.load(f)
|
|
41
49
|
|
|
42
50
|
|
|
43
51
|
@pytest.fixture(scope="module")
|
|
44
52
|
def feature_schema() -> Dict[str, Any]:
|
|
45
53
|
"""Load feature.schema.json for validation."""
|
|
46
|
-
with open(
|
|
54
|
+
with open(ATDD_PKG_DIR / "planner/schemas/feature.schema.json") as f:
|
|
47
55
|
return json.load(f)
|
|
48
56
|
|
|
49
57
|
|
|
50
58
|
@pytest.fixture(scope="module")
|
|
51
59
|
def acceptance_schema() -> Dict[str, Any]:
|
|
52
60
|
"""Load acceptance.schema.json for validation."""
|
|
53
|
-
with open(
|
|
61
|
+
with open(ATDD_PKG_DIR / "planner/schemas/acceptance.schema.json") as f:
|
|
54
62
|
return json.load(f)
|
|
55
63
|
|
|
56
64
|
|
|
57
|
-
# Schema fixtures - Tester schemas
|
|
65
|
+
# Schema fixtures - Tester schemas (loaded from installed package)
|
|
58
66
|
@pytest.fixture(scope="module")
|
|
59
67
|
def telemetry_signal_schema() -> Dict[str, Any]:
|
|
60
68
|
"""Load telemetry_signal.schema.json for validation."""
|
|
61
|
-
schema_path =
|
|
69
|
+
schema_path = ATDD_PKG_DIR / "tester/schemas/telemetry_signal.schema.json"
|
|
62
70
|
if schema_path.exists():
|
|
63
71
|
with open(schema_path) as f:
|
|
64
72
|
return json.load(f)
|
|
@@ -68,20 +76,20 @@ def telemetry_signal_schema() -> Dict[str, Any]:
|
|
|
68
76
|
@pytest.fixture(scope="module")
|
|
69
77
|
def telemetry_tracking_manifest_schema() -> Dict[str, Any]:
|
|
70
78
|
"""Load telemetry_tracking_manifest.schema.json for validation."""
|
|
71
|
-
schema_path =
|
|
79
|
+
schema_path = ATDD_PKG_DIR / "tester/schemas/telemetry_tracking_manifest.schema.json"
|
|
72
80
|
if schema_path.exists():
|
|
73
81
|
with open(schema_path) as f:
|
|
74
82
|
return json.load(f)
|
|
75
83
|
return {}
|
|
76
84
|
|
|
77
85
|
|
|
78
|
-
# Generic schema loader
|
|
86
|
+
# Generic schema loader (loads from installed package)
|
|
79
87
|
@pytest.fixture(scope="module")
|
|
80
88
|
def load_schema():
|
|
81
89
|
"""Factory fixture to load any schema by path."""
|
|
82
90
|
def _loader(agent: str, schema_name: str) -> Dict[str, Any]:
|
|
83
91
|
"""
|
|
84
|
-
Load a schema from atdd
|
|
92
|
+
Load a schema from the installed atdd package.
|
|
85
93
|
|
|
86
94
|
Args:
|
|
87
95
|
agent: Agent name (planner, tester, coach, coder)
|
|
@@ -90,7 +98,7 @@ def load_schema():
|
|
|
90
98
|
Returns:
|
|
91
99
|
Parsed JSON schema
|
|
92
100
|
"""
|
|
93
|
-
schema_path =
|
|
101
|
+
schema_path = ATDD_PKG_DIR / agent / "schemas" / schema_name
|
|
94
102
|
if not schema_path.exists():
|
|
95
103
|
raise FileNotFoundError(f"Schema not found: {schema_path}")
|
|
96
104
|
with open(schema_path) as f:
|
|
@@ -7,11 +7,15 @@ import pytest
|
|
|
7
7
|
import yaml
|
|
8
8
|
from pathlib import Path
|
|
9
9
|
|
|
10
|
+
import atdd
|
|
10
11
|
from atdd.coach.utils.repo import find_repo_root
|
|
11
12
|
|
|
12
13
|
REPO_ROOT = find_repo_root()
|
|
13
|
-
|
|
14
|
-
|
|
14
|
+
|
|
15
|
+
# Package resources (conventions, schemas)
|
|
16
|
+
ATDD_PKG_DIR = Path(atdd.__file__).resolve().parent
|
|
17
|
+
COMPONENT_NAMING_PATH = ATDD_PKG_DIR / "coder/conventions/component-naming.convention.yaml"
|
|
18
|
+
GREEN_CONV_PATH = ATDD_PKG_DIR / "coder/conventions/green.convention.yaml"
|
|
15
19
|
|
|
16
20
|
|
|
17
21
|
def test_coder_convention_uses_colon_hierarchy():
|
|
@@ -18,14 +18,19 @@ import re
|
|
|
18
18
|
from pathlib import Path
|
|
19
19
|
from typing import List
|
|
20
20
|
|
|
21
|
+
import atdd
|
|
21
22
|
from atdd.coach.utils.repo import find_repo_root
|
|
22
23
|
|
|
23
24
|
|
|
25
|
+
# Consumer repo artifacts
|
|
24
26
|
REPO_ROOT = find_repo_root()
|
|
25
27
|
PYTHON_COMMONS = REPO_ROOT / "python" / "commons"
|
|
26
28
|
WEB_COMMONS = REPO_ROOT / "web" / "src" / "commons"
|
|
27
29
|
WEB_SRC = REPO_ROOT / "web" / "src"
|
|
28
30
|
|
|
31
|
+
# Package resources (conventions, schemas)
|
|
32
|
+
ATDD_PKG_DIR = Path(atdd.__file__).resolve().parent
|
|
33
|
+
|
|
29
34
|
|
|
30
35
|
# ============================================================================
|
|
31
36
|
# CROSS-STACK VALIDATION
|
|
@@ -459,7 +464,7 @@ def test_structural_patterns_documented():
|
|
|
459
464
|
|
|
460
465
|
Validates: Convention documents intentional divergence
|
|
461
466
|
"""
|
|
462
|
-
convention_file =
|
|
467
|
+
convention_file = ATDD_PKG_DIR / "coder" / "conventions" / "commons.convention.yaml"
|
|
463
468
|
|
|
464
469
|
if not convention_file.exists():
|
|
465
470
|
pytest.fail(
|
|
@@ -25,13 +25,18 @@ import ast
|
|
|
25
25
|
from pathlib import Path
|
|
26
26
|
from typing import List, Tuple, Set
|
|
27
27
|
|
|
28
|
+
import atdd
|
|
28
29
|
from atdd.coach.utils.repo import find_repo_root
|
|
29
30
|
|
|
30
31
|
|
|
31
32
|
# Path constants
|
|
33
|
+
# Consumer repo artifacts
|
|
32
34
|
REPO_ROOT = find_repo_root()
|
|
33
35
|
PYTHON_DIR = REPO_ROOT / "python"
|
|
34
|
-
|
|
36
|
+
|
|
37
|
+
# Package resources (conventions, schemas)
|
|
38
|
+
ATDD_PKG_DIR = Path(atdd.__file__).resolve().parent
|
|
39
|
+
DTO_CONVENTION = ATDD_PKG_DIR / "coder" / "conventions" / "dto.convention.yaml"
|
|
35
40
|
|
|
36
41
|
|
|
37
42
|
def find_integration_test_files() -> List[Path]:
|
|
@@ -8,12 +8,16 @@ import pytest
|
|
|
8
8
|
from pathlib import Path
|
|
9
9
|
import yaml
|
|
10
10
|
|
|
11
|
+
import atdd
|
|
11
12
|
from atdd.coach.utils.repo import find_repo_root
|
|
12
13
|
|
|
13
14
|
|
|
14
15
|
REPO_ROOT = find_repo_root()
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
|
|
17
|
+
# Package resources (conventions, schemas)
|
|
18
|
+
ATDD_PKG_DIR = Path(atdd.__file__).resolve().parent
|
|
19
|
+
BACKEND_CONVENTION = ATDD_PKG_DIR / "coder" / "conventions" / "backend.convention.yaml"
|
|
20
|
+
FRONTEND_CONVENTION = ATDD_PKG_DIR / "coder" / "conventions" / "frontend.convention.yaml"
|
|
17
21
|
|
|
18
22
|
|
|
19
23
|
@pytest.mark.coder
|
|
@@ -8,12 +8,16 @@ import pytest
|
|
|
8
8
|
from pathlib import Path
|
|
9
9
|
import yaml
|
|
10
10
|
|
|
11
|
+
import atdd
|
|
11
12
|
from atdd.coach.utils.repo import find_repo_root
|
|
12
13
|
|
|
13
14
|
|
|
14
15
|
REPO_ROOT = find_repo_root()
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
|
|
17
|
+
# Package resources (conventions, schemas)
|
|
18
|
+
ATDD_PKG_DIR = Path(atdd.__file__).resolve().parent
|
|
19
|
+
BACKEND_CONVENTION = ATDD_PKG_DIR / "coder" / "conventions" / "backend.convention.yaml"
|
|
20
|
+
FRONTEND_CONVENTION = ATDD_PKG_DIR / "coder" / "conventions" / "frontend.convention.yaml"
|
|
17
21
|
|
|
18
22
|
|
|
19
23
|
@pytest.mark.coder
|
|
@@ -8,11 +8,15 @@ import pytest
|
|
|
8
8
|
from pathlib import Path
|
|
9
9
|
import yaml
|
|
10
10
|
|
|
11
|
+
import atdd
|
|
11
12
|
from atdd.coach.utils.repo import find_repo_root
|
|
12
13
|
|
|
13
14
|
|
|
14
15
|
REPO_ROOT = find_repo_root()
|
|
15
|
-
|
|
16
|
+
|
|
17
|
+
# Package resources (conventions, schemas)
|
|
18
|
+
ATDD_PKG_DIR = Path(atdd.__file__).resolve().parent
|
|
19
|
+
BACKEND_CONVENTION = ATDD_PKG_DIR / "coder" / "conventions" / "backend.convention.yaml"
|
|
16
20
|
|
|
17
21
|
|
|
18
22
|
@pytest.mark.coder
|
|
@@ -8,11 +8,15 @@ import pytest
|
|
|
8
8
|
from pathlib import Path
|
|
9
9
|
import yaml
|
|
10
10
|
|
|
11
|
+
import atdd
|
|
11
12
|
from atdd.coach.utils.repo import find_repo_root
|
|
12
13
|
|
|
13
14
|
REPO_ROOT = find_repo_root()
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
|
|
16
|
+
# Package resources (conventions, schemas)
|
|
17
|
+
ATDD_PKG_DIR = Path(atdd.__file__).resolve().parent
|
|
18
|
+
BACKEND_CONVENTION = ATDD_PKG_DIR / "coder" / "conventions" / "backend.convention.yaml"
|
|
19
|
+
FRONTEND_CONVENTION = ATDD_PKG_DIR / "coder" / "conventions" / "frontend.convention.yaml"
|
|
16
20
|
|
|
17
21
|
|
|
18
22
|
@pytest.mark.coder
|
|
@@ -22,13 +22,18 @@ import yaml
|
|
|
22
22
|
from pathlib import Path
|
|
23
23
|
from typing import Dict, List, Tuple
|
|
24
24
|
|
|
25
|
+
import atdd
|
|
25
26
|
from atdd.coach.utils.repo import find_repo_root
|
|
26
27
|
|
|
27
28
|
|
|
28
29
|
# Path constants
|
|
30
|
+
# Consumer repo artifacts
|
|
29
31
|
REPO_ROOT = find_repo_root()
|
|
30
32
|
PYTHON_DIR = REPO_ROOT / "python"
|
|
31
|
-
|
|
33
|
+
|
|
34
|
+
# Package resources (conventions, schemas)
|
|
35
|
+
ATDD_PKG_DIR = Path(atdd.__file__).resolve().parent
|
|
36
|
+
BACKEND_CONVENTION = ATDD_PKG_DIR / "coder" / "conventions" / "backend.convention.yaml"
|
|
32
37
|
|
|
33
38
|
|
|
34
39
|
def determine_layer_from_path(file_path: Path) -> str:
|
|
@@ -24,17 +24,22 @@ import re
|
|
|
24
24
|
from pathlib import Path
|
|
25
25
|
from typing import List, Dict, Set, Tuple
|
|
26
26
|
|
|
27
|
+
import atdd
|
|
27
28
|
from atdd.coach.utils.repo import find_repo_root
|
|
28
29
|
|
|
29
30
|
|
|
30
31
|
# Path constants
|
|
32
|
+
# Consumer repo artifacts
|
|
31
33
|
REPO_ROOT = find_repo_root()
|
|
32
34
|
TRAINS_DIR = REPO_ROOT / "python" / "trains"
|
|
33
35
|
WAGONS_DIR = REPO_ROOT / "python"
|
|
34
36
|
GAME_PY = REPO_ROOT / "python" / "game.py"
|
|
35
37
|
E2E_CONFTEST = REPO_ROOT / "e2e" / "conftest.py"
|
|
36
38
|
CONTRACT_VALIDATOR = REPO_ROOT / "e2e" / "shared" / "fixtures" / "contract_validator.py"
|
|
37
|
-
|
|
39
|
+
|
|
40
|
+
# Package resources (conventions, schemas)
|
|
41
|
+
ATDD_PKG_DIR = Path(atdd.__file__).resolve().parent
|
|
42
|
+
TRAIN_CONVENTION = ATDD_PKG_DIR / "coder" / "conventions" / "train.convention.yaml"
|
|
38
43
|
|
|
39
44
|
|
|
40
45
|
def find_wagons() -> List[Path]:
|
|
@@ -21,14 +21,19 @@ import yaml
|
|
|
21
21
|
from pathlib import Path
|
|
22
22
|
from typing import List, Dict, Set, Tuple
|
|
23
23
|
|
|
24
|
+
import atdd
|
|
24
25
|
from atdd.coach.utils.repo import find_repo_root
|
|
25
26
|
|
|
26
27
|
|
|
27
28
|
# Path constants
|
|
29
|
+
# Consumer repo artifacts
|
|
28
30
|
REPO_ROOT = find_repo_root()
|
|
29
31
|
PYTHON_SHARED_DIR = REPO_ROOT / "python" / "shared"
|
|
30
32
|
TRAINS_DIR = REPO_ROOT / "plan" / "_trains"
|
|
31
|
-
|
|
33
|
+
|
|
34
|
+
# Package resources (conventions, schemas)
|
|
35
|
+
ATDD_PKG_DIR = Path(atdd.__file__).resolve().parent
|
|
36
|
+
TRAIN_CONVENTION = ATDD_PKG_DIR / "planner" / "conventions" / "train.convention.yaml"
|
|
32
37
|
|
|
33
38
|
|
|
34
39
|
def find_theme_orchestrators() -> List[Path]:
|
|
@@ -23,10 +23,12 @@ import yaml
|
|
|
23
23
|
from pathlib import Path
|
|
24
24
|
from typing import Dict, List, Set, Tuple
|
|
25
25
|
|
|
26
|
+
import atdd
|
|
26
27
|
from atdd.coach.utils.repo import find_repo_root
|
|
27
28
|
|
|
28
29
|
|
|
29
30
|
# Path constants
|
|
31
|
+
# Consumer repo artifacts
|
|
30
32
|
REPO_ROOT = find_repo_root()
|
|
31
33
|
TS_DIRS = [
|
|
32
34
|
REPO_ROOT / "supabase" / "functions",
|
|
@@ -34,8 +36,11 @@ TS_DIRS = [
|
|
|
34
36
|
REPO_ROOT / "frontend",
|
|
35
37
|
REPO_ROOT / "web",
|
|
36
38
|
]
|
|
37
|
-
|
|
38
|
-
|
|
39
|
+
|
|
40
|
+
# Package resources (conventions, schemas)
|
|
41
|
+
ATDD_PKG_DIR = Path(atdd.__file__).resolve().parent
|
|
42
|
+
FRONTEND_CONVENTION = ATDD_PKG_DIR / "coder" / "conventions" / "frontend.convention.yaml"
|
|
43
|
+
BACKEND_CONVENTION = ATDD_PKG_DIR / "coder" / "conventions" / "backend.convention.yaml"
|
|
39
44
|
|
|
40
45
|
|
|
41
46
|
def load_conventions() -> Tuple[Dict, Dict]:
|
|
@@ -27,13 +27,18 @@ from pathlib import Path
|
|
|
27
27
|
from typing import List, Tuple, Set
|
|
28
28
|
import ast
|
|
29
29
|
|
|
30
|
+
import atdd
|
|
30
31
|
from atdd.coach.utils.repo import find_repo_root
|
|
31
32
|
|
|
32
33
|
# Path constants
|
|
34
|
+
# Consumer repo artifacts
|
|
33
35
|
REPO_ROOT = find_repo_root()
|
|
34
36
|
PYTHON_DIR = REPO_ROOT / "python"
|
|
35
37
|
PYPROJECT_TOML = PYTHON_DIR / "pyproject.toml"
|
|
36
|
-
|
|
38
|
+
|
|
39
|
+
# Package resources (conventions, schemas)
|
|
40
|
+
ATDD_PKG_DIR = Path(atdd.__file__).resolve().parent
|
|
41
|
+
BOUNDARIES_CONVENTION = ATDD_PKG_DIR / "coder" / "conventions" / "boundaries.convention.yaml"
|
|
37
42
|
|
|
38
43
|
|
|
39
44
|
def find_test_files() -> List[Path]:
|
|
@@ -23,12 +23,17 @@ import re
|
|
|
23
23
|
from pathlib import Path
|
|
24
24
|
from typing import Dict, List, Tuple, Set, Optional
|
|
25
25
|
|
|
26
|
+
import atdd
|
|
26
27
|
from atdd.coach.utils.repo import find_repo_root
|
|
27
28
|
|
|
28
29
|
# Path constants
|
|
30
|
+
# Consumer repo artifacts
|
|
29
31
|
REPO_ROOT = find_repo_root()
|
|
30
32
|
PLAN_DIR = REPO_ROOT / "plan"
|
|
31
|
-
|
|
33
|
+
|
|
34
|
+
# Package resources (conventions, schemas)
|
|
35
|
+
ATDD_PKG_DIR = Path(atdd.__file__).resolve().parent
|
|
36
|
+
WMBT_CONVENTION = ATDD_PKG_DIR / "planner" / "conventions" / "wmbt.convention.yaml"
|
|
32
37
|
|
|
33
38
|
|
|
34
39
|
# Authorized vocabulary from convention
|
|
@@ -13,11 +13,15 @@ import re
|
|
|
13
13
|
from pathlib import Path
|
|
14
14
|
import pytest
|
|
15
15
|
|
|
16
|
+
import atdd
|
|
16
17
|
from atdd.coach.utils.repo import find_repo_root
|
|
17
18
|
|
|
18
19
|
|
|
19
20
|
REPO_ROOT = find_repo_root()
|
|
20
21
|
|
|
22
|
+
# Package resources
|
|
23
|
+
ATDD_PKG_DIR = Path(atdd.__file__).resolve().parent
|
|
24
|
+
|
|
21
25
|
|
|
22
26
|
# SPEC-TESTER-CONV-0069: Dart URN to filename mapping
|
|
23
27
|
def test_dart_urn_to_filename():
|
|
@@ -299,8 +303,8 @@ def test_python_files_match_convention():
|
|
|
299
303
|
|
|
300
304
|
test_dirs = [
|
|
301
305
|
REPO_ROOT / "tests",
|
|
302
|
-
|
|
303
|
-
|
|
306
|
+
ATDD_PKG_DIR / "coach" / "validators",
|
|
307
|
+
ATDD_PKG_DIR / "tester" / "validators",
|
|
304
308
|
]
|
|
305
309
|
|
|
306
310
|
violations = []
|
|
@@ -24,12 +24,16 @@ import yaml
|
|
|
24
24
|
import re
|
|
25
25
|
from pathlib import Path
|
|
26
26
|
|
|
27
|
+
import atdd
|
|
27
28
|
from atdd.coach.utils.repo import find_repo_root
|
|
28
29
|
|
|
29
30
|
# Path constants
|
|
30
31
|
REPO_ROOT = find_repo_root()
|
|
31
|
-
|
|
32
|
-
|
|
32
|
+
|
|
33
|
+
# Package resources (conventions, schemas)
|
|
34
|
+
ATDD_PKG_DIR = Path(atdd.__file__).resolve().parent
|
|
35
|
+
CONVENTIONS_DIR = ATDD_PKG_DIR / "planner" / "conventions"
|
|
36
|
+
SCHEMAS_DIR = ATDD_PKG_DIR / "planner" / "schemas"
|
|
33
37
|
|
|
34
38
|
|
|
35
39
|
# SPEC-COACH-UTILS-0282
|
|
@@ -12,13 +12,18 @@ import re
|
|
|
12
12
|
from pathlib import Path
|
|
13
13
|
from jsonschema import validate, ValidationError, Draft7Validator
|
|
14
14
|
|
|
15
|
+
import atdd
|
|
15
16
|
from atdd.coach.utils.repo import find_repo_root
|
|
16
17
|
|
|
17
18
|
# Path constants
|
|
19
|
+
# Consumer repo artifacts
|
|
18
20
|
REPO_ROOT = find_repo_root()
|
|
19
21
|
CONTRACTS_DIR = REPO_ROOT / "contracts"
|
|
20
22
|
PLAN_DIR = REPO_ROOT / "plan"
|
|
21
|
-
|
|
23
|
+
|
|
24
|
+
# Package resources (conventions, schemas)
|
|
25
|
+
ATDD_PKG_DIR = Path(atdd.__file__).resolve().parent
|
|
26
|
+
META_SCHEMA_PATH = ATDD_PKG_DIR / "tester" / "schemas" / "contract.schema.json"
|
|
22
27
|
|
|
23
28
|
|
|
24
29
|
@pytest.fixture
|
|
@@ -15,8 +15,10 @@ import pytest
|
|
|
15
15
|
import re
|
|
16
16
|
from pathlib import Path
|
|
17
17
|
|
|
18
|
+
from atdd.coach.utils.repo import find_repo_root
|
|
19
|
+
|
|
18
20
|
|
|
19
|
-
# Path constants
|
|
21
|
+
# Path constants - consumer repo artifacts
|
|
20
22
|
REPO_ROOT = find_repo_root()
|
|
21
23
|
PYTHON_DIR = REPO_ROOT / "python"
|
|
22
24
|
|
|
@@ -17,15 +17,20 @@ import ast
|
|
|
17
17
|
from pathlib import Path
|
|
18
18
|
from typing import List, Set, Tuple
|
|
19
19
|
|
|
20
|
+
import atdd
|
|
20
21
|
from atdd.coach.utils.repo import find_repo_root
|
|
21
22
|
|
|
22
23
|
|
|
23
24
|
# Path constants
|
|
24
25
|
REPO_ROOT = find_repo_root()
|
|
26
|
+
|
|
27
|
+
# Package resources
|
|
28
|
+
ATDD_PKG_DIR = Path(atdd.__file__).resolve().parent
|
|
29
|
+
|
|
25
30
|
TEST_DIRS = [
|
|
26
31
|
REPO_ROOT / "test",
|
|
27
32
|
REPO_ROOT / "tests",
|
|
28
|
-
|
|
33
|
+
ATDD_PKG_DIR, # Validators in installed package
|
|
29
34
|
]
|
|
30
35
|
|
|
31
36
|
|
|
@@ -8,10 +8,14 @@ import pytest
|
|
|
8
8
|
from pathlib import Path
|
|
9
9
|
import yaml
|
|
10
10
|
|
|
11
|
+
import atdd
|
|
11
12
|
from atdd.coach.utils.repo import find_repo_root
|
|
12
13
|
|
|
13
14
|
REPO_ROOT = find_repo_root()
|
|
14
|
-
|
|
15
|
+
|
|
16
|
+
# Package resources (conventions, schemas)
|
|
17
|
+
ATDD_PKG_DIR = Path(atdd.__file__).resolve().parent
|
|
18
|
+
RED_CONVENTION = ATDD_PKG_DIR / "tester" / "conventions" / "red.convention.yaml"
|
|
15
19
|
|
|
16
20
|
|
|
17
21
|
@pytest.mark.tester
|
|
@@ -8,10 +8,14 @@ import pytest
|
|
|
8
8
|
from pathlib import Path
|
|
9
9
|
import yaml
|
|
10
10
|
|
|
11
|
+
import atdd
|
|
11
12
|
from atdd.coach.utils.repo import find_repo_root
|
|
12
13
|
|
|
13
14
|
REPO_ROOT = find_repo_root()
|
|
14
|
-
|
|
15
|
+
|
|
16
|
+
# Package resources (conventions, schemas)
|
|
17
|
+
ATDD_PKG_DIR = Path(atdd.__file__).resolve().parent
|
|
18
|
+
RED_CONVENTION = ATDD_PKG_DIR / "tester" / "conventions" / "red.convention.yaml"
|
|
15
19
|
|
|
16
20
|
|
|
17
21
|
@pytest.mark.tester
|
|
@@ -8,11 +8,15 @@ import pytest
|
|
|
8
8
|
from pathlib import Path
|
|
9
9
|
import yaml
|
|
10
10
|
|
|
11
|
+
import atdd
|
|
11
12
|
from atdd.coach.utils.repo import find_repo_root
|
|
12
13
|
|
|
13
14
|
|
|
14
15
|
REPO_ROOT = find_repo_root()
|
|
15
|
-
|
|
16
|
+
|
|
17
|
+
# Package resources (conventions, schemas)
|
|
18
|
+
ATDD_PKG_DIR = Path(atdd.__file__).resolve().parent
|
|
19
|
+
RED_CONVENTION = ATDD_PKG_DIR / "tester" / "conventions" / "red.convention.yaml"
|
|
16
20
|
|
|
17
21
|
|
|
18
22
|
@pytest.mark.tester
|
|
@@ -10,14 +10,19 @@ import re
|
|
|
10
10
|
import json
|
|
11
11
|
from jsonschema import validate, ValidationError
|
|
12
12
|
|
|
13
|
+
import atdd
|
|
13
14
|
from atdd.coach.utils.repo import find_repo_root
|
|
14
15
|
|
|
15
16
|
# Path constants
|
|
17
|
+
# Consumer repo artifacts
|
|
16
18
|
REPO_ROOT = find_repo_root()
|
|
17
19
|
TELEMETRY_DIR = REPO_ROOT / "telemetry"
|
|
18
20
|
CONTRACTS_DIR = REPO_ROOT / "contracts"
|
|
19
21
|
PLAN_DIR = REPO_ROOT / "plan"
|
|
20
|
-
|
|
22
|
+
|
|
23
|
+
# Package resources (conventions, schemas)
|
|
24
|
+
ATDD_PKG_DIR = Path(atdd.__file__).resolve().parent
|
|
25
|
+
META_SCHEMA_PATH = ATDD_PKG_DIR / "tester" / "schemas" / "telemetry.schema.json"
|
|
21
26
|
|
|
22
27
|
|
|
23
28
|
@pytest.fixture
|
|
@@ -34,7 +34,7 @@ atdd/coach/utils/repo.py,sha256=0kiF5WpVTen0nO14u5T0RflznZhgGco2i9CwKobOh38,3757
|
|
|
34
34
|
atdd/coach/utils/graph/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
35
35
|
atdd/coach/utils/graph/urn.py,sha256=O2AHIB_CmmMUvXzyejc_oFReNW_rOcw7m4qaqSYcnNQ,33558
|
|
36
36
|
atdd/coach/validators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
37
|
-
atdd/coach/validators/shared_fixtures.py,sha256=
|
|
37
|
+
atdd/coach/validators/shared_fixtures.py,sha256=tdqAb4675P-oOCL08mvSCG9XpmwMCjL9iSq1W5U7-wk,12558
|
|
38
38
|
atdd/coach/validators/test_enrich_wagon_registry.py,sha256=WeTwYJqoNY6mEYc-QAvQo7YVagSOjaNKxB6Q6dpWqIM,6561
|
|
39
39
|
atdd/coach/validators/test_registry.py,sha256=ffN70yA_1xxL3R8gdpGbY2M8dQXyuajIZhBZ-ylNiNs,17845
|
|
40
40
|
atdd/coach/validators/test_session_validation.py,sha256=0VszXtFwRTO04b5CxDPO3klk0VfiqlpdbNpshjMn-qU,39079
|
|
@@ -45,7 +45,7 @@ atdd/coder/__init__.py,sha256=Rmi5S7Pzx7qsRe5MC66GduNGmkssWWnElkVvvNHFDgU,45
|
|
|
45
45
|
atdd/coder/conventions/adapter.recipe.yaml,sha256=Ss9OJJ-FEP8TU_D-N6X_1nO-Karb-Cg5OopL9_gLjMI,3039
|
|
46
46
|
atdd/coder/conventions/backend.convention.yaml,sha256=fWUUph6iGeItRBrL-Hhma2e7dLSwzI4NgpAkb7985Wg,16600
|
|
47
47
|
atdd/coder/conventions/boundaries.convention.yaml,sha256=FTv9V-67g-CM2SvopQuA8sMXufiIDRJT4CAIzKcDPYc,25513
|
|
48
|
-
atdd/coder/conventions/commons.convention.yaml,sha256=
|
|
48
|
+
atdd/coder/conventions/commons.convention.yaml,sha256=zwfO4dYNrFjy4MLZ9RLK3Yd7gotTWYdFfXMPp3EfU0A,17309
|
|
49
49
|
atdd/coder/conventions/complexity.recipe.yaml,sha256=fjVnsb0kGGstTDKTaeYO_1XJ3408wE0lheAxf02Hm3s,3636
|
|
50
50
|
atdd/coder/conventions/component-naming.convention.yaml,sha256=w1LKJM7lhmpFqBCpRAvx03Z_Ugujd3P6rFfmp5xbhg0,7444
|
|
51
51
|
atdd/coder/conventions/design.convention.yaml,sha256=HfuuAmAnFa2cALsxcdDp1DOTJFZ05PAw2Vi9ycXGC0k,11484
|
|
@@ -63,31 +63,31 @@ atdd/coder/conventions/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NM
|
|
|
63
63
|
atdd/coder/conventions/tests/test_adapter_recipe.py,sha256=293CU9rj7z6bj_1Wh02VhVCslaHfK-KeMJFgKgK7cvM,9370
|
|
64
64
|
atdd/coder/conventions/tests/test_complexity_recipe.py,sha256=xz-SbIjPRLRdiydRhX1rkHg1aszWyxjo5bJVa5gGohU,9123
|
|
65
65
|
atdd/coder/conventions/tests/test_component_taxonomy.py,sha256=ur_vVh_4G30cYcUEF_Lo0-F9Szno3qNHMuOQyxj7pSI,14037
|
|
66
|
-
atdd/coder/conventions/tests/test_component_urn_naming.py,sha256=
|
|
66
|
+
atdd/coder/conventions/tests/test_component_urn_naming.py,sha256=lYrHzBtSpjfVS0Dd57_2Xvnvf2qky_diXPv2eJ1Ys-Q,6471
|
|
67
67
|
atdd/coder/conventions/tests/test_thinness_recipe.py,sha256=cO2BpGnlN62rwje43e-zoh1mADqrtQadPeqRARM9_YE,8702
|
|
68
68
|
atdd/coder/schemas/design_system.schema.json,sha256=KgHxYa3DeNZdXwn17WniTPN-T-ALdHJpk96YZv4WapU,10101
|
|
69
69
|
atdd/coder/validators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
70
|
-
atdd/coder/validators/test_commons_structure.py,sha256=
|
|
70
|
+
atdd/coder/validators/test_commons_structure.py,sha256=vxNa0-BIOr30Nb4WcmzDS5aJVE9ozJpGeplSdzjalMs,15577
|
|
71
71
|
atdd/coder/validators/test_complexity.py,sha256=jWDLOUfs66L4vrzWJ41qJTA_AVOeZzXKW94SqMz80I4,12310
|
|
72
72
|
atdd/coder/validators/test_cross_language_consistency.py,sha256=FTHJByvA_zJmJyK8VAK9h0EZaKafP6FmQn9wuoySlks,13204
|
|
73
73
|
atdd/coder/validators/test_design_system_compliance.py,sha256=UA9UwzbayiXnIgYwcQmb4Z7wbntN2oCxOc7eaAeFK6U,14541
|
|
74
|
-
atdd/coder/validators/test_dto_testing_patterns.py,sha256=
|
|
75
|
-
atdd/coder/validators/test_green_cross_stack_layers.py,sha256=
|
|
76
|
-
atdd/coder/validators/test_green_layer_dependencies.py,sha256=
|
|
77
|
-
atdd/coder/validators/test_green_python_layer_structure.py,sha256=
|
|
78
|
-
atdd/coder/validators/test_green_supabase_layer_structure.py,sha256=
|
|
74
|
+
atdd/coder/validators/test_dto_testing_patterns.py,sha256=usD2xA14mvYIa_piUF9-PLmjKXcpBXqrz5Z6LRo83Nk,9557
|
|
75
|
+
atdd/coder/validators/test_green_cross_stack_layers.py,sha256=xBgAL4bWLZl0acG60lU2MNI7gYiRWsi8gAsNbIQo1eQ,6918
|
|
76
|
+
atdd/coder/validators/test_green_layer_dependencies.py,sha256=8TWuTD3RrDBqp9LUCSU1gnRzT5c_PG2MD74_k9XtxyI,5626
|
|
77
|
+
atdd/coder/validators/test_green_python_layer_structure.py,sha256=WXo1VA5-WprgtAQgC8ekhuIRJR47b_qgTYTjPn7svms,4389
|
|
78
|
+
atdd/coder/validators/test_green_supabase_layer_structure.py,sha256=cLj85acLX6Knewk9AWbiJDwEzoaE-NBNollyJCvRUD0,4371
|
|
79
79
|
atdd/coder/validators/test_import_boundaries.py,sha256=3kzVMKIwZU9FcS0YLU8gsuHSDRlRr2rU3UPgoraV2FU,11811
|
|
80
80
|
atdd/coder/validators/test_init_file_urns.py,sha256=uDJ2MgfJNFcjzoIKItn73n9V08m3ZBkt1SAZgHWdXPs,17914
|
|
81
81
|
atdd/coder/validators/test_preact_layer_boundaries.py,sha256=rabXY9gif3b8QH9_Kz5Pu6FZSvDpfQKDm_SKjdpLD44,7766
|
|
82
82
|
atdd/coder/validators/test_presentation_convention.py,sha256=ceAtg_sTEJiPkHVfnwBEDTzTH44nKQIiukIEvZz8r18,10037
|
|
83
|
-
atdd/coder/validators/test_python_architecture.py,sha256=
|
|
83
|
+
atdd/coder/validators/test_python_architecture.py,sha256=USnSujKVu7_BC2ij-pTSHyiFi4iBMBemIPR7oXYQ3B4,25243
|
|
84
84
|
atdd/coder/validators/test_quality_metrics.py,sha256=vLWPfL0x9sfCvKXO4uECW61RnJTsjbmuEUjCsBcUmuA,12551
|
|
85
85
|
atdd/coder/validators/test_station_master_pattern.py,sha256=biYwXAftpXdhIhDjn2RrVTdEdvTWPW5ddm2gQubJBXQ,9280
|
|
86
|
-
atdd/coder/validators/test_train_infrastructure.py,sha256=
|
|
87
|
-
atdd/coder/validators/test_train_urns.py,sha256=
|
|
88
|
-
atdd/coder/validators/test_typescript_architecture.py,sha256=
|
|
86
|
+
atdd/coder/validators/test_train_infrastructure.py,sha256=e9oyWjGR7YoEQZPza8xHzLHN-wrqiJTbNc9Y0BLlGLw,16201
|
|
87
|
+
atdd/coder/validators/test_train_urns.py,sha256=TvSNHbvG8SAtAPaS2K8mMgzE8GbJtrTaF4iEgkJEIIk,10099
|
|
88
|
+
atdd/coder/validators/test_typescript_architecture.py,sha256=gi76IwlqX_MpWsr8CXWH7v16KAoud-1OY92iuN-0BpU,22176
|
|
89
89
|
atdd/coder/validators/test_usecase_structure.py,sha256=nAeqmLWRCstXT8fDuxqk6iVcH4TLHjTvlaGDpanD9sM,14077
|
|
90
|
-
atdd/coder/validators/test_wagon_boundaries.py,sha256=
|
|
90
|
+
atdd/coder/validators/test_wagon_boundaries.py,sha256=SgqGfQKR91qf7fkPl7Ye1RKQ5CcqoyukAdWK3xqV3Ns,20690
|
|
91
91
|
atdd/planner/__init__.py,sha256=ZXzKPNqP_JgEeFnwwUAKfIwz2e1i2gwrmz1SyC65sl4,47
|
|
92
92
|
atdd/planner/conventions/acceptance.convention.yaml,sha256=q_1hm-uJ2Sbh6VqGHQ543L9NTnOuS2UGWT-n9uAdfmM,21918
|
|
93
93
|
atdd/planner/conventions/appendix.convention.yaml,sha256=wuv9mnSZ-L1vUp2xx0OmyOsYurApitsmO_MilLVGcOc,9394
|
|
@@ -117,7 +117,7 @@ atdd/planner/validators/test_plan_wagons.py,sha256=l4jbHf9Kg-Fy8Gz5O8BO7PDQKbbeL
|
|
|
117
117
|
atdd/planner/validators/test_train_validation.py,sha256=13j5hx_bcBhf3xFeqCJGo79y8lN9xpNEXXRzjV17tHQ,16972
|
|
118
118
|
atdd/planner/validators/test_wagon_urn_chain.py,sha256=KY_0vrj6CoiQJ80WbqfCGCYbup13cVssaxbNO0eVf74,26697
|
|
119
119
|
atdd/planner/validators/test_wmbt_consistency.py,sha256=jdfu4xWEozzBGwplKDXxuDQNLBDxB_AC96NHLkyHqQ8,10875
|
|
120
|
-
atdd/planner/validators/test_wmbt_vocabulary.py,sha256=
|
|
120
|
+
atdd/planner/validators/test_wmbt_vocabulary.py,sha256=PCivTzV7ntlZBa-PVzpBwEiKqLumsEZXfj1r2xl9usM,18803
|
|
121
121
|
atdd/tester/__init__.py,sha256=Y08g-sPqui6fz9ziRFyH5EFt_cGN9-_qrgBLXTy0tSs,46
|
|
122
122
|
atdd/tester/conventions/artifact.convention.yaml,sha256=6OJHM3scQeVOrSM3DVJH_D6DTGJ8Mdd7gQhf5hGoRvQ,8434
|
|
123
123
|
atdd/tester/conventions/contract.convention.yaml,sha256=oByzcBZivn-xUHbMg0OeebHeNx5-gwQJwfUDZ_OUgxA,34832
|
|
@@ -161,29 +161,29 @@ atdd/tester/validators/conftest.py,sha256=0kQ1VXYWQArkWMB97eTBuviTmEYx69bHhMt4rl
|
|
|
161
161
|
atdd/tester/validators/coverage_gap_report.py,sha256=rNztpPLYl8zf61xVGE-C_cPJ6sOWc3Ji2R0lUQUDjw0,10183
|
|
162
162
|
atdd/tester/validators/fix_dual_ac_references.py,sha256=AlkM7Gj0Bg0Mr2x6tPmzD8pg_6aZygOmsRuQ0xQh4SY,4906
|
|
163
163
|
atdd/tester/validators/remove_duplicate_lines.py,sha256=BdU33gziYYlJQPRXm69XWg-K2zz7J4QZ8BNXQYR7Yp8,2525
|
|
164
|
-
atdd/tester/validators/test_acceptance_urn_filename_mapping.py,sha256=
|
|
165
|
-
atdd/tester/validators/test_acceptance_urn_separator.py,sha256=
|
|
164
|
+
atdd/tester/validators/test_acceptance_urn_filename_mapping.py,sha256=7nANiDY7tbqNuUCmRvuzbIKJx1lQIt2fEcjGSkILOGE,12927
|
|
165
|
+
atdd/tester/validators/test_acceptance_urn_separator.py,sha256=bzRk-CtWtfy87Tf8i0z5LovnA0TqNzztAzmud5HGE50,6974
|
|
166
166
|
atdd/tester/validators/test_artifact_naming_category.py,sha256=V7AOamSUIbpl6bO_Qj3h_46vc2hsh6OVPCMco1H7zTc,12541
|
|
167
|
-
atdd/tester/validators/test_contract_schema_compliance.py,sha256=
|
|
167
|
+
atdd/tester/validators/test_contract_schema_compliance.py,sha256=9kWmg1Kb1GJZpt8n3L8DEPZGh9_vaMZ86n3_MAtQW1g,26262
|
|
168
168
|
atdd/tester/validators/test_contract_security.py,sha256=fKNaevmbSAoGyOKBhPnHw5xSGXptG0ciS0__qtO9Qac,19541
|
|
169
169
|
atdd/tester/validators/test_contracts_structure.py,sha256=RRmIzcbwwBtZDVio558TQt-SBjiVOgb79j8aFR4FRbw,9815
|
|
170
170
|
atdd/tester/validators/test_coverage_adequacy.py,sha256=gIaz1LJahSGSn-t-42hTeJochVBJFA4kE7Z_LBg7dtk,27057
|
|
171
|
-
atdd/tester/validators/test_dual_ac_reference.py,sha256=
|
|
171
|
+
atdd/tester/validators/test_dual_ac_reference.py,sha256=LDhIqXyVxgWVCgj7FneDTLt6DrZe0lAtCtAKqFlAPck,8995
|
|
172
172
|
atdd/tester/validators/test_fixture_validity.py,sha256=Fp4AWwhvZlos1ik_d7NbP030Qq-klZLnCmc12ylptqs,12101
|
|
173
|
-
atdd/tester/validators/test_isolation.py,sha256=
|
|
173
|
+
atdd/tester/validators/test_isolation.py,sha256=NYrqJcVDZH0SDRWHlPdazG6THT4w3XEvz_xn4PBxU4E,16489
|
|
174
174
|
atdd/tester/validators/test_migration_coverage.py,sha256=LOx0L9KLH4gVisNHXhxKrzHLgCgj4PVZxeZ-2gg-SQk,7344
|
|
175
175
|
atdd/tester/validators/test_migration_criteria.py,sha256=YDGvWjkVSjUVVNv4RJWLdy4iLoG1EXzmm_ficD0Gt3Q,7896
|
|
176
176
|
atdd/tester/validators/test_migration_generation.py,sha256=wpTmuxvM13OfSgC-3SJBdtB2XaPjBYyD-jXVYWi7Z9Q,4064
|
|
177
177
|
atdd/tester/validators/test_python_test_naming.py,sha256=4dXlHYTeTt34r5AjXIeGbZuMy6_Eh73kq1ksmQhI5qo,14413
|
|
178
|
-
atdd/tester/validators/test_red_layer_validation.py,sha256=
|
|
179
|
-
atdd/tester/validators/test_red_python_layer_structure.py,sha256=
|
|
180
|
-
atdd/tester/validators/test_red_supabase_layer_structure.py,sha256=
|
|
181
|
-
atdd/tester/validators/test_telemetry_structure.py,sha256=
|
|
178
|
+
atdd/tester/validators/test_red_layer_validation.py,sha256=otqohLMayIK4nPPF2fl-O2dFvVmbmfFNT7HugbGZ3lA,3597
|
|
179
|
+
atdd/tester/validators/test_red_python_layer_structure.py,sha256=5p6mTieijO7MpZGuVODYm9acKkMJ1XeMYDZ3gxPGW0k,3467
|
|
180
|
+
atdd/tester/validators/test_red_supabase_layer_structure.py,sha256=zbUjsMWSJE1MPnLQx6Hk2lvMgNmMVUKq8a0rwKnp7Lo,3836
|
|
181
|
+
atdd/tester/validators/test_telemetry_structure.py,sha256=uU5frZnxSlOn60iHyqhe7Pg9b0wrOV7N14D4S6Aw6TE,22626
|
|
182
182
|
atdd/tester/validators/test_typescript_test_naming.py,sha256=E-TyGv_GVlTfsbyuxrtv9sOWSZS_QcpH6rrJFbWoeeU,11280
|
|
183
183
|
atdd/tester/validators/test_typescript_test_structure.py,sha256=eV89SD1RaKtchBZupqhnJmaruoROosf3LwB4Fwe4UJI,2612
|
|
184
|
-
atdd-0.4.
|
|
185
|
-
atdd-0.4.
|
|
186
|
-
atdd-0.4.
|
|
187
|
-
atdd-0.4.
|
|
188
|
-
atdd-0.4.
|
|
189
|
-
atdd-0.4.
|
|
184
|
+
atdd-0.4.1.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
185
|
+
atdd-0.4.1.dist-info/METADATA,sha256=iTk5GkFTyh-znp87feeNCmw7Sfy302zPdf12mHMy_24,8013
|
|
186
|
+
atdd-0.4.1.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
187
|
+
atdd-0.4.1.dist-info/entry_points.txt,sha256=-C3yrA1WQQfN3iuGmSzPapA5cKVBEYU5Q1HUffSJTbY,38
|
|
188
|
+
atdd-0.4.1.dist-info/top_level.txt,sha256=VKkf6Uiyrm4RS6ULCGM-v8AzYN8K2yg8SMqwJLoO-xs,5
|
|
189
|
+
atdd-0.4.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|