atdd 0.3.2__py3-none-any.whl → 0.4.0__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/cli.py +229 -78
- atdd/coach/commands/add_persistence_metadata.py +3 -1
- atdd/coach/commands/infer_governance_status.py +3 -1
- atdd/coach/commands/initializer.py +10 -0
- atdd/coach/commands/interface.py +3 -1
- atdd/coach/commands/inventory.py +2 -2
- atdd/coach/commands/migration.py +11 -6
- atdd/coach/commands/sync.py +7 -0
- atdd/coach/commands/test_runner.py +66 -27
- atdd/coach/commands/traceability.py +3 -1
- atdd/coach/conventions/session.convention.yaml +26 -26
- atdd/coach/templates/ATDD.md +15 -15
- atdd/coach/templates/SESSION-TEMPLATE.md +12 -12
- atdd/coach/utils/repo.py +24 -8
- atdd/coach/validators/shared_fixtures.py +8 -3
- atdd/coach/validators/test_session_validation.py +4 -4
- atdd/coder/conventions/tests/test_component_taxonomy.py +4 -3
- atdd/coder/conventions/tests/test_component_urn_naming.py +3 -1
- atdd/coder/validators/test_commons_structure.py +3 -1
- atdd/coder/validators/test_complexity.py +3 -1
- atdd/coder/validators/test_cross_language_consistency.py +3 -1
- atdd/coder/validators/test_design_system_compliance.py +3 -1
- atdd/coder/validators/test_dto_testing_patterns.py +4 -2
- atdd/coder/validators/test_green_cross_stack_layers.py +3 -1
- atdd/coder/validators/test_green_layer_dependencies.py +3 -1
- atdd/coder/validators/test_green_python_layer_structure.py +3 -1
- atdd/coder/validators/test_green_supabase_layer_structure.py +2 -1
- atdd/coder/validators/test_import_boundaries.py +3 -1
- atdd/coder/validators/test_init_file_urns.py +3 -1
- atdd/coder/validators/test_preact_layer_boundaries.py +3 -1
- atdd/coder/validators/test_presentation_convention.py +3 -1
- atdd/coder/validators/test_python_architecture.py +3 -1
- atdd/coder/validators/test_quality_metrics.py +2 -1
- atdd/coder/validators/test_station_master_pattern.py +4 -2
- atdd/coder/validators/test_train_infrastructure.py +3 -1
- atdd/coder/validators/test_train_urns.py +3 -1
- atdd/coder/validators/test_typescript_architecture.py +3 -1
- atdd/coder/validators/test_usecase_structure.py +3 -1
- atdd/coder/validators/test_wagon_boundaries.py +2 -1
- atdd/planner/validators/test_plan_urn_resolution.py +3 -1
- atdd/planner/validators/test_wagon_urn_chain.py +3 -1
- atdd/planner/validators/test_wmbt_consistency.py +3 -1
- atdd/planner/validators/test_wmbt_vocabulary.py +2 -1
- atdd/tester/conventions/contract.convention.yaml +1 -1
- atdd/tester/conventions/migration.convention.yaml +5 -5
- atdd/tester/validators/cleanup_duplicate_headers.py +3 -1
- atdd/tester/validators/cleanup_duplicate_headers_v2.py +3 -1
- atdd/tester/validators/coverage_gap_report.py +3 -1
- atdd/tester/validators/fix_dual_ac_references.py +3 -1
- atdd/tester/validators/remove_duplicate_lines.py +3 -1
- atdd/tester/validators/test_acceptance_urn_filename_mapping.py +3 -1
- atdd/tester/validators/test_acceptance_urn_separator.py +3 -1
- atdd/tester/validators/test_contract_schema_compliance.py +3 -1
- atdd/tester/validators/test_contracts_structure.py +3 -1
- atdd/tester/validators/test_coverage_adequacy.py +3 -1
- atdd/tester/validators/test_dual_ac_reference.py +3 -1
- atdd/tester/validators/test_fixture_validity.py +2 -1
- atdd/tester/validators/test_isolation.py +3 -1
- atdd/tester/validators/test_migration_coverage.py +4 -2
- atdd/tester/validators/test_migration_generation.py +3 -1
- atdd/tester/validators/test_python_test_naming.py +3 -1
- atdd/tester/validators/test_red_layer_validation.py +2 -1
- atdd/tester/validators/test_red_python_layer_structure.py +2 -1
- atdd/tester/validators/test_red_supabase_layer_structure.py +3 -1
- atdd/tester/validators/test_telemetry_structure.py +3 -1
- atdd/version_check.py +111 -3
- {atdd-0.3.2.dist-info → atdd-0.4.0.dist-info}/METADATA +41 -12
- {atdd-0.3.2.dist-info → atdd-0.4.0.dist-info}/RECORD +72 -72
- {atdd-0.3.2.dist-info → atdd-0.4.0.dist-info}/WHEEL +0 -0
- {atdd-0.3.2.dist-info → atdd-0.4.0.dist-info}/entry_points.txt +0 -0
- {atdd-0.3.2.dist-info → atdd-0.4.0.dist-info}/licenses/LICENSE +0 -0
- {atdd-0.3.2.dist-info → atdd-0.4.0.dist-info}/top_level.txt +0 -0
|
@@ -8,8 +8,9 @@ import pytest
|
|
|
8
8
|
from pathlib import Path
|
|
9
9
|
import yaml
|
|
10
10
|
|
|
11
|
+
from atdd.coach.utils.repo import find_repo_root
|
|
11
12
|
|
|
12
|
-
REPO_ROOT =
|
|
13
|
+
REPO_ROOT = find_repo_root()
|
|
13
14
|
RED_CONVENTION = REPO_ROOT / "atdd" / "tester" / "conventions" / "red.convention.yaml"
|
|
14
15
|
|
|
15
16
|
|
|
@@ -8,8 +8,9 @@ import pytest
|
|
|
8
8
|
from pathlib import Path
|
|
9
9
|
import yaml
|
|
10
10
|
|
|
11
|
+
from atdd.coach.utils.repo import find_repo_root
|
|
11
12
|
|
|
12
|
-
REPO_ROOT =
|
|
13
|
+
REPO_ROOT = find_repo_root()
|
|
13
14
|
RED_CONVENTION = REPO_ROOT / "atdd" / "tester" / "conventions" / "red.convention.yaml"
|
|
14
15
|
|
|
15
16
|
|
|
@@ -8,8 +8,10 @@ import pytest
|
|
|
8
8
|
from pathlib import Path
|
|
9
9
|
import yaml
|
|
10
10
|
|
|
11
|
+
from atdd.coach.utils.repo import find_repo_root
|
|
11
12
|
|
|
12
|
-
|
|
13
|
+
|
|
14
|
+
REPO_ROOT = find_repo_root()
|
|
13
15
|
RED_CONVENTION = REPO_ROOT / "atdd" / "tester" / "conventions" / "red.convention.yaml"
|
|
14
16
|
|
|
15
17
|
|
|
@@ -10,8 +10,10 @@ import re
|
|
|
10
10
|
import json
|
|
11
11
|
from jsonschema import validate, ValidationError
|
|
12
12
|
|
|
13
|
+
from atdd.coach.utils.repo import find_repo_root
|
|
14
|
+
|
|
13
15
|
# Path constants
|
|
14
|
-
REPO_ROOT =
|
|
16
|
+
REPO_ROOT = find_repo_root()
|
|
15
17
|
TELEMETRY_DIR = REPO_ROOT / "telemetry"
|
|
16
18
|
CONTRACTS_DIR = REPO_ROOT / "contracts"
|
|
17
19
|
PLAN_DIR = REPO_ROOT / "plan"
|
atdd/version_check.py
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
"""
|
|
2
2
|
Version check for ATDD CLI.
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
Two types of version checks:
|
|
5
|
+
1. PyPI update check - notifies when a newer version is available on PyPI
|
|
6
|
+
2. Repo sync check - notifies when installed version is newer than repo's last_version
|
|
6
7
|
|
|
7
8
|
Cache location: ~/.atdd/version_cache.json
|
|
8
|
-
Disable: Set ATDD_NO_UPDATE_CHECK=1
|
|
9
|
+
Disable PyPI check: Set ATDD_NO_UPDATE_CHECK=1
|
|
10
|
+
Disable sync reminder: Set ATDD_NO_UPGRADE_NOTICE=1
|
|
9
11
|
"""
|
|
10
12
|
import json
|
|
11
13
|
import os
|
|
@@ -16,6 +18,8 @@ from typing import Optional, Tuple
|
|
|
16
18
|
from urllib.request import urlopen
|
|
17
19
|
from urllib.error import URLError
|
|
18
20
|
|
|
21
|
+
import yaml
|
|
22
|
+
|
|
19
23
|
from atdd import __version__
|
|
20
24
|
|
|
21
25
|
# Check once per day (86400 seconds)
|
|
@@ -124,3 +128,107 @@ def print_update_notice() -> None:
|
|
|
124
128
|
print(notice, file=sys.stderr)
|
|
125
129
|
except Exception:
|
|
126
130
|
pass # Never fail the main command due to version check
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
# --- Repo sync upgrade check ---
|
|
134
|
+
|
|
135
|
+
def _load_repo_config() -> Tuple[Optional[dict], Optional[Path]]:
|
|
136
|
+
"""
|
|
137
|
+
Load .atdd/config.yaml from current directory.
|
|
138
|
+
|
|
139
|
+
Returns:
|
|
140
|
+
Tuple of (config_dict, config_path) or (None, None) if not found.
|
|
141
|
+
"""
|
|
142
|
+
config_path = Path.cwd() / ".atdd" / "config.yaml"
|
|
143
|
+
if not config_path.exists():
|
|
144
|
+
return None, None
|
|
145
|
+
|
|
146
|
+
try:
|
|
147
|
+
with open(config_path) as f:
|
|
148
|
+
return yaml.safe_load(f) or {}, config_path
|
|
149
|
+
except (yaml.YAMLError, OSError):
|
|
150
|
+
return None, None
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
def _get_last_toolkit_version(config: dict) -> Optional[str]:
|
|
154
|
+
"""Extract toolkit.last_version from config."""
|
|
155
|
+
toolkit = config.get("toolkit", {})
|
|
156
|
+
return toolkit.get("last_version")
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
def check_upgrade_sync_needed() -> Optional[str]:
|
|
160
|
+
"""
|
|
161
|
+
Check if repo needs sync after ATDD upgrade.
|
|
162
|
+
|
|
163
|
+
Compares installed version vs toolkit.last_version in .atdd/config.yaml.
|
|
164
|
+
|
|
165
|
+
Returns:
|
|
166
|
+
Message to display if sync needed, None otherwise.
|
|
167
|
+
"""
|
|
168
|
+
# Respect disable flag
|
|
169
|
+
if os.environ.get("ATDD_NO_UPGRADE_NOTICE", "").lower() in ("1", "true", "yes"):
|
|
170
|
+
return None
|
|
171
|
+
|
|
172
|
+
# Skip if running in development
|
|
173
|
+
if __version__ == "0.0.0":
|
|
174
|
+
return None
|
|
175
|
+
|
|
176
|
+
config, config_path = _load_repo_config()
|
|
177
|
+
if config is None:
|
|
178
|
+
# No .atdd/config.yaml - not an ATDD repo or not initialized
|
|
179
|
+
return None
|
|
180
|
+
|
|
181
|
+
last_version = _get_last_toolkit_version(config)
|
|
182
|
+
if last_version is None:
|
|
183
|
+
# First run or old config without toolkit.last_version
|
|
184
|
+
# Treat as needing sync
|
|
185
|
+
return f"ATDD upgraded to {__version__}. Run: atdd sync"
|
|
186
|
+
|
|
187
|
+
# Compare versions
|
|
188
|
+
if _is_newer(__version__, last_version):
|
|
189
|
+
return f"ATDD upgraded ({last_version} → {__version__}). Run: atdd sync"
|
|
190
|
+
|
|
191
|
+
return None
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
def update_toolkit_version(config_path: Optional[Path] = None) -> bool:
|
|
195
|
+
"""
|
|
196
|
+
Update toolkit.last_version in .atdd/config.yaml to current installed version.
|
|
197
|
+
|
|
198
|
+
Args:
|
|
199
|
+
config_path: Path to config file. Defaults to .atdd/config.yaml in cwd.
|
|
200
|
+
|
|
201
|
+
Returns:
|
|
202
|
+
True if updated, False otherwise.
|
|
203
|
+
"""
|
|
204
|
+
if config_path is None:
|
|
205
|
+
config_path = Path.cwd() / ".atdd" / "config.yaml"
|
|
206
|
+
|
|
207
|
+
if not config_path.exists():
|
|
208
|
+
return False
|
|
209
|
+
|
|
210
|
+
try:
|
|
211
|
+
with open(config_path) as f:
|
|
212
|
+
config = yaml.safe_load(f) or {}
|
|
213
|
+
|
|
214
|
+
# Update toolkit.last_version
|
|
215
|
+
if "toolkit" not in config:
|
|
216
|
+
config["toolkit"] = {}
|
|
217
|
+
config["toolkit"]["last_version"] = __version__
|
|
218
|
+
|
|
219
|
+
with open(config_path, "w") as f:
|
|
220
|
+
yaml.dump(config, f, default_flow_style=False, sort_keys=False)
|
|
221
|
+
|
|
222
|
+
return True
|
|
223
|
+
except (yaml.YAMLError, OSError):
|
|
224
|
+
return False
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
def print_upgrade_sync_notice() -> None:
|
|
228
|
+
"""Print upgrade sync notice to stderr if needed."""
|
|
229
|
+
try:
|
|
230
|
+
notice = check_upgrade_sync_needed()
|
|
231
|
+
if notice:
|
|
232
|
+
print(f"\n⚠️ {notice}\n", file=sys.stderr)
|
|
233
|
+
except Exception:
|
|
234
|
+
pass # Never fail the main command
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: atdd
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
4
4
|
Summary: ATDD Platform - Acceptance Test Driven Development toolkit
|
|
5
5
|
License: MIT
|
|
6
6
|
Requires-Python: >=3.10
|
|
@@ -16,6 +16,15 @@ Dynamic: license-file
|
|
|
16
16
|
|
|
17
17
|
Acceptance Test Driven Development toolkit for structured planning and convention enforcement.
|
|
18
18
|
|
|
19
|
+
ATDD covers the full software lifecycle, not just code. It starts from a job to be done (e.g., user problem or goal), turns it into deterministic requirements, validates them with tests, and then drives implementation.
|
|
20
|
+
|
|
21
|
+
```mermaid
|
|
22
|
+
flowchart LR
|
|
23
|
+
A[Job to be Done] -->|Planner| B[Wagon + Acceptance Criteria]
|
|
24
|
+
B -->|Tester| C[RED Tests]
|
|
25
|
+
C -->|Coder| D[GREEN Code]
|
|
26
|
+
```
|
|
27
|
+
|
|
19
28
|
## Installation
|
|
20
29
|
|
|
21
30
|
### From PyPI
|
|
@@ -49,9 +58,9 @@ atdd --help
|
|
|
49
58
|
```bash
|
|
50
59
|
atdd init # Initialize ATDD in your project
|
|
51
60
|
atdd gate # ⚠️ START EVERY SESSION WITH THIS
|
|
52
|
-
atdd session new
|
|
61
|
+
atdd session new <capability> # Create a planning session
|
|
53
62
|
atdd sync # Sync rules to agent config files
|
|
54
|
-
atdd
|
|
63
|
+
atdd validate # Run all validators
|
|
55
64
|
```
|
|
56
65
|
|
|
57
66
|
> **⚠️ `atdd gate` is required.**
|
|
@@ -67,6 +76,22 @@ ATDD provides:
|
|
|
67
76
|
3. **ATDD Lifecycle** - Planner → Tester → Coder phase gates
|
|
68
77
|
4. **Agent Config Sync** - Keep ATDD rules in sync across AI agent config files
|
|
69
78
|
|
|
79
|
+
```mermaid
|
|
80
|
+
flowchart LR
|
|
81
|
+
A[Job to be Done] -->|Planner| B[Wagon + Acceptance Criteria]
|
|
82
|
+
B -->|Tester| C[RED Tests]
|
|
83
|
+
C -->|Coder| D[GREEN Code]
|
|
84
|
+
D -->|Coder| E[REFACTOR]
|
|
85
|
+
E -.->|feedback| B
|
|
86
|
+
|
|
87
|
+
subgraph "ATDD Lifecycle"
|
|
88
|
+
B
|
|
89
|
+
C
|
|
90
|
+
D
|
|
91
|
+
E
|
|
92
|
+
end
|
|
93
|
+
```
|
|
94
|
+
|
|
70
95
|
## Commands
|
|
71
96
|
|
|
72
97
|
### Project Initialization
|
|
@@ -196,19 +221,23 @@ Before starting work, confirm you have loaded these rules.
|
|
|
196
221
|
### Validation
|
|
197
222
|
|
|
198
223
|
```bash
|
|
199
|
-
atdd
|
|
200
|
-
atdd
|
|
201
|
-
atdd
|
|
202
|
-
atdd
|
|
203
|
-
atdd --quick
|
|
224
|
+
atdd validate # Run all validators
|
|
225
|
+
atdd validate planner # Planning validators only
|
|
226
|
+
atdd validate tester # Testing validators only
|
|
227
|
+
atdd validate coder # Implementation validators only
|
|
228
|
+
atdd validate --quick # Fast smoke test
|
|
229
|
+
atdd validate --coverage # With coverage report
|
|
230
|
+
atdd validate --html # With HTML report
|
|
204
231
|
```
|
|
205
232
|
|
|
206
233
|
### Other Commands
|
|
207
234
|
|
|
208
235
|
```bash
|
|
209
|
-
atdd
|
|
210
|
-
atdd
|
|
211
|
-
atdd --
|
|
236
|
+
atdd status # Platform status
|
|
237
|
+
atdd inventory # Generate artifact inventory
|
|
238
|
+
atdd inventory --format json # Inventory as JSON
|
|
239
|
+
atdd registry update # Update all registries
|
|
240
|
+
atdd --help # Full help
|
|
212
241
|
```
|
|
213
242
|
|
|
214
243
|
## Project Structure
|
|
@@ -264,7 +293,7 @@ pytest --cov=atdd --cov-report=html
|
|
|
264
293
|
|
|
265
294
|
1. Create `src/atdd/{phase}/validators/test_{name}.py`
|
|
266
295
|
2. Write pytest test functions
|
|
267
|
-
3. Run `atdd
|
|
296
|
+
3. Run `atdd validate {phase}`
|
|
268
297
|
|
|
269
298
|
Validators are auto-discovered by pytest.
|
|
270
299
|
|
|
@@ -1,43 +1,43 @@
|
|
|
1
1
|
atdd/__init__.py,sha256=-S8i9OahH-t9FJkPn6nprxipnjVum3rLeVsCS74T6eY,156
|
|
2
2
|
atdd/__main__.py,sha256=B0sXDQLjFN9GowTlXo4NMWwPZPjDsrT8Frq7DnbdOD8,77
|
|
3
|
-
atdd/cli.py,sha256=
|
|
3
|
+
atdd/cli.py,sha256=NlhWL8sRLBzISgyn2KM-KT_aYnMBHt_xNP3TqfMHIhA,20364
|
|
4
4
|
atdd/conftest.py,sha256=Fj3kIhCETbj2QBCIjySBgdS3stKNRZcZzKTJr7A4LaQ,5300
|
|
5
|
-
atdd/version_check.py,sha256=
|
|
5
|
+
atdd/version_check.py,sha256=BlPcLwzNnm457vWUolB3wMtZEI-fXvpzfm6p8U_j7rc,6684
|
|
6
6
|
atdd/coach/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
7
|
atdd/coach/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
|
-
atdd/coach/commands/add_persistence_metadata.py,sha256=
|
|
8
|
+
atdd/coach/commands/add_persistence_metadata.py,sha256=AGzQUgMo_8H-YtexYFwQYx0In6fplx_BDLXqWzRIdaw,6918
|
|
9
9
|
atdd/coach/commands/analyze_migrations.py,sha256=2bLfR7OwicBXAZWB4R3Sm4d5jFe87d0O_kO68X96ykU,6083
|
|
10
10
|
atdd/coach/commands/consumers.py,sha256=7vTexse8xznXSzNWjPGYuF4iJ8ZWymmOSkpcA6IWyxU,27514
|
|
11
11
|
atdd/coach/commands/gate.py,sha256=_V2GypqoGixTs_kLWxFF3HgEt-Wi2r6Iv0YL75yWrWo,5829
|
|
12
|
-
atdd/coach/commands/infer_governance_status.py,sha256=
|
|
13
|
-
atdd/coach/commands/initializer.py,sha256=
|
|
14
|
-
atdd/coach/commands/interface.py,sha256=
|
|
15
|
-
atdd/coach/commands/inventory.py,sha256=
|
|
16
|
-
atdd/coach/commands/migration.py,sha256=
|
|
12
|
+
atdd/coach/commands/infer_governance_status.py,sha256=MlLnx8SrJAOQq2rfuxLZMmyNylCQ-OYx4tSi_iFdhRA,4504
|
|
13
|
+
atdd/coach/commands/initializer.py,sha256=s7NnITF4c6xGlN6ZJVjyv4a4jxGMjK9OPG1C-OIG55A,6385
|
|
14
|
+
atdd/coach/commands/interface.py,sha256=FwBrJpWkfSL9n4n0HT_EC-alseXgU0bweKD4TImyHN0,40483
|
|
15
|
+
atdd/coach/commands/inventory.py,sha256=qU42MnkXt1JSBh5GU7pPSKmCO27Zfga7XwMT19RquJE,20969
|
|
16
|
+
atdd/coach/commands/migration.py,sha256=wRxU7emvvHqWt1MvXKkNTkPBjp0sU9g8F5Uy5yV2YfI,8177
|
|
17
17
|
atdd/coach/commands/registry.py,sha256=r1QWg841eK6bS4vEbYEviylDCpFkInUVMTsf5h4ArrQ,58344
|
|
18
18
|
atdd/coach/commands/session.py,sha256=MhuWXd5TR6bB3w0t8vANeZx3L476qwLT6EUQMwg-wQA,14268
|
|
19
|
-
atdd/coach/commands/sync.py,sha256=
|
|
19
|
+
atdd/coach/commands/sync.py,sha256=4HNzg8AVaePDwhyBlQcywvNVZDP5NIW8TBsEPbqmJuQ,12545
|
|
20
20
|
atdd/coach/commands/test_interface.py,sha256=a7ut2Hhk0PnQ5LfJZkoQwfkfkVuB5OHA4QBwOS0-jcg,16870
|
|
21
|
-
atdd/coach/commands/test_runner.py,sha256=
|
|
22
|
-
atdd/coach/commands/traceability.py,sha256=
|
|
21
|
+
atdd/coach/commands/test_runner.py,sha256=_6JrDRq5fBHUOC4MtkgXcjkgJjG80otoGRTqnkEphIk,5832
|
|
22
|
+
atdd/coach/commands/traceability.py,sha256=8TmpZDeUVHJAz-p3oxXq55jCFiFpKIQR8h1wLZVYcgA,163612
|
|
23
23
|
atdd/coach/commands/tests/__init__.py,sha256=svBEnRruMuXuaYi3lFxJlzHNWdZ5vlBTaBpjXupaxDA,33
|
|
24
24
|
atdd/coach/commands/tests/test_telemetry_array_validation.py,sha256=WK5ZXvR1avlzX7mSX84dmxxLFnw7eQB4jtjo7bHG7aE,8464
|
|
25
|
-
atdd/coach/conventions/session.convention.yaml,sha256=
|
|
25
|
+
atdd/coach/conventions/session.convention.yaml,sha256=1wCxQ_Y2Wb2080Xt2JZs0_WsV8_4SC0Tq87G_BCGdiE,26049
|
|
26
26
|
atdd/coach/overlays/__init__.py,sha256=2lMiMSgfLJ3YHLpbzNI5B88AdQxiMEwjIfsWWb8t3To,123
|
|
27
27
|
atdd/coach/overlays/claude.md,sha256=33mhpqhmsRhCtdWlU7cMXAJDsaVra9uBBK8URV8OtQA,101
|
|
28
28
|
atdd/coach/schemas/config.schema.json,sha256=xzct7gBoPTIGh3NFPSGtfW0zIiyFdHDZkvjuy1qgAqA,951
|
|
29
29
|
atdd/coach/schemas/manifest.schema.json,sha256=WO13-YF_FgH1awh96khCtk-112b6XSC24anlY3B7GjY,2885
|
|
30
|
-
atdd/coach/templates/ATDD.md,sha256=
|
|
31
|
-
atdd/coach/templates/SESSION-TEMPLATE.md,sha256=
|
|
30
|
+
atdd/coach/templates/ATDD.md,sha256=jovi7CeJKidboZPKLmge5OCNESq998dHPr8zTHRRvlg,13100
|
|
31
|
+
atdd/coach/templates/SESSION-TEMPLATE.md,sha256=gcmfDDD6rREI20vhWXlf01AGbRbR8Hh7Q4QZX4H-pVw,9455
|
|
32
32
|
atdd/coach/utils/__init__.py,sha256=7Jbo-heJEKSAn6I0s35z_2S4R8qGZ48PL6a2IntcNYg,148
|
|
33
|
-
atdd/coach/utils/repo.py,sha256=
|
|
33
|
+
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=ZWZl6vyny8bv4BehJwPAz_Czld1mR3u_SLgC8uL4bhc,12142
|
|
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
|
-
atdd/coach/validators/test_session_validation.py,sha256=
|
|
40
|
+
atdd/coach/validators/test_session_validation.py,sha256=0VszXtFwRTO04b5CxDPO3klk0VfiqlpdbNpshjMn-qU,39079
|
|
41
41
|
atdd/coach/validators/test_traceability.py,sha256=qTyobt41VBiCr6xRN2C7BPtGYvk_2poVQIe814Blt8E,15977
|
|
42
42
|
atdd/coach/validators/test_update_feature_paths.py,sha256=zOKVDgEIpncSJwDh_shyyou5Pu-Ai7Z_XgF8zAbQVTA,4528
|
|
43
43
|
atdd/coach/validators/test_validate_contract_consumers.py,sha256=b01yam_GwAERF6YaFmUV6Bd7SNMWQkUKBfNVvplbEcU,12613
|
|
@@ -62,32 +62,32 @@ atdd/coder/conventions/verification.protocol.yaml,sha256=tYOId2A8xKoTqjcrKN1RNUK
|
|
|
62
62
|
atdd/coder/conventions/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
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
|
-
atdd/coder/conventions/tests/test_component_taxonomy.py,sha256=
|
|
66
|
-
atdd/coder/conventions/tests/test_component_urn_naming.py,sha256=
|
|
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=XAROfe-fpkY49vIRf8w-4ivj7hvYomrmWKmJ2uZ6Snk,6367
|
|
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=
|
|
71
|
-
atdd/coder/validators/test_complexity.py,sha256=
|
|
72
|
-
atdd/coder/validators/test_cross_language_consistency.py,sha256=
|
|
73
|
-
atdd/coder/validators/test_design_system_compliance.py,sha256=
|
|
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=
|
|
79
|
-
atdd/coder/validators/test_import_boundaries.py,sha256=
|
|
80
|
-
atdd/coder/validators/test_init_file_urns.py,sha256=
|
|
81
|
-
atdd/coder/validators/test_preact_layer_boundaries.py,sha256=
|
|
82
|
-
atdd/coder/validators/test_presentation_convention.py,sha256=
|
|
83
|
-
atdd/coder/validators/test_python_architecture.py,sha256=
|
|
84
|
-
atdd/coder/validators/test_quality_metrics.py,sha256=
|
|
85
|
-
atdd/coder/validators/test_station_master_pattern.py,sha256=
|
|
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=
|
|
89
|
-
atdd/coder/validators/test_usecase_structure.py,sha256=
|
|
90
|
-
atdd/coder/validators/test_wagon_boundaries.py,sha256=
|
|
70
|
+
atdd/coder/validators/test_commons_structure.py,sha256=MSoofMREjdWXsaoy2zvloiBzxk1J80FEOcpd7ed22fs,15449
|
|
71
|
+
atdd/coder/validators/test_complexity.py,sha256=jWDLOUfs66L4vrzWJ41qJTA_AVOeZzXKW94SqMz80I4,12310
|
|
72
|
+
atdd/coder/validators/test_cross_language_consistency.py,sha256=FTHJByvA_zJmJyK8VAK9h0EZaKafP6FmQn9wuoySlks,13204
|
|
73
|
+
atdd/coder/validators/test_design_system_compliance.py,sha256=UA9UwzbayiXnIgYwcQmb4Z7wbntN2oCxOc7eaAeFK6U,14541
|
|
74
|
+
atdd/coder/validators/test_dto_testing_patterns.py,sha256=JMdUWsn0yviOVtMo7zbJ6r3lZbj4SkhSBIIIQ940pE8,9429
|
|
75
|
+
atdd/coder/validators/test_green_cross_stack_layers.py,sha256=OS337t0x3yEITYqS0Q-qCXS9jT_Izz9ctvW3McF90zo,6822
|
|
76
|
+
atdd/coder/validators/test_green_layer_dependencies.py,sha256=xovqlIygF6PTwtflXxPIkWMfwQsbkgqLwsFVFzq3s3E,5530
|
|
77
|
+
atdd/coder/validators/test_green_python_layer_structure.py,sha256=NCOd7X-TzDP-EnF08CR8NZLG-91tFVwLWMag2I2jgTA,4287
|
|
78
|
+
atdd/coder/validators/test_green_supabase_layer_structure.py,sha256=Sn2PK6DfrzJPzXH7Sp24qIs-YtTKtkIbmLrNU_mR7Jg,4275
|
|
79
|
+
atdd/coder/validators/test_import_boundaries.py,sha256=3kzVMKIwZU9FcS0YLU8gsuHSDRlRr2rU3UPgoraV2FU,11811
|
|
80
|
+
atdd/coder/validators/test_init_file_urns.py,sha256=uDJ2MgfJNFcjzoIKItn73n9V08m3ZBkt1SAZgHWdXPs,17914
|
|
81
|
+
atdd/coder/validators/test_preact_layer_boundaries.py,sha256=rabXY9gif3b8QH9_Kz5Pu6FZSvDpfQKDm_SKjdpLD44,7766
|
|
82
|
+
atdd/coder/validators/test_presentation_convention.py,sha256=ceAtg_sTEJiPkHVfnwBEDTzTH44nKQIiukIEvZz8r18,10037
|
|
83
|
+
atdd/coder/validators/test_python_architecture.py,sha256=NCMUPqgaUUPAvpkzLYb1mgjnznjhXnu5Mw0njRawexI,25115
|
|
84
|
+
atdd/coder/validators/test_quality_metrics.py,sha256=vLWPfL0x9sfCvKXO4uECW61RnJTsjbmuEUjCsBcUmuA,12551
|
|
85
|
+
atdd/coder/validators/test_station_master_pattern.py,sha256=biYwXAftpXdhIhDjn2RrVTdEdvTWPW5ddm2gQubJBXQ,9280
|
|
86
|
+
atdd/coder/validators/test_train_infrastructure.py,sha256=lABiut9zV5IQP_E-41aOOeSXasuNtZz_XXBEwsAj0yI,16073
|
|
87
|
+
atdd/coder/validators/test_train_urns.py,sha256=rDz6YHtJx3RWZrBNB0AOuRkWwbr3mvDIIk9z_V1Qmzk,9971
|
|
88
|
+
atdd/coder/validators/test_typescript_architecture.py,sha256=Idnx1Ux551TcC5DVFquz_DHSpcTI9yy13Y0UKxQbl54,22054
|
|
89
|
+
atdd/coder/validators/test_usecase_structure.py,sha256=nAeqmLWRCstXT8fDuxqk6iVcH4TLHjTvlaGDpanD9sM,14077
|
|
90
|
+
atdd/coder/validators/test_wagon_boundaries.py,sha256=dxVCXRWK6Cc_CknRwoGC2y8-JOLq3Q_UsFJDT_N4oqA,20562
|
|
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
|
|
@@ -112,17 +112,17 @@ atdd/planner/validators/conftest.py,sha256=CVr3m9mv4xc8G6azcdbZ1VArVvLZw2Utqt2EI
|
|
|
112
112
|
atdd/planner/validators/test_draft_wagon_registry.py,sha256=Bt4xTjgKddEnnxNOMh8jWhvb3aqRaWGBd227Vv3rWz0,13798
|
|
113
113
|
atdd/planner/validators/test_plan_cross_refs.py,sha256=MlRMuM_eo3h8Q1pOdcvxyRNqRie9xPiYamOeofwiKaM,9505
|
|
114
114
|
atdd/planner/validators/test_plan_uniqueness.py,sha256=rlC5khAoBkgpTZJdyHi1JbDUj14v1JiGBFv2iV_AP_Y,7735
|
|
115
|
-
atdd/planner/validators/test_plan_urn_resolution.py,sha256=
|
|
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
117
|
atdd/planner/validators/test_train_validation.py,sha256=13j5hx_bcBhf3xFeqCJGo79y8lN9xpNEXXRzjV17tHQ,16972
|
|
118
|
-
atdd/planner/validators/test_wagon_urn_chain.py,sha256=
|
|
119
|
-
atdd/planner/validators/test_wmbt_consistency.py,sha256=
|
|
120
|
-
atdd/planner/validators/test_wmbt_vocabulary.py,sha256=
|
|
118
|
+
atdd/planner/validators/test_wagon_urn_chain.py,sha256=KY_0vrj6CoiQJ80WbqfCGCYbup13cVssaxbNO0eVf74,26697
|
|
119
|
+
atdd/planner/validators/test_wmbt_consistency.py,sha256=jdfu4xWEozzBGwplKDXxuDQNLBDxB_AC96NHLkyHqQ8,10875
|
|
120
|
+
atdd/planner/validators/test_wmbt_vocabulary.py,sha256=BWXxa2yUIVFC467Jui88ORmlE8lWulqY7vmGr8usZhc,18675
|
|
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
|
-
atdd/tester/conventions/contract.convention.yaml,sha256=
|
|
123
|
+
atdd/tester/conventions/contract.convention.yaml,sha256=oByzcBZivn-xUHbMg0OeebHeNx5-gwQJwfUDZ_OUgxA,34832
|
|
124
124
|
atdd/tester/conventions/filename.convention.yaml,sha256=WywcPhdxIZSoY6F6OSx5v3_AtS2jMMGoSnd6Va4BAaw,19920
|
|
125
|
-
atdd/tester/conventions/migration.convention.yaml,sha256=
|
|
125
|
+
atdd/tester/conventions/migration.convention.yaml,sha256=Xx5EIwNct6wb--sYtm7EJp8wu39qo4eZZ-O8AyfeRgY,20019
|
|
126
126
|
atdd/tester/conventions/red.convention.yaml,sha256=S0mc4JpvNuOSYhqmt6bm0tCuDTCFYFRsSBru3XMwXgs,28901
|
|
127
127
|
atdd/tester/conventions/routing.convention.yaml,sha256=gRJrnQd-cXCUGby0CeaJdRmrFXZx70kl-FxXCoXiu5Y,2751
|
|
128
128
|
atdd/tester/conventions/security.convention.yaml,sha256=3QjQZqw1Iw8g6jUmuKWkOqcZ1n1sc1OJDvKD0eTk070,5445
|
|
@@ -155,35 +155,35 @@ atdd/tester/schemas/ws.tmpl.json,sha256=s4d-QDJpKzF3Ysbm1kkXL78YKKZ5sRrs49YTsVbS
|
|
|
155
155
|
atdd/tester/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
156
156
|
atdd/tester/utils/filename.py,sha256=okhlkPsE0hUn6AE2I01P38WzFvAtV2jy7FJhDyrnWOg,8445
|
|
157
157
|
atdd/tester/validators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
158
|
-
atdd/tester/validators/cleanup_duplicate_headers.py,sha256=
|
|
159
|
-
atdd/tester/validators/cleanup_duplicate_headers_v2.py,sha256=
|
|
158
|
+
atdd/tester/validators/cleanup_duplicate_headers.py,sha256=ANronriY5nhbDPre566nJile3uoNs-8Mv-SwV3e-OhE,3366
|
|
159
|
+
atdd/tester/validators/cleanup_duplicate_headers_v2.py,sha256=zr2ogvyZEjyVh2c82S0tKI0pzl5fyntxuUIOWcUmylY,3849
|
|
160
160
|
atdd/tester/validators/conftest.py,sha256=0kQ1VXYWQArkWMB97eTBuviTmEYx69bHhMt4rltL0Jk,154
|
|
161
|
-
atdd/tester/validators/coverage_gap_report.py,sha256=
|
|
162
|
-
atdd/tester/validators/fix_dual_ac_references.py,sha256=
|
|
163
|
-
atdd/tester/validators/remove_duplicate_lines.py,sha256=
|
|
164
|
-
atdd/tester/validators/test_acceptance_urn_filename_mapping.py,sha256=
|
|
165
|
-
atdd/tester/validators/test_acceptance_urn_separator.py,sha256=
|
|
161
|
+
atdd/tester/validators/coverage_gap_report.py,sha256=rNztpPLYl8zf61xVGE-C_cPJ6sOWc3Ji2R0lUQUDjw0,10183
|
|
162
|
+
atdd/tester/validators/fix_dual_ac_references.py,sha256=AlkM7Gj0Bg0Mr2x6tPmzD8pg_6aZygOmsRuQ0xQh4SY,4906
|
|
163
|
+
atdd/tester/validators/remove_duplicate_lines.py,sha256=BdU33gziYYlJQPRXm69XWg-K2zz7J4QZ8BNXQYR7Yp8,2525
|
|
164
|
+
atdd/tester/validators/test_acceptance_urn_filename_mapping.py,sha256=_LjJIq3jvpk7zE-3uvsVd2icyCgEG9HjP-7xn3VzVs4,12854
|
|
165
|
+
atdd/tester/validators/test_acceptance_urn_separator.py,sha256=auCuztjpS0qnP82J7gBYoCX6HhxxVZkvC4PNb1rLOCg,6878
|
|
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=rzBisGK0cbjU4hFUNBpW6RWSe-hKfRXkKlKW65ucbNI,26134
|
|
168
168
|
atdd/tester/validators/test_contract_security.py,sha256=fKNaevmbSAoGyOKBhPnHw5xSGXptG0ciS0__qtO9Qac,19541
|
|
169
|
-
atdd/tester/validators/test_contracts_structure.py,sha256=
|
|
170
|
-
atdd/tester/validators/test_coverage_adequacy.py,sha256=
|
|
171
|
-
atdd/tester/validators/test_dual_ac_reference.py,sha256=
|
|
172
|
-
atdd/tester/validators/test_fixture_validity.py,sha256=
|
|
173
|
-
atdd/tester/validators/test_isolation.py,sha256=
|
|
174
|
-
atdd/tester/validators/test_migration_coverage.py,sha256=
|
|
169
|
+
atdd/tester/validators/test_contracts_structure.py,sha256=RRmIzcbwwBtZDVio558TQt-SBjiVOgb79j8aFR4FRbw,9815
|
|
170
|
+
atdd/tester/validators/test_coverage_adequacy.py,sha256=gIaz1LJahSGSn-t-42hTeJochVBJFA4kE7Z_LBg7dtk,27057
|
|
171
|
+
atdd/tester/validators/test_dual_ac_reference.py,sha256=5llpy4gFn0VtWn8KCPFHdE3EoWewB2orjcwrtk5XInU,8919
|
|
172
|
+
atdd/tester/validators/test_fixture_validity.py,sha256=Fp4AWwhvZlos1ik_d7NbP030Qq-klZLnCmc12ylptqs,12101
|
|
173
|
+
atdd/tester/validators/test_isolation.py,sha256=0Dw4ERL5xKrSscSXLdYaZNemFLmonrWrXAtSenp2aLE,16374
|
|
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
|
-
atdd/tester/validators/test_migration_generation.py,sha256=
|
|
177
|
-
atdd/tester/validators/test_python_test_naming.py,sha256=
|
|
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=
|
|
176
|
+
atdd/tester/validators/test_migration_generation.py,sha256=wpTmuxvM13OfSgC-3SJBdtB2XaPjBYyD-jXVYWi7Z9Q,4064
|
|
177
|
+
atdd/tester/validators/test_python_test_naming.py,sha256=4dXlHYTeTt34r5AjXIeGbZuMy6_Eh73kq1ksmQhI5qo,14413
|
|
178
|
+
atdd/tester/validators/test_red_layer_validation.py,sha256=R5aDBxgwUGI6-rQKMhRSHakXLT95stHRpBljtRyrodE,3495
|
|
179
|
+
atdd/tester/validators/test_red_python_layer_structure.py,sha256=_UHi5VMbYkRAWFMULZsAjHEUY5F2kU50rlxaP-mvJWk,3365
|
|
180
|
+
atdd/tester/validators/test_red_supabase_layer_structure.py,sha256=Sm9zycJCLsaMLT-NuDIXC8gLXBLomvKNVWlShHRsowA,3734
|
|
181
|
+
atdd/tester/validators/test_telemetry_structure.py,sha256=i22GY0C6X9or8ErRfPn8Dsge0MfwvkgONVs_24vch-4,22498
|
|
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.
|
|
185
|
-
atdd-0.
|
|
186
|
-
atdd-0.
|
|
187
|
-
atdd-0.
|
|
188
|
-
atdd-0.
|
|
189
|
-
atdd-0.
|
|
184
|
+
atdd-0.4.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
185
|
+
atdd-0.4.0.dist-info/METADATA,sha256=fp4vKeLQzjbW1xNKx56BH2raEnIce4OEhX9Sy8N5MaA,8013
|
|
186
|
+
atdd-0.4.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
187
|
+
atdd-0.4.0.dist-info/entry_points.txt,sha256=-C3yrA1WQQfN3iuGmSzPapA5cKVBEYU5Q1HUffSJTbY,38
|
|
188
|
+
atdd-0.4.0.dist-info/top_level.txt,sha256=VKkf6Uiyrm4RS6ULCGM-v8AzYN8K2yg8SMqwJLoO-xs,5
|
|
189
|
+
atdd-0.4.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|