atdd 0.2.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.
Files changed (184) hide show
  1. atdd/__init__.py +6 -0
  2. atdd/__main__.py +4 -0
  3. atdd/cli.py +404 -0
  4. atdd/coach/__init__.py +0 -0
  5. atdd/coach/commands/__init__.py +0 -0
  6. atdd/coach/commands/add_persistence_metadata.py +215 -0
  7. atdd/coach/commands/analyze_migrations.py +188 -0
  8. atdd/coach/commands/consumers.py +720 -0
  9. atdd/coach/commands/infer_governance_status.py +149 -0
  10. atdd/coach/commands/initializer.py +177 -0
  11. atdd/coach/commands/interface.py +1078 -0
  12. atdd/coach/commands/inventory.py +565 -0
  13. atdd/coach/commands/migration.py +240 -0
  14. atdd/coach/commands/registry.py +1560 -0
  15. atdd/coach/commands/session.py +430 -0
  16. atdd/coach/commands/sync.py +405 -0
  17. atdd/coach/commands/test_interface.py +399 -0
  18. atdd/coach/commands/test_runner.py +141 -0
  19. atdd/coach/commands/tests/__init__.py +1 -0
  20. atdd/coach/commands/tests/test_telemetry_array_validation.py +235 -0
  21. atdd/coach/commands/traceability.py +4264 -0
  22. atdd/coach/conventions/session.convention.yaml +754 -0
  23. atdd/coach/overlays/__init__.py +2 -0
  24. atdd/coach/overlays/claude.md +2 -0
  25. atdd/coach/schemas/config.schema.json +34 -0
  26. atdd/coach/schemas/manifest.schema.json +101 -0
  27. atdd/coach/templates/ATDD.md +282 -0
  28. atdd/coach/templates/SESSION-TEMPLATE.md +327 -0
  29. atdd/coach/utils/__init__.py +0 -0
  30. atdd/coach/utils/graph/__init__.py +0 -0
  31. atdd/coach/utils/graph/urn.py +875 -0
  32. atdd/coach/validators/__init__.py +0 -0
  33. atdd/coach/validators/shared_fixtures.py +365 -0
  34. atdd/coach/validators/test_enrich_wagon_registry.py +167 -0
  35. atdd/coach/validators/test_registry.py +575 -0
  36. atdd/coach/validators/test_session_validation.py +1183 -0
  37. atdd/coach/validators/test_traceability.py +448 -0
  38. atdd/coach/validators/test_update_feature_paths.py +108 -0
  39. atdd/coach/validators/test_validate_contract_consumers.py +297 -0
  40. atdd/coder/__init__.py +1 -0
  41. atdd/coder/conventions/adapter.recipe.yaml +88 -0
  42. atdd/coder/conventions/backend.convention.yaml +460 -0
  43. atdd/coder/conventions/boundaries.convention.yaml +666 -0
  44. atdd/coder/conventions/commons.convention.yaml +460 -0
  45. atdd/coder/conventions/complexity.recipe.yaml +109 -0
  46. atdd/coder/conventions/component-naming.convention.yaml +178 -0
  47. atdd/coder/conventions/design.convention.yaml +327 -0
  48. atdd/coder/conventions/design.recipe.yaml +273 -0
  49. atdd/coder/conventions/dto.convention.yaml +660 -0
  50. atdd/coder/conventions/frontend.convention.yaml +542 -0
  51. atdd/coder/conventions/green.convention.yaml +1012 -0
  52. atdd/coder/conventions/presentation.convention.yaml +587 -0
  53. atdd/coder/conventions/refactor.convention.yaml +535 -0
  54. atdd/coder/conventions/technology.convention.yaml +206 -0
  55. atdd/coder/conventions/tests/__init__.py +0 -0
  56. atdd/coder/conventions/tests/test_adapter_recipe.py +302 -0
  57. atdd/coder/conventions/tests/test_complexity_recipe.py +289 -0
  58. atdd/coder/conventions/tests/test_component_taxonomy.py +278 -0
  59. atdd/coder/conventions/tests/test_component_urn_naming.py +165 -0
  60. atdd/coder/conventions/tests/test_thinness_recipe.py +286 -0
  61. atdd/coder/conventions/thinness.recipe.yaml +82 -0
  62. atdd/coder/conventions/train.convention.yaml +325 -0
  63. atdd/coder/conventions/verification.protocol.yaml +53 -0
  64. atdd/coder/schemas/design_system.schema.json +361 -0
  65. atdd/coder/validators/__init__.py +0 -0
  66. atdd/coder/validators/test_commons_structure.py +485 -0
  67. atdd/coder/validators/test_complexity.py +416 -0
  68. atdd/coder/validators/test_cross_language_consistency.py +431 -0
  69. atdd/coder/validators/test_design_system_compliance.py +413 -0
  70. atdd/coder/validators/test_dto_testing_patterns.py +268 -0
  71. atdd/coder/validators/test_green_cross_stack_layers.py +168 -0
  72. atdd/coder/validators/test_green_layer_dependencies.py +148 -0
  73. atdd/coder/validators/test_green_python_layer_structure.py +103 -0
  74. atdd/coder/validators/test_green_supabase_layer_structure.py +103 -0
  75. atdd/coder/validators/test_import_boundaries.py +396 -0
  76. atdd/coder/validators/test_init_file_urns.py +593 -0
  77. atdd/coder/validators/test_preact_layer_boundaries.py +221 -0
  78. atdd/coder/validators/test_presentation_convention.py +260 -0
  79. atdd/coder/validators/test_python_architecture.py +674 -0
  80. atdd/coder/validators/test_quality_metrics.py +420 -0
  81. atdd/coder/validators/test_station_master_pattern.py +244 -0
  82. atdd/coder/validators/test_train_infrastructure.py +454 -0
  83. atdd/coder/validators/test_train_urns.py +293 -0
  84. atdd/coder/validators/test_typescript_architecture.py +616 -0
  85. atdd/coder/validators/test_usecase_structure.py +421 -0
  86. atdd/coder/validators/test_wagon_boundaries.py +586 -0
  87. atdd/conftest.py +126 -0
  88. atdd/planner/__init__.py +1 -0
  89. atdd/planner/conventions/acceptance.convention.yaml +538 -0
  90. atdd/planner/conventions/appendix.convention.yaml +187 -0
  91. atdd/planner/conventions/artifact-naming.convention.yaml +852 -0
  92. atdd/planner/conventions/component.convention.yaml +670 -0
  93. atdd/planner/conventions/criteria.convention.yaml +141 -0
  94. atdd/planner/conventions/feature.convention.yaml +371 -0
  95. atdd/planner/conventions/interface.convention.yaml +382 -0
  96. atdd/planner/conventions/steps.convention.yaml +141 -0
  97. atdd/planner/conventions/train.convention.yaml +552 -0
  98. atdd/planner/conventions/wagon.convention.yaml +275 -0
  99. atdd/planner/conventions/wmbt.convention.yaml +258 -0
  100. atdd/planner/schemas/acceptance.schema.json +336 -0
  101. atdd/planner/schemas/appendix.schema.json +78 -0
  102. atdd/planner/schemas/component.schema.json +114 -0
  103. atdd/planner/schemas/feature.schema.json +197 -0
  104. atdd/planner/schemas/train.schema.json +192 -0
  105. atdd/planner/schemas/wagon.schema.json +281 -0
  106. atdd/planner/schemas/wmbt.schema.json +59 -0
  107. atdd/planner/validators/__init__.py +0 -0
  108. atdd/planner/validators/conftest.py +5 -0
  109. atdd/planner/validators/test_draft_wagon_registry.py +374 -0
  110. atdd/planner/validators/test_plan_cross_refs.py +240 -0
  111. atdd/planner/validators/test_plan_uniqueness.py +224 -0
  112. atdd/planner/validators/test_plan_urn_resolution.py +268 -0
  113. atdd/planner/validators/test_plan_wagons.py +174 -0
  114. atdd/planner/validators/test_train_validation.py +514 -0
  115. atdd/planner/validators/test_wagon_urn_chain.py +648 -0
  116. atdd/planner/validators/test_wmbt_consistency.py +327 -0
  117. atdd/planner/validators/test_wmbt_vocabulary.py +632 -0
  118. atdd/tester/__init__.py +1 -0
  119. atdd/tester/conventions/artifact.convention.yaml +257 -0
  120. atdd/tester/conventions/contract.convention.yaml +1009 -0
  121. atdd/tester/conventions/filename.convention.yaml +555 -0
  122. atdd/tester/conventions/migration.convention.yaml +509 -0
  123. atdd/tester/conventions/red.convention.yaml +797 -0
  124. atdd/tester/conventions/routing.convention.yaml +51 -0
  125. atdd/tester/conventions/telemetry.convention.yaml +458 -0
  126. atdd/tester/schemas/a11y.tmpl.json +17 -0
  127. atdd/tester/schemas/artifact.schema.json +189 -0
  128. atdd/tester/schemas/contract.schema.json +591 -0
  129. atdd/tester/schemas/contract.tmpl.json +95 -0
  130. atdd/tester/schemas/db.tmpl.json +20 -0
  131. atdd/tester/schemas/e2e.tmpl.json +17 -0
  132. atdd/tester/schemas/edge_function.tmpl.json +17 -0
  133. atdd/tester/schemas/event.tmpl.json +17 -0
  134. atdd/tester/schemas/http.tmpl.json +19 -0
  135. atdd/tester/schemas/job.tmpl.json +18 -0
  136. atdd/tester/schemas/load.tmpl.json +21 -0
  137. atdd/tester/schemas/metric.tmpl.json +19 -0
  138. atdd/tester/schemas/pack.schema.json +139 -0
  139. atdd/tester/schemas/realtime.tmpl.json +20 -0
  140. atdd/tester/schemas/rls.tmpl.json +18 -0
  141. atdd/tester/schemas/script.tmpl.json +16 -0
  142. atdd/tester/schemas/sec.tmpl.json +18 -0
  143. atdd/tester/schemas/storage.tmpl.json +18 -0
  144. atdd/tester/schemas/telemetry.schema.json +128 -0
  145. atdd/tester/schemas/telemetry_tracking_manifest.schema.json +143 -0
  146. atdd/tester/schemas/test_filename.schema.json +194 -0
  147. atdd/tester/schemas/test_intent.schema.json +179 -0
  148. atdd/tester/schemas/unit.tmpl.json +18 -0
  149. atdd/tester/schemas/visual.tmpl.json +18 -0
  150. atdd/tester/schemas/ws.tmpl.json +17 -0
  151. atdd/tester/utils/__init__.py +0 -0
  152. atdd/tester/utils/filename.py +300 -0
  153. atdd/tester/validators/__init__.py +0 -0
  154. atdd/tester/validators/cleanup_duplicate_headers.py +116 -0
  155. atdd/tester/validators/cleanup_duplicate_headers_v2.py +135 -0
  156. atdd/tester/validators/conftest.py +5 -0
  157. atdd/tester/validators/coverage_gap_report.py +321 -0
  158. atdd/tester/validators/fix_dual_ac_references.py +179 -0
  159. atdd/tester/validators/remove_duplicate_lines.py +93 -0
  160. atdd/tester/validators/test_acceptance_urn_filename_mapping.py +359 -0
  161. atdd/tester/validators/test_acceptance_urn_separator.py +166 -0
  162. atdd/tester/validators/test_artifact_naming_category.py +307 -0
  163. atdd/tester/validators/test_contract_schema_compliance.py +706 -0
  164. atdd/tester/validators/test_contracts_structure.py +200 -0
  165. atdd/tester/validators/test_coverage_adequacy.py +797 -0
  166. atdd/tester/validators/test_dual_ac_reference.py +225 -0
  167. atdd/tester/validators/test_fixture_validity.py +372 -0
  168. atdd/tester/validators/test_isolation.py +487 -0
  169. atdd/tester/validators/test_migration_coverage.py +204 -0
  170. atdd/tester/validators/test_migration_criteria.py +276 -0
  171. atdd/tester/validators/test_migration_generation.py +116 -0
  172. atdd/tester/validators/test_python_test_naming.py +410 -0
  173. atdd/tester/validators/test_red_layer_validation.py +95 -0
  174. atdd/tester/validators/test_red_python_layer_structure.py +87 -0
  175. atdd/tester/validators/test_red_supabase_layer_structure.py +90 -0
  176. atdd/tester/validators/test_telemetry_structure.py +634 -0
  177. atdd/tester/validators/test_typescript_test_naming.py +301 -0
  178. atdd/tester/validators/test_typescript_test_structure.py +84 -0
  179. atdd-0.2.1.dist-info/METADATA +221 -0
  180. atdd-0.2.1.dist-info/RECORD +184 -0
  181. atdd-0.2.1.dist-info/WHEEL +5 -0
  182. atdd-0.2.1.dist-info/entry_points.txt +2 -0
  183. atdd-0.2.1.dist-info/licenses/LICENSE +674 -0
  184. atdd-0.2.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,257 @@
1
+ # Artifact Convention
2
+ # Defines naming, versioning, organization, and API mapping rules for artifact-centric contracts
3
+
4
+ description: "Artifact-centric contract system uses shared schemas organized by domain"
5
+
6
+ naming:
7
+ logical_pattern: "{domain}:{resource}[.{category}]"
8
+ physical_pattern: "contracts/{domain}/{resource}[/{category}].json"
9
+ rationale: "Domain-based organization enables REST API mapping and clear ownership. Colon separator denotes hierarchy (domain:resource), dot separator denotes facet (resource.category). Optional category facet supports nested resources like ux:foundations.colors."
10
+
11
+ examples:
12
+ - logical: "ux:foundations"
13
+ physical: "contracts/commons/ux/foundations.json"
14
+
15
+ - logical: "ux:foundations.colors"
16
+ physical: "contracts/commons/ux/foundations/colors.json"
17
+
18
+ - logical: "mechanic:decision.choice"
19
+ physical: "contracts/decision/choice.json"
20
+
21
+ - logical: "match:result"
22
+ physical: "contracts/match/result.json"
23
+
24
+ versioning:
25
+ location: "$id field"
26
+ filename_pattern: "{domain}/{resource}[/{category}].json"
27
+ id_pattern: "{domain}:{resource}[.{category}]:{version}"
28
+ rationale: "Version tracked in $id field, not filename. Supports monolithic deployment with coordinated releases. Breaking changes require coordinated updates across all consumers. Category facet preserved in ID with dot separator."
29
+
30
+ examples:
31
+ - artifact: "ux/foundations.json"
32
+ id_field: "ux:foundations:v1"
33
+ version_field: "1.0.0"
34
+
35
+ - artifact: "ux/foundations/colors.json"
36
+ id_field: "ux:foundations.colors:v1"
37
+ version_field: "1.0.0"
38
+
39
+ - artifact: "decision/choice.json"
40
+ id_field: "mechanic:decision.choice:v1"
41
+ version_field: "1.0.0"
42
+
43
+ - artifact: "match/result.json"
44
+ id_field: "match:result:v1"
45
+ version_field: "1.2.3"
46
+
47
+ organization:
48
+ strategy: "by_domain"
49
+ directory_structure: "contracts/{domain}/"
50
+ rationale: "Domain-based directories enable natural mapping to REST API endpoints. Each domain represents a resource collection with multiple artifact types (new, result, updated, config, etc.). Category facets create nested directories when present."
51
+
52
+ structure:
53
+ root: "contracts/"
54
+ domains:
55
+ - "ux/"
56
+ - "decision/"
57
+ - "match/"
58
+ - "player/"
59
+ - "session/"
60
+ - "dilemma/"
61
+ - "pacing/"
62
+
63
+ api_mapping:
64
+ description: "Artifact names map to REST API endpoints for external consumption. Category facets add path segments."
65
+ pattern: "/{domain}s/{id}/{resource}[/{category}]"
66
+
67
+ methods:
68
+ new: POST
69
+ created: POST
70
+ registered: POST
71
+ started: POST
72
+ result: GET
73
+ active: GET
74
+ config: GET
75
+ events: GET
76
+ current: GET
77
+ foundations: GET
78
+ updated: PUT
79
+ closed: PUT
80
+ completed: PUT
81
+ terminated: DELETE
82
+ deleted: DELETE
83
+
84
+ examples:
85
+ - artifact: "ux:foundations"
86
+ endpoint: "GET /uxs/{id}/foundations"
87
+ description: "Retrieve UX foundations"
88
+
89
+ - artifact: "ux:foundations.colors"
90
+ endpoint: "GET /uxs/{id}/foundations/colors"
91
+ description: "Retrieve UX color foundations"
92
+
93
+ - artifact: "match:result"
94
+ endpoint: "GET /matches/{id}/result"
95
+ description: "Retrieve match result"
96
+
97
+ - artifact: "session:new"
98
+ endpoint: "POST /sessions"
99
+ description: "Create new session"
100
+
101
+ - artifact: "player:identity"
102
+ endpoint: "GET /players/{id}"
103
+ description: "Retrieve player identity"
104
+
105
+ - artifact: "match:config"
106
+ endpoint: "GET /matches/{id}/config"
107
+ description: "Retrieve match configuration"
108
+
109
+ - artifact: "player:updated"
110
+ endpoint: "PUT /players/{id}"
111
+ description: "Update player"
112
+
113
+ - artifact: "match:terminated"
114
+ endpoint: "DELETE /matches/{id}"
115
+ description: "Terminate match"
116
+
117
+ ownership:
118
+ producer: "Generates artifact contract (wagon that declares artifact in produce[])"
119
+ consumer: "References existing contract (wagon that declares artifact in consume[])"
120
+ single_source: "One artifact = one JSON file. Multiple wagons reference same file. Zero duplication."
121
+
122
+ rules:
123
+ - "Producer wagon owns the artifact schema generation"
124
+ - "Consumer wagon validates artifact existence and references it"
125
+ - "Artifact path declared in wagon manifest contract: field"
126
+ - "Only producer generates; consumers must never modify"
127
+
128
+ metadata:
129
+ description: "Artifact schemas include x-artifact-metadata for tooling and API generation"
130
+
131
+ fields:
132
+ domain: "Resource collection (match, player, session)"
133
+ resource: "Specific artifact type (result, new, updated)"
134
+ api:
135
+ method: "HTTP method (GET, POST, PUT, DELETE)"
136
+ path: "REST endpoint path"
137
+
138
+ example:
139
+ domain: "match"
140
+ resource: "result"
141
+ api:
142
+ method: "GET"
143
+ path: "/matches/{id}/result"
144
+
145
+ validation:
146
+ required_fields: ["$schema", "$id", "version", "title", "type", "properties"]
147
+ schema_compliance: "JSON Schema Draft-07"
148
+ id_pattern: "^[a-z]+:[a-z][a-z0-9-]+(?:\\.[a-z0-9-]+)*:v\\d+$"
149
+ version_pattern: "^\\d+\\.\\d+\\.\\d+$"
150
+
151
+ artifact_urns:
152
+ urn_pattern:
153
+ format: "contract:{domain}:{resource}[.{category}]"
154
+ conversion_rule: "Keep colon for hierarchy (domain:resource); append category as a dot facet when present (resource.category)."
155
+
156
+ examples:
157
+ artifact_to_urn:
158
+ - artifact_name: "ux:foundations"
159
+ urn: "contract:ux:foundations"
160
+
161
+ - artifact_name: "ux:foundations.colors"
162
+ urn: "contract:ux:foundations.colors"
163
+
164
+ - artifact_name: "mechanic:decision.choice"
165
+ urn: "contract:mechanic:decision.choice"
166
+
167
+ bidirectional_linkage:
168
+ validation: "URN must resolve to a contract in the registry (including optional .category facet)."
169
+
170
+ migration_strategy:
171
+ refactor_note: "Legacy URNs contract:{domain}.{resource} → contract:{domain}:{resource}; category stays as a dot facet: contract:{domain}:{resource}.{category}"
172
+
173
+ wagon_artifacts:
174
+ produce_example:
175
+ wagon: "maintain-ux"
176
+ produce:
177
+ - name: "ux:foundations"
178
+ urn: "contract:ux:foundations"
179
+ to: "external"
180
+
181
+ - name: "ux:foundations.colors"
182
+ urn: "contract:ux:foundations.colors"
183
+ to: "external"
184
+
185
+ consume_example:
186
+ wagon: "stage-characters"
187
+ consume:
188
+ - name: "ux:foundations"
189
+ urn: "contract:ux:foundations"
190
+ from: "wagon:maintain-ux"
191
+
192
+ contract_artifacts:
193
+ id_field: "id: {domain}:{resource}[.{category}]:v{version}"
194
+ urn_mapping: "URN contract:{domain}:{resource}[.{category}] maps to any version of id {domain}:{resource}[.{category}]:v*"
195
+
196
+ example:
197
+ - id: "ux:foundations:v1"
198
+ version: "1.0.0"
199
+ path: "ux/foundations.json"
200
+ producer: "wagon:maintain-ux"
201
+ urn_match: "contract:ux:foundations"
202
+
203
+ - id: "ux:foundations.colors:v1"
204
+ version: "1.0.0"
205
+ path: "ux/foundations/colors.json"
206
+ producer: "wagon:maintain-ux"
207
+ urn_match: "contract:ux:foundations.colors"
208
+
209
+ demo_mode:
210
+ description: "Artifacts write to demo/contracts/artifacts/ when mode_demo: true"
211
+ path_prefix: "demo/contracts/artifacts/"
212
+
213
+ examples:
214
+ complete_workflow:
215
+ - step: "Wagon declares artifact in produce[]"
216
+ example: |
217
+ produce:
218
+ - name: mechanic:decision.choice
219
+ to: external
220
+ contract: contracts/artifacts/decision/choice.json
221
+
222
+ - step: "Tester agent classifies artifact ownership"
223
+ result: "producer: true, path: decision/choice.json"
224
+
225
+ - step: "Schema generation creates artifact"
226
+ output: "contracts/artifacts/decision/choice.json"
227
+ content: |
228
+ {
229
+ "$schema": "http://json-schema.org/draft-07/schema#",
230
+ "$id": "mechanic:decision.choice:v1",
231
+ "version": "1.0.0",
232
+ "title": "Decision Choice",
233
+ "type": "object",
234
+ "properties": {...},
235
+ "x-artifact-metadata": {
236
+ "domain": "decision",
237
+ "resource": "choice",
238
+ "api": {
239
+ "method": "POST",
240
+ "path": "/decisions"
241
+ }
242
+ }
243
+ }
244
+
245
+ - step: "Consumer wagon references artifact"
246
+ example: |
247
+ consume:
248
+ - name: mechanic:decision.choice
249
+ from: wagon:resolve-dilemmas
250
+ contract: contracts/artifacts/decision/choice.json
251
+
252
+ - step: "Pack generation references (not embeds) artifact"
253
+ pack_manifest: |
254
+ produce:
255
+ - artifact: mechanic:decision.choice
256
+ contract: ../artifacts/decision/choice.json
257
+ owner: true