atdd 0.7.3__tar.gz → 0.7.5__tar.gz

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 (218) hide show
  1. {atdd-0.7.3/src/atdd.egg-info → atdd-0.7.5}/PKG-INFO +1 -1
  2. {atdd-0.7.3 → atdd-0.7.5}/pyproject.toml +1 -1
  3. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/commands/inventory.py +70 -8
  4. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/planner/conventions/wagon.convention.yaml +27 -19
  5. atdd-0.7.5/src/atdd/tester/conventions/artifact.convention.yaml +276 -0
  6. atdd-0.7.5/src/atdd/tester/validators/test_artifact_naming_category.py +294 -0
  7. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/validators/test_contracts_structure.py +5 -2
  8. {atdd-0.7.3 → atdd-0.7.5/src/atdd.egg-info}/PKG-INFO +1 -1
  9. atdd-0.7.3/src/atdd/tester/conventions/artifact.convention.yaml +0 -257
  10. atdd-0.7.3/src/atdd/tester/validators/test_artifact_naming_category.py +0 -307
  11. {atdd-0.7.3 → atdd-0.7.5}/LICENSE +0 -0
  12. {atdd-0.7.3 → atdd-0.7.5}/README.md +0 -0
  13. {atdd-0.7.3 → atdd-0.7.5}/setup.cfg +0 -0
  14. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/__init__.py +0 -0
  15. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/__main__.py +0 -0
  16. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/cli.py +0 -0
  17. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/__init__.py +0 -0
  18. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/commands/__init__.py +0 -0
  19. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/commands/add_persistence_metadata.py +0 -0
  20. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/commands/analyze_migrations.py +0 -0
  21. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/commands/consumers.py +0 -0
  22. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/commands/gate.py +0 -0
  23. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/commands/infer_governance_status.py +0 -0
  24. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/commands/initializer.py +0 -0
  25. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/commands/interface.py +0 -0
  26. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/commands/migration.py +0 -0
  27. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/commands/registry.py +0 -0
  28. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/commands/session.py +0 -0
  29. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/commands/sync.py +0 -0
  30. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/commands/test_interface.py +0 -0
  31. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/commands/test_runner.py +0 -0
  32. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/commands/tests/__init__.py +0 -0
  33. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/commands/tests/test_telemetry_array_validation.py +0 -0
  34. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/commands/traceability.py +0 -0
  35. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/conventions/naming.convention.yaml +0 -0
  36. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/conventions/session.convention.yaml +0 -0
  37. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/overlays/__init__.py +0 -0
  38. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/overlays/claude.md +0 -0
  39. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/schemas/config.schema.json +0 -0
  40. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/schemas/manifest.schema.json +0 -0
  41. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/templates/ATDD.md +0 -0
  42. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/templates/SESSION-TEMPLATE.md +0 -0
  43. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/utils/__init__.py +0 -0
  44. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/utils/config.py +0 -0
  45. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/utils/coverage_phase.py +0 -0
  46. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/utils/graph/__init__.py +0 -0
  47. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/utils/graph/urn.py +0 -0
  48. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/utils/locale_phase.py +0 -0
  49. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/utils/repo.py +0 -0
  50. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/utils/train_spec_phase.py +0 -0
  51. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/validators/__init__.py +0 -0
  52. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/validators/shared_fixtures.py +0 -0
  53. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/validators/test_enrich_wagon_registry.py +0 -0
  54. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/validators/test_registry.py +0 -0
  55. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/validators/test_release_versioning.py +0 -0
  56. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/validators/test_session_archive_status.py +0 -0
  57. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/validators/test_session_manifest_alignment.py +0 -0
  58. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/validators/test_session_validation.py +0 -0
  59. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/validators/test_traceability.py +0 -0
  60. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/validators/test_train_registry.py +0 -0
  61. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/validators/test_update_feature_paths.py +0 -0
  62. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coach/validators/test_validate_contract_consumers.py +0 -0
  63. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/__init__.py +0 -0
  64. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/conventions/adapter.recipe.yaml +0 -0
  65. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/conventions/backend.convention.yaml +0 -0
  66. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/conventions/boundaries.convention.yaml +0 -0
  67. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/conventions/commons.convention.yaml +0 -0
  68. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/conventions/complexity.recipe.yaml +0 -0
  69. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/conventions/component-naming.convention.yaml +0 -0
  70. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/conventions/coverage.convention.yaml +0 -0
  71. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/conventions/design.convention.yaml +0 -0
  72. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/conventions/design.recipe.yaml +0 -0
  73. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/conventions/dto.convention.yaml +0 -0
  74. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/conventions/frontend.convention.yaml +0 -0
  75. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/conventions/green.convention.yaml +0 -0
  76. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/conventions/presentation.convention.yaml +0 -0
  77. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/conventions/refactor.convention.yaml +0 -0
  78. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/conventions/technology.convention.yaml +0 -0
  79. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/conventions/tests/__init__.py +0 -0
  80. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/conventions/tests/test_adapter_recipe.py +0 -0
  81. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/conventions/tests/test_complexity_recipe.py +0 -0
  82. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/conventions/tests/test_component_taxonomy.py +0 -0
  83. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/conventions/tests/test_component_urn_naming.py +0 -0
  84. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/conventions/tests/test_thinness_recipe.py +0 -0
  85. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/conventions/thinness.recipe.yaml +0 -0
  86. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/conventions/train.convention.yaml +0 -0
  87. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/conventions/verification.protocol.yaml +0 -0
  88. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/schemas/design_system.schema.json +0 -0
  89. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/validators/__init__.py +0 -0
  90. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/validators/conftest.py +0 -0
  91. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/validators/test_commons_structure.py +0 -0
  92. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/validators/test_complexity.py +0 -0
  93. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/validators/test_cross_language_consistency.py +0 -0
  94. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/validators/test_design_system_compliance.py +0 -0
  95. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/validators/test_dto_testing_patterns.py +0 -0
  96. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/validators/test_green_cross_stack_layers.py +0 -0
  97. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/validators/test_green_layer_dependencies.py +0 -0
  98. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/validators/test_green_python_layer_structure.py +0 -0
  99. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/validators/test_green_supabase_layer_structure.py +0 -0
  100. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/validators/test_hierarchy_coverage.py +0 -0
  101. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/validators/test_i18n_runtime.py +0 -0
  102. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/validators/test_import_boundaries.py +0 -0
  103. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/validators/test_init_file_urns.py +0 -0
  104. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/validators/test_preact_layer_boundaries.py +0 -0
  105. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/validators/test_presentation_convention.py +0 -0
  106. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/validators/test_python_architecture.py +0 -0
  107. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/validators/test_quality_metrics.py +0 -0
  108. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/validators/test_station_master_pattern.py +0 -0
  109. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/validators/test_train_infrastructure.py +0 -0
  110. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/validators/test_train_urns.py +0 -0
  111. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/validators/test_typescript_architecture.py +0 -0
  112. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/validators/test_usecase_structure.py +0 -0
  113. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/coder/validators/test_wagon_boundaries.py +0 -0
  114. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/conftest.py +0 -0
  115. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/planner/__init__.py +0 -0
  116. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/planner/conventions/acceptance.convention.yaml +0 -0
  117. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/planner/conventions/appendix.convention.yaml +0 -0
  118. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/planner/conventions/artifact-naming.convention.yaml +0 -0
  119. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/planner/conventions/component.convention.yaml +0 -0
  120. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/planner/conventions/coverage.convention.yaml +0 -0
  121. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/planner/conventions/criteria.convention.yaml +0 -0
  122. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/planner/conventions/feature.convention.yaml +0 -0
  123. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/planner/conventions/interface.convention.yaml +0 -0
  124. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/planner/conventions/steps.convention.yaml +0 -0
  125. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/planner/conventions/train.convention.yaml +0 -0
  126. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/planner/conventions/wmbt.convention.yaml +0 -0
  127. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/planner/schemas/acceptance.schema.json +0 -0
  128. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/planner/schemas/appendix.schema.json +0 -0
  129. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/planner/schemas/component.schema.json +0 -0
  130. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/planner/schemas/feature.schema.json +0 -0
  131. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/planner/schemas/train.schema.json +0 -0
  132. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/planner/schemas/wagon.schema.json +0 -0
  133. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/planner/schemas/wmbt.schema.json +0 -0
  134. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/planner/validators/__init__.py +0 -0
  135. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/planner/validators/conftest.py +0 -0
  136. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/planner/validators/test_draft_wagon_registry.py +0 -0
  137. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/planner/validators/test_hierarchy_coverage.py +0 -0
  138. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/planner/validators/test_plan_cross_refs.py +0 -0
  139. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/planner/validators/test_plan_uniqueness.py +0 -0
  140. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/planner/validators/test_plan_urn_resolution.py +0 -0
  141. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/planner/validators/test_plan_wagons.py +0 -0
  142. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/planner/validators/test_train_validation.py +0 -0
  143. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/planner/validators/test_wagon_urn_chain.py +0 -0
  144. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/planner/validators/test_wmbt_consistency.py +0 -0
  145. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/planner/validators/test_wmbt_vocabulary.py +0 -0
  146. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/__init__.py +0 -0
  147. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/conventions/contract.convention.yaml +0 -0
  148. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/conventions/coverage.convention.yaml +0 -0
  149. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/conventions/filename.convention.yaml +0 -0
  150. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/conventions/migration.convention.yaml +0 -0
  151. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/conventions/red.convention.yaml +0 -0
  152. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/conventions/routing.convention.yaml +0 -0
  153. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/conventions/security.convention.yaml +0 -0
  154. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/conventions/telemetry.convention.yaml +0 -0
  155. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/schemas/a11y.tmpl.json +0 -0
  156. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/schemas/artifact.schema.json +0 -0
  157. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/schemas/contract.schema.json +0 -0
  158. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/schemas/contract.tmpl.json +0 -0
  159. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/schemas/db.tmpl.json +0 -0
  160. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/schemas/e2e.tmpl.json +0 -0
  161. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/schemas/edge_function.tmpl.json +0 -0
  162. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/schemas/event.tmpl.json +0 -0
  163. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/schemas/http.tmpl.json +0 -0
  164. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/schemas/job.tmpl.json +0 -0
  165. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/schemas/load.tmpl.json +0 -0
  166. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/schemas/locale_manifest.schema.json +0 -0
  167. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/schemas/metric.tmpl.json +0 -0
  168. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/schemas/pack.schema.json +0 -0
  169. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/schemas/realtime.tmpl.json +0 -0
  170. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/schemas/rls.tmpl.json +0 -0
  171. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/schemas/script.tmpl.json +0 -0
  172. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/schemas/sec.tmpl.json +0 -0
  173. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/schemas/storage.tmpl.json +0 -0
  174. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/schemas/telemetry.schema.json +0 -0
  175. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/schemas/telemetry_tracking_manifest.schema.json +0 -0
  176. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/schemas/test_filename.schema.json +0 -0
  177. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/schemas/test_intent.schema.json +0 -0
  178. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/schemas/unit.tmpl.json +0 -0
  179. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/schemas/visual.tmpl.json +0 -0
  180. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/schemas/ws.tmpl.json +0 -0
  181. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/utils/__init__.py +0 -0
  182. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/utils/filename.py +0 -0
  183. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/validators/__init__.py +0 -0
  184. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/validators/cleanup_duplicate_headers.py +0 -0
  185. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/validators/cleanup_duplicate_headers_v2.py +0 -0
  186. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/validators/conftest.py +0 -0
  187. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/validators/coverage_gap_report.py +0 -0
  188. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/validators/fix_dual_ac_references.py +0 -0
  189. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/validators/remove_duplicate_lines.py +0 -0
  190. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/validators/test_acceptance_urn_filename_mapping.py +0 -0
  191. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/validators/test_acceptance_urn_separator.py +0 -0
  192. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/validators/test_contract_schema_compliance.py +0 -0
  193. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/validators/test_contract_security.py +0 -0
  194. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/validators/test_coverage_adequacy.py +0 -0
  195. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/validators/test_dual_ac_reference.py +0 -0
  196. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/validators/test_fixture_validity.py +0 -0
  197. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/validators/test_hierarchy_coverage.py +0 -0
  198. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/validators/test_isolation.py +0 -0
  199. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/validators/test_locale_coverage.py +0 -0
  200. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/validators/test_migration_coverage.py +0 -0
  201. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/validators/test_migration_criteria.py +0 -0
  202. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/validators/test_migration_generation.py +0 -0
  203. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/validators/test_python_test_naming.py +0 -0
  204. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/validators/test_red_layer_validation.py +0 -0
  205. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/validators/test_red_python_layer_structure.py +0 -0
  206. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/validators/test_red_supabase_layer_structure.py +0 -0
  207. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/validators/test_telemetry_structure.py +0 -0
  208. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/validators/test_train_backend_e2e.py +0 -0
  209. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/validators/test_train_frontend_e2e.py +0 -0
  210. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/validators/test_train_frontend_python.py +0 -0
  211. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/validators/test_typescript_test_naming.py +0 -0
  212. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/tester/validators/test_typescript_test_structure.py +0 -0
  213. {atdd-0.7.3 → atdd-0.7.5}/src/atdd/version_check.py +0 -0
  214. {atdd-0.7.3 → atdd-0.7.5}/src/atdd.egg-info/SOURCES.txt +0 -0
  215. {atdd-0.7.3 → atdd-0.7.5}/src/atdd.egg-info/dependency_links.txt +0 -0
  216. {atdd-0.7.3 → atdd-0.7.5}/src/atdd.egg-info/entry_points.txt +0 -0
  217. {atdd-0.7.3 → atdd-0.7.5}/src/atdd.egg-info/requires.txt +0 -0
  218. {atdd-0.7.3 → atdd-0.7.5}/src/atdd.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: atdd
3
- Version: 0.7.3
3
+ Version: 0.7.5
4
4
  Summary: ATDD Platform - Acceptance Test Driven Development toolkit
5
5
  License: MIT
6
6
  Requires-Python: >=3.10
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "atdd"
7
- version = "0.7.3"
7
+ version = "0.7.5"
8
8
  description = "ATDD Platform - Acceptance Test Driven Development toolkit"
9
9
  requires-python = ">=3.10"
10
10
  readme = "README.md"
@@ -302,27 +302,89 @@ class RepositoryInventory:
302
302
  }
303
303
 
304
304
  def scan_telemetry(self) -> Dict[str, Any]:
305
- """Scan telemetry/ for signal definitions."""
305
+ """Scan telemetry/ for signal definitions.
306
+
307
+ Signal file pattern: {aspect}.{type}.{plane}[.{measure}].json
308
+ Examples: metric.ui.duration.json, event.be.json
309
+
310
+ Excludes: _telemetry.yaml, _taxonomy.yaml, .pack.* files
311
+ Falls back to _telemetry.yaml registry if no signal files found.
312
+ """
306
313
  telemetry_dir = self.repo_root / "telemetry"
307
314
 
308
315
  if not telemetry_dir.exists():
309
- return {"total": 0, "by_domain": {}}
316
+ return {"total": 0, "by_theme": {}, "source": "none"}
317
+
318
+ # Find JSON signal files (primary) and YAML signal files (legacy)
319
+ json_files = list(telemetry_dir.glob("**/*.json"))
320
+ yaml_files = list(telemetry_dir.glob("**/*.yaml"))
310
321
 
311
- # Find all signal files
312
- signal_files = list(telemetry_dir.glob("**/*.signal.yaml"))
322
+ # Filter out manifest/registry/pack files
323
+ def is_signal_file(f: Path) -> bool:
324
+ name = f.name
325
+ # Exclude registry and manifest files
326
+ if name.startswith("_"):
327
+ return False
328
+ # Exclude pack files
329
+ if ".pack." in name:
330
+ return False
331
+ return True
313
332
 
314
- by_domain = defaultdict(int)
333
+ signal_files = [f for f in json_files + yaml_files if is_signal_file(f)]
334
+
335
+ by_theme = defaultdict(int)
315
336
 
316
337
  for signal_file in signal_files:
317
338
  rel_path = signal_file.relative_to(telemetry_dir)
318
- domain = rel_path.parts[0] if rel_path.parts else "unknown"
319
- by_domain[domain] += 1
339
+ # First path segment is theme (per artifact-naming.convention.yaml v2.1)
340
+ theme = rel_path.parts[0] if rel_path.parts else "unknown"
341
+ by_theme[theme] += 1
342
+
343
+ # If no signal files found, fallback to registry
344
+ if not signal_files:
345
+ return self._scan_telemetry_from_registry(telemetry_dir)
320
346
 
321
347
  return {
322
348
  "total": len(signal_files),
323
- "by_domain": dict(by_domain)
349
+ "by_theme": dict(by_theme),
350
+ "source": "files"
324
351
  }
325
352
 
353
+ def _scan_telemetry_from_registry(self, telemetry_dir: Path) -> Dict[str, Any]:
354
+ """Fallback: count telemetry entries from _telemetry.yaml registry."""
355
+ registry_file = telemetry_dir / "_telemetry.yaml"
356
+
357
+ if not registry_file.exists():
358
+ return {"total": 0, "by_theme": {}, "source": "none"}
359
+
360
+ try:
361
+ with open(registry_file, 'r', encoding='utf-8') as f:
362
+ registry = yaml.safe_load(f) or {}
363
+
364
+ signals = registry.get("signals", [])
365
+ by_theme = defaultdict(int)
366
+ valid_count = 0
367
+
368
+ for signal in signals:
369
+ # Only count signals with non-empty ids
370
+ signal_id = signal.get("id") or signal.get("$id", "")
371
+ if not signal_id:
372
+ continue
373
+
374
+ valid_count += 1
375
+ # Parse theme from id (first segment before colon)
376
+ parts = signal_id.split(":")
377
+ theme = parts[0] if parts else "unknown"
378
+ by_theme[theme] += 1
379
+
380
+ return {
381
+ "total": valid_count,
382
+ "by_theme": dict(by_theme),
383
+ "source": "registry"
384
+ }
385
+ except Exception:
386
+ return {"total": 0, "by_theme": {}, "source": "error"}
387
+
326
388
  def count_test_cases_in_file(self, test_file: Path) -> int:
327
389
  """Count number of test functions/cases in a test file."""
328
390
  try:
@@ -177,30 +177,35 @@ artifact_contracts:
177
177
  note: "Full artifact contract conventions defined in artifact.convention.yaml"
178
178
 
179
179
  urn_format:
180
- contract_urn: "contract:domain:resource (e.g., contract:ux:foundations, contract:match:result)"
181
- telemetry_urn: "telemetry:domain:resource[.category] (e.g., telemetry:ux:foundations, telemetry:ux:foundations.colors)"
180
+ contract_urn: "contract:{theme}(:{category})*:{aspect}(.{variant})?"
181
+ telemetry_urn: "telemetry:{theme}(:{category})*:{aspect}(.{variant})?"
182
+ examples:
183
+ - "contract:commons:ux:foundations:color"
184
+ - "contract:mechanic:decision.choice"
185
+ - "contract:sensory:gesture.raw"
186
+ - "telemetry:commons:ux:foundations"
182
187
 
183
188
  telemetry_filesystem:
184
189
  description: "Telemetry URN maps to filesystem directory containing signal files"
185
- pattern: "telemetry/{domain}/{resource}[/{category}]/{signal-type}.{plane}[.{measure}].json"
186
- urn_to_path: "telemetry:{domain}:{resource}[.{category}] → telemetry/{domain}/{resource}[/{category}]/"
190
+ pattern: "telemetry/{segments}/{signal-type}.{plane}[.{measure}].json"
191
+ urn_to_path: "telemetry:{theme}:{segments} → telemetry/{theme}/{segments}/"
187
192
 
188
193
  examples:
189
194
  - urn: "telemetry:mechanic:decision.choice"
190
- path: "telemetry/decision/choice/"
195
+ path: "telemetry/mechanic/decision/choice/"
191
196
  files:
192
197
  - "metric.db.count.json"
193
198
  - "metric.be.duration.json"
194
199
  - "event.be.json"
195
200
 
196
- - urn: "telemetry:ux:foundations"
197
- path: "telemetry/ux/foundations/"
201
+ - urn: "telemetry:commons:ux:foundations"
202
+ path: "telemetry/commons/ux/foundations/"
198
203
  files:
199
204
  - "metric.ui.render_latency.json"
200
205
  - "event.ui.json"
201
206
 
202
- - urn: "telemetry:ux:foundations.colors"
203
- path: "telemetry/ux/foundations/colors/"
207
+ - urn: "telemetry:commons:ux:foundations:color"
208
+ path: "telemetry/commons/ux/foundations/color/"
204
209
  files:
205
210
  - "metric.ui.render_latency.json"
206
211
  - "event.ui.json"
@@ -222,18 +227,21 @@ artifact_contracts:
222
227
 
223
228
  produce_artifacts:
224
229
  required_fields:
225
- - name: "Artifact name (e.g., ux:foundations)"
226
- - contract: "Contract URN or null (e.g., contract:ux:foundations)"
227
- - telemetry: "Telemetry URN for observability and analytics or null (e.g., telemetry:ux:foundations)"
230
+ - name: "Artifact name (e.g., commons:ux:foundations)"
231
+ - contract: "Contract URN or null (e.g., contract:commons:ux:foundations)"
232
+ - telemetry: "Telemetry URN for observability and analytics or null (e.g., telemetry:commons:ux:foundations)"
228
233
  optional_fields:
229
234
  - to: "Visibility (internal|external), defaults to external"
230
235
  - urn: "Legacy artifact URN"
231
236
  - version: "Version string (e.g., v1)"
232
237
 
233
238
  example:
234
- - name: ux:foundations
235
- contract: contract:ux:foundations
236
- telemetry: telemetry:ux:foundations
239
+ - name: commons:ux:foundations
240
+ contract: contract:commons:ux:foundations
241
+ telemetry: telemetry:commons:ux:foundations
242
+ - name: commons:ux:foundations:color
243
+ contract: contract:commons:ux:foundations:color
244
+ telemetry: telemetry:commons:ux:foundations:color
237
245
  - name: internal:cache
238
246
  contract: null
239
247
  telemetry: null
@@ -251,10 +259,10 @@ artifact_contracts:
251
259
 
252
260
  example:
253
261
  - name: appendix:mockup
254
- - name: match:config
255
- from: wagon:setup-match
256
- contract: contract:match:config
257
- telemetry: telemetry:match:config
262
+ - name: commons:ux:foundations
263
+ from: wagon:maintain-ux
264
+ contract: contract:commons:ux:foundations
265
+ telemetry: telemetry:commons:ux:foundations
258
266
 
259
267
  features_format:
260
268
  legacy_format:
@@ -0,0 +1,276 @@
1
+ # Artifact Convention
2
+ # Defines naming, versioning, organization, and API mapping rules for artifact-centric contracts
3
+ # Aligned with canonical artifact-naming.convention.yaml v2.1
4
+
5
+ description: "Artifact-centric contract system using theme-based hierarchical taxonomy with variant facets"
6
+
7
+ naming:
8
+ logical_pattern: "{theme}(:{category})*:{aspect}(.{variant})?"
9
+ physical_pattern: "contracts/{theme}/{segments}/{aspect}[/{variant}].schema.json"
10
+ rationale: "Theme-based organization enables clear architectural boundaries. Colon separator denotes hierarchical descent (unlimited depth), dot separator denotes lateral variant (typically 0-1). Each segment becomes a directory level."
11
+
12
+ examples:
13
+ - logical: "commons:ux:foundations"
14
+ physical: "contracts/commons/ux/foundations.schema.json"
15
+
16
+ - logical: "commons:ux:foundations:color"
17
+ physical: "contracts/commons/ux/foundations/color.schema.json"
18
+
19
+ - logical: "mechanic:decision.choice"
20
+ physical: "contracts/mechanic/decision/choice.schema.json"
21
+
22
+ - logical: "match:result"
23
+ physical: "contracts/match/result.schema.json"
24
+
25
+ - logical: "sensory:gesture.raw"
26
+ physical: "contracts/sensory/gesture/raw.schema.json"
27
+
28
+ versioning:
29
+ location: "Separate version field"
30
+ filename_pattern: "{segments}.schema.json"
31
+ id_pattern: "{artifact_name}"
32
+ version_field: "version"
33
+ rationale: "Version tracked in separate 'version' field, NOT embedded in $id. Allows artifact identity to remain stable across versions. Supports monolithic deployment with coordinated releases."
34
+
35
+ examples:
36
+ - artifact: "commons/ux/foundations/color.schema.json"
37
+ id_field: "commons:ux:foundations:color"
38
+ version_field: "1.0.0"
39
+
40
+ - artifact: "mechanic/decision/choice.schema.json"
41
+ id_field: "mechanic:decision.choice"
42
+ version_field: "1.0.0"
43
+
44
+ - artifact: "match/result.schema.json"
45
+ id_field: "match:result"
46
+ version_field: "1.2.3"
47
+
48
+ - artifact: "sensory/gesture/raw.schema.json"
49
+ id_field: "sensory:gesture.raw"
50
+ version_field: "1.0.0"
51
+
52
+ organization:
53
+ strategy: "by_theme"
54
+ directory_structure: "contracts/{theme}/"
55
+ rationale: "Theme-based directories enable clear architectural boundaries. Each theme represents a bounded context. Unlimited hierarchical depth supported via colons."
56
+
57
+ structure:
58
+ root: "contracts/"
59
+ themes:
60
+ - "commons/"
61
+ - "match/"
62
+ - "mechanic/"
63
+ - "sensory/"
64
+ - "player/"
65
+ - "scenario/"
66
+ - "partnership/"
67
+ - "league/"
68
+ - "audience/"
69
+ - "monetization/"
70
+
71
+ api_mapping:
72
+ description: "Artifact names map to REST API endpoints for external consumption. Hierarchy levels add path segments, variants treated as resources."
73
+ pattern: "/{theme}s/{id}/{segments}[/{variant}]"
74
+
75
+ methods:
76
+ new: POST
77
+ created: POST
78
+ registered: POST
79
+ started: POST
80
+ result: GET
81
+ active: GET
82
+ config: GET
83
+ events: GET
84
+ current: GET
85
+ foundations: GET
86
+ updated: PUT
87
+ closed: PUT
88
+ completed: PUT
89
+ terminated: DELETE
90
+ deleted: DELETE
91
+
92
+ examples:
93
+ - artifact: "commons:ux:foundations"
94
+ endpoint: "GET /commons/{id}/ux/foundations"
95
+ description: "Retrieve UX foundations"
96
+
97
+ - artifact: "commons:ux:foundations:color"
98
+ endpoint: "GET /commons/{id}/ux/foundations/color"
99
+ description: "Retrieve UX color foundations"
100
+
101
+ - artifact: "match:result"
102
+ endpoint: "GET /matches/{id}/result"
103
+ description: "Retrieve match result"
104
+
105
+ - artifact: "session:new"
106
+ endpoint: "POST /sessions"
107
+ description: "Create new session"
108
+
109
+ - artifact: "player:identity"
110
+ endpoint: "GET /players/{id}"
111
+ description: "Retrieve player identity"
112
+
113
+ - artifact: "match:config"
114
+ endpoint: "GET /matches/{id}/config"
115
+ description: "Retrieve match configuration"
116
+
117
+ - artifact: "player:updated"
118
+ endpoint: "PUT /players/{id}"
119
+ description: "Update player"
120
+
121
+ - artifact: "match:terminated"
122
+ endpoint: "DELETE /matches/{id}"
123
+ description: "Terminate match"
124
+
125
+ ownership:
126
+ producer: "Generates artifact contract (wagon that declares artifact in produce[])"
127
+ consumer: "References existing contract (wagon that declares artifact in consume[])"
128
+ single_source: "One artifact = one JSON file. Multiple wagons reference same file. Zero duplication."
129
+
130
+ rules:
131
+ - "Producer wagon owns the artifact schema generation"
132
+ - "Consumer wagon validates artifact existence and references it"
133
+ - "Artifact path declared in wagon manifest contract: field"
134
+ - "Only producer generates; consumers must never modify"
135
+
136
+ metadata:
137
+ description: "Artifact schemas include x-artifact-metadata for tooling and API generation"
138
+
139
+ fields:
140
+ theme: "Architectural theme (commons, match, mechanic, etc.)"
141
+ aspect: "Final leaf resource noun"
142
+ variant: "Optional lateral variation"
143
+ api:
144
+ method: "HTTP method (GET, POST, PUT, DELETE)"
145
+ path: "REST endpoint path"
146
+
147
+ example:
148
+ theme: "match"
149
+ aspect: "result"
150
+ api:
151
+ method: "GET"
152
+ path: "/matches/{id}/result"
153
+
154
+ validation:
155
+ required_fields: ["$schema", "$id", "version", "title", "type", "properties"]
156
+ schema_compliance: "JSON Schema Draft-07"
157
+ id_pattern: "^[a-z]+(?::[a-z][a-z0-9-]*)+(?:\\.[a-z][a-z0-9-]*)?$"
158
+ version_pattern: "^\\d+\\.\\d+\\.\\d+$"
159
+
160
+ artifact_urns:
161
+ urn_pattern:
162
+ format: "contract:{artifact_name}"
163
+ conversion_rule: "URN exactly matches artifact name - preserves colons for hierarchy and dots for variants. Pattern: contract:{theme}(:{category})*:{aspect}(.{variant})?"
164
+
165
+ examples:
166
+ artifact_to_urn:
167
+ - artifact_name: "commons:ux:foundations"
168
+ urn: "contract:commons:ux:foundations"
169
+
170
+ - artifact_name: "commons:ux:foundations:color"
171
+ urn: "contract:commons:ux:foundations:color"
172
+
173
+ - artifact_name: "mechanic:decision.choice"
174
+ urn: "contract:mechanic:decision.choice"
175
+
176
+ - artifact_name: "sensory:gesture.raw"
177
+ urn: "contract:sensory:gesture.raw"
178
+
179
+ bidirectional_linkage:
180
+ validation: "URN must resolve to a contract in the registry. All colons and dots preserved."
181
+
182
+ migration_strategy:
183
+ refactor_note: "Legacy URNs contract:{domain}:{resource}[.{category}] migrate to contract:{theme}(:{category})*:{aspect}(.{variant})?. Version suffix removed from $id."
184
+
185
+ wagon_artifacts:
186
+ produce_example:
187
+ wagon: "maintain-ux"
188
+ produce:
189
+ - name: "commons:ux:foundations"
190
+ urn: "contract:commons:ux:foundations"
191
+ to: "external"
192
+
193
+ - name: "commons:ux:foundations:color"
194
+ urn: "contract:commons:ux:foundations:color"
195
+ to: "external"
196
+
197
+ consume_example:
198
+ wagon: "stage-characters"
199
+ consume:
200
+ - name: "commons:ux:foundations"
201
+ urn: "contract:commons:ux:foundations"
202
+ from: "wagon:maintain-ux"
203
+
204
+ contract_artifacts:
205
+ id_field: "id: {artifact_name}"
206
+ urn_mapping: "URN contract:{artifact_name} maps directly to $id {artifact_name}"
207
+
208
+ example:
209
+ - id: "commons:ux:foundations"
210
+ version: "1.0.0"
211
+ path: "commons/ux/foundations.schema.json"
212
+ producer: "wagon:maintain-ux"
213
+ urn_match: "contract:commons:ux:foundations"
214
+
215
+ - id: "commons:ux:foundations:color"
216
+ version: "1.0.0"
217
+ path: "commons/ux/foundations/color.schema.json"
218
+ producer: "wagon:maintain-ux"
219
+ urn_match: "contract:commons:ux:foundations:color"
220
+
221
+ - id: "mechanic:decision.choice"
222
+ version: "1.0.0"
223
+ path: "mechanic/decision/choice.schema.json"
224
+ producer: "wagon:resolve-dilemmas"
225
+ urn_match: "contract:mechanic:decision.choice"
226
+
227
+ demo_mode:
228
+ description: "Artifacts write to demo/contracts/artifacts/ when mode_demo: true"
229
+ path_prefix: "demo/contracts/artifacts/"
230
+
231
+ examples:
232
+ complete_workflow:
233
+ - step: "Wagon declares artifact in produce[]"
234
+ example: |
235
+ produce:
236
+ - name: mechanic:decision.choice
237
+ to: external
238
+ contract: contracts/mechanic/decision/choice.schema.json
239
+
240
+ - step: "Tester agent classifies artifact ownership"
241
+ result: "producer: true, path: mechanic/decision/choice.schema.json"
242
+
243
+ - step: "Schema generation creates artifact"
244
+ output: "contracts/mechanic/decision/choice.schema.json"
245
+ content: |
246
+ {
247
+ "$schema": "http://json-schema.org/draft-07/schema#",
248
+ "$id": "mechanic:decision.choice",
249
+ "version": "1.0.0",
250
+ "title": "Decision Choice",
251
+ "type": "object",
252
+ "properties": {...},
253
+ "x-artifact-metadata": {
254
+ "theme": "mechanic",
255
+ "aspect": "decision",
256
+ "variant": "choice",
257
+ "api": {
258
+ "method": "POST",
259
+ "path": "/decisions"
260
+ }
261
+ }
262
+ }
263
+
264
+ - step: "Consumer wagon references artifact"
265
+ example: |
266
+ consume:
267
+ - name: mechanic:decision.choice
268
+ from: wagon:resolve-dilemmas
269
+ contract: contracts/mechanic/decision/choice.schema.json
270
+
271
+ - step: "Pack generation references (not embeds) artifact"
272
+ pack_manifest: |
273
+ produce:
274
+ - artifact: mechanic:decision.choice
275
+ contract: ../artifacts/mechanic/decision/choice.schema.json
276
+ owner: true