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