atdd 0.3.3__tar.gz → 0.4.0__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.
- {atdd-0.3.3/src/atdd.egg-info → atdd-0.4.0}/PKG-INFO +41 -12
- {atdd-0.3.3 → atdd-0.4.0}/README.md +40 -11
- {atdd-0.3.3 → atdd-0.4.0}/pyproject.toml +1 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/cli.py +223 -76
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/commands/add_persistence_metadata.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/commands/infer_governance_status.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/commands/interface.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/commands/inventory.py +2 -2
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/commands/migration.py +11 -6
- atdd-0.4.0/src/atdd/coach/commands/test_runner.py +180 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/commands/traceability.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/conventions/session.convention.yaml +26 -26
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/templates/ATDD.md +15 -15
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/templates/SESSION-TEMPLATE.md +12 -12
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/utils/repo.py +24 -8
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/validators/shared_fixtures.py +8 -3
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/validators/test_session_validation.py +4 -4
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/conventions/tests/test_component_taxonomy.py +4 -3
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/conventions/tests/test_component_urn_naming.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/validators/test_commons_structure.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/validators/test_complexity.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/validators/test_cross_language_consistency.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/validators/test_design_system_compliance.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/validators/test_dto_testing_patterns.py +4 -2
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/validators/test_green_cross_stack_layers.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/validators/test_green_layer_dependencies.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/validators/test_green_python_layer_structure.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/validators/test_green_supabase_layer_structure.py +2 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/validators/test_import_boundaries.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/validators/test_init_file_urns.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/validators/test_preact_layer_boundaries.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/validators/test_presentation_convention.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/validators/test_python_architecture.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/validators/test_quality_metrics.py +2 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/validators/test_station_master_pattern.py +4 -2
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/validators/test_train_infrastructure.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/validators/test_train_urns.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/validators/test_typescript_architecture.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/validators/test_usecase_structure.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/validators/test_wagon_boundaries.py +2 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/planner/validators/test_plan_urn_resolution.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/planner/validators/test_wagon_urn_chain.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/planner/validators/test_wmbt_consistency.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/planner/validators/test_wmbt_vocabulary.py +2 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/conventions/contract.convention.yaml +1 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/conventions/migration.convention.yaml +5 -5
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/validators/cleanup_duplicate_headers.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/validators/cleanup_duplicate_headers_v2.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/validators/coverage_gap_report.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/validators/fix_dual_ac_references.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/validators/remove_duplicate_lines.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/validators/test_acceptance_urn_filename_mapping.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/validators/test_acceptance_urn_separator.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/validators/test_contract_schema_compliance.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/validators/test_contracts_structure.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/validators/test_coverage_adequacy.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/validators/test_dual_ac_reference.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/validators/test_fixture_validity.py +2 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/validators/test_isolation.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/validators/test_migration_coverage.py +4 -2
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/validators/test_migration_generation.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/validators/test_python_test_naming.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/validators/test_red_layer_validation.py +2 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/validators/test_red_python_layer_structure.py +2 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/validators/test_red_supabase_layer_structure.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/validators/test_telemetry_structure.py +3 -1
- {atdd-0.3.3 → atdd-0.4.0/src/atdd.egg-info}/PKG-INFO +41 -12
- atdd-0.3.3/src/atdd/coach/commands/test_runner.py +0 -141
- {atdd-0.3.3 → atdd-0.4.0}/LICENSE +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/setup.cfg +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/__init__.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/__main__.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/__init__.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/commands/__init__.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/commands/analyze_migrations.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/commands/consumers.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/commands/gate.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/commands/initializer.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/commands/registry.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/commands/session.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/commands/sync.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/commands/test_interface.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/commands/tests/__init__.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/commands/tests/test_telemetry_array_validation.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/overlays/__init__.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/overlays/claude.md +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/schemas/config.schema.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/schemas/manifest.schema.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/utils/__init__.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/utils/graph/__init__.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/utils/graph/urn.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/validators/__init__.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/validators/test_enrich_wagon_registry.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/validators/test_registry.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/validators/test_traceability.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/validators/test_update_feature_paths.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coach/validators/test_validate_contract_consumers.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/__init__.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/conventions/adapter.recipe.yaml +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/conventions/backend.convention.yaml +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/conventions/boundaries.convention.yaml +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/conventions/commons.convention.yaml +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/conventions/complexity.recipe.yaml +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/conventions/component-naming.convention.yaml +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/conventions/design.convention.yaml +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/conventions/design.recipe.yaml +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/conventions/dto.convention.yaml +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/conventions/frontend.convention.yaml +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/conventions/green.convention.yaml +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/conventions/presentation.convention.yaml +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/conventions/refactor.convention.yaml +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/conventions/technology.convention.yaml +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/conventions/tests/__init__.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/conventions/tests/test_adapter_recipe.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/conventions/tests/test_complexity_recipe.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/conventions/tests/test_thinness_recipe.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/conventions/thinness.recipe.yaml +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/conventions/train.convention.yaml +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/conventions/verification.protocol.yaml +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/schemas/design_system.schema.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/coder/validators/__init__.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/conftest.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/planner/__init__.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/planner/conventions/acceptance.convention.yaml +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/planner/conventions/appendix.convention.yaml +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/planner/conventions/artifact-naming.convention.yaml +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/planner/conventions/component.convention.yaml +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/planner/conventions/criteria.convention.yaml +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/planner/conventions/feature.convention.yaml +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/planner/conventions/interface.convention.yaml +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/planner/conventions/steps.convention.yaml +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/planner/conventions/train.convention.yaml +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/planner/conventions/wagon.convention.yaml +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/planner/conventions/wmbt.convention.yaml +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/planner/schemas/acceptance.schema.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/planner/schemas/appendix.schema.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/planner/schemas/component.schema.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/planner/schemas/feature.schema.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/planner/schemas/train.schema.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/planner/schemas/wagon.schema.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/planner/schemas/wmbt.schema.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/planner/validators/__init__.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/planner/validators/conftest.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/planner/validators/test_draft_wagon_registry.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/planner/validators/test_plan_cross_refs.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/planner/validators/test_plan_uniqueness.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/planner/validators/test_plan_wagons.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/planner/validators/test_train_validation.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/__init__.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/conventions/artifact.convention.yaml +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/conventions/filename.convention.yaml +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/conventions/red.convention.yaml +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/conventions/routing.convention.yaml +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/conventions/security.convention.yaml +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/conventions/telemetry.convention.yaml +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/schemas/a11y.tmpl.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/schemas/artifact.schema.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/schemas/contract.schema.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/schemas/contract.tmpl.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/schemas/db.tmpl.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/schemas/e2e.tmpl.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/schemas/edge_function.tmpl.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/schemas/event.tmpl.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/schemas/http.tmpl.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/schemas/job.tmpl.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/schemas/load.tmpl.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/schemas/metric.tmpl.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/schemas/pack.schema.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/schemas/realtime.tmpl.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/schemas/rls.tmpl.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/schemas/script.tmpl.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/schemas/sec.tmpl.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/schemas/storage.tmpl.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/schemas/telemetry.schema.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/schemas/telemetry_tracking_manifest.schema.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/schemas/test_filename.schema.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/schemas/test_intent.schema.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/schemas/unit.tmpl.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/schemas/visual.tmpl.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/schemas/ws.tmpl.json +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/utils/__init__.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/utils/filename.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/validators/__init__.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/validators/conftest.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/validators/test_artifact_naming_category.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/validators/test_contract_security.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/validators/test_migration_criteria.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/validators/test_typescript_test_naming.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/tester/validators/test_typescript_test_structure.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd/version_check.py +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd.egg-info/SOURCES.txt +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd.egg-info/dependency_links.txt +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd.egg-info/entry_points.txt +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/src/atdd.egg-info/requires.txt +0 -0
- {atdd-0.3.3 → atdd-0.4.0}/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.
|
|
3
|
+
Version: 0.4.0
|
|
4
4
|
Summary: ATDD Platform - Acceptance Test Driven Development toolkit
|
|
5
5
|
License: MIT
|
|
6
6
|
Requires-Python: >=3.10
|
|
@@ -16,6 +16,15 @@ Dynamic: license-file
|
|
|
16
16
|
|
|
17
17
|
Acceptance Test Driven Development toolkit for structured planning and convention enforcement.
|
|
18
18
|
|
|
19
|
+
ATDD covers the full software lifecycle, not just code. It starts from a job to be done (e.g., user problem or goal), turns it into deterministic requirements, validates them with tests, and then drives implementation.
|
|
20
|
+
|
|
21
|
+
```mermaid
|
|
22
|
+
flowchart LR
|
|
23
|
+
A[Job to be Done] -->|Planner| B[Wagon + Acceptance Criteria]
|
|
24
|
+
B -->|Tester| C[RED Tests]
|
|
25
|
+
C -->|Coder| D[GREEN Code]
|
|
26
|
+
```
|
|
27
|
+
|
|
19
28
|
## Installation
|
|
20
29
|
|
|
21
30
|
### From PyPI
|
|
@@ -49,9 +58,9 @@ atdd --help
|
|
|
49
58
|
```bash
|
|
50
59
|
atdd init # Initialize ATDD in your project
|
|
51
60
|
atdd gate # ⚠️ START EVERY SESSION WITH THIS
|
|
52
|
-
atdd session new
|
|
61
|
+
atdd session new <capability> # Create a planning session
|
|
53
62
|
atdd sync # Sync rules to agent config files
|
|
54
|
-
atdd
|
|
63
|
+
atdd validate # Run all validators
|
|
55
64
|
```
|
|
56
65
|
|
|
57
66
|
> **⚠️ `atdd gate` is required.**
|
|
@@ -67,6 +76,22 @@ ATDD provides:
|
|
|
67
76
|
3. **ATDD Lifecycle** - Planner → Tester → Coder phase gates
|
|
68
77
|
4. **Agent Config Sync** - Keep ATDD rules in sync across AI agent config files
|
|
69
78
|
|
|
79
|
+
```mermaid
|
|
80
|
+
flowchart LR
|
|
81
|
+
A[Job to be Done] -->|Planner| B[Wagon + Acceptance Criteria]
|
|
82
|
+
B -->|Tester| C[RED Tests]
|
|
83
|
+
C -->|Coder| D[GREEN Code]
|
|
84
|
+
D -->|Coder| E[REFACTOR]
|
|
85
|
+
E -.->|feedback| B
|
|
86
|
+
|
|
87
|
+
subgraph "ATDD Lifecycle"
|
|
88
|
+
B
|
|
89
|
+
C
|
|
90
|
+
D
|
|
91
|
+
E
|
|
92
|
+
end
|
|
93
|
+
```
|
|
94
|
+
|
|
70
95
|
## Commands
|
|
71
96
|
|
|
72
97
|
### Project Initialization
|
|
@@ -196,19 +221,23 @@ Before starting work, confirm you have loaded these rules.
|
|
|
196
221
|
### Validation
|
|
197
222
|
|
|
198
223
|
```bash
|
|
199
|
-
atdd
|
|
200
|
-
atdd
|
|
201
|
-
atdd
|
|
202
|
-
atdd
|
|
203
|
-
atdd --quick
|
|
224
|
+
atdd validate # Run all validators
|
|
225
|
+
atdd validate planner # Planning validators only
|
|
226
|
+
atdd validate tester # Testing validators only
|
|
227
|
+
atdd validate coder # Implementation validators only
|
|
228
|
+
atdd validate --quick # Fast smoke test
|
|
229
|
+
atdd validate --coverage # With coverage report
|
|
230
|
+
atdd validate --html # With HTML report
|
|
204
231
|
```
|
|
205
232
|
|
|
206
233
|
### Other Commands
|
|
207
234
|
|
|
208
235
|
```bash
|
|
209
|
-
atdd
|
|
210
|
-
atdd
|
|
211
|
-
atdd --
|
|
236
|
+
atdd status # Platform status
|
|
237
|
+
atdd inventory # Generate artifact inventory
|
|
238
|
+
atdd inventory --format json # Inventory as JSON
|
|
239
|
+
atdd registry update # Update all registries
|
|
240
|
+
atdd --help # Full help
|
|
212
241
|
```
|
|
213
242
|
|
|
214
243
|
## Project Structure
|
|
@@ -264,7 +293,7 @@ pytest --cov=atdd --cov-report=html
|
|
|
264
293
|
|
|
265
294
|
1. Create `src/atdd/{phase}/validators/test_{name}.py`
|
|
266
295
|
2. Write pytest test functions
|
|
267
|
-
3. Run `atdd
|
|
296
|
+
3. Run `atdd validate {phase}`
|
|
268
297
|
|
|
269
298
|
Validators are auto-discovered by pytest.
|
|
270
299
|
|
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
Acceptance Test Driven Development toolkit for structured planning and convention enforcement.
|
|
4
4
|
|
|
5
|
+
ATDD covers the full software lifecycle, not just code. It starts from a job to be done (e.g., user problem or goal), turns it into deterministic requirements, validates them with tests, and then drives implementation.
|
|
6
|
+
|
|
7
|
+
```mermaid
|
|
8
|
+
flowchart LR
|
|
9
|
+
A[Job to be Done] -->|Planner| B[Wagon + Acceptance Criteria]
|
|
10
|
+
B -->|Tester| C[RED Tests]
|
|
11
|
+
C -->|Coder| D[GREEN Code]
|
|
12
|
+
```
|
|
13
|
+
|
|
5
14
|
## Installation
|
|
6
15
|
|
|
7
16
|
### From PyPI
|
|
@@ -35,9 +44,9 @@ atdd --help
|
|
|
35
44
|
```bash
|
|
36
45
|
atdd init # Initialize ATDD in your project
|
|
37
46
|
atdd gate # ⚠️ START EVERY SESSION WITH THIS
|
|
38
|
-
atdd session new
|
|
47
|
+
atdd session new <capability> # Create a planning session
|
|
39
48
|
atdd sync # Sync rules to agent config files
|
|
40
|
-
atdd
|
|
49
|
+
atdd validate # Run all validators
|
|
41
50
|
```
|
|
42
51
|
|
|
43
52
|
> **⚠️ `atdd gate` is required.**
|
|
@@ -53,6 +62,22 @@ ATDD provides:
|
|
|
53
62
|
3. **ATDD Lifecycle** - Planner → Tester → Coder phase gates
|
|
54
63
|
4. **Agent Config Sync** - Keep ATDD rules in sync across AI agent config files
|
|
55
64
|
|
|
65
|
+
```mermaid
|
|
66
|
+
flowchart LR
|
|
67
|
+
A[Job to be Done] -->|Planner| B[Wagon + Acceptance Criteria]
|
|
68
|
+
B -->|Tester| C[RED Tests]
|
|
69
|
+
C -->|Coder| D[GREEN Code]
|
|
70
|
+
D -->|Coder| E[REFACTOR]
|
|
71
|
+
E -.->|feedback| B
|
|
72
|
+
|
|
73
|
+
subgraph "ATDD Lifecycle"
|
|
74
|
+
B
|
|
75
|
+
C
|
|
76
|
+
D
|
|
77
|
+
E
|
|
78
|
+
end
|
|
79
|
+
```
|
|
80
|
+
|
|
56
81
|
## Commands
|
|
57
82
|
|
|
58
83
|
### Project Initialization
|
|
@@ -182,19 +207,23 @@ Before starting work, confirm you have loaded these rules.
|
|
|
182
207
|
### Validation
|
|
183
208
|
|
|
184
209
|
```bash
|
|
185
|
-
atdd
|
|
186
|
-
atdd
|
|
187
|
-
atdd
|
|
188
|
-
atdd
|
|
189
|
-
atdd --quick
|
|
210
|
+
atdd validate # Run all validators
|
|
211
|
+
atdd validate planner # Planning validators only
|
|
212
|
+
atdd validate tester # Testing validators only
|
|
213
|
+
atdd validate coder # Implementation validators only
|
|
214
|
+
atdd validate --quick # Fast smoke test
|
|
215
|
+
atdd validate --coverage # With coverage report
|
|
216
|
+
atdd validate --html # With HTML report
|
|
190
217
|
```
|
|
191
218
|
|
|
192
219
|
### Other Commands
|
|
193
220
|
|
|
194
221
|
```bash
|
|
195
|
-
atdd
|
|
196
|
-
atdd
|
|
197
|
-
atdd --
|
|
222
|
+
atdd status # Platform status
|
|
223
|
+
atdd inventory # Generate artifact inventory
|
|
224
|
+
atdd inventory --format json # Inventory as JSON
|
|
225
|
+
atdd registry update # Update all registries
|
|
226
|
+
atdd --help # Full help
|
|
198
227
|
```
|
|
199
228
|
|
|
200
229
|
## Project Structure
|
|
@@ -250,7 +279,7 @@ pytest --cov=atdd --cov-report=html
|
|
|
250
279
|
|
|
251
280
|
1. Create `src/atdd/{phase}/validators/test_{name}.py`
|
|
252
281
|
2. Write pytest test functions
|
|
253
|
-
3. Run `atdd
|
|
282
|
+
3. Run `atdd validate {phase}`
|
|
254
283
|
|
|
255
284
|
Validators are auto-discovered by pytest.
|
|
256
285
|
|
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
ATDD Platform - Unified command-line interface.
|
|
4
4
|
|
|
5
5
|
The coach orchestrates all ATDD lifecycle operations:
|
|
6
|
-
-
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
6
|
+
- validate: Run validators (planner/tester/coder/coach)
|
|
7
|
+
- inventory: Catalog repository artifacts
|
|
8
|
+
- status: Show platform status
|
|
9
|
+
- registry: Update registries from source files
|
|
10
|
+
- init: Initialize ATDD structure in consumer repos
|
|
11
|
+
- session: Manage session files
|
|
12
|
+
- sync: Sync ATDD rules to agent config files
|
|
13
|
+
- gate: Verify agents loaded ATDD rules
|
|
14
14
|
|
|
15
15
|
Usage:
|
|
16
16
|
atdd init # Initialize ATDD in consumer repo
|
|
@@ -21,18 +21,22 @@ Usage:
|
|
|
21
21
|
atdd sync --verify # Check if files are in sync
|
|
22
22
|
atdd sync --agent claude # Sync specific agent only
|
|
23
23
|
atdd gate # Show ATDD gate verification
|
|
24
|
-
atdd
|
|
25
|
-
atdd
|
|
26
|
-
atdd
|
|
27
|
-
atdd
|
|
28
|
-
atdd --
|
|
29
|
-
atdd
|
|
30
|
-
atdd
|
|
24
|
+
atdd validate # Run all validators
|
|
25
|
+
atdd validate planner # Run planner validators
|
|
26
|
+
atdd validate tester # Run tester validators
|
|
27
|
+
atdd validate coder # Run coder validators
|
|
28
|
+
atdd validate --quick # Quick smoke test
|
|
29
|
+
atdd validate --coverage # With coverage report
|
|
30
|
+
atdd inventory # Generate inventory (YAML)
|
|
31
|
+
atdd inventory --format json # Generate inventory (JSON)
|
|
32
|
+
atdd status # Show platform status
|
|
33
|
+
atdd registry update # Update all registries
|
|
31
34
|
atdd --help # Show help
|
|
32
35
|
"""
|
|
33
36
|
|
|
34
37
|
import argparse
|
|
35
38
|
import sys
|
|
39
|
+
import warnings
|
|
36
40
|
from pathlib import Path
|
|
37
41
|
|
|
38
42
|
ATDD_DIR = Path(__file__).parent
|
|
@@ -48,6 +52,11 @@ from atdd.coach.utils.repo import find_repo_root
|
|
|
48
52
|
from atdd.version_check import print_update_notice, print_upgrade_sync_notice
|
|
49
53
|
|
|
50
54
|
|
|
55
|
+
def _deprecation_warning(old: str, new: str) -> None:
|
|
56
|
+
"""Emit a deprecation warning for legacy flags."""
|
|
57
|
+
print(f"\033[33m⚠️ Deprecated: '{old}' will be removed. Use '{new}' instead.\033[0m")
|
|
58
|
+
|
|
59
|
+
|
|
51
60
|
class ATDDCoach:
|
|
52
61
|
"""
|
|
53
62
|
ATDD Platform Coach - orchestrates all operations.
|
|
@@ -61,7 +70,7 @@ class ATDDCoach:
|
|
|
61
70
|
def __init__(self, repo_root: Path = None):
|
|
62
71
|
self.repo_root = repo_root or find_repo_root()
|
|
63
72
|
self.inventory = RepositoryInventory(self.repo_root)
|
|
64
|
-
self.
|
|
73
|
+
self.validator_runner = TestRunner(self.repo_root)
|
|
65
74
|
self.registry_updater = RegistryUpdater(self.repo_root)
|
|
66
75
|
|
|
67
76
|
def run_inventory(self, format: str = "yaml") -> int:
|
|
@@ -81,7 +90,7 @@ class ATDDCoach:
|
|
|
81
90
|
|
|
82
91
|
return 0
|
|
83
92
|
|
|
84
|
-
def
|
|
93
|
+
def run_validators(
|
|
85
94
|
self,
|
|
86
95
|
phase: str = "all",
|
|
87
96
|
verbose: bool = False,
|
|
@@ -89,11 +98,11 @@ class ATDDCoach:
|
|
|
89
98
|
html: bool = False,
|
|
90
99
|
quick: bool = False
|
|
91
100
|
) -> int:
|
|
92
|
-
"""Run ATDD
|
|
101
|
+
"""Run ATDD validators."""
|
|
93
102
|
if quick:
|
|
94
|
-
return self.
|
|
103
|
+
return self.validator_runner.quick_check()
|
|
95
104
|
|
|
96
|
-
return self.
|
|
105
|
+
return self.validator_runner.run_tests(
|
|
97
106
|
phase=phase,
|
|
98
107
|
verbose=verbose,
|
|
99
108
|
coverage=coverage,
|
|
@@ -119,21 +128,23 @@ class ATDDCoach:
|
|
|
119
128
|
print("ATDD Platform Status")
|
|
120
129
|
print("=" * 60)
|
|
121
130
|
print("\nDirectory structure:")
|
|
122
|
-
print(f" 📋 Planner
|
|
123
|
-
print(f" 🧪 Tester
|
|
124
|
-
print(f" ⚙️ Coder
|
|
125
|
-
print(f" 🎯 Coach:
|
|
131
|
+
print(f" 📋 Planner validators: {ATDD_DIR / 'planner' / 'validators'}")
|
|
132
|
+
print(f" 🧪 Tester validators: {ATDD_DIR / 'tester' / 'validators'}")
|
|
133
|
+
print(f" ⚙️ Coder validators: {ATDD_DIR / 'coder' / 'validators'}")
|
|
134
|
+
print(f" 🎯 Coach validators: {ATDD_DIR / 'coach' / 'validators'}")
|
|
126
135
|
|
|
127
136
|
# Quick stats
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
print(f"
|
|
134
|
-
print(f"
|
|
135
|
-
print(f"
|
|
136
|
-
print(f"
|
|
137
|
+
planner_validators = len(list((ATDD_DIR / "planner" / "validators").glob("test_*.py")))
|
|
138
|
+
tester_validators = len(list((ATDD_DIR / "tester" / "validators").glob("test_*.py")))
|
|
139
|
+
coder_validators = len(list((ATDD_DIR / "coder" / "validators").glob("test_*.py")))
|
|
140
|
+
coach_validators = len(list((ATDD_DIR / "coach" / "validators").glob("test_*.py")))
|
|
141
|
+
|
|
142
|
+
print(f"\nValidator files:")
|
|
143
|
+
print(f" Planner: {planner_validators} files")
|
|
144
|
+
print(f" Tester: {tester_validators} files")
|
|
145
|
+
print(f" Coder: {coder_validators} files")
|
|
146
|
+
print(f" Coach: {coach_validators} files")
|
|
147
|
+
print(f" Total: {planner_validators + tester_validators + coder_validators + coach_validators} files")
|
|
137
148
|
|
|
138
149
|
return 0
|
|
139
150
|
|
|
@@ -149,6 +160,27 @@ Examples:
|
|
|
149
160
|
%(prog)s init Create atdd-sessions/, .atdd/
|
|
150
161
|
%(prog)s init --force Overwrite if exists
|
|
151
162
|
|
|
163
|
+
# Run validators
|
|
164
|
+
%(prog)s validate Run all validators
|
|
165
|
+
%(prog)s validate planner Run planner validators only
|
|
166
|
+
%(prog)s validate tester Run tester validators only
|
|
167
|
+
%(prog)s validate coder Run coder validators only
|
|
168
|
+
%(prog)s validate --quick Quick smoke test
|
|
169
|
+
%(prog)s validate --coverage With coverage report
|
|
170
|
+
%(prog)s validate --html With HTML report
|
|
171
|
+
%(prog)s validate -v Verbose output
|
|
172
|
+
|
|
173
|
+
# Repository inspection
|
|
174
|
+
%(prog)s inventory Generate full inventory (YAML)
|
|
175
|
+
%(prog)s inventory --format json Generate inventory (JSON)
|
|
176
|
+
%(prog)s status Show platform status
|
|
177
|
+
|
|
178
|
+
# Registry management
|
|
179
|
+
%(prog)s registry update Update all registries
|
|
180
|
+
%(prog)s registry update wagons Update wagon registry only
|
|
181
|
+
%(prog)s registry update contracts Update contract registry only
|
|
182
|
+
%(prog)s registry update telemetry Update telemetry registry only
|
|
183
|
+
|
|
152
184
|
# Session management
|
|
153
185
|
%(prog)s session new my-feature Create SESSION-NN-my-feature.md
|
|
154
186
|
%(prog)s session new my-feature --type migration
|
|
@@ -165,29 +197,98 @@ Examples:
|
|
|
165
197
|
%(prog)s gate Show gate verification info
|
|
166
198
|
%(prog)s gate --json Output as JSON
|
|
167
199
|
|
|
168
|
-
# Existing flag-based commands (backwards compatible)
|
|
169
|
-
%(prog)s --inventory Generate full inventory (YAML)
|
|
170
|
-
%(prog)s --inventory --format json Generate inventory (JSON)
|
|
171
|
-
%(prog)s --test all Run all meta-tests
|
|
172
|
-
%(prog)s --test planner Run planner phase tests
|
|
173
|
-
%(prog)s --test tester Run tester phase tests
|
|
174
|
-
%(prog)s --test coder Run coder phase tests
|
|
175
|
-
%(prog)s --test all --coverage Run with coverage report
|
|
176
|
-
%(prog)s --test all --html Run with HTML report
|
|
177
|
-
%(prog)s --test all --verbose Run with verbose output
|
|
178
|
-
%(prog)s --quick Quick smoke test
|
|
179
|
-
%(prog)s --status Show platform status
|
|
180
|
-
|
|
181
200
|
Phase descriptions:
|
|
182
201
|
planner - Validates planning artifacts (wagons, trains, URNs)
|
|
183
202
|
tester - Validates testing artifacts (contracts, telemetry)
|
|
184
203
|
coder - Validates implementation (architecture, quality)
|
|
204
|
+
coach - Validates coach artifacts (sessions, registries)
|
|
185
205
|
"""
|
|
186
206
|
)
|
|
187
207
|
|
|
188
|
-
# Subparsers for
|
|
208
|
+
# Subparsers for commands
|
|
189
209
|
subparsers = parser.add_subparsers(dest="command", help="Commands")
|
|
190
210
|
|
|
211
|
+
# ----- atdd validate [phase] -----
|
|
212
|
+
validate_parser = subparsers.add_parser(
|
|
213
|
+
"validate",
|
|
214
|
+
help="Run ATDD validators",
|
|
215
|
+
description="Run validators to check artifacts against conventions"
|
|
216
|
+
)
|
|
217
|
+
validate_parser.add_argument(
|
|
218
|
+
"phase",
|
|
219
|
+
nargs="?",
|
|
220
|
+
type=str,
|
|
221
|
+
default="all",
|
|
222
|
+
choices=["all", "planner", "tester", "coder", "coach"],
|
|
223
|
+
help="Phase to validate (default: all)"
|
|
224
|
+
)
|
|
225
|
+
validate_parser.add_argument(
|
|
226
|
+
"--quick", "-q",
|
|
227
|
+
action="store_true",
|
|
228
|
+
help="Quick smoke test (no parallel, no reports)"
|
|
229
|
+
)
|
|
230
|
+
validate_parser.add_argument(
|
|
231
|
+
"--verbose", "-v",
|
|
232
|
+
action="store_true",
|
|
233
|
+
help="Verbose output"
|
|
234
|
+
)
|
|
235
|
+
validate_parser.add_argument(
|
|
236
|
+
"--coverage",
|
|
237
|
+
action="store_true",
|
|
238
|
+
help="Generate coverage report"
|
|
239
|
+
)
|
|
240
|
+
validate_parser.add_argument(
|
|
241
|
+
"--html",
|
|
242
|
+
action="store_true",
|
|
243
|
+
help="Generate HTML report"
|
|
244
|
+
)
|
|
245
|
+
|
|
246
|
+
# ----- atdd inventory -----
|
|
247
|
+
inventory_parser = subparsers.add_parser(
|
|
248
|
+
"inventory",
|
|
249
|
+
help="Generate repository inventory",
|
|
250
|
+
description="Catalog all ATDD artifacts in the repository"
|
|
251
|
+
)
|
|
252
|
+
inventory_parser.add_argument(
|
|
253
|
+
"--format", "-f",
|
|
254
|
+
type=str,
|
|
255
|
+
choices=["yaml", "json"],
|
|
256
|
+
default="yaml",
|
|
257
|
+
help="Output format (default: yaml)"
|
|
258
|
+
)
|
|
259
|
+
|
|
260
|
+
# ----- atdd status -----
|
|
261
|
+
subparsers.add_parser(
|
|
262
|
+
"status",
|
|
263
|
+
help="Show platform status",
|
|
264
|
+
description="Display ATDD platform status and validator counts"
|
|
265
|
+
)
|
|
266
|
+
|
|
267
|
+
# ----- atdd registry {update} -----
|
|
268
|
+
registry_parser = subparsers.add_parser(
|
|
269
|
+
"registry",
|
|
270
|
+
help="Manage registries",
|
|
271
|
+
description="Update registries from source files"
|
|
272
|
+
)
|
|
273
|
+
registry_subparsers = registry_parser.add_subparsers(
|
|
274
|
+
dest="registry_command",
|
|
275
|
+
help="Registry commands"
|
|
276
|
+
)
|
|
277
|
+
|
|
278
|
+
# atdd registry update [type]
|
|
279
|
+
registry_update_parser = registry_subparsers.add_parser(
|
|
280
|
+
"update",
|
|
281
|
+
help="Update registries from source files"
|
|
282
|
+
)
|
|
283
|
+
registry_update_parser.add_argument(
|
|
284
|
+
"type",
|
|
285
|
+
nargs="?",
|
|
286
|
+
type=str,
|
|
287
|
+
default="all",
|
|
288
|
+
choices=["all", "wagons", "contracts", "telemetry"],
|
|
289
|
+
help="Registry type to update (default: all)"
|
|
290
|
+
)
|
|
291
|
+
|
|
191
292
|
# ----- atdd init -----
|
|
192
293
|
init_parser = subparsers.add_parser(
|
|
193
294
|
"init",
|
|
@@ -289,9 +390,9 @@ Phase descriptions:
|
|
|
289
390
|
help="Output as JSON for programmatic use"
|
|
290
391
|
)
|
|
291
392
|
|
|
292
|
-
# -----
|
|
393
|
+
# ----- Legacy flag-based arguments (deprecated, kept for backwards compatibility) -----
|
|
293
394
|
|
|
294
|
-
# Repository root override
|
|
395
|
+
# Repository root override (not deprecated - still useful)
|
|
295
396
|
parser.add_argument(
|
|
296
397
|
"--repo",
|
|
297
398
|
type=str,
|
|
@@ -299,75 +400,110 @@ Phase descriptions:
|
|
|
299
400
|
help="Target repository root (default: auto-detect from .atdd/)"
|
|
300
401
|
)
|
|
301
402
|
|
|
302
|
-
#
|
|
303
|
-
parser.add_argument(
|
|
304
|
-
"--inventory",
|
|
305
|
-
action="store_true",
|
|
306
|
-
help="Generate repository inventory"
|
|
307
|
-
)
|
|
308
|
-
|
|
403
|
+
# DEPRECATED: --test → atdd validate
|
|
309
404
|
parser.add_argument(
|
|
310
405
|
"--test",
|
|
311
406
|
type=str,
|
|
312
407
|
choices=["all", "planner", "tester", "coder"],
|
|
313
408
|
metavar="PHASE",
|
|
314
|
-
help=
|
|
409
|
+
help=argparse.SUPPRESS # Hide from help, deprecated
|
|
315
410
|
)
|
|
316
411
|
|
|
412
|
+
# DEPRECATED: --inventory → atdd inventory
|
|
413
|
+
parser.add_argument(
|
|
414
|
+
"--inventory",
|
|
415
|
+
action="store_true",
|
|
416
|
+
help=argparse.SUPPRESS # Hide from help, deprecated
|
|
417
|
+
)
|
|
418
|
+
|
|
419
|
+
# DEPRECATED: --status → atdd status
|
|
317
420
|
parser.add_argument(
|
|
318
421
|
"--status",
|
|
319
422
|
action="store_true",
|
|
320
|
-
help=
|
|
423
|
+
help=argparse.SUPPRESS # Hide from help, deprecated
|
|
321
424
|
)
|
|
322
425
|
|
|
426
|
+
# DEPRECATED: --quick → atdd validate --quick
|
|
323
427
|
parser.add_argument(
|
|
324
428
|
"--quick",
|
|
325
429
|
action="store_true",
|
|
326
|
-
help=
|
|
430
|
+
help=argparse.SUPPRESS # Hide from help, deprecated
|
|
327
431
|
)
|
|
328
432
|
|
|
433
|
+
# DEPRECATED: --update-registry → atdd registry update
|
|
329
434
|
parser.add_argument(
|
|
330
435
|
"--update-registry",
|
|
331
436
|
type=str,
|
|
332
437
|
choices=["all", "wagons", "contracts", "telemetry"],
|
|
333
438
|
metavar="TYPE",
|
|
334
|
-
help=
|
|
439
|
+
help=argparse.SUPPRESS # Hide from help, deprecated
|
|
335
440
|
)
|
|
336
441
|
|
|
337
|
-
# Options
|
|
442
|
+
# Options that work with both legacy and modern commands
|
|
338
443
|
parser.add_argument(
|
|
339
444
|
"--format",
|
|
340
445
|
type=str,
|
|
341
446
|
choices=["yaml", "json"],
|
|
342
447
|
default="yaml",
|
|
343
|
-
help=
|
|
448
|
+
help=argparse.SUPPRESS # Hide, use subcommand option instead
|
|
344
449
|
)
|
|
345
|
-
|
|
346
|
-
# Options for tests
|
|
347
450
|
parser.add_argument(
|
|
348
451
|
"--verbose", "-v",
|
|
349
452
|
action="store_true",
|
|
350
|
-
help=
|
|
453
|
+
help=argparse.SUPPRESS # Hide, use subcommand option instead
|
|
351
454
|
)
|
|
352
|
-
|
|
353
455
|
parser.add_argument(
|
|
354
456
|
"--coverage",
|
|
355
457
|
action="store_true",
|
|
356
|
-
help=
|
|
458
|
+
help=argparse.SUPPRESS # Hide, use subcommand option instead
|
|
357
459
|
)
|
|
358
|
-
|
|
359
460
|
parser.add_argument(
|
|
360
461
|
"--html",
|
|
361
462
|
action="store_true",
|
|
362
|
-
help=
|
|
463
|
+
help=argparse.SUPPRESS # Hide, use subcommand option instead
|
|
363
464
|
)
|
|
364
465
|
|
|
365
466
|
args = parser.parse_args()
|
|
366
467
|
|
|
367
|
-
# ----- Handle subcommands -----
|
|
468
|
+
# ----- Handle modern subcommands -----
|
|
469
|
+
|
|
470
|
+
# atdd validate [phase]
|
|
471
|
+
if args.command == "validate":
|
|
472
|
+
repo_path = Path(args.repo) if hasattr(args, 'repo') and args.repo else None
|
|
473
|
+
coach = ATDDCoach(repo_root=repo_path)
|
|
474
|
+
return coach.run_validators(
|
|
475
|
+
phase=args.phase,
|
|
476
|
+
verbose=args.verbose,
|
|
477
|
+
coverage=args.coverage,
|
|
478
|
+
html=args.html,
|
|
479
|
+
quick=args.quick
|
|
480
|
+
)
|
|
481
|
+
|
|
482
|
+
# atdd inventory
|
|
483
|
+
elif args.command == "inventory":
|
|
484
|
+
repo_path = Path(args.repo) if hasattr(args, 'repo') and args.repo else None
|
|
485
|
+
coach = ATDDCoach(repo_root=repo_path)
|
|
486
|
+
return coach.run_inventory(format=args.format)
|
|
487
|
+
|
|
488
|
+
# atdd status
|
|
489
|
+
elif args.command == "status":
|
|
490
|
+
repo_path = Path(args.repo) if hasattr(args, 'repo') and args.repo else None
|
|
491
|
+
coach = ATDDCoach(repo_root=repo_path)
|
|
492
|
+
return coach.show_status()
|
|
493
|
+
|
|
494
|
+
# atdd registry {update}
|
|
495
|
+
elif args.command == "registry":
|
|
496
|
+
repo_path = Path(args.repo) if hasattr(args, 'repo') and args.repo else None
|
|
497
|
+
coach = ATDDCoach(repo_root=repo_path)
|
|
498
|
+
|
|
499
|
+
if args.registry_command == "update":
|
|
500
|
+
return coach.update_registries(registry_type=args.type)
|
|
501
|
+
else:
|
|
502
|
+
registry_parser.print_help()
|
|
503
|
+
return 0
|
|
368
504
|
|
|
369
505
|
# atdd init
|
|
370
|
-
|
|
506
|
+
elif args.command == "init":
|
|
371
507
|
initializer = ProjectInitializer()
|
|
372
508
|
return initializer.init(force=args.force)
|
|
373
509
|
|
|
@@ -401,18 +537,20 @@ Phase descriptions:
|
|
|
401
537
|
gate = ATDDGate()
|
|
402
538
|
return gate.verify(json=args.json)
|
|
403
539
|
|
|
404
|
-
# ----- Handle flag-based commands
|
|
540
|
+
# ----- Handle deprecated flag-based commands -----
|
|
405
541
|
|
|
406
|
-
# Create coach instance with optional repo override
|
|
407
542
|
repo_path = Path(args.repo) if args.repo else None
|
|
408
543
|
coach = ATDDCoach(repo_root=repo_path)
|
|
409
544
|
|
|
410
|
-
#
|
|
545
|
+
# DEPRECATED: --inventory
|
|
411
546
|
if args.inventory:
|
|
547
|
+
_deprecation_warning("atdd --inventory", "atdd inventory")
|
|
412
548
|
return coach.run_inventory(format=args.format)
|
|
413
549
|
|
|
550
|
+
# DEPRECATED: --test
|
|
414
551
|
elif args.test:
|
|
415
|
-
|
|
552
|
+
_deprecation_warning(f"atdd --test {args.test}", f"atdd validate {args.test}")
|
|
553
|
+
return coach.run_validators(
|
|
416
554
|
phase=args.test,
|
|
417
555
|
verbose=args.verbose,
|
|
418
556
|
coverage=args.coverage,
|
|
@@ -420,13 +558,22 @@ Phase descriptions:
|
|
|
420
558
|
quick=False
|
|
421
559
|
)
|
|
422
560
|
|
|
561
|
+
# DEPRECATED: --quick
|
|
423
562
|
elif args.quick:
|
|
424
|
-
|
|
563
|
+
_deprecation_warning("atdd --quick", "atdd validate --quick")
|
|
564
|
+
return coach.run_validators(quick=True)
|
|
425
565
|
|
|
566
|
+
# DEPRECATED: --status
|
|
426
567
|
elif args.status:
|
|
568
|
+
_deprecation_warning("atdd --status", "atdd status")
|
|
427
569
|
return coach.show_status()
|
|
428
570
|
|
|
571
|
+
# DEPRECATED: --update-registry
|
|
429
572
|
elif args.update_registry:
|
|
573
|
+
_deprecation_warning(
|
|
574
|
+
f"atdd --update-registry {args.update_registry}",
|
|
575
|
+
f"atdd registry update {args.update_registry}"
|
|
576
|
+
)
|
|
430
577
|
return coach.update_registries(registry_type=args.update_registry)
|
|
431
578
|
|
|
432
579
|
else:
|
|
@@ -10,7 +10,9 @@ import re
|
|
|
10
10
|
from pathlib import Path
|
|
11
11
|
from typing import Dict, List, Optional
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
from atdd.coach.utils.repo import find_repo_root
|
|
14
|
+
|
|
15
|
+
REPO_ROOT = find_repo_root()
|
|
14
16
|
CONTRACTS_DIR = REPO_ROOT / "contracts"
|
|
15
17
|
MIGRATIONS_DIR = REPO_ROOT / "supabase" / "migrations"
|
|
16
18
|
|