atdd 0.7.1__tar.gz → 0.7.3__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.7.1/src/atdd.egg-info → atdd-0.7.3}/PKG-INFO +1 -1
- {atdd-0.7.1 → atdd-0.7.3}/pyproject.toml +1 -1
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/commands/registry.py +6 -6
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/commands/traceability.py +5 -5
- atdd-0.7.3/src/atdd/coach/conventions/naming.convention.yaml +296 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/conventions/session.convention.yaml +1 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/schemas/config.schema.json +26 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/templates/ATDD.md +1 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/templates/SESSION-TEMPLATE.md +6 -1
- atdd-0.7.3/src/atdd/coach/validators/test_session_archive_status.py +339 -0
- atdd-0.7.3/src/atdd/coach/validators/test_session_manifest_alignment.py +387 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/validators/test_session_validation.py +161 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/planner/conventions/train.convention.yaml +17 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/planner/validators/test_plan_wagons.py +70 -3
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/conventions/telemetry.convention.yaml +25 -20
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/schemas/telemetry_tracking_manifest.schema.json +1 -1
- {atdd-0.7.1 → atdd-0.7.3/src/atdd.egg-info}/PKG-INFO +1 -1
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd.egg-info/SOURCES.txt +3 -0
- {atdd-0.7.1 → atdd-0.7.3}/LICENSE +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/README.md +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/setup.cfg +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/__init__.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/__main__.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/cli.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/__init__.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/commands/__init__.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/commands/add_persistence_metadata.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/commands/analyze_migrations.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/commands/consumers.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/commands/gate.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/commands/infer_governance_status.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/commands/initializer.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/commands/interface.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/commands/inventory.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/commands/migration.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/commands/session.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/commands/sync.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/commands/test_interface.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/commands/test_runner.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/commands/tests/__init__.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/commands/tests/test_telemetry_array_validation.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/overlays/__init__.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/overlays/claude.md +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/schemas/manifest.schema.json +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/utils/__init__.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/utils/config.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/utils/coverage_phase.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/utils/graph/__init__.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/utils/graph/urn.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/utils/locale_phase.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/utils/repo.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/utils/train_spec_phase.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/validators/__init__.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/validators/shared_fixtures.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/validators/test_enrich_wagon_registry.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/validators/test_registry.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/validators/test_release_versioning.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/validators/test_traceability.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/validators/test_train_registry.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/validators/test_update_feature_paths.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coach/validators/test_validate_contract_consumers.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/__init__.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/conventions/adapter.recipe.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/conventions/backend.convention.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/conventions/boundaries.convention.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/conventions/commons.convention.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/conventions/complexity.recipe.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/conventions/component-naming.convention.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/conventions/coverage.convention.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/conventions/design.convention.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/conventions/design.recipe.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/conventions/dto.convention.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/conventions/frontend.convention.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/conventions/green.convention.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/conventions/presentation.convention.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/conventions/refactor.convention.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/conventions/technology.convention.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/conventions/tests/__init__.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/conventions/tests/test_adapter_recipe.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/conventions/tests/test_complexity_recipe.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/conventions/tests/test_component_taxonomy.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/conventions/tests/test_component_urn_naming.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/conventions/tests/test_thinness_recipe.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/conventions/thinness.recipe.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/conventions/train.convention.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/conventions/verification.protocol.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/schemas/design_system.schema.json +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/validators/__init__.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/validators/conftest.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/validators/test_commons_structure.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/validators/test_complexity.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/validators/test_cross_language_consistency.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/validators/test_design_system_compliance.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/validators/test_dto_testing_patterns.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/validators/test_green_cross_stack_layers.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/validators/test_green_layer_dependencies.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/validators/test_green_python_layer_structure.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/validators/test_green_supabase_layer_structure.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/validators/test_hierarchy_coverage.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/validators/test_i18n_runtime.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/validators/test_import_boundaries.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/validators/test_init_file_urns.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/validators/test_preact_layer_boundaries.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/validators/test_presentation_convention.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/validators/test_python_architecture.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/validators/test_quality_metrics.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/validators/test_station_master_pattern.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/validators/test_train_infrastructure.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/validators/test_train_urns.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/validators/test_typescript_architecture.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/validators/test_usecase_structure.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/coder/validators/test_wagon_boundaries.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/conftest.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/planner/__init__.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/planner/conventions/acceptance.convention.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/planner/conventions/appendix.convention.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/planner/conventions/artifact-naming.convention.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/planner/conventions/component.convention.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/planner/conventions/coverage.convention.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/planner/conventions/criteria.convention.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/planner/conventions/feature.convention.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/planner/conventions/interface.convention.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/planner/conventions/steps.convention.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/planner/conventions/wagon.convention.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/planner/conventions/wmbt.convention.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/planner/schemas/acceptance.schema.json +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/planner/schemas/appendix.schema.json +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/planner/schemas/component.schema.json +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/planner/schemas/feature.schema.json +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/planner/schemas/train.schema.json +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/planner/schemas/wagon.schema.json +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/planner/schemas/wmbt.schema.json +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/planner/validators/__init__.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/planner/validators/conftest.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/planner/validators/test_draft_wagon_registry.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/planner/validators/test_hierarchy_coverage.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/planner/validators/test_plan_cross_refs.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/planner/validators/test_plan_uniqueness.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/planner/validators/test_plan_urn_resolution.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/planner/validators/test_train_validation.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/planner/validators/test_wagon_urn_chain.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/planner/validators/test_wmbt_consistency.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/planner/validators/test_wmbt_vocabulary.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/__init__.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/conventions/artifact.convention.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/conventions/contract.convention.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/conventions/coverage.convention.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/conventions/filename.convention.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/conventions/migration.convention.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/conventions/red.convention.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/conventions/routing.convention.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/conventions/security.convention.yaml +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/schemas/a11y.tmpl.json +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/schemas/artifact.schema.json +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/schemas/contract.schema.json +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/schemas/contract.tmpl.json +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/schemas/db.tmpl.json +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/schemas/e2e.tmpl.json +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/schemas/edge_function.tmpl.json +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/schemas/event.tmpl.json +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/schemas/http.tmpl.json +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/schemas/job.tmpl.json +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/schemas/load.tmpl.json +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/schemas/locale_manifest.schema.json +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/schemas/metric.tmpl.json +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/schemas/pack.schema.json +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/schemas/realtime.tmpl.json +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/schemas/rls.tmpl.json +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/schemas/script.tmpl.json +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/schemas/sec.tmpl.json +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/schemas/storage.tmpl.json +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/schemas/telemetry.schema.json +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/schemas/test_filename.schema.json +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/schemas/test_intent.schema.json +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/schemas/unit.tmpl.json +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/schemas/visual.tmpl.json +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/schemas/ws.tmpl.json +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/utils/__init__.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/utils/filename.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/validators/__init__.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/validators/cleanup_duplicate_headers.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/validators/cleanup_duplicate_headers_v2.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/validators/conftest.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/validators/coverage_gap_report.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/validators/fix_dual_ac_references.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/validators/remove_duplicate_lines.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/validators/test_acceptance_urn_filename_mapping.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/validators/test_acceptance_urn_separator.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/validators/test_artifact_naming_category.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/validators/test_contract_schema_compliance.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/validators/test_contract_security.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/validators/test_contracts_structure.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/validators/test_coverage_adequacy.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/validators/test_dual_ac_reference.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/validators/test_fixture_validity.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/validators/test_hierarchy_coverage.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/validators/test_isolation.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/validators/test_locale_coverage.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/validators/test_migration_coverage.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/validators/test_migration_criteria.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/validators/test_migration_generation.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/validators/test_python_test_naming.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/validators/test_red_layer_validation.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/validators/test_red_python_layer_structure.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/validators/test_red_supabase_layer_structure.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/validators/test_telemetry_structure.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/validators/test_train_backend_e2e.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/validators/test_train_frontend_e2e.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/validators/test_train_frontend_python.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/validators/test_typescript_test_naming.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/tester/validators/test_typescript_test_structure.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd/version_check.py +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd.egg-info/dependency_links.txt +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd.egg-info/entry_points.txt +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd.egg-info/requires.txt +0 -0
- {atdd-0.7.1 → atdd-0.7.3}/src/atdd.egg-info/top_level.txt +0 -0
|
@@ -10,7 +10,7 @@ Architecture: 4-Layer Clean Architecture (single file)
|
|
|
10
10
|
Registries:
|
|
11
11
|
- plan/_wagons.yaml from wagon manifests
|
|
12
12
|
- contracts/_artifacts.yaml from contract schemas
|
|
13
|
-
- telemetry/
|
|
13
|
+
- telemetry/_telemetry.yaml from telemetry signals
|
|
14
14
|
- atdd/tester/_tests.yaml from test files
|
|
15
15
|
- python/_implementations.yaml from Python files
|
|
16
16
|
- supabase/_functions.yaml from function files
|
|
@@ -89,8 +89,8 @@ class RegistryLoader:
|
|
|
89
89
|
return yaml.safe_load(f) or {"artifacts": []}
|
|
90
90
|
|
|
91
91
|
def load_telemetry(self) -> Dict[str, Any]:
|
|
92
|
-
"""Load telemetry registry (telemetry/
|
|
93
|
-
registry_path = self.telemetry_dir / "
|
|
92
|
+
"""Load telemetry registry (telemetry/_telemetry.yaml)."""
|
|
93
|
+
registry_path = self.telemetry_dir / "_telemetry.yaml"
|
|
94
94
|
if not registry_path.exists():
|
|
95
95
|
return {"signals": []}
|
|
96
96
|
|
|
@@ -776,7 +776,7 @@ class RegistryBuilder:
|
|
|
776
776
|
|
|
777
777
|
def update_telemetry_registry(self, mode: str = "interactive", preview_only: bool = None) -> Dict[str, Any]:
|
|
778
778
|
"""
|
|
779
|
-
Update telemetry/
|
|
779
|
+
Update telemetry/_telemetry.yaml from telemetry signal files.
|
|
780
780
|
|
|
781
781
|
Args:
|
|
782
782
|
mode: "interactive" (prompt), "apply" (no prompt), or "check" (verify only)
|
|
@@ -791,7 +791,7 @@ class RegistryBuilder:
|
|
|
791
791
|
print("\n📊 Analyzing telemetry registry from signal files...")
|
|
792
792
|
|
|
793
793
|
# Load existing registry
|
|
794
|
-
registry_path = self.telemetry_dir / "
|
|
794
|
+
registry_path = self.telemetry_dir / "_telemetry.yaml"
|
|
795
795
|
existing_signals = {}
|
|
796
796
|
if registry_path.exists():
|
|
797
797
|
with open(registry_path) as f:
|
|
@@ -812,7 +812,7 @@ class RegistryBuilder:
|
|
|
812
812
|
# Scan for telemetry signal files (JSON or YAML)
|
|
813
813
|
json_files = list(self.telemetry_dir.glob("**/*.json"))
|
|
814
814
|
yaml_files = list(self.telemetry_dir.glob("**/*.yaml"))
|
|
815
|
-
signal_files = [f for f in (json_files + yaml_files) if "
|
|
815
|
+
signal_files = [f for f in (json_files + yaml_files) if "_telemetry" not in f.name]
|
|
816
816
|
|
|
817
817
|
stats["total_files"] = len(signal_files)
|
|
818
818
|
|
|
@@ -1435,8 +1435,8 @@ class TraceabilityReconciler:
|
|
|
1435
1435
|
|
|
1436
1436
|
for telemetry in telemetry_files:
|
|
1437
1437
|
# Skip manifest and pack files (not signal files)
|
|
1438
|
-
if (telemetry.file_path.endswith('
|
|
1439
|
-
telemetry.file_path.endswith('
|
|
1438
|
+
if (telemetry.file_path.endswith('_taxonomy.yaml') or
|
|
1439
|
+
telemetry.file_path.endswith('_telemetry.yaml') or
|
|
1440
1440
|
'.pack.' in telemetry.file_path):
|
|
1441
1441
|
continue
|
|
1442
1442
|
|
|
@@ -1493,9 +1493,9 @@ class TraceabilityReconciler:
|
|
|
1493
1493
|
|
|
1494
1494
|
telemetry_id = telemetry.telemetry_id
|
|
1495
1495
|
|
|
1496
|
-
# Skip manifest files (
|
|
1497
|
-
if telemetry.file_path.endswith('
|
|
1498
|
-
telemetry.file_path.endswith('
|
|
1496
|
+
# Skip manifest files (_taxonomy.yaml, _telemetry.yaml)
|
|
1497
|
+
if telemetry.file_path.endswith('_taxonomy.yaml') or \
|
|
1498
|
+
telemetry.file_path.endswith('_telemetry.yaml') or \
|
|
1499
1499
|
'.pack.' in telemetry.file_path:
|
|
1500
1500
|
continue
|
|
1501
1501
|
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
version: "1.0"
|
|
2
|
+
name: "Master Naming Convention"
|
|
3
|
+
description: "Consolidated naming patterns for all ATDD archetypes with regex validation"
|
|
4
|
+
|
|
5
|
+
# Purpose
|
|
6
|
+
purpose: |
|
|
7
|
+
Single source of truth for naming patterns across all archetypes.
|
|
8
|
+
Each archetype has: pattern, regex, examples, and validator reference.
|
|
9
|
+
For detailed semantics, see archetype-specific conventions.
|
|
10
|
+
|
|
11
|
+
# Separator Semantics (from artifact-naming.convention.yaml)
|
|
12
|
+
separator_semantics:
|
|
13
|
+
colon: "Hierarchical descent (unlimited depth)"
|
|
14
|
+
dot: "Lateral variation (typically 0-1 levels)"
|
|
15
|
+
hyphen: "Word separator within segments (kebab-case)"
|
|
16
|
+
|
|
17
|
+
# Naming Patterns by Archetype
|
|
18
|
+
patterns:
|
|
19
|
+
|
|
20
|
+
wagon:
|
|
21
|
+
description: "Bounded context performing specific action on specific object"
|
|
22
|
+
semantic_pattern: "verb-object"
|
|
23
|
+
format: "kebab-case"
|
|
24
|
+
regex: "^[a-z][a-z0-9]*-[a-z][a-z0-9]*(-[a-z][a-z0-9]*)*$"
|
|
25
|
+
urn_format: "wagon:{wagon-name}"
|
|
26
|
+
urn_regex: "^wagon:[a-z][a-z0-9-]+$"
|
|
27
|
+
examples:
|
|
28
|
+
valid:
|
|
29
|
+
- "authenticate-identity"
|
|
30
|
+
- "resolve-dilemmas"
|
|
31
|
+
- "commit-state"
|
|
32
|
+
- "burn-timebank"
|
|
33
|
+
- "juggle-domains"
|
|
34
|
+
- "manage-inventory"
|
|
35
|
+
invalid:
|
|
36
|
+
- "authentication" # Missing object (noun only)
|
|
37
|
+
- "dilemma-resolver" # Wrong order (object-verb)
|
|
38
|
+
- "resolving-dilemmas" # Gerund instead of verb
|
|
39
|
+
- "ResolveDilemmas" # PascalCase
|
|
40
|
+
filesystem:
|
|
41
|
+
directory: "plan/{wagon_snake_case}/"
|
|
42
|
+
manifest: "plan/{wagon_snake_case}/_{wagon_snake_case}.yaml"
|
|
43
|
+
note: "Directory uses snake_case: resolve_dilemmas"
|
|
44
|
+
validator:
|
|
45
|
+
file: "src/atdd/planner/validators/test_plan_wagons.py"
|
|
46
|
+
spec: "SPEC-PLATFORM-WAGONS-0008"
|
|
47
|
+
convention_ref: "atdd/planner/conventions/wagon.convention.yaml"
|
|
48
|
+
|
|
49
|
+
feature:
|
|
50
|
+
description: "Specific capability within a wagon"
|
|
51
|
+
semantic_pattern: "verb-object"
|
|
52
|
+
format: "kebab-case"
|
|
53
|
+
regex: "^[a-z][a-z0-9]*-[a-z][a-z0-9]*(-[a-z][a-z0-9]*)*$"
|
|
54
|
+
urn_format: "feature:{wagon}:{feature-name}"
|
|
55
|
+
urn_regex: "^feature:[a-z][a-z0-9-]+:[a-z][a-z0-9-]+$"
|
|
56
|
+
examples:
|
|
57
|
+
valid:
|
|
58
|
+
- "capture-choice"
|
|
59
|
+
- "pair-fragments"
|
|
60
|
+
- "score-domains"
|
|
61
|
+
- "sign-commit"
|
|
62
|
+
- "validate-input"
|
|
63
|
+
invalid:
|
|
64
|
+
- "choice-capture" # Wrong order
|
|
65
|
+
- "capturing" # Missing object
|
|
66
|
+
- "fragment_pairing" # Snake case
|
|
67
|
+
filesystem:
|
|
68
|
+
file: "plan/{wagon}/features/{feature_snake_case}.yaml"
|
|
69
|
+
validator:
|
|
70
|
+
file: "src/atdd/planner/validators/test_plan_wagons.py"
|
|
71
|
+
spec: "SPEC-PLATFORM-WAGONS-0009"
|
|
72
|
+
convention_ref: "atdd/planner/conventions/feature.convention.yaml"
|
|
73
|
+
|
|
74
|
+
contract:
|
|
75
|
+
description: "Data exchange contract between wagons"
|
|
76
|
+
semantic_pattern: "theme:hierarchy:aspect(.variant)?"
|
|
77
|
+
format: "kebab-case segments with colon/dot separators"
|
|
78
|
+
id_regex: "^[a-z][a-z0-9-]*(:[a-z][a-z0-9-]+)+(\\.[a-z][a-z0-9-]+)?$"
|
|
79
|
+
urn_format: "contract:{artifact-name}"
|
|
80
|
+
urn_regex: "^contract:[a-z][a-z0-9-]*(:[a-z][a-z0-9-]+)+(\\.[a-z][a-z0-9-]+)?$"
|
|
81
|
+
examples:
|
|
82
|
+
schema_id:
|
|
83
|
+
- "mechanic:timebank.remaining"
|
|
84
|
+
- "match:dilemma:current"
|
|
85
|
+
- "commons:ux:foundations:color"
|
|
86
|
+
- "sensory:gesture.raw"
|
|
87
|
+
urn:
|
|
88
|
+
- "contract:mechanic:timebank.remaining"
|
|
89
|
+
- "contract:match:dilemma:current"
|
|
90
|
+
- "contract:commons:ux:foundations:color"
|
|
91
|
+
id_vs_urn:
|
|
92
|
+
schema_id: "NO 'contract:' prefix (e.g., mechanic:timebank.remaining)"
|
|
93
|
+
wagon_urn: "WITH 'contract:' prefix (e.g., contract:mechanic:timebank.remaining)"
|
|
94
|
+
filesystem:
|
|
95
|
+
pattern: "contracts/{theme}/{domain}/{aspect}.schema.json"
|
|
96
|
+
example: "contracts/mechanic/timebank/remaining.schema.json"
|
|
97
|
+
validator:
|
|
98
|
+
file: "src/atdd/tester/validators/test_contract_schema_compliance.py"
|
|
99
|
+
spec: "SPEC-TESTER-VAL-0001"
|
|
100
|
+
convention_ref: "atdd/tester/conventions/contract.convention.yaml"
|
|
101
|
+
naming_authority: "atdd/planner/conventions/artifact-naming.convention.yaml"
|
|
102
|
+
|
|
103
|
+
telemetry:
|
|
104
|
+
description: "Observability and analytics tracking signals"
|
|
105
|
+
semantic_pattern: "theme:hierarchy:aspect(.variant)?"
|
|
106
|
+
format: "kebab-case segments with colon/dot separators"
|
|
107
|
+
signal_id_regex: "^[a-z][a-z0-9-]*(:[a-z][a-z0-9-]+)+\\.(event|metric|trace|log)\\.(ui|ux|be|db|nw|st|tm|sc|au|fn|if)(\\.[a-z][a-z0-9-]+)?$"
|
|
108
|
+
urn_format: "telemetry:{theme}(:{path})*:{aspect}(.{variant})?"
|
|
109
|
+
urn_regex: "^telemetry:[a-z][a-z0-9-]*(:[a-z][a-z0-9-]+)*(\\.[a-z][a-z0-9-]+)?$"
|
|
110
|
+
examples:
|
|
111
|
+
signal_id:
|
|
112
|
+
- "mechanic:decision.choice.event.be"
|
|
113
|
+
- "match:dilemma:current.metric.be.selection-duration"
|
|
114
|
+
- "juggle:goal.detected.event.be"
|
|
115
|
+
urn:
|
|
116
|
+
- "telemetry:mechanic:decision.choice"
|
|
117
|
+
- "telemetry:juggle:goal.detected"
|
|
118
|
+
- "telemetry:mechanic:episode.timer"
|
|
119
|
+
id_vs_urn:
|
|
120
|
+
signal_id: "NO 'telemetry:' prefix, includes .type.plane (e.g., mechanic:decision.choice.event.be)"
|
|
121
|
+
wagon_urn: "WITH 'telemetry:' prefix, NO type.plane (e.g., telemetry:mechanic:decision.choice)"
|
|
122
|
+
filesystem:
|
|
123
|
+
pattern: "telemetry/{theme}/{domain}/{aspect}.{type}.{plane}[.{measure}].json"
|
|
124
|
+
example: "telemetry/mechanic/decision/choice.event.be.json"
|
|
125
|
+
validator:
|
|
126
|
+
file: "src/atdd/tester/validators/test_telemetry_structure.py"
|
|
127
|
+
spec: "SPEC-TESTER-CONV-0050"
|
|
128
|
+
convention_ref: "atdd/tester/conventions/telemetry.convention.yaml"
|
|
129
|
+
|
|
130
|
+
train:
|
|
131
|
+
description: "User journey or end-to-end workflow"
|
|
132
|
+
semantic_pattern: "{NNNN}-{slug}"
|
|
133
|
+
format: "4-digit hierarchical prefix + kebab-case slug"
|
|
134
|
+
regex: "^\\d{4}-[a-z][a-z0-9-]+$"
|
|
135
|
+
numbering:
|
|
136
|
+
pattern: "[Theme][Category][Variation]-{slug}"
|
|
137
|
+
theme_digit: "0-9 (commons=0, mechanic=1, scenario=2, match=3, etc.)"
|
|
138
|
+
category_digit: "0=nominal, 1=error, 2=alternate, 3=exception"
|
|
139
|
+
variation_digits: "01-99"
|
|
140
|
+
examples:
|
|
141
|
+
valid:
|
|
142
|
+
- "1001-decision-standard"
|
|
143
|
+
- "3006-episode-match-complete"
|
|
144
|
+
- "0201-sso-authentication"
|
|
145
|
+
- "2301-empty-input-file"
|
|
146
|
+
invalid:
|
|
147
|
+
- "101-decision" # Only 3 digits
|
|
148
|
+
- "1001_decision" # Underscore
|
|
149
|
+
- "1001-Decision" # PascalCase
|
|
150
|
+
filesystem:
|
|
151
|
+
registry: "plan/_trains.yaml"
|
|
152
|
+
spec: "plan/_trains/{train_id}.yaml"
|
|
153
|
+
validator:
|
|
154
|
+
file: "src/atdd/planner/validators/test_train_validation.py"
|
|
155
|
+
spec: "SPEC-TRAIN-VAL-0001"
|
|
156
|
+
convention_ref: "atdd/planner/conventions/train.convention.yaml"
|
|
157
|
+
|
|
158
|
+
acceptance:
|
|
159
|
+
description: "Acceptance criteria URN for test traceability"
|
|
160
|
+
semantic_pattern: "acc:{wagon}:{wmbt}-{harness}-{NNN}[-{slug}]"
|
|
161
|
+
format: "Structured URN with step code, harness, and sequence"
|
|
162
|
+
regex: "^acc:[a-z][a-z0-9_-]+:([DLPCEMYRK][0-9]{3}-(UNIT|HTTP|EVENT|WS|E2E|A11Y|VIS|METRIC|JOB|DB|SEC|LOAD|SCRIPT|WIDGET|GOLDEN|BLOC|INTEGRATION|RLS|EDGE|REALTIME|STORAGE)-[0-9]{3}(?:-[a-z0-9-]+)?|[A-Z][0-9]{3})$"
|
|
163
|
+
components:
|
|
164
|
+
wagon: "Parent wagon (kebab-case)"
|
|
165
|
+
wmbt_id: "Step code [DLPCEMYRK] + 3-digit sequence (e.g., C004)"
|
|
166
|
+
harness: "Test harness type (uppercase)"
|
|
167
|
+
sequence: "Zero-padded 3-digit number (001-999)"
|
|
168
|
+
slug: "Optional kebab-case descriptor"
|
|
169
|
+
step_codes:
|
|
170
|
+
D: "Discovery"
|
|
171
|
+
L: "Load"
|
|
172
|
+
P: "Parse"
|
|
173
|
+
C: "Compute"
|
|
174
|
+
E: "Emit"
|
|
175
|
+
M: "Mutate"
|
|
176
|
+
Y: "Yield"
|
|
177
|
+
R: "Render"
|
|
178
|
+
K: "Keep"
|
|
179
|
+
harness_types:
|
|
180
|
+
- "UNIT"
|
|
181
|
+
- "HTTP"
|
|
182
|
+
- "EVENT"
|
|
183
|
+
- "WS"
|
|
184
|
+
- "E2E"
|
|
185
|
+
- "A11Y"
|
|
186
|
+
- "VIS"
|
|
187
|
+
- "METRIC"
|
|
188
|
+
- "JOB"
|
|
189
|
+
- "DB"
|
|
190
|
+
- "SEC"
|
|
191
|
+
- "LOAD"
|
|
192
|
+
- "SCRIPT"
|
|
193
|
+
- "WIDGET"
|
|
194
|
+
- "GOLDEN"
|
|
195
|
+
- "BLOC"
|
|
196
|
+
- "INTEGRATION"
|
|
197
|
+
- "RLS"
|
|
198
|
+
- "EDGE"
|
|
199
|
+
- "REALTIME"
|
|
200
|
+
- "STORAGE"
|
|
201
|
+
examples:
|
|
202
|
+
valid:
|
|
203
|
+
- "acc:commit-state:M001-INTEGRATION-001"
|
|
204
|
+
- "acc:pace-dilemmas:P011-VISUAL-001"
|
|
205
|
+
- "acc:maintain-ux:C004-E2E-019-user-connection"
|
|
206
|
+
- "acc:resolve-dilemmas:C001-UNIT-001-choice-validation"
|
|
207
|
+
invalid:
|
|
208
|
+
- "acc:commit-state:M01-INTEGRATION-001" # Only 2 digits in WMBT
|
|
209
|
+
- "acc:commit-state:M001-integration-001" # Lowercase harness
|
|
210
|
+
- "acc:commit-state:M001-INTEGRATION-01" # Only 2 digits in sequence
|
|
211
|
+
validator:
|
|
212
|
+
file: "src/atdd/tester/validators/test_contract_schema_compliance.py"
|
|
213
|
+
spec: "SPEC-TESTER-VAL-0020"
|
|
214
|
+
convention_ref: "atdd/planner/conventions/acceptance.convention.yaml"
|
|
215
|
+
|
|
216
|
+
wmbt:
|
|
217
|
+
description: "What Must Be True step identifier"
|
|
218
|
+
semantic_pattern: "wmbt:{wagon}:{step_code}{NNN}"
|
|
219
|
+
format: "Step code letter + 3-digit sequence"
|
|
220
|
+
regex: "^wmbt:[a-z][a-z0-9-]+:[DLPCEMYRK][0-9]{3}$"
|
|
221
|
+
examples:
|
|
222
|
+
valid:
|
|
223
|
+
- "wmbt:resolve-dilemmas:C001"
|
|
224
|
+
- "wmbt:commit-state:M001"
|
|
225
|
+
- "wmbt:pace-dilemmas:P011"
|
|
226
|
+
invalid:
|
|
227
|
+
- "wmbt:resolve-dilemmas:C01" # Only 2 digits
|
|
228
|
+
- "wmbt:resolve-dilemmas:X001" # Invalid step code
|
|
229
|
+
filesystem:
|
|
230
|
+
file: "plan/{wagon}/wmbt/{step_code}{NNN}.yaml"
|
|
231
|
+
validator:
|
|
232
|
+
file: "src/atdd/planner/validators/test_wmbt_consistency.py"
|
|
233
|
+
spec: "SPEC-PLANNER-VAL-0030"
|
|
234
|
+
convention_ref: "atdd/planner/conventions/wmbt.convention.yaml"
|
|
235
|
+
|
|
236
|
+
appendix:
|
|
237
|
+
description: "Supplementary reference data"
|
|
238
|
+
semantic_pattern: "appendix:{type}"
|
|
239
|
+
format: "kebab-case type identifier"
|
|
240
|
+
regex: "^appendix:[a-z][a-z0-9-]+$"
|
|
241
|
+
examples:
|
|
242
|
+
valid:
|
|
243
|
+
- "appendix:theme-catalog"
|
|
244
|
+
- "appendix:error-codes"
|
|
245
|
+
- "appendix:locale-mappings"
|
|
246
|
+
invalid:
|
|
247
|
+
- "appendix:ThemeCatalog" # PascalCase
|
|
248
|
+
- "appendix_theme" # Underscore separator
|
|
249
|
+
note: "Currently not strictly enforced - documentation pattern"
|
|
250
|
+
validator:
|
|
251
|
+
file: "Not yet implemented"
|
|
252
|
+
spec: "Pending"
|
|
253
|
+
|
|
254
|
+
system:
|
|
255
|
+
description: "External system or service reference"
|
|
256
|
+
semantic_pattern: "system:{service-name}"
|
|
257
|
+
format: "kebab-case service identifier"
|
|
258
|
+
regex: "^system:[a-z][a-z0-9-]+$"
|
|
259
|
+
examples:
|
|
260
|
+
valid:
|
|
261
|
+
- "system:external"
|
|
262
|
+
- "system:scenario-library"
|
|
263
|
+
- "system:filesystem"
|
|
264
|
+
- "system:posthog"
|
|
265
|
+
invalid:
|
|
266
|
+
- "system:External" # PascalCase
|
|
267
|
+
- "external-system" # Missing prefix
|
|
268
|
+
note: "Used in wagon consume references for external dependencies"
|
|
269
|
+
validator:
|
|
270
|
+
file: "Not yet implemented"
|
|
271
|
+
spec: "Pending"
|
|
272
|
+
|
|
273
|
+
# Validation Summary
|
|
274
|
+
validation_summary:
|
|
275
|
+
enforced:
|
|
276
|
+
- wagon: "SPEC-PLATFORM-WAGONS-0008"
|
|
277
|
+
- feature: "SPEC-PLATFORM-WAGONS-0009"
|
|
278
|
+
- contract: "SPEC-PLATFORM-WAGONS-0006"
|
|
279
|
+
- telemetry: "SPEC-PLATFORM-WAGONS-0007"
|
|
280
|
+
- train: "SPEC-TRAIN-VAL-0001"
|
|
281
|
+
- acceptance: "SPEC-TESTER-VAL-0020"
|
|
282
|
+
- wmbt: "SPEC-PLANNER-VAL-0030"
|
|
283
|
+
pending:
|
|
284
|
+
- appendix: "Not yet enforced"
|
|
285
|
+
- system: "Not yet enforced"
|
|
286
|
+
|
|
287
|
+
# Cross-References
|
|
288
|
+
references:
|
|
289
|
+
artifact_naming: "atdd/planner/conventions/artifact-naming.convention.yaml"
|
|
290
|
+
wagon: "atdd/planner/conventions/wagon.convention.yaml"
|
|
291
|
+
feature: "atdd/planner/conventions/feature.convention.yaml"
|
|
292
|
+
contract: "atdd/tester/conventions/contract.convention.yaml"
|
|
293
|
+
telemetry: "atdd/tester/conventions/telemetry.convention.yaml"
|
|
294
|
+
train: "atdd/planner/conventions/train.convention.yaml"
|
|
295
|
+
acceptance: "atdd/planner/conventions/acceptance.convention.yaml"
|
|
296
|
+
wmbt: "atdd/planner/conventions/wmbt.convention.yaml"
|
|
@@ -132,6 +132,32 @@
|
|
|
132
132
|
}
|
|
133
133
|
},
|
|
134
134
|
"additionalProperties": false
|
|
135
|
+
},
|
|
136
|
+
"coach": {
|
|
137
|
+
"type": "object",
|
|
138
|
+
"description": "Coach agent validation settings",
|
|
139
|
+
"properties": {
|
|
140
|
+
"session_gate_command_prefixes": {
|
|
141
|
+
"type": "array",
|
|
142
|
+
"description": "Allowed prefixes for gate commands in session files",
|
|
143
|
+
"items": {"type": "string"},
|
|
144
|
+
"default": ["atdd", "pytest", "python", "npm", "supabase"],
|
|
145
|
+
"examples": [["atdd", "pytest", "npm run test"]]
|
|
146
|
+
},
|
|
147
|
+
"session_gate_command_exceptions": {
|
|
148
|
+
"type": "array",
|
|
149
|
+
"description": "Session files exempt from gate command prefix validation (by filename pattern)",
|
|
150
|
+
"items": {"type": "string"},
|
|
151
|
+
"default": [],
|
|
152
|
+
"examples": [["SESSION-00-*.md", "SESSION-01-legacy.md"]]
|
|
153
|
+
},
|
|
154
|
+
"archive_status_warnings": {
|
|
155
|
+
"type": "boolean",
|
|
156
|
+
"description": "Warn when COMPLETE sessions not in archive or archived sessions not COMPLETE",
|
|
157
|
+
"default": true
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
"additionalProperties": false
|
|
135
161
|
}
|
|
136
162
|
},
|
|
137
163
|
"required": ["version", "release"],
|
|
@@ -21,6 +21,10 @@ type: "{type}" # implementation | migration | refactor | analysis | planning |
|
|
|
21
21
|
complexity: 3 # 1=Trivial, 2=Low, 3=Medium, 4=High, 5=Very High
|
|
22
22
|
archetypes:
|
|
23
23
|
- "{archetype}" # db | be | fe | contracts | wmbt | wagon | train | telemetry | migrations
|
|
24
|
+
# NOTE: If archetypes includes 'train', you MUST create/update BOTH:
|
|
25
|
+
# 1. plan/_trains.yaml (registry entry with train_id, description, path, wagons)
|
|
26
|
+
# 2. plan/_trains/{train_id}.yaml (full spec with participants, sequence, etc.)
|
|
27
|
+
# Validator SPEC-TRAIN-VAL-0003 enforces spec file exists for each registry entry.
|
|
24
28
|
|
|
25
29
|
# Scope definition
|
|
26
30
|
scope:
|
|
@@ -38,7 +42,8 @@ workflow_phases:
|
|
|
38
42
|
planner:
|
|
39
43
|
status: "TODO" # TODO | IN_PROGRESS | DONE | SKIPPED | N/A
|
|
40
44
|
artifacts:
|
|
41
|
-
train: false # plan/_trains.yaml updated
|
|
45
|
+
train: false # plan/_trains.yaml updated (registry entry)
|
|
46
|
+
train_spec: false # plan/_trains/{train_id}.yaml exists (full spec)
|
|
42
47
|
wagon: false # plan/{wagon}/_{wagon}.yaml exists
|
|
43
48
|
feature: false # plan/{wagon}/features/{feature}.yaml exists
|
|
44
49
|
wmbt: false # WMBTs defined in feature YAML
|