atdd 0.4.4__py3-none-any.whl → 0.4.5__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.
@@ -348,7 +348,7 @@ Rules:
348
348
  -->
349
349
 
350
350
  - [ ] Determine change class: PATCH / MINOR / MAJOR
351
- - [ ] Bump version in version file (pyproject.toml, package.json, etc.)
351
+ - [ ] Bump version in version file (recommended: VERSION; sync any language manifests if used)
352
352
  - [ ] Commit: "Bump version to {version}"
353
353
  - [ ] Create tag: `git tag v{version}`
354
354
  - [ ] Push with tags: `git push origin {branch} --tags`
@@ -62,6 +62,12 @@ def _read_version_from_file(path: Path) -> str:
62
62
  version = _parse_package_json_version(path)
63
63
  else:
64
64
  version = _parse_plain_version(path)
65
+ if not version:
66
+ pytest.fail(
67
+ f"Could not read version from {path}. "
68
+ "Expected first non-comment line to contain a semver like "
69
+ "'1.2.3' or '1.2.3 - short summary'."
70
+ )
65
71
 
66
72
  if not version:
67
73
  pytest.fail(f"Could not read version from {path}")
@@ -127,11 +133,17 @@ def _parse_package_json_version(path: Path) -> Optional[str]:
127
133
 
128
134
 
129
135
  def _parse_plain_version(path: Path) -> Optional[str]:
136
+ version_pattern = re.compile(
137
+ r"\bv?(?P<version>\d+\.\d+(?:\.\d+)?(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?)\b"
138
+ )
130
139
  for line in path.read_text().splitlines():
131
140
  stripped = line.strip()
132
141
  if not stripped or stripped.startswith("#"):
133
142
  continue
134
- return stripped
143
+ match = version_pattern.search(stripped)
144
+ if match:
145
+ return match.group("version")
146
+ return None
135
147
  return None
136
148
 
137
149
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: atdd
3
- Version: 0.4.4
3
+ Version: 0.4.5
4
4
  Summary: ATDD Platform - Acceptance Test Driven Development toolkit
5
5
  License: MIT
6
6
  Requires-Python: >=3.10
@@ -58,14 +58,20 @@ atdd --help
58
58
  ```bash
59
59
  atdd init # Initialize ATDD in your project
60
60
  atdd gate # ⚠️ START EVERY SESSION WITH THIS
61
- atdd session new <capability> # Create a planning session
61
+ atdd session new <task> # Create a planning session
62
62
  atdd sync # Sync rules to agent config files
63
63
  atdd validate # Run all validators
64
64
  ```
65
65
 
66
66
  > **⚠️ `atdd gate` is required.**
67
67
  > 🤖 Tell your agent: "Run `atdd gate` and follow ATDD rigorously."
68
- > Agents skip instruction files but can't ignore tool output. No gate = no ATDD guarantees.
68
+ > Agents skip instruction files but can't ignore tool ou
69
+
70
+
71
+
72
+
73
+
74
+ tput. No gate = no ATDD guarantees.
69
75
 
70
76
  ## What It Does
71
77
 
@@ -232,14 +238,16 @@ atdd validate --html # With HTML report
232
238
 
233
239
  ### Release Versioning
234
240
 
235
- ATDD enforces release versioning via coach validators. Configure the version file and tag prefix in `.atdd/config.yaml`:
241
+ ATDD enforces release versioning via coach validators. Recommended: keep a single root `VERSION` file as the canonical source (first line like `1.2.3 - short summary`; trailing summary is ignored). Configure the version file and tag prefix in `.atdd/config.yaml`:
236
242
 
237
243
  ```yaml
238
244
  release:
239
- version_file: "pyproject.toml" # or package.json, VERSION, etc.
245
+ version_file: "VERSION" # recommended single source of truth
240
246
  tag_prefix: "v"
241
247
  ```
242
248
 
249
+ If you also publish with language-specific manifests (e.g., `pyproject.toml`, `package.json`), keep their version fields in sync with `VERSION`.
250
+
243
251
  Validation (`atdd validate coach` or `atdd validate`) requires:
244
252
  - Version file exists and contains a version
245
253
  - Git tag on HEAD matches `{tag_prefix}{version}`
@@ -28,7 +28,7 @@ atdd/coach/overlays/claude.md,sha256=33mhpqhmsRhCtdWlU7cMXAJDsaVra9uBBK8URV8OtQA
28
28
  atdd/coach/schemas/config.schema.json,sha256=CpePppEAB6WiLeWVgWW3EKOxlLvMHHcWisRnJL9z_SE,1863
29
29
  atdd/coach/schemas/manifest.schema.json,sha256=WO13-YF_FgH1awh96khCtk-112b6XSC24anlY3B7GjY,2885
30
30
  atdd/coach/templates/ATDD.md,sha256=MLbrVbCETJre4c05d5FXGuf6W95Hz9E0jpE4RI9r4cg,13237
31
- atdd/coach/templates/SESSION-TEMPLATE.md,sha256=gcmfDDD6rREI20vhWXlf01AGbRbR8Hh7Q4QZX4H-pVw,9455
31
+ atdd/coach/templates/SESSION-TEMPLATE.md,sha256=cGT_0x5KLbPHOCiuM8evLGpWKIlR-aggqxiBtbjSJoo,9478
32
32
  atdd/coach/utils/__init__.py,sha256=7Jbo-heJEKSAn6I0s35z_2S4R8qGZ48PL6a2IntcNYg,148
33
33
  atdd/coach/utils/repo.py,sha256=0kiF5WpVTen0nO14u5T0RflznZhgGco2i9CwKobOh38,3757
34
34
  atdd/coach/utils/graph/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -37,7 +37,7 @@ atdd/coach/validators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
37
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
- atdd/coach/validators/test_release_versioning.py,sha256=-H2hCRfdikVP54LHNDqW9IDmm6JLNBUZRdnF2uICvOI,5194
40
+ atdd/coach/validators/test_release_versioning.py,sha256=B40DfbtrSGguPc537zXmjT75hhySfocWLzJWqOKZQcU,5678
41
41
  atdd/coach/validators/test_session_validation.py,sha256=0VszXtFwRTO04b5CxDPO3klk0VfiqlpdbNpshjMn-qU,39079
42
42
  atdd/coach/validators/test_traceability.py,sha256=qTyobt41VBiCr6xRN2C7BPtGYvk_2poVQIe814Blt8E,15977
43
43
  atdd/coach/validators/test_update_feature_paths.py,sha256=zOKVDgEIpncSJwDh_shyyou5Pu-Ai7Z_XgF8zAbQVTA,4528
@@ -182,9 +182,9 @@ atdd/tester/validators/test_red_supabase_layer_structure.py,sha256=zbUjsMWSJE1MP
182
182
  atdd/tester/validators/test_telemetry_structure.py,sha256=uU5frZnxSlOn60iHyqhe7Pg9b0wrOV7N14D4S6Aw6TE,22626
183
183
  atdd/tester/validators/test_typescript_test_naming.py,sha256=E-TyGv_GVlTfsbyuxrtv9sOWSZS_QcpH6rrJFbWoeeU,11280
184
184
  atdd/tester/validators/test_typescript_test_structure.py,sha256=eV89SD1RaKtchBZupqhnJmaruoROosf3LwB4Fwe4UJI,2612
185
- atdd-0.4.4.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
186
- atdd-0.4.4.dist-info/METADATA,sha256=cBMNKGmx5Uyw5kwn_v6ezv-CKbuFd5QpsZ6hFG_rg9k,8426
187
- atdd-0.4.4.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
188
- atdd-0.4.4.dist-info/entry_points.txt,sha256=-C3yrA1WQQfN3iuGmSzPapA5cKVBEYU5Q1HUffSJTbY,38
189
- atdd-0.4.4.dist-info/top_level.txt,sha256=VKkf6Uiyrm4RS6ULCGM-v8AzYN8K2yg8SMqwJLoO-xs,5
190
- atdd-0.4.4.dist-info/RECORD,,
185
+ atdd-0.4.5.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
186
+ atdd-0.4.5.dist-info/METADATA,sha256=tMR-3urPv4DOZPD6Mx-9e94DMpuxX8DMhmNymzr9XQ0,8716
187
+ atdd-0.4.5.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
188
+ atdd-0.4.5.dist-info/entry_points.txt,sha256=-C3yrA1WQQfN3iuGmSzPapA5cKVBEYU5Q1HUffSJTbY,38
189
+ atdd-0.4.5.dist-info/top_level.txt,sha256=VKkf6Uiyrm4RS6ULCGM-v8AzYN8K2yg8SMqwJLoO-xs,5
190
+ atdd-0.4.5.dist-info/RECORD,,
File without changes