atdd 0.4.0__py3-none-any.whl → 0.4.2__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/commands/registry.py +2 -2
- 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_plan_cross_refs.py +4 -2
- atdd/planner/validators/test_train_validation.py +10 -8
- 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.2.dist-info}/METADATA +1 -1
- {atdd-0.4.0.dist-info → atdd-0.4.2.dist-info}/RECORD +33 -33
- {atdd-0.4.0.dist-info → atdd-0.4.2.dist-info}/WHEEL +0 -0
- {atdd-0.4.0.dist-info → atdd-0.4.2.dist-info}/entry_points.txt +0 -0
- {atdd-0.4.0.dist-info → atdd-0.4.2.dist-info}/licenses/LICENSE +0 -0
- {atdd-0.4.0.dist-info → atdd-0.4.2.dist-info}/top_level.txt +0 -0
atdd/coach/commands/registry.py
CHANGED
|
@@ -1555,6 +1555,6 @@ def main(repo_root: Path):
|
|
|
1555
1555
|
|
|
1556
1556
|
|
|
1557
1557
|
if __name__ == "__main__":
|
|
1558
|
-
from
|
|
1559
|
-
repo_root =
|
|
1558
|
+
from atdd.coach.utils.repo import find_repo_root
|
|
1559
|
+
repo_root = find_repo_root()
|
|
1560
1560
|
main(repo_root)
|
|
@@ -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]:
|
|
@@ -5,8 +5,11 @@ Validates that cross-references between wagons, trains, and artifacts are cohere
|
|
|
5
5
|
Tests ensure that consume references point to valid produce artifacts.
|
|
6
6
|
"""
|
|
7
7
|
import pytest
|
|
8
|
+
from pathlib import Path
|
|
8
9
|
from typing import Dict, Set, List, Tuple, Any
|
|
9
10
|
|
|
11
|
+
from atdd.coach.utils.repo import find_repo_root
|
|
12
|
+
|
|
10
13
|
|
|
11
14
|
@pytest.mark.platform
|
|
12
15
|
@pytest.mark.e2e
|
|
@@ -117,8 +120,7 @@ def test_trains_reference_valid_wagons(trains_registry, wagon_manifests):
|
|
|
117
120
|
# Load individual train file if path exists
|
|
118
121
|
if train_path:
|
|
119
122
|
import yaml
|
|
120
|
-
|
|
121
|
-
train_file = Path(__file__).resolve().parents[4] / train_path
|
|
123
|
+
train_file = find_repo_root() / train_path
|
|
122
124
|
|
|
123
125
|
if train_file.exists():
|
|
124
126
|
with open(train_file) as f:
|
|
@@ -13,6 +13,8 @@ import yaml
|
|
|
13
13
|
from pathlib import Path
|
|
14
14
|
from typing import Dict, List, Set, Tuple
|
|
15
15
|
|
|
16
|
+
from atdd.coach.utils.repo import find_repo_root
|
|
17
|
+
|
|
16
18
|
|
|
17
19
|
@pytest.mark.platform
|
|
18
20
|
def test_train_ids_follow_numbering_convention(trains_registry):
|
|
@@ -91,7 +93,7 @@ def test_train_files_exist_for_registry_entries(trains_registry):
|
|
|
91
93
|
When: Checking for train files
|
|
92
94
|
Then: Each train has a file at plan/_trains/{train_id}.yaml
|
|
93
95
|
"""
|
|
94
|
-
repo_root =
|
|
96
|
+
repo_root = find_repo_root()
|
|
95
97
|
trains_dir = repo_root / "plan" / "_trains"
|
|
96
98
|
|
|
97
99
|
missing_files = []
|
|
@@ -121,7 +123,7 @@ def test_all_train_files_registered(trains_registry):
|
|
|
121
123
|
When: Checking registry
|
|
122
124
|
Then: Each file is registered in plan/_trains.yaml
|
|
123
125
|
"""
|
|
124
|
-
repo_root =
|
|
126
|
+
repo_root = find_repo_root()
|
|
125
127
|
trains_dir = repo_root / "plan" / "_trains"
|
|
126
128
|
|
|
127
129
|
# Get all registered train IDs
|
|
@@ -153,7 +155,7 @@ def test_train_id_matches_filename(trains_registry):
|
|
|
153
155
|
When: Loading train data
|
|
154
156
|
Then: train_id field matches filename (without .yaml)
|
|
155
157
|
"""
|
|
156
|
-
repo_root =
|
|
158
|
+
repo_root = find_repo_root()
|
|
157
159
|
trains_dir = repo_root / "plan" / "_trains"
|
|
158
160
|
|
|
159
161
|
mismatches = []
|
|
@@ -183,7 +185,7 @@ def test_train_wagons_exist(trains_registry, wagon_manifests):
|
|
|
183
185
|
When: Checking wagon references
|
|
184
186
|
Then: Each wagon exists in registry or has a manifest in plan/*
|
|
185
187
|
"""
|
|
186
|
-
repo_root =
|
|
188
|
+
repo_root = find_repo_root()
|
|
187
189
|
trains_dir = repo_root / "plan" / "_trains"
|
|
188
190
|
|
|
189
191
|
# Build wagon name set from manifests
|
|
@@ -231,7 +233,7 @@ def test_train_dependencies_are_valid(trains_registry):
|
|
|
231
233
|
When: Checking dependency references
|
|
232
234
|
Then: Each dependency points to a valid train_id
|
|
233
235
|
"""
|
|
234
|
-
repo_root =
|
|
236
|
+
repo_root = find_repo_root()
|
|
235
237
|
trains_dir = repo_root / "plan" / "_trains"
|
|
236
238
|
|
|
237
239
|
# Get all valid train IDs
|
|
@@ -287,7 +289,7 @@ def test_train_artifacts_follow_naming_convention(trains_registry):
|
|
|
287
289
|
"""
|
|
288
290
|
import re
|
|
289
291
|
|
|
290
|
-
repo_root =
|
|
292
|
+
repo_root = find_repo_root()
|
|
291
293
|
trains_dir = repo_root / "plan" / "_trains"
|
|
292
294
|
|
|
293
295
|
pattern = re.compile(r"^[a-z][a-z0-9-]*(?::[a-z][a-z0-9-]*)+(?:\.[a-z][a-z0-9-]*)*$")
|
|
@@ -355,7 +357,7 @@ def test_train_artifacts_exist_in_wagons(trains_registry, wagon_manifests):
|
|
|
355
357
|
Then: Each artifact should be in wagon produce/consume lists
|
|
356
358
|
Note: Soft check - external/system artifacts are allowed
|
|
357
359
|
"""
|
|
358
|
-
repo_root =
|
|
360
|
+
repo_root = find_repo_root()
|
|
359
361
|
trains_dir = repo_root / "plan" / "_trains"
|
|
360
362
|
|
|
361
363
|
# Build artifact index from wagons
|
|
@@ -488,7 +490,7 @@ def test_trains_match_schema(trains_registry):
|
|
|
488
490
|
from jsonschema import Draft7Validator
|
|
489
491
|
import json
|
|
490
492
|
|
|
491
|
-
repo_root =
|
|
493
|
+
repo_root = find_repo_root()
|
|
492
494
|
schema_path = repo_root / ".claude" / "schemas" / "planner" / "train.schema.json"
|
|
493
495
|
trains_dir = repo_root / "plan" / "_trains"
|
|
494
496
|
|
|
@@ -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
|
|
@@ -14,7 +14,7 @@ atdd/coach/commands/initializer.py,sha256=s7NnITF4c6xGlN6ZJVjyv4a4jxGMjK9OPG1C-O
|
|
|
14
14
|
atdd/coach/commands/interface.py,sha256=FwBrJpWkfSL9n4n0HT_EC-alseXgU0bweKD4TImyHN0,40483
|
|
15
15
|
atdd/coach/commands/inventory.py,sha256=qU42MnkXt1JSBh5GU7pPSKmCO27Zfga7XwMT19RquJE,20969
|
|
16
16
|
atdd/coach/commands/migration.py,sha256=wRxU7emvvHqWt1MvXKkNTkPBjp0sU9g8F5Uy5yV2YfI,8177
|
|
17
|
-
atdd/coach/commands/registry.py,sha256=
|
|
17
|
+
atdd/coach/commands/registry.py,sha256=76-Pe3_cN483JR1pXUdDIE5WSZjWtVV0Jl8dRtRw_9Y,58349
|
|
18
18
|
atdd/coach/commands/session.py,sha256=MhuWXd5TR6bB3w0t8vANeZx3L476qwLT6EUQMwg-wQA,14268
|
|
19
19
|
atdd/coach/commands/sync.py,sha256=4HNzg8AVaePDwhyBlQcywvNVZDP5NIW8TBsEPbqmJuQ,12545
|
|
20
20
|
atdd/coach/commands/test_interface.py,sha256=a7ut2Hhk0PnQ5LfJZkoQwfkfkVuB5OHA4QBwOS0-jcg,16870
|
|
@@ -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
|
|
@@ -110,14 +110,14 @@ atdd/planner/schemas/wmbt.schema.json,sha256=KU_D6r0kQTJod-XHQT5QiiHcUUPJrLgg3aP
|
|
|
110
110
|
atdd/planner/validators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
111
111
|
atdd/planner/validators/conftest.py,sha256=CVr3m9mv4xc8G6azcdbZ1VArVvLZw2Utqt2EIOyYdbQ,155
|
|
112
112
|
atdd/planner/validators/test_draft_wagon_registry.py,sha256=Bt4xTjgKddEnnxNOMh8jWhvb3aqRaWGBd227Vv3rWz0,13798
|
|
113
|
-
atdd/planner/validators/test_plan_cross_refs.py,sha256=
|
|
113
|
+
atdd/planner/validators/test_plan_cross_refs.py,sha256=kxlq1uZ2u4mn3r8wHJjXVJsB8nmzwsvSzOlRapJ9pBY,9520
|
|
114
114
|
atdd/planner/validators/test_plan_uniqueness.py,sha256=rlC5khAoBkgpTZJdyHi1JbDUj14v1JiGBFv2iV_AP_Y,7735
|
|
115
115
|
atdd/planner/validators/test_plan_urn_resolution.py,sha256=GoxFiRjOfp69FUmIyKGnsGgpYalOz3qfp6qjyCkga44,9440
|
|
116
116
|
atdd/planner/validators/test_plan_wagons.py,sha256=l4jbHf9Kg-Fy8Gz5O8BO7PDQKbbeLN0uctoErPK_YKI,7357
|
|
117
|
-
atdd/planner/validators/test_train_validation.py,sha256=
|
|
117
|
+
atdd/planner/validators/test_train_validation.py,sha256=KsAMxtuyipHse02x91k4rLWUxRiHW29sYBWZ6KNbfJ4,16870
|
|
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.2.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
185
|
+
atdd-0.4.2.dist-info/METADATA,sha256=u367DyQRsEduvaTko1XLLX7sfVQZSmvC8Gmrr5tRSVE,8013
|
|
186
|
+
atdd-0.4.2.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
187
|
+
atdd-0.4.2.dist-info/entry_points.txt,sha256=-C3yrA1WQQfN3iuGmSzPapA5cKVBEYU5Q1HUffSJTbY,38
|
|
188
|
+
atdd-0.4.2.dist-info/top_level.txt,sha256=VKkf6Uiyrm4RS6ULCGM-v8AzYN8K2yg8SMqwJLoO-xs,5
|
|
189
|
+
atdd-0.4.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|