atdd 0.1.0__tar.gz → 0.2.4__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.1.0/src/atdd.egg-info → atdd-0.2.4}/PKG-INFO +75 -13
- {atdd-0.1.0 → atdd-0.2.4}/README.md +74 -12
- {atdd-0.1.0 → atdd-0.2.4}/pyproject.toml +2 -2
- atdd-0.2.4/src/atdd/__init__.py +6 -0
- atdd-0.2.4/src/atdd/__main__.py +4 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/cli.py +35 -1
- atdd-0.2.4/src/atdd/coach/commands/gate.py +168 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coach/templates/ATDD.md +15 -0
- atdd-0.2.4/src/atdd/version_check.py +126 -0
- {atdd-0.1.0 → atdd-0.2.4/src/atdd.egg-info}/PKG-INFO +75 -13
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd.egg-info/SOURCES.txt +3 -0
- atdd-0.2.4/src/atdd.egg-info/entry_points.txt +2 -0
- atdd-0.1.0/src/atdd/tester/validators/__init__.py +0 -0
- atdd-0.1.0/src/atdd.egg-info/entry_points.txt +0 -2
- {atdd-0.1.0 → atdd-0.2.4}/LICENSE +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/setup.cfg +0 -0
- {atdd-0.1.0/src/atdd → atdd-0.2.4/src/atdd/coach}/__init__.py +0 -0
- {atdd-0.1.0/src/atdd/coach → atdd-0.2.4/src/atdd/coach/commands}/__init__.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coach/commands/add_persistence_metadata.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coach/commands/analyze_migrations.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coach/commands/consumers.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coach/commands/infer_governance_status.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coach/commands/initializer.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coach/commands/interface.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coach/commands/inventory.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coach/commands/migration.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coach/commands/registry.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coach/commands/session.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coach/commands/sync.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coach/commands/test_interface.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coach/commands/test_runner.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coach/commands/tests/__init__.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coach/commands/tests/test_telemetry_array_validation.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coach/commands/traceability.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coach/conventions/session.convention.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coach/overlays/__init__.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coach/overlays/claude.md +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coach/schemas/config.schema.json +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coach/schemas/manifest.schema.json +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coach/templates/SESSION-TEMPLATE.md +0 -0
- {atdd-0.1.0/src/atdd/coach/commands → atdd-0.2.4/src/atdd/coach/utils}/__init__.py +0 -0
- {atdd-0.1.0/src/atdd/coach/utils → atdd-0.2.4/src/atdd/coach/utils/graph}/__init__.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coach/utils/graph/urn.py +0 -0
- {atdd-0.1.0/src/atdd/coach/utils/graph → atdd-0.2.4/src/atdd/coach/validators}/__init__.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coach/validators/shared_fixtures.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coach/validators/test_enrich_wagon_registry.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coach/validators/test_registry.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coach/validators/test_session_validation.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coach/validators/test_traceability.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coach/validators/test_update_feature_paths.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coach/validators/test_validate_contract_consumers.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/__init__.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/conventions/adapter.recipe.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/conventions/backend.convention.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/conventions/boundaries.convention.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/conventions/commons.convention.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/conventions/complexity.recipe.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/conventions/component-naming.convention.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/conventions/design.convention.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/conventions/design.recipe.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/conventions/dto.convention.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/conventions/frontend.convention.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/conventions/green.convention.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/conventions/presentation.convention.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/conventions/refactor.convention.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/conventions/technology.convention.yaml +0 -0
- {atdd-0.1.0/src/atdd/coach/validators → atdd-0.2.4/src/atdd/coder/conventions/tests}/__init__.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/conventions/tests/test_adapter_recipe.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/conventions/tests/test_complexity_recipe.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/conventions/tests/test_component_taxonomy.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/conventions/tests/test_component_urn_naming.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/conventions/tests/test_thinness_recipe.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/conventions/thinness.recipe.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/conventions/train.convention.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/conventions/verification.protocol.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/schemas/design_system.schema.json +0 -0
- {atdd-0.1.0/src/atdd/coder/conventions/tests → atdd-0.2.4/src/atdd/coder/validators}/__init__.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/validators/test_commons_structure.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/validators/test_complexity.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/validators/test_cross_language_consistency.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/validators/test_design_system_compliance.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/validators/test_dto_testing_patterns.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/validators/test_green_cross_stack_layers.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/validators/test_green_layer_dependencies.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/validators/test_green_python_layer_structure.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/validators/test_green_supabase_layer_structure.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/validators/test_import_boundaries.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/validators/test_init_file_urns.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/validators/test_preact_layer_boundaries.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/validators/test_presentation_convention.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/validators/test_python_architecture.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/validators/test_quality_metrics.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/validators/test_station_master_pattern.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/validators/test_train_infrastructure.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/validators/test_train_urns.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/validators/test_typescript_architecture.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/validators/test_usecase_structure.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/coder/validators/test_wagon_boundaries.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/conftest.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/planner/__init__.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/planner/conventions/acceptance.convention.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/planner/conventions/appendix.convention.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/planner/conventions/artifact-naming.convention.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/planner/conventions/component.convention.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/planner/conventions/criteria.convention.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/planner/conventions/feature.convention.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/planner/conventions/interface.convention.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/planner/conventions/steps.convention.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/planner/conventions/train.convention.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/planner/conventions/wagon.convention.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/planner/conventions/wmbt.convention.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/planner/schemas/acceptance.schema.json +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/planner/schemas/appendix.schema.json +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/planner/schemas/component.schema.json +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/planner/schemas/feature.schema.json +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/planner/schemas/train.schema.json +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/planner/schemas/wagon.schema.json +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/planner/schemas/wmbt.schema.json +0 -0
- {atdd-0.1.0/src/atdd/coder → atdd-0.2.4/src/atdd/planner}/validators/__init__.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/planner/validators/conftest.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/planner/validators/test_draft_wagon_registry.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/planner/validators/test_plan_cross_refs.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/planner/validators/test_plan_uniqueness.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/planner/validators/test_plan_urn_resolution.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/planner/validators/test_plan_wagons.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/planner/validators/test_train_validation.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/planner/validators/test_wagon_urn_chain.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/planner/validators/test_wmbt_consistency.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/planner/validators/test_wmbt_vocabulary.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/__init__.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/conventions/artifact.convention.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/conventions/contract.convention.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/conventions/filename.convention.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/conventions/migration.convention.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/conventions/red.convention.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/conventions/routing.convention.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/conventions/telemetry.convention.yaml +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/schemas/a11y.tmpl.json +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/schemas/artifact.schema.json +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/schemas/contract.schema.json +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/schemas/contract.tmpl.json +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/schemas/db.tmpl.json +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/schemas/e2e.tmpl.json +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/schemas/edge_function.tmpl.json +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/schemas/event.tmpl.json +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/schemas/http.tmpl.json +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/schemas/job.tmpl.json +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/schemas/load.tmpl.json +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/schemas/metric.tmpl.json +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/schemas/pack.schema.json +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/schemas/realtime.tmpl.json +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/schemas/rls.tmpl.json +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/schemas/script.tmpl.json +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/schemas/sec.tmpl.json +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/schemas/storage.tmpl.json +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/schemas/telemetry.schema.json +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/schemas/telemetry_tracking_manifest.schema.json +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/schemas/test_filename.schema.json +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/schemas/test_intent.schema.json +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/schemas/unit.tmpl.json +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/schemas/visual.tmpl.json +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/schemas/ws.tmpl.json +0 -0
- {atdd-0.1.0/src/atdd/planner/validators → atdd-0.2.4/src/atdd/tester/utils}/__init__.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/utils/filename.py +0 -0
- {atdd-0.1.0/src/atdd/tester/utils → atdd-0.2.4/src/atdd/tester/validators}/__init__.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/validators/cleanup_duplicate_headers.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/validators/cleanup_duplicate_headers_v2.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/validators/conftest.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/validators/coverage_gap_report.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/validators/fix_dual_ac_references.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/validators/remove_duplicate_lines.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/validators/test_acceptance_urn_filename_mapping.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/validators/test_acceptance_urn_separator.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/validators/test_artifact_naming_category.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/validators/test_contract_schema_compliance.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/validators/test_contracts_structure.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/validators/test_coverage_adequacy.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/validators/test_dual_ac_reference.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/validators/test_fixture_validity.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/validators/test_isolation.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/validators/test_migration_coverage.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/validators/test_migration_criteria.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/validators/test_migration_generation.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/validators/test_python_test_naming.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/validators/test_red_layer_validation.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/validators/test_red_python_layer_structure.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/validators/test_red_supabase_layer_structure.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/validators/test_telemetry_structure.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/validators/test_typescript_test_naming.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd/tester/validators/test_typescript_test_structure.py +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd.egg-info/dependency_links.txt +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/src/atdd.egg-info/requires.txt +0 -0
- {atdd-0.1.0 → atdd-0.2.4}/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.2.4
|
|
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
|
|
21
|
+
### From PyPI
|
|
22
22
|
|
|
23
23
|
```bash
|
|
24
|
-
pip install
|
|
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
|
|
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
|
-
|
|
86
|
+
├── manifest.yaml # Session tracking
|
|
87
|
+
└── config.yaml # Agent sync configuration
|
|
89
88
|
```
|
|
90
89
|
|
|
91
90
|
### Session Management
|
|
@@ -100,6 +99,68 @@ 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
|
+
### ATDD Gate
|
|
133
|
+
|
|
134
|
+
Verify agents have loaded ATDD rules before starting work:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
atdd gate # Show gate verification info
|
|
138
|
+
atdd gate --json # Output as JSON for programmatic use
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Example output:
|
|
142
|
+
```
|
|
143
|
+
============================================================
|
|
144
|
+
ATDD Gate Verification
|
|
145
|
+
============================================================
|
|
146
|
+
|
|
147
|
+
Loaded files:
|
|
148
|
+
- CLAUDE.md (hash: d04f897c6691dc13...)
|
|
149
|
+
|
|
150
|
+
Key constraints:
|
|
151
|
+
1. No ad-hoc tests - follow ATDD conventions
|
|
152
|
+
2. Domain layer NEVER imports from other layers
|
|
153
|
+
3. Phase transitions require quality gates
|
|
154
|
+
|
|
155
|
+
------------------------------------------------------------
|
|
156
|
+
Before starting work, confirm you have loaded these rules.
|
|
157
|
+
------------------------------------------------------------
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Agents should confirm at the start of each session:
|
|
161
|
+
- Which ATDD file(s) they loaded
|
|
162
|
+
- The key constraints they will follow
|
|
163
|
+
|
|
103
164
|
### Validation
|
|
104
165
|
|
|
105
166
|
```bash
|
|
@@ -126,8 +187,9 @@ src/atdd/
|
|
|
126
187
|
├── coach/
|
|
127
188
|
│ ├── commands/ # CLI command implementations
|
|
128
189
|
│ ├── conventions/ # Coach conventions (YAML)
|
|
190
|
+
│ ├── overlays/ # Agent-specific additions
|
|
129
191
|
│ ├── schemas/ # JSON schemas
|
|
130
|
-
│ ├── templates/ # Session templates
|
|
192
|
+
│ ├── templates/ # Session templates, ATDD.md
|
|
131
193
|
│ └── validators/ # Coach validators
|
|
132
194
|
├── planner/
|
|
133
195
|
│ ├── 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
|
|
7
|
+
### From PyPI
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
pip install
|
|
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
|
|
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
|
-
|
|
72
|
+
├── manifest.yaml # Session tracking
|
|
73
|
+
└── config.yaml # Agent sync configuration
|
|
75
74
|
```
|
|
76
75
|
|
|
77
76
|
### Session Management
|
|
@@ -86,6 +85,68 @@ 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
|
+
### ATDD Gate
|
|
119
|
+
|
|
120
|
+
Verify agents have loaded ATDD rules before starting work:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
atdd gate # Show gate verification info
|
|
124
|
+
atdd gate --json # Output as JSON for programmatic use
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Example output:
|
|
128
|
+
```
|
|
129
|
+
============================================================
|
|
130
|
+
ATDD Gate Verification
|
|
131
|
+
============================================================
|
|
132
|
+
|
|
133
|
+
Loaded files:
|
|
134
|
+
- CLAUDE.md (hash: d04f897c6691dc13...)
|
|
135
|
+
|
|
136
|
+
Key constraints:
|
|
137
|
+
1. No ad-hoc tests - follow ATDD conventions
|
|
138
|
+
2. Domain layer NEVER imports from other layers
|
|
139
|
+
3. Phase transitions require quality gates
|
|
140
|
+
|
|
141
|
+
------------------------------------------------------------
|
|
142
|
+
Before starting work, confirm you have loaded these rules.
|
|
143
|
+
------------------------------------------------------------
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Agents should confirm at the start of each session:
|
|
147
|
+
- Which ATDD file(s) they loaded
|
|
148
|
+
- The key constraints they will follow
|
|
149
|
+
|
|
89
150
|
### Validation
|
|
90
151
|
|
|
91
152
|
```bash
|
|
@@ -112,8 +173,9 @@ src/atdd/
|
|
|
112
173
|
├── coach/
|
|
113
174
|
│ ├── commands/ # CLI command implementations
|
|
114
175
|
│ ├── conventions/ # Coach conventions (YAML)
|
|
176
|
+
│ ├── overlays/ # Agent-specific additions
|
|
115
177
|
│ ├── schemas/ # JSON schemas
|
|
116
|
-
│ ├── templates/ # Session templates
|
|
178
|
+
│ ├── templates/ # Session templates, ATDD.md
|
|
117
179
|
│ └── validators/ # Coach validators
|
|
118
180
|
├── planner/
|
|
119
181
|
│ ├── conventions/ # Planning conventions
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "atdd"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.2.4"
|
|
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:
|
|
18
|
+
atdd = "atdd.cli:cli"
|
|
19
19
|
|
|
20
20
|
[tool.setuptools.packages.find]
|
|
21
21
|
where = ["src"]
|
|
@@ -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(
|
|
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,21 @@ missions:
|
|
|
4
4
|
validate_phase_transitions: "Phase transitions and quality gates per conventions and schemas"
|
|
5
5
|
required: true
|
|
6
6
|
|
|
7
|
+
# ATDD Gate (REQUIRED before any work)
|
|
8
|
+
# =====================================
|
|
9
|
+
# Before starting ANY task, you MUST confirm you have loaded these rules.
|
|
10
|
+
# Provide this confirmation at the start of your first response:
|
|
11
|
+
#
|
|
12
|
+
# ## ATDD Gate Confirmation
|
|
13
|
+
# - **File loaded:** CLAUDE.md (or AGENTS.md, etc.)
|
|
14
|
+
# - **Key constraints:**
|
|
15
|
+
# 1. No ad-hoc tests - follow ATDD conventions
|
|
16
|
+
# 2. Domain layer NEVER imports from other layers
|
|
17
|
+
# 3. Phase transitions require quality gates
|
|
18
|
+
#
|
|
19
|
+
# If you cannot provide this confirmation, STOP and reload the rules.
|
|
20
|
+
# Run `atdd gate` to verify the expected values.
|
|
21
|
+
|
|
7
22
|
manifest:
|
|
8
23
|
- trains: "plan/_trains.yaml"
|
|
9
24
|
- wagons: "plan/_wagons.yaml"
|