atdd 0.1.0__tar.gz → 0.2.6__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 (193) hide show
  1. {atdd-0.1.0/src/atdd.egg-info → atdd-0.2.6}/PKG-INFO +106 -13
  2. {atdd-0.1.0 → atdd-0.2.6}/README.md +105 -12
  3. {atdd-0.1.0 → atdd-0.2.6}/pyproject.toml +2 -2
  4. atdd-0.2.6/src/atdd/__init__.py +6 -0
  5. atdd-0.2.6/src/atdd/__main__.py +4 -0
  6. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/cli.py +35 -1
  7. atdd-0.2.6/src/atdd/coach/commands/gate.py +168 -0
  8. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coach/templates/ATDD.md +36 -0
  9. atdd-0.2.6/src/atdd/version_check.py +126 -0
  10. {atdd-0.1.0 → atdd-0.2.6/src/atdd.egg-info}/PKG-INFO +106 -13
  11. {atdd-0.1.0 → atdd-0.2.6}/src/atdd.egg-info/SOURCES.txt +3 -0
  12. atdd-0.2.6/src/atdd.egg-info/entry_points.txt +2 -0
  13. atdd-0.1.0/src/atdd/tester/validators/__init__.py +0 -0
  14. atdd-0.1.0/src/atdd.egg-info/entry_points.txt +0 -2
  15. {atdd-0.1.0 → atdd-0.2.6}/LICENSE +0 -0
  16. {atdd-0.1.0 → atdd-0.2.6}/setup.cfg +0 -0
  17. {atdd-0.1.0/src/atdd → atdd-0.2.6/src/atdd/coach}/__init__.py +0 -0
  18. {atdd-0.1.0/src/atdd/coach → atdd-0.2.6/src/atdd/coach/commands}/__init__.py +0 -0
  19. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coach/commands/add_persistence_metadata.py +0 -0
  20. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coach/commands/analyze_migrations.py +0 -0
  21. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coach/commands/consumers.py +0 -0
  22. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coach/commands/infer_governance_status.py +0 -0
  23. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coach/commands/initializer.py +0 -0
  24. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coach/commands/interface.py +0 -0
  25. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coach/commands/inventory.py +0 -0
  26. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coach/commands/migration.py +0 -0
  27. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coach/commands/registry.py +0 -0
  28. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coach/commands/session.py +0 -0
  29. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coach/commands/sync.py +0 -0
  30. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coach/commands/test_interface.py +0 -0
  31. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coach/commands/test_runner.py +0 -0
  32. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coach/commands/tests/__init__.py +0 -0
  33. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coach/commands/tests/test_telemetry_array_validation.py +0 -0
  34. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coach/commands/traceability.py +0 -0
  35. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coach/conventions/session.convention.yaml +0 -0
  36. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coach/overlays/__init__.py +0 -0
  37. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coach/overlays/claude.md +0 -0
  38. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coach/schemas/config.schema.json +0 -0
  39. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coach/schemas/manifest.schema.json +0 -0
  40. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coach/templates/SESSION-TEMPLATE.md +0 -0
  41. {atdd-0.1.0/src/atdd/coach/commands → atdd-0.2.6/src/atdd/coach/utils}/__init__.py +0 -0
  42. {atdd-0.1.0/src/atdd/coach/utils → atdd-0.2.6/src/atdd/coach/utils/graph}/__init__.py +0 -0
  43. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coach/utils/graph/urn.py +0 -0
  44. {atdd-0.1.0/src/atdd/coach/utils/graph → atdd-0.2.6/src/atdd/coach/validators}/__init__.py +0 -0
  45. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coach/validators/shared_fixtures.py +0 -0
  46. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coach/validators/test_enrich_wagon_registry.py +0 -0
  47. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coach/validators/test_registry.py +0 -0
  48. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coach/validators/test_session_validation.py +0 -0
  49. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coach/validators/test_traceability.py +0 -0
  50. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coach/validators/test_update_feature_paths.py +0 -0
  51. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coach/validators/test_validate_contract_consumers.py +0 -0
  52. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/__init__.py +0 -0
  53. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/conventions/adapter.recipe.yaml +0 -0
  54. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/conventions/backend.convention.yaml +0 -0
  55. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/conventions/boundaries.convention.yaml +0 -0
  56. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/conventions/commons.convention.yaml +0 -0
  57. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/conventions/complexity.recipe.yaml +0 -0
  58. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/conventions/component-naming.convention.yaml +0 -0
  59. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/conventions/design.convention.yaml +0 -0
  60. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/conventions/design.recipe.yaml +0 -0
  61. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/conventions/dto.convention.yaml +0 -0
  62. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/conventions/frontend.convention.yaml +0 -0
  63. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/conventions/green.convention.yaml +0 -0
  64. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/conventions/presentation.convention.yaml +0 -0
  65. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/conventions/refactor.convention.yaml +0 -0
  66. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/conventions/technology.convention.yaml +0 -0
  67. {atdd-0.1.0/src/atdd/coach/validators → atdd-0.2.6/src/atdd/coder/conventions/tests}/__init__.py +0 -0
  68. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/conventions/tests/test_adapter_recipe.py +0 -0
  69. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/conventions/tests/test_complexity_recipe.py +0 -0
  70. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/conventions/tests/test_component_taxonomy.py +0 -0
  71. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/conventions/tests/test_component_urn_naming.py +0 -0
  72. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/conventions/tests/test_thinness_recipe.py +0 -0
  73. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/conventions/thinness.recipe.yaml +0 -0
  74. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/conventions/train.convention.yaml +0 -0
  75. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/conventions/verification.protocol.yaml +0 -0
  76. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/schemas/design_system.schema.json +0 -0
  77. {atdd-0.1.0/src/atdd/coder/conventions/tests → atdd-0.2.6/src/atdd/coder/validators}/__init__.py +0 -0
  78. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/validators/test_commons_structure.py +0 -0
  79. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/validators/test_complexity.py +0 -0
  80. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/validators/test_cross_language_consistency.py +0 -0
  81. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/validators/test_design_system_compliance.py +0 -0
  82. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/validators/test_dto_testing_patterns.py +0 -0
  83. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/validators/test_green_cross_stack_layers.py +0 -0
  84. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/validators/test_green_layer_dependencies.py +0 -0
  85. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/validators/test_green_python_layer_structure.py +0 -0
  86. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/validators/test_green_supabase_layer_structure.py +0 -0
  87. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/validators/test_import_boundaries.py +0 -0
  88. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/validators/test_init_file_urns.py +0 -0
  89. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/validators/test_preact_layer_boundaries.py +0 -0
  90. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/validators/test_presentation_convention.py +0 -0
  91. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/validators/test_python_architecture.py +0 -0
  92. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/validators/test_quality_metrics.py +0 -0
  93. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/validators/test_station_master_pattern.py +0 -0
  94. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/validators/test_train_infrastructure.py +0 -0
  95. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/validators/test_train_urns.py +0 -0
  96. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/validators/test_typescript_architecture.py +0 -0
  97. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/validators/test_usecase_structure.py +0 -0
  98. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/coder/validators/test_wagon_boundaries.py +0 -0
  99. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/conftest.py +0 -0
  100. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/planner/__init__.py +0 -0
  101. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/planner/conventions/acceptance.convention.yaml +0 -0
  102. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/planner/conventions/appendix.convention.yaml +0 -0
  103. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/planner/conventions/artifact-naming.convention.yaml +0 -0
  104. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/planner/conventions/component.convention.yaml +0 -0
  105. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/planner/conventions/criteria.convention.yaml +0 -0
  106. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/planner/conventions/feature.convention.yaml +0 -0
  107. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/planner/conventions/interface.convention.yaml +0 -0
  108. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/planner/conventions/steps.convention.yaml +0 -0
  109. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/planner/conventions/train.convention.yaml +0 -0
  110. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/planner/conventions/wagon.convention.yaml +0 -0
  111. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/planner/conventions/wmbt.convention.yaml +0 -0
  112. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/planner/schemas/acceptance.schema.json +0 -0
  113. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/planner/schemas/appendix.schema.json +0 -0
  114. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/planner/schemas/component.schema.json +0 -0
  115. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/planner/schemas/feature.schema.json +0 -0
  116. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/planner/schemas/train.schema.json +0 -0
  117. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/planner/schemas/wagon.schema.json +0 -0
  118. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/planner/schemas/wmbt.schema.json +0 -0
  119. {atdd-0.1.0/src/atdd/coder → atdd-0.2.6/src/atdd/planner}/validators/__init__.py +0 -0
  120. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/planner/validators/conftest.py +0 -0
  121. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/planner/validators/test_draft_wagon_registry.py +0 -0
  122. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/planner/validators/test_plan_cross_refs.py +0 -0
  123. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/planner/validators/test_plan_uniqueness.py +0 -0
  124. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/planner/validators/test_plan_urn_resolution.py +0 -0
  125. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/planner/validators/test_plan_wagons.py +0 -0
  126. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/planner/validators/test_train_validation.py +0 -0
  127. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/planner/validators/test_wagon_urn_chain.py +0 -0
  128. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/planner/validators/test_wmbt_consistency.py +0 -0
  129. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/planner/validators/test_wmbt_vocabulary.py +0 -0
  130. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/__init__.py +0 -0
  131. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/conventions/artifact.convention.yaml +0 -0
  132. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/conventions/contract.convention.yaml +0 -0
  133. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/conventions/filename.convention.yaml +0 -0
  134. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/conventions/migration.convention.yaml +0 -0
  135. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/conventions/red.convention.yaml +0 -0
  136. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/conventions/routing.convention.yaml +0 -0
  137. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/conventions/telemetry.convention.yaml +0 -0
  138. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/schemas/a11y.tmpl.json +0 -0
  139. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/schemas/artifact.schema.json +0 -0
  140. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/schemas/contract.schema.json +0 -0
  141. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/schemas/contract.tmpl.json +0 -0
  142. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/schemas/db.tmpl.json +0 -0
  143. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/schemas/e2e.tmpl.json +0 -0
  144. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/schemas/edge_function.tmpl.json +0 -0
  145. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/schemas/event.tmpl.json +0 -0
  146. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/schemas/http.tmpl.json +0 -0
  147. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/schemas/job.tmpl.json +0 -0
  148. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/schemas/load.tmpl.json +0 -0
  149. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/schemas/metric.tmpl.json +0 -0
  150. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/schemas/pack.schema.json +0 -0
  151. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/schemas/realtime.tmpl.json +0 -0
  152. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/schemas/rls.tmpl.json +0 -0
  153. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/schemas/script.tmpl.json +0 -0
  154. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/schemas/sec.tmpl.json +0 -0
  155. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/schemas/storage.tmpl.json +0 -0
  156. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/schemas/telemetry.schema.json +0 -0
  157. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/schemas/telemetry_tracking_manifest.schema.json +0 -0
  158. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/schemas/test_filename.schema.json +0 -0
  159. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/schemas/test_intent.schema.json +0 -0
  160. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/schemas/unit.tmpl.json +0 -0
  161. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/schemas/visual.tmpl.json +0 -0
  162. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/schemas/ws.tmpl.json +0 -0
  163. {atdd-0.1.0/src/atdd/planner/validators → atdd-0.2.6/src/atdd/tester/utils}/__init__.py +0 -0
  164. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/utils/filename.py +0 -0
  165. {atdd-0.1.0/src/atdd/tester/utils → atdd-0.2.6/src/atdd/tester/validators}/__init__.py +0 -0
  166. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/validators/cleanup_duplicate_headers.py +0 -0
  167. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/validators/cleanup_duplicate_headers_v2.py +0 -0
  168. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/validators/conftest.py +0 -0
  169. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/validators/coverage_gap_report.py +0 -0
  170. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/validators/fix_dual_ac_references.py +0 -0
  171. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/validators/remove_duplicate_lines.py +0 -0
  172. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/validators/test_acceptance_urn_filename_mapping.py +0 -0
  173. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/validators/test_acceptance_urn_separator.py +0 -0
  174. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/validators/test_artifact_naming_category.py +0 -0
  175. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/validators/test_contract_schema_compliance.py +0 -0
  176. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/validators/test_contracts_structure.py +0 -0
  177. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/validators/test_coverage_adequacy.py +0 -0
  178. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/validators/test_dual_ac_reference.py +0 -0
  179. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/validators/test_fixture_validity.py +0 -0
  180. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/validators/test_isolation.py +0 -0
  181. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/validators/test_migration_coverage.py +0 -0
  182. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/validators/test_migration_criteria.py +0 -0
  183. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/validators/test_migration_generation.py +0 -0
  184. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/validators/test_python_test_naming.py +0 -0
  185. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/validators/test_red_layer_validation.py +0 -0
  186. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/validators/test_red_python_layer_structure.py +0 -0
  187. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/validators/test_red_supabase_layer_structure.py +0 -0
  188. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/validators/test_telemetry_structure.py +0 -0
  189. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/validators/test_typescript_test_naming.py +0 -0
  190. {atdd-0.1.0 → atdd-0.2.6}/src/atdd/tester/validators/test_typescript_test_structure.py +0 -0
  191. {atdd-0.1.0 → atdd-0.2.6}/src/atdd.egg-info/dependency_links.txt +0 -0
  192. {atdd-0.1.0 → atdd-0.2.6}/src/atdd.egg-info/requires.txt +0 -0
  193. {atdd-0.1.0 → atdd-0.2.6}/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.1.0
3
+ Version: 0.2.6
4
4
  Summary: ATDD Platform - Acceptance Test Driven Development toolkit
5
5
  License: MIT
6
6
  Requires-Python: >=3.10
@@ -18,10 +18,10 @@ Acceptance Test Driven Development toolkit for structured planning and conventio
18
18
 
19
19
  ## Installation
20
20
 
21
- ### From GitHub (recommended for now)
21
+ ### From PyPI
22
22
 
23
23
  ```bash
24
- pip install git+https://github.com/afokapu/atdd.git
24
+ pip install atdd
25
25
  ```
26
26
 
27
27
  ### For Development
@@ -38,13 +38,6 @@ pip install -e ".[dev]"
38
38
  atdd --help
39
39
  ```
40
40
 
41
- ### Future: PyPI
42
-
43
- Once published to PyPI:
44
- ```bash
45
- pip install atdd
46
- ```
47
-
48
41
  ## Quick Start
49
42
 
50
43
  ```bash
@@ -57,6 +50,9 @@ atdd session new my-feature
57
50
  # List sessions
58
51
  atdd session list
59
52
 
53
+ # Sync ATDD rules to agent config files
54
+ atdd sync
55
+
60
56
  # Run validators
61
57
  atdd --test all
62
58
  ```
@@ -68,24 +64,27 @@ ATDD provides:
68
64
  1. **Session Management** - Structured planning documents with templates and tracking
69
65
  2. **Convention Enforcement** - YAML-based conventions validated via pytest
70
66
  3. **ATDD Lifecycle** - Planner → Tester → Coder phase gates
67
+ 4. **Agent Config Sync** - Keep ATDD rules in sync across AI agent config files
71
68
 
72
69
  ## Commands
73
70
 
74
71
  ### Project Initialization
75
72
 
76
73
  ```bash
77
- atdd init # Create atdd-sessions/ and .atdd/ directories
74
+ atdd init # Create atdd-sessions/, .atdd/, and CLAUDE.md
78
75
  atdd init --force # Reinitialize (overwrites existing)
79
76
  ```
80
77
 
81
78
  Creates:
82
79
  ```
83
80
  your-project/
81
+ ├── CLAUDE.md # With managed ATDD block
84
82
  ├── atdd-sessions/
85
83
  │ ├── SESSION-TEMPLATE.md
86
84
  │ └── archive/
87
85
  └── .atdd/
88
- └── manifest.yaml
86
+ ├── manifest.yaml # Session tracking
87
+ └── config.yaml # Agent sync configuration
89
88
  ```
90
89
 
91
90
  ### Session Management
@@ -100,6 +99,99 @@ atdd session sync # Sync manifest with files
100
99
 
101
100
  Session types: `implementation`, `migration`, `refactor`, `analysis`, `planning`, `cleanup`, `tracking`
102
101
 
102
+ ### Agent Config Sync
103
+
104
+ Sync ATDD rules to agent config files using managed blocks that preserve user content:
105
+
106
+ ```bash
107
+ atdd sync # Sync all enabled agents from config
108
+ atdd sync --agent claude # Sync specific agent only
109
+ atdd sync --verify # Check if files are in sync (for CI)
110
+ atdd sync --status # Show sync status for all agents
111
+ ```
112
+
113
+ Supported agents:
114
+ | Agent | File |
115
+ |-------|------|
116
+ | claude | CLAUDE.md |
117
+ | codex | AGENTS.md |
118
+ | gemini | GEMINI.md |
119
+ | qwen | QWEN.md |
120
+
121
+ Configure which agents to sync in `.atdd/config.yaml`:
122
+ ```yaml
123
+ version: "1.0"
124
+ sync:
125
+ agents:
126
+ - claude # Enabled by default
127
+ # - codex # Uncomment to sync AGENTS.md
128
+ # - gemini # Uncomment to sync GEMINI.md
129
+ # - qwen # Uncomment to sync QWEN.md
130
+ ```
131
+
132
+ **Multi-agent setup:** To use multiple agents with consistent rules, enable them all in config and run sync:
133
+
134
+ ```yaml
135
+ sync:
136
+ agents:
137
+ - claude
138
+ - codex
139
+ - gemini
140
+ - qwen
141
+ ```
142
+
143
+ ```bash
144
+ atdd sync # Creates/updates CLAUDE.md, AGENTS.md, GEMINI.md, QWEN.md
145
+ ```
146
+
147
+ ### ATDD Gate (Bootstrap Protocol)
148
+
149
+ Agents often skip instruction files. The gate solves this by injecting rules via mandatory tool output.
150
+
151
+ **Protocol:**
152
+
153
+ 1. Run this command first:
154
+ ```bash
155
+ atdd gate
156
+ ```
157
+
158
+ 2. Agent must paste output and confirm:
159
+ - Which file(s) were loaded
160
+ - The reported hash
161
+ - The key constraints
162
+
163
+ 3. If files are missing/unsynced:
164
+ ```bash
165
+ atdd sync
166
+ atdd gate # Re-verify
167
+ ```
168
+
169
+ **Example output:**
170
+ ```
171
+ ============================================================
172
+ ATDD Gate Verification
173
+ ============================================================
174
+
175
+ Loaded files:
176
+ - CLAUDE.md (hash: d04f897c6691dc13...)
177
+
178
+ Key constraints:
179
+ 1. No ad-hoc tests - follow ATDD conventions
180
+ 2. Domain layer NEVER imports from other layers
181
+ 3. Phase transitions require quality gates
182
+
183
+ ------------------------------------------------------------
184
+ Before starting work, confirm you have loaded these rules.
185
+ ------------------------------------------------------------
186
+ ```
187
+
188
+ **Why this works:**
189
+ - Gate output is mandatory tool output - agent can't ignore it
190
+ - Proves which ATDD files were actually loaded
191
+ - Forces consistency across all agents
192
+
193
+ **Rule:** If ATDD rules matter, start with `atdd gate`. No gate = no guarantees.
194
+
103
195
  ### Validation
104
196
 
105
197
  ```bash
@@ -126,8 +218,9 @@ src/atdd/
126
218
  ├── coach/
127
219
  │ ├── commands/ # CLI command implementations
128
220
  │ ├── conventions/ # Coach conventions (YAML)
221
+ │ ├── overlays/ # Agent-specific additions
129
222
  │ ├── schemas/ # JSON schemas
130
- │ ├── templates/ # Session templates
223
+ │ ├── templates/ # Session templates, ATDD.md
131
224
  │ └── validators/ # Coach validators
132
225
  ├── planner/
133
226
  │ ├── conventions/ # Planning conventions
@@ -4,10 +4,10 @@ Acceptance Test Driven Development toolkit for structured planning and conventio
4
4
 
5
5
  ## Installation
6
6
 
7
- ### From GitHub (recommended for now)
7
+ ### From PyPI
8
8
 
9
9
  ```bash
10
- pip install git+https://github.com/afokapu/atdd.git
10
+ pip install atdd
11
11
  ```
12
12
 
13
13
  ### For Development
@@ -24,13 +24,6 @@ pip install -e ".[dev]"
24
24
  atdd --help
25
25
  ```
26
26
 
27
- ### Future: PyPI
28
-
29
- Once published to PyPI:
30
- ```bash
31
- pip install atdd
32
- ```
33
-
34
27
  ## Quick Start
35
28
 
36
29
  ```bash
@@ -43,6 +36,9 @@ atdd session new my-feature
43
36
  # List sessions
44
37
  atdd session list
45
38
 
39
+ # Sync ATDD rules to agent config files
40
+ atdd sync
41
+
46
42
  # Run validators
47
43
  atdd --test all
48
44
  ```
@@ -54,24 +50,27 @@ ATDD provides:
54
50
  1. **Session Management** - Structured planning documents with templates and tracking
55
51
  2. **Convention Enforcement** - YAML-based conventions validated via pytest
56
52
  3. **ATDD Lifecycle** - Planner → Tester → Coder phase gates
53
+ 4. **Agent Config Sync** - Keep ATDD rules in sync across AI agent config files
57
54
 
58
55
  ## Commands
59
56
 
60
57
  ### Project Initialization
61
58
 
62
59
  ```bash
63
- atdd init # Create atdd-sessions/ and .atdd/ directories
60
+ atdd init # Create atdd-sessions/, .atdd/, and CLAUDE.md
64
61
  atdd init --force # Reinitialize (overwrites existing)
65
62
  ```
66
63
 
67
64
  Creates:
68
65
  ```
69
66
  your-project/
67
+ ├── CLAUDE.md # With managed ATDD block
70
68
  ├── atdd-sessions/
71
69
  │ ├── SESSION-TEMPLATE.md
72
70
  │ └── archive/
73
71
  └── .atdd/
74
- └── manifest.yaml
72
+ ├── manifest.yaml # Session tracking
73
+ └── config.yaml # Agent sync configuration
75
74
  ```
76
75
 
77
76
  ### Session Management
@@ -86,6 +85,99 @@ atdd session sync # Sync manifest with files
86
85
 
87
86
  Session types: `implementation`, `migration`, `refactor`, `analysis`, `planning`, `cleanup`, `tracking`
88
87
 
88
+ ### Agent Config Sync
89
+
90
+ Sync ATDD rules to agent config files using managed blocks that preserve user content:
91
+
92
+ ```bash
93
+ atdd sync # Sync all enabled agents from config
94
+ atdd sync --agent claude # Sync specific agent only
95
+ atdd sync --verify # Check if files are in sync (for CI)
96
+ atdd sync --status # Show sync status for all agents
97
+ ```
98
+
99
+ Supported agents:
100
+ | Agent | File |
101
+ |-------|------|
102
+ | claude | CLAUDE.md |
103
+ | codex | AGENTS.md |
104
+ | gemini | GEMINI.md |
105
+ | qwen | QWEN.md |
106
+
107
+ Configure which agents to sync in `.atdd/config.yaml`:
108
+ ```yaml
109
+ version: "1.0"
110
+ sync:
111
+ agents:
112
+ - claude # Enabled by default
113
+ # - codex # Uncomment to sync AGENTS.md
114
+ # - gemini # Uncomment to sync GEMINI.md
115
+ # - qwen # Uncomment to sync QWEN.md
116
+ ```
117
+
118
+ **Multi-agent setup:** To use multiple agents with consistent rules, enable them all in config and run sync:
119
+
120
+ ```yaml
121
+ sync:
122
+ agents:
123
+ - claude
124
+ - codex
125
+ - gemini
126
+ - qwen
127
+ ```
128
+
129
+ ```bash
130
+ atdd sync # Creates/updates CLAUDE.md, AGENTS.md, GEMINI.md, QWEN.md
131
+ ```
132
+
133
+ ### ATDD Gate (Bootstrap Protocol)
134
+
135
+ Agents often skip instruction files. The gate solves this by injecting rules via mandatory tool output.
136
+
137
+ **Protocol:**
138
+
139
+ 1. Run this command first:
140
+ ```bash
141
+ atdd gate
142
+ ```
143
+
144
+ 2. Agent must paste output and confirm:
145
+ - Which file(s) were loaded
146
+ - The reported hash
147
+ - The key constraints
148
+
149
+ 3. If files are missing/unsynced:
150
+ ```bash
151
+ atdd sync
152
+ atdd gate # Re-verify
153
+ ```
154
+
155
+ **Example output:**
156
+ ```
157
+ ============================================================
158
+ ATDD Gate Verification
159
+ ============================================================
160
+
161
+ Loaded files:
162
+ - CLAUDE.md (hash: d04f897c6691dc13...)
163
+
164
+ Key constraints:
165
+ 1. No ad-hoc tests - follow ATDD conventions
166
+ 2. Domain layer NEVER imports from other layers
167
+ 3. Phase transitions require quality gates
168
+
169
+ ------------------------------------------------------------
170
+ Before starting work, confirm you have loaded these rules.
171
+ ------------------------------------------------------------
172
+ ```
173
+
174
+ **Why this works:**
175
+ - Gate output is mandatory tool output - agent can't ignore it
176
+ - Proves which ATDD files were actually loaded
177
+ - Forces consistency across all agents
178
+
179
+ **Rule:** If ATDD rules matter, start with `atdd gate`. No gate = no guarantees.
180
+
89
181
  ### Validation
90
182
 
91
183
  ```bash
@@ -112,8 +204,9 @@ src/atdd/
112
204
  ├── coach/
113
205
  │ ├── commands/ # CLI command implementations
114
206
  │ ├── conventions/ # Coach conventions (YAML)
207
+ │ ├── overlays/ # Agent-specific additions
115
208
  │ ├── schemas/ # JSON schemas
116
- │ ├── templates/ # Session templates
209
+ │ ├── templates/ # Session templates, ATDD.md
117
210
  │ └── validators/ # Coach validators
118
211
  ├── planner/
119
212
  │ ├── conventions/ # Planning conventions
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "atdd"
7
- version = "0.1.0"
7
+ version = "0.2.6"
8
8
  description = "ATDD Platform - Acceptance Test Driven Development toolkit"
9
9
  requires-python = ">=3.10"
10
10
  readme = "README.md"
@@ -15,7 +15,7 @@ dependencies = ["pyyaml"]
15
15
  dev = ["pytest", "pytest-xdist"]
16
16
 
17
17
  [project.scripts]
18
- atdd = "atdd.cli:main"
18
+ atdd = "atdd.cli:cli"
19
19
 
20
20
  [tool.setuptools.packages.find]
21
21
  where = ["src"]
@@ -0,0 +1,6 @@
1
+ from importlib.metadata import PackageNotFoundError, version
2
+
3
+ try:
4
+ __version__ = version("atdd")
5
+ except PackageNotFoundError:
6
+ __version__ = "0.0.0"
@@ -0,0 +1,4 @@
1
+ from .cli import cli
2
+
3
+ if __name__ == "__main__":
4
+ raise SystemExit(cli())
@@ -10,6 +10,7 @@ The coach orchestrates all ATDD lifecycle operations:
10
10
  - Init: Initialize ATDD structure in consumer repos
11
11
  - Session: Manage session files
12
12
  - Sync: Sync ATDD rules to agent config files
13
+ - Gate: Verify agents loaded ATDD rules
13
14
 
14
15
  Usage:
15
16
  atdd init # Initialize ATDD in consumer repo
@@ -19,6 +20,7 @@ Usage:
19
20
  atdd sync # Sync ATDD rules to agent configs
20
21
  atdd sync --verify # Check if files are in sync
21
22
  atdd sync --agent claude # Sync specific agent only
23
+ atdd gate # Show ATDD gate verification
22
24
  atdd --inventory # Generate inventory
23
25
  atdd --test all # Run all meta-tests
24
26
  atdd --test planner # Run planner phase tests
@@ -41,6 +43,8 @@ from atdd.coach.commands.registry import RegistryUpdater
41
43
  from atdd.coach.commands.initializer import ProjectInitializer
42
44
  from atdd.coach.commands.session import SessionManager
43
45
  from atdd.coach.commands.sync import AgentConfigSync
46
+ from atdd.coach.commands.gate import ATDDGate
47
+ from atdd.version_check import print_update_notice
44
48
 
45
49
 
46
50
  class ATDDCoach:
@@ -156,6 +160,10 @@ Examples:
156
160
  %(prog)s sync --agent claude Sync specific agent only
157
161
  %(prog)s sync --status Show sync status
158
162
 
163
+ # ATDD gate verification
164
+ %(prog)s gate Show gate verification info
165
+ %(prog)s gate --json Output as JSON
166
+
159
167
  # Existing flag-based commands (backwards compatible)
160
168
  %(prog)s --inventory Generate full inventory (YAML)
161
169
  %(prog)s --inventory --format json Generate inventory (JSON)
@@ -268,6 +276,18 @@ Phase descriptions:
268
276
  help="Show sync status for all agents"
269
277
  )
270
278
 
279
+ # ----- atdd gate -----
280
+ gate_parser = subparsers.add_parser(
281
+ "gate",
282
+ help="Show ATDD gate verification info",
283
+ description="Verify agents have loaded ATDD rules before starting work"
284
+ )
285
+ gate_parser.add_argument(
286
+ "--json",
287
+ action="store_true",
288
+ help="Output as JSON for programmatic use"
289
+ )
290
+
271
291
  # ----- Existing flag-based arguments (backwards compatible) -----
272
292
 
273
293
  # Main command groups
@@ -367,6 +387,11 @@ Phase descriptions:
367
387
  return syncer.verify()
368
388
  return syncer.sync(agents=[args.agent] if args.agent else None)
369
389
 
390
+ # atdd gate
391
+ elif args.command == "gate":
392
+ gate = ATDDGate()
393
+ return gate.verify(json=args.json)
394
+
370
395
  # ----- Handle flag-based commands (backwards compatible) -----
371
396
 
372
397
  # Create coach instance
@@ -400,5 +425,14 @@ Phase descriptions:
400
425
  return 0
401
426
 
402
427
 
428
+ def cli() -> int:
429
+ """CLI entry point with version check."""
430
+ try:
431
+ result = main()
432
+ finally:
433
+ print_update_notice()
434
+ return result
435
+
436
+
403
437
  if __name__ == "__main__":
404
- sys.exit(main())
438
+ sys.exit(cli())
@@ -0,0 +1,168 @@
1
+ """
2
+ ATDD Gate verification command.
3
+
4
+ Ensures agents have loaded and confirmed ATDD rules before starting work.
5
+ Outputs the expected hash and key constraints for verification.
6
+
7
+ Usage:
8
+ atdd gate # Show gate verification info
9
+ atdd gate --json # Output as JSON for programmatic use
10
+ """
11
+ import hashlib
12
+ import json as json_module
13
+ from pathlib import Path
14
+ from typing import Dict, List, Optional
15
+
16
+ from atdd.coach.commands.sync import AgentConfigSync
17
+
18
+
19
+ class ATDDGate:
20
+ """ATDD Gate verification."""
21
+
22
+ # Key constraints agents must acknowledge
23
+ KEY_CONSTRAINTS = [
24
+ "No ad-hoc tests - follow ATDD conventions",
25
+ "Domain layer NEVER imports from other layers",
26
+ "Phase transitions require quality gates (INIT → PLANNED → RED → GREEN → REFACTOR)",
27
+ ]
28
+
29
+ def __init__(self, target_dir: Optional[Path] = None):
30
+ """
31
+ Initialize the ATDDGate.
32
+
33
+ Args:
34
+ target_dir: Target directory containing agent config files.
35
+ """
36
+ self.target_dir = target_dir or Path.cwd()
37
+ self.syncer = AgentConfigSync(self.target_dir)
38
+
39
+ def _compute_block_hash(self, content: str) -> Optional[str]:
40
+ """
41
+ Compute SHA256 hash of the managed block in content.
42
+
43
+ Args:
44
+ content: File content.
45
+
46
+ Returns:
47
+ SHA256 hash or None if no managed block found.
48
+ """
49
+ block, _, _ = self.syncer._extract_managed_block(content)
50
+ if block is None:
51
+ return None
52
+
53
+ return hashlib.sha256(block.encode()).hexdigest()
54
+
55
+ def _get_synced_files(self) -> Dict[str, Dict]:
56
+ """
57
+ Get info about synced agent config files.
58
+
59
+ Returns:
60
+ Dict mapping agent name to file info.
61
+ """
62
+ agents = self.syncer._get_enabled_agents()
63
+ result = {}
64
+
65
+ for agent in agents:
66
+ target_file = self.syncer.AGENT_FILES.get(agent)
67
+ if not target_file:
68
+ continue
69
+
70
+ target_path = self.target_dir / target_file
71
+ if not target_path.exists():
72
+ result[agent] = {
73
+ "file": target_file,
74
+ "exists": False,
75
+ "hash": None,
76
+ }
77
+ continue
78
+
79
+ content = target_path.read_text()
80
+ block_hash = self._compute_block_hash(content)
81
+
82
+ result[agent] = {
83
+ "file": target_file,
84
+ "exists": True,
85
+ "has_block": block_hash is not None,
86
+ "hash": block_hash[:16] if block_hash else None, # Short hash for display
87
+ "hash_full": block_hash,
88
+ }
89
+
90
+ return result
91
+
92
+ def verify(self, json: bool = False) -> int:
93
+ """
94
+ Output gate verification info.
95
+
96
+ Args:
97
+ json: If True, output as JSON.
98
+
99
+ Returns:
100
+ 0 on success, 1 if no synced files found.
101
+ """
102
+ files = self._get_synced_files()
103
+
104
+ if not files:
105
+ print("No agent config files configured.")
106
+ print("Run 'atdd init' to set up ATDD in this repo.")
107
+ return 1
108
+
109
+ if json:
110
+ output = {
111
+ "files": files,
112
+ "constraints": self.KEY_CONSTRAINTS,
113
+ }
114
+ print(json_module.dumps(output, indent=2))
115
+ return 0
116
+
117
+ # Human-readable output
118
+ print("=" * 60)
119
+ print("ATDD Gate Verification")
120
+ print("=" * 60)
121
+
122
+ print("\nLoaded files:")
123
+ for agent, info in files.items():
124
+ if info["exists"] and info.get("has_block"):
125
+ print(f" - {info['file']} (hash: {info['hash']}...)")
126
+ elif info["exists"]:
127
+ print(f" - {info['file']} (no managed block)")
128
+ else:
129
+ print(f" - {info['file']} (missing)")
130
+
131
+ print("\nKey constraints:")
132
+ for i, constraint in enumerate(self.KEY_CONSTRAINTS, 1):
133
+ print(f" {i}. {constraint}")
134
+
135
+ print("\n" + "-" * 60)
136
+ print("Before starting work, confirm you have loaded these rules.")
137
+ print("-" * 60)
138
+
139
+ return 0
140
+
141
+ def get_confirmation_template(self) -> str:
142
+ """
143
+ Get a template agents can use to confirm gate compliance.
144
+
145
+ Returns:
146
+ Markdown template for gate confirmation.
147
+ """
148
+ files = self._get_synced_files()
149
+
150
+ lines = [
151
+ "## ATDD Gate Confirmation",
152
+ "",
153
+ "**Files loaded:**",
154
+ ]
155
+
156
+ for agent, info in files.items():
157
+ if info["exists"] and info.get("has_block"):
158
+ lines.append(f"- {info['file']} (hash: `{info['hash']}...`)")
159
+
160
+ lines.extend([
161
+ "",
162
+ "**Key constraints acknowledged:**",
163
+ ])
164
+
165
+ for constraint in self.KEY_CONSTRAINTS:
166
+ lines.append(f"- {constraint}")
167
+
168
+ return "\n".join(lines)
@@ -4,6 +4,42 @@ missions:
4
4
  validate_phase_transitions: "Phase transitions and quality gates per conventions and schemas"
5
5
  required: true
6
6
 
7
+ # =============================================================================
8
+ # ATDD AGENT BOOTSTRAP PROTOCOL (REQUIRED)
9
+ # =============================================================================
10
+ #
11
+ # Problem: Agents often skip instruction files and work without ATDD context.
12
+ # Solution: Coercive context - inject rules via mandatory tool output.
13
+ #
14
+ # PROTOCOL:
15
+ # ---------
16
+ # 1. Run this command FIRST:
17
+ #
18
+ # atdd gate
19
+ #
20
+ # 2. Paste the output and confirm:
21
+ # - Which file(s) were loaded
22
+ # - The reported hash
23
+ # - The key ATDD constraints
24
+ #
25
+ # 3. If output shows missing/unsynced files, run:
26
+ #
27
+ # atdd sync
28
+ #
29
+ # Then re-run: atdd gate
30
+ #
31
+ # WHY THIS WORKS:
32
+ # - Gate output is mandatory tool output - agent can't ignore it
33
+ # - Proves which ATDD files were actually loaded
34
+ # - Forces consistency across all agents
35
+ #
36
+ # FAILURE MODE:
37
+ # - If agent skips the gate: STOP and run atdd gate again
38
+ # - Don't proceed until gate confirmation is posted
39
+ #
40
+ # RULE: If ATDD rules matter, start with `atdd gate`. No gate = no guarantees.
41
+ # =============================================================================
42
+
7
43
  manifest:
8
44
  - trains: "plan/_trains.yaml"
9
45
  - wagons: "plan/_wagons.yaml"