atdd 0.4.1__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.
@@ -1555,6 +1555,6 @@ def main(repo_root: Path):
1555
1555
 
1556
1556
 
1557
1557
  if __name__ == "__main__":
1558
- from pathlib import Path
1559
- repo_root = Path(__file__).resolve().parents[4]
1558
+ from atdd.coach.utils.repo import find_repo_root
1559
+ repo_root = find_repo_root()
1560
1560
  main(repo_root)
@@ -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
- from pathlib import Path
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 = Path(__file__).resolve().parents[4]
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 = Path(__file__).resolve().parents[4]
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 = Path(__file__).resolve().parents[4]
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 = Path(__file__).resolve().parents[4]
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 = Path(__file__).resolve().parents[4]
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 = Path(__file__).resolve().parents[4]
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 = Path(__file__).resolve().parents[4]
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 = Path(__file__).resolve().parents[4]
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
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: atdd
3
- Version: 0.4.1
3
+ Version: 0.4.2
4
4
  Summary: ATDD Platform - Acceptance Test Driven Development toolkit
5
5
  License: MIT
6
6
  Requires-Python: >=3.10
@@ -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=r1QWg841eK6bS4vEbYEviylDCpFkInUVMTsf5h4ArrQ,58344
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
@@ -110,11 +110,11 @@ 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=MlRMuM_eo3h8Q1pOdcvxyRNqRie9xPiYamOeofwiKaM,9505
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=13j5hx_bcBhf3xFeqCJGo79y8lN9xpNEXXRzjV17tHQ,16972
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
120
  atdd/planner/validators/test_wmbt_vocabulary.py,sha256=PCivTzV7ntlZBa-PVzpBwEiKqLumsEZXfj1r2xl9usM,18803
@@ -181,9 +181,9 @@ atdd/tester/validators/test_red_supabase_layer_structure.py,sha256=zbUjsMWSJE1MP
181
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.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,,
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