atdd 4.2.0__tar.gz → 4.2.2__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-4.2.2/PKG-INFO +750 -0
- atdd-4.2.2/build_meta_shim/__pycache__/_release_version.cpython-312.pyc +0 -0
- atdd-4.2.2/build_meta_shim/__pycache__/atdd_version_backend.cpython-312.pyc +0 -0
- atdd-4.2.2/src/atdd/coach/commands/tests/test_e006_issue_surface_removal.py +317 -0
- atdd-4.2.2/src/atdd/coach/commands/tests/test_e006_smoke_001_real_removal_and_repointed_blockers.py +184 -0
- atdd-4.2.2/src/atdd/coach/conventions/commit-trailers.convention.yaml +100 -0
- atdd-4.2.2/src/atdd/coach/conventions/nodes/coach.rule-id.fix-hint-completeness.convention.yaml +47 -0
- atdd-4.2.2/src/atdd/coach/conventions/nodes/coach.rule-id.no-hardcoded-rule-severity.convention.yaml +36 -0
- atdd-4.2.2/src/atdd/coach/conventions/rule-id.convention.yaml +538 -0
- atdd-4.2.2/src/atdd/coach/conventions/spawn.convention.yaml +40 -0
- atdd-4.2.2/src/atdd/coach/utils/graph/tests/test_urn_smoke_harness_token.py +98 -0
- atdd-4.2.2/src/atdd/coach/validators/_fix_hint_audit.py +577 -0
- atdd-4.2.2/src/atdd/coach/validators/_rule_binders.py +61 -0
- atdd-4.2.2/src/atdd/coach/validators/tests/test_commit_trailers_emit.py +103 -0
- atdd-4.2.2/src/atdd/coach/validators/tests/test_e006_unit_002_no_dangling_replacement_target.py +191 -0
- atdd-4.2.2/src/atdd/coach/validators/tests/test_fix_hint_completeness_helpers.py +226 -0
- atdd-4.2.2/src/atdd/coach/validators/tests/test_no_hardcoded_rule_severity.py +229 -0
- atdd-4.2.2/src/atdd/coach/validators/tests/test_spawn_cli_surface.py +82 -0
- atdd-4.2.2/src/atdd/planner/validators/_dispatch_registry.py +47 -0
- atdd-4.2.2/src/atdd/planner/validators/_feedback_loop.py +227 -0
- atdd-4.2.2/src/atdd/planner/validators/_meta_walker.py +231 -0
- atdd-4.2.2/src/atdd/planner/validators/_orphan_scan.py +59 -0
- atdd-4.2.2/src/atdd/planner/validators/_smoke_urn.py +158 -0
- atdd-4.2.2/src/atdd/planner/validators/tests/test_c008_unit_001_orphan_detection.py +39 -0
- atdd-4.2.2/src/atdd/planner/validators/tests/test_e006_smoke_001_executable_train_rules_bound.py +42 -0
- atdd-4.2.2/src/atdd/planner/validators/tests/test_e028_integration_001_no_false_positive_on_real_entry_point.py +93 -0
- atdd-4.2.2/src/atdd/planner/validators/tests/test_e028_smoke_001_validate_planner_clean_after_retrofit.py +61 -0
- atdd-4.2.2/src/atdd/planner/validators/tests/test_e028_unit_004_validator_detects_fakemultiplexer.py +87 -0
- atdd-4.2.2/src/atdd/planner/validators/tests/test_e028_unit_005_validator_detects_stub_popen_command.py +86 -0
- atdd-4.2.2/src/atdd/planner/validators/tests/test_feedback_loop_smoke_closes_the_loop_helpers.py +357 -0
- atdd-4.2.2/src/atdd/planner/validators/tests/test_l002_smoke_001_meta_walker_zero_hits_on_post_retrofit_repo.py +34 -0
- atdd-4.2.2/src/atdd/planner/validators/tests/test_l002_unit_001_meta_walker_function_exists_and_classifies.py +125 -0
- atdd-4.2.2/src/atdd/planner/validators/tests/test_wmbt_has_smoke_acceptance_helpers.py +188 -0
- atdd-4.2.2/src/atdd/validators/conventions/acyclicity/_parity.py +43 -0
- atdd-4.2.2/src/atdd/validators/conventions/acyclicity/test_no_cross_wagon_consume_cycle.py +105 -0
- atdd-4.2.2/src/atdd/validators/conventions/binding/_parity_support.py +134 -0
- atdd-4.2.2/src/atdd/validators/conventions/binding/test_commit_trailers_rule_binding.py +55 -0
- atdd-4.2.2/src/atdd/validators/conventions/binding/test_no_hardcoded_rule_severity.py +58 -0
- atdd-4.2.2/src/atdd/validators/conventions/binding/test_runtime_artifacts_rule_binding.py +54 -0
- atdd-4.2.2/src/atdd/validators/conventions/binding/test_spawn_cli_rule_binding.py +49 -0
- atdd-4.2.2/src/atdd/validators/conventions/boundary/_parity.py +35 -0
- atdd-4.2.2/src/atdd/validators/conventions/boundary/test_theme_commons_coach_boundary.py +165 -0
- atdd-4.2.2/src/atdd/validators/conventions/coherence/_parity.py +87 -0
- atdd-4.2.2/src/atdd/validators/conventions/coherence/test_theme_archetype_alignment.py +75 -0
- atdd-4.2.2/src/atdd/validators/conventions/coherence/test_train_family_matches_terminal_contract.py +76 -0
- atdd-4.2.2/src/atdd/validators/conventions/coherence/test_wmbt_consistency.py +74 -0
- atdd-4.2.2/src/atdd/validators/conventions/composition/test_package_data_ships_convention_nodes.py +96 -0
- atdd-4.2.2/src/atdd/validators/conventions/conftest.py +60 -0
- atdd-4.2.2/src/atdd/validators/conventions/coverage/_parity.py +52 -0
- atdd-4.2.2/src/atdd/validators/conventions/coverage/test_hierarchy_coverage.py +75 -0
- atdd-4.2.2/src/atdd/validators/conventions/coverage/test_no_orphan_nodes.py +72 -0
- atdd-4.2.2/src/atdd/validators/conventions/coverage/test_wmbt_has_smoke_acceptance.py +93 -0
- atdd-4.2.2/src/atdd/validators/conventions/grammar/test_freedom_layer_bash_scope_grammar.py +125 -0
- atdd-4.2.2/src/atdd/validators/conventions/policy/_parity.py +41 -0
- atdd-4.2.2/src/atdd/validators/conventions/policy/test_bypass_inventory.py +70 -0
- atdd-4.2.2/src/atdd/validators/conventions/policy/test_freedom_layer_bash_scope.py +74 -0
- atdd-4.2.2/src/atdd/validators/conventions/policy/test_no_stale_suppressions.py +72 -0
- atdd-4.2.2/src/atdd/validators/conventions/policy/test_smoke_synthetic_fixture_bypass.py +91 -0
- atdd-4.2.2/src/atdd/validators/conventions/presence/conftest.py +52 -0
- atdd-4.2.2/src/atdd/validators/conventions/presence/test_feedback_loop_close_the_loop.py +84 -0
- atdd-4.2.2/src/atdd/validators/conventions/presence/test_phase_machine_init_precommit_gate.py +72 -0
- atdd-4.2.2/src/atdd/validators/conventions/presence/test_rule_has_disposition.py +74 -0
- atdd-4.2.2/src/atdd/validators/conventions/presence/test_rule_has_fix_hint.py +112 -0
- atdd-4.2.2/src/atdd/validators/conventions/presence/test_theme_zero_mandatory.py +87 -0
- atdd-4.2.2/src/atdd/validators/conventions/resolution/_parity.py +51 -0
- atdd-4.2.2/src/atdd/validators/conventions/resolution/test_contract_consumer_resolution.py +70 -0
- atdd-4.2.2/src/atdd/validators/conventions/resolution/test_draft_wagon_registry.py +63 -0
- atdd-4.2.2/src/atdd/validators/conventions/resolution/test_plan_urn_resolution.py +67 -0
- atdd-4.2.2/src/atdd/validators/conventions/resolution/test_train_validation.py +62 -0
- atdd-4.2.2/src/atdd/validators/conventions/resolution/test_urn_traceability.py +68 -0
- atdd-4.2.2/src/atdd/validators/conventions/schema/test_dispatch_map_is_registry.py +108 -0
- atdd-4.2.2/src/atdd/validators/conventions/sizing/test_wagon_coupling_complexity.py +117 -0
- atdd-4.2.2/src/atdd/validators/conventions/sizing/test_wagon_separability.py +130 -0
- atdd-4.2.2/src/atdd/validators/conventions/tests/graph_build_counter.py +72 -0
- atdd-4.2.2/src/atdd/validators/conventions/tests/test_e010_p0_variants_built.py +61 -0
- atdd-4.2.2/src/atdd/validators/conventions/tests/test_e032_session_graph_smoke.py +104 -0
- atdd-4.2.2/src/atdd/validators/conventions/tests/test_e032_single_graph_build.py +121 -0
- atdd-4.2.2/src/atdd/validators/conventions/tests/test_gates_1211.py +70 -0
- atdd-4.2.2/src/atdd/validators/conventions/tests/test_y003_sweep_coverage_guards.py +168 -0
- atdd-4.2.2/src/atdd.egg-info/PKG-INFO +750 -0
- atdd-4.2.2/src/atdd.egg-info/SOURCES.txt +2501 -0
- atdd-4.2.0/PKG-INFO +0 -750
- atdd-4.2.0/build_meta_shim/__pycache__/_release_version.cpython-312.pyc +0 -0
- atdd-4.2.0/build_meta_shim/__pycache__/atdd_version_backend.cpython-312.pyc +0 -0
- atdd-4.2.0/src/atdd/coach/commands/tests/test_e006_issue_surface_removal.py +0 -317
- atdd-4.2.0/src/atdd/coach/commands/tests/test_e006_smoke_001_real_removal_and_repointed_blockers.py +0 -184
- atdd-4.2.0/src/atdd/coach/conventions/commit-trailers.convention.yaml +0 -100
- atdd-4.2.0/src/atdd/coach/conventions/nodes/coach.rule-id.fix-hint-completeness.convention.yaml +0 -47
- atdd-4.2.0/src/atdd/coach/conventions/nodes/coach.rule-id.no-hardcoded-rule-severity.convention.yaml +0 -36
- atdd-4.2.0/src/atdd/coach/conventions/rule-id.convention.yaml +0 -538
- atdd-4.2.0/src/atdd/coach/conventions/spawn.convention.yaml +0 -40
- atdd-4.2.0/src/atdd/coach/utils/graph/tests/test_urn_smoke_harness_token.py +0 -98
- atdd-4.2.0/src/atdd/coach/validators/test_commit_trailers_binding.py +0 -115
- atdd-4.2.0/src/atdd/coach/validators/test_e001_unit_001_spawn_cli_launches_session.py +0 -83
- atdd-4.2.0/src/atdd/coach/validators/test_fix_hint_completeness.py +0 -579
- atdd-4.2.0/src/atdd/coach/validators/test_no_hardcoded_rule_severity.py +0 -228
- atdd-4.2.0/src/atdd/coach/validators/tests/test_e006_unit_002_no_dangling_replacement_target.py +0 -191
- atdd-4.2.0/src/atdd/coach/validators/tests/test_fix_hint_completeness_helpers.py +0 -226
- atdd-4.2.0/src/atdd/planner/validators/test_dispatch_registry.py +0 -141
- atdd-4.2.0/src/atdd/planner/validators/test_feedback_loop_smoke_closes_the_loop.py +0 -254
- atdd-4.2.0/src/atdd/planner/validators/test_no_cross_wagon_consume_cycle.py +0 -149
- atdd-4.2.0/src/atdd/planner/validators/test_no_orphan_nodes.py +0 -105
- atdd-4.2.0/src/atdd/planner/validators/test_smoke_synthetic_fixture_bypass.py +0 -245
- atdd-4.2.0/src/atdd/planner/validators/test_wagon_coupling_complexity.py +0 -110
- atdd-4.2.0/src/atdd/planner/validators/test_wagon_separability.py +0 -146
- atdd-4.2.0/src/atdd/planner/validators/test_wmbt_has_smoke_acceptance.py +0 -185
- atdd-4.2.0/src/atdd/planner/validators/tests/test_c008_unit_001_orphan_detection.py +0 -39
- atdd-4.2.0/src/atdd/planner/validators/tests/test_e006_smoke_001_executable_train_rules_bound.py +0 -42
- atdd-4.2.0/src/atdd/planner/validators/tests/test_e028_integration_001_no_false_positive_on_real_entry_point.py +0 -93
- atdd-4.2.0/src/atdd/planner/validators/tests/test_e028_smoke_001_validate_planner_clean_after_retrofit.py +0 -55
- atdd-4.2.0/src/atdd/planner/validators/tests/test_e028_unit_004_validator_detects_fakemultiplexer.py +0 -87
- atdd-4.2.0/src/atdd/planner/validators/tests/test_e028_unit_005_validator_detects_stub_popen_command.py +0 -86
- atdd-4.2.0/src/atdd/planner/validators/tests/test_feedback_loop_smoke_closes_the_loop_helpers.py +0 -357
- atdd-4.2.0/src/atdd/planner/validators/tests/test_l002_smoke_001_meta_walker_zero_hits_on_post_retrofit_repo.py +0 -34
- atdd-4.2.0/src/atdd/planner/validators/tests/test_l002_unit_001_meta_walker_function_exists_and_classifies.py +0 -125
- atdd-4.2.0/src/atdd/planner/validators/tests/test_wmbt_has_smoke_acceptance_helpers.py +0 -188
- atdd-4.2.0/src/atdd/validators/conventions/_support/catch_matrix.py +0 -251
- atdd-4.2.0/src/atdd/validators/conventions/acyclicity/_parity.py +0 -58
- atdd-4.2.0/src/atdd/validators/conventions/acyclicity/test_no_cross_wagon_consume_cycle.py +0 -106
- atdd-4.2.0/src/atdd/validators/conventions/binding/_parity_support.py +0 -194
- atdd-4.2.0/src/atdd/validators/conventions/binding/test_commit_trailers_rule_binding.py +0 -55
- atdd-4.2.0/src/atdd/validators/conventions/binding/test_no_hardcoded_rule_severity.py +0 -58
- atdd-4.2.0/src/atdd/validators/conventions/binding/test_runtime_artifacts_rule_binding.py +0 -54
- atdd-4.2.0/src/atdd/validators/conventions/binding/test_spawn_cli_rule_binding.py +0 -49
- atdd-4.2.0/src/atdd/validators/conventions/boundary/_parity.py +0 -52
- atdd-4.2.0/src/atdd/validators/conventions/boundary/test_theme_commons_coach_boundary.py +0 -166
- atdd-4.2.0/src/atdd/validators/conventions/coherence/_parity.py +0 -96
- atdd-4.2.0/src/atdd/validators/conventions/coherence/test_theme_archetype_alignment.py +0 -75
- atdd-4.2.0/src/atdd/validators/conventions/coherence/test_train_family_matches_terminal_contract.py +0 -76
- atdd-4.2.0/src/atdd/validators/conventions/coherence/test_wmbt_consistency.py +0 -74
- atdd-4.2.0/src/atdd/validators/conventions/composition/test_package_data_ships_convention_nodes.py +0 -95
- atdd-4.2.0/src/atdd/validators/conventions/coverage/_parity.py +0 -61
- atdd-4.2.0/src/atdd/validators/conventions/coverage/test_hierarchy_coverage.py +0 -75
- atdd-4.2.0/src/atdd/validators/conventions/coverage/test_no_orphan_nodes.py +0 -76
- atdd-4.2.0/src/atdd/validators/conventions/coverage/test_wmbt_has_smoke_acceptance.py +0 -97
- atdd-4.2.0/src/atdd/validators/conventions/grammar/test_freedom_layer_bash_scope_grammar.py +0 -125
- atdd-4.2.0/src/atdd/validators/conventions/policy/_parity.py +0 -57
- atdd-4.2.0/src/atdd/validators/conventions/policy/test_bypass_inventory.py +0 -71
- atdd-4.2.0/src/atdd/validators/conventions/policy/test_freedom_layer_bash_scope.py +0 -75
- atdd-4.2.0/src/atdd/validators/conventions/policy/test_no_stale_suppressions.py +0 -73
- atdd-4.2.0/src/atdd/validators/conventions/policy/test_smoke_synthetic_fixture_bypass.py +0 -92
- atdd-4.2.0/src/atdd/validators/conventions/presence/conftest.py +0 -66
- atdd-4.2.0/src/atdd/validators/conventions/presence/test_feedback_loop_close_the_loop.py +0 -84
- atdd-4.2.0/src/atdd/validators/conventions/presence/test_phase_machine_init_precommit_gate.py +0 -72
- atdd-4.2.0/src/atdd/validators/conventions/presence/test_rule_has_disposition.py +0 -74
- atdd-4.2.0/src/atdd/validators/conventions/presence/test_rule_has_fix_hint.py +0 -112
- atdd-4.2.0/src/atdd/validators/conventions/presence/test_theme_zero_mandatory.py +0 -87
- atdd-4.2.0/src/atdd/validators/conventions/resolution/_parity.py +0 -66
- atdd-4.2.0/src/atdd/validators/conventions/resolution/test_contract_consumer_resolution.py +0 -70
- atdd-4.2.0/src/atdd/validators/conventions/resolution/test_draft_wagon_registry.py +0 -63
- atdd-4.2.0/src/atdd/validators/conventions/resolution/test_plan_urn_resolution.py +0 -67
- atdd-4.2.0/src/atdd/validators/conventions/resolution/test_train_validation.py +0 -62
- atdd-4.2.0/src/atdd/validators/conventions/resolution/test_urn_traceability.py +0 -68
- atdd-4.2.0/src/atdd/validators/conventions/schema/test_dispatch_map_is_registry.py +0 -108
- atdd-4.2.0/src/atdd/validators/conventions/sizing/_parity.py +0 -24
- atdd-4.2.0/src/atdd/validators/conventions/sizing/test_wagon_coupling_complexity.py +0 -121
- atdd-4.2.0/src/atdd/validators/conventions/sizing/test_wagon_separability.py +0 -136
- atdd-4.2.0/src/atdd/validators/conventions/tests/test_catch_matrix.py +0 -70
- atdd-4.2.0/src/atdd/validators/conventions/tests/test_e006_parity_map_accounts_all.py +0 -27
- atdd-4.2.0/src/atdd/validators/conventions/tests/test_e007_parity_entries_canonical.py +0 -26
- atdd-4.2.0/src/atdd/validators/conventions/tests/test_e008_parity_status_priority.py +0 -25
- atdd-4.2.0/src/atdd/validators/conventions/tests/test_e009_excluded_have_reason.py +0 -19
- atdd-4.2.0/src/atdd/validators/conventions/tests/test_e010_p0_variants_built.py +0 -28
- atdd-4.2.0/src/atdd/validators/conventions/tests/test_e012_p1_variants_built_or_deferred.py +0 -28
- atdd-4.2.0/src/atdd/validators/conventions/tests/test_e016_shadow_no_p0_gap.py +0 -28
- atdd-4.2.0/src/atdd/validators/conventions/tests/test_e017_decommission_accounts_all.py +0 -25
- atdd-4.2.0/src/atdd/validators/conventions/tests/test_gap_report_complete.py +0 -36
- atdd-4.2.0/src/atdd/validators/conventions/tests/test_gates_1211.py +0 -100
- atdd-4.2.0/src/atdd/validators/conventions/tests/test_sentinels.py +0 -303
- atdd-4.2.0/src/atdd/validators/conventions/tests/test_shadow_parity.py +0 -107
- atdd-4.2.0/src/atdd/validators/conventions/tests/test_y001_no_unsafe_deletion.py +0 -32
- atdd-4.2.0/src/atdd/validators/conventions/tests/test_y002_decommission_preflight_classifier.py +0 -79
- atdd-4.2.0/src/atdd/validators/conventions/tests/test_y003_sweep_coverage_guards.py +0 -168
- atdd-4.2.0/src/atdd.egg-info/PKG-INFO +0 -750
- atdd-4.2.0/src/atdd.egg-info/SOURCES.txt +0 -2514
- {atdd-4.2.0 → atdd-4.2.2}/LICENSE +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/MANIFEST.in +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/README.md +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/build_meta_shim/_release_version.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/build_meta_shim/atdd_version_backend.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/pyproject.toml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/setup.cfg +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/__main__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/author_atdd_substrate/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/author_atdd_substrate/author_issue_body/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/author_atdd_substrate/author_issue_body/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/author_atdd_substrate/author_issue_body/tests/_helpers.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/author_atdd_substrate/author_issue_body/tests/_publish_helpers.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/author_atdd_substrate/author_issue_body/tests/test_c010_smoke_001_cli_rejects_tampered_body.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/author_atdd_substrate/author_issue_body/tests/test_c010_unit_001_rejects_missing_graph_context.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/author_atdd_substrate/author_issue_body/tests/test_c010_unit_002_rejects_out_of_enum_status.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/author_atdd_substrate/author_issue_body/tests/test_c011_smoke_001_live_drift_guard_over_real_artifacts.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/author_atdd_substrate/author_issue_body/tests/test_c011_unit_001_tri_directional_drift_guard.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/author_atdd_substrate/author_issue_body/tests/test_c012_smoke_001_store_unreachable_fails_loud.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/author_atdd_substrate/author_issue_body/tests/test_c012_unit_001_store_unreachable_fails_loud.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/author_atdd_substrate/author_issue_body/tests/test_e006_smoke_001_cli_emits_gate_passing_body.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/author_atdd_substrate/author_issue_body/tests/test_e006_unit_001_emits_schema_valid_body.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/author_atdd_substrate/author_issue_body/tests/test_e008_smoke_001_author_issue_publishes_to_live_store.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/author_atdd_substrate/author_issue_body/tests/test_e008_unit_001_author_issue_creates_work_item.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/author_atdd_substrate/author_issue_body/tests/test_e008_unit_002_links_exactly_one_github_ref.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/author_atdd_substrate/author_issue_body/tests/test_k002_smoke_001_real_issue_bodies_validate.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/author_atdd_substrate/author_issue_body/tests/test_k002_unit_001_existing_bodies_validate.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/cli.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/add_persistence_metadata.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/agent.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/analyze_migrations.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/auto_phase.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/autofix.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/branch.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/branch_protection.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/checkpoint.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/cleanup.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/coach.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/coach_dashboard.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/coach_gc.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/coach_review.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/coach_status.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/coach_verbs/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/coach_verbs/check.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/coach_verbs/close_wmbt.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/coach_verbs/enter.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/coach_verbs/is_registered.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/coach_verbs/issue_review.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/coach_verbs/issues.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/coach_verbs/reconcile.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/coach_verbs/sync_labels.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/coach_verbs/sync_wmbts.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/coach_verbs/transition.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/coach_watch.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/coach_workspace.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/color.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/consumers.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/diagnostics.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/durability.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/emergency.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/event_queue.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/gate.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/git_watcher.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/infer_governance_status.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/initializer.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/interface.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/inventory.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/issue.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/issue_graph.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/issue_lifecycle.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/issue_prefixes.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/issue_read.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/issue_review.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/issue_template.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/issue_transition.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/judge.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/judge_call_sites.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/liveness_checker.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/llm_clients/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/llm_clients/_subprocess_shim.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/merge_cascade.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/merge_cascade_pyproject.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/merge_cascade_topology.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/migration.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/observer.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/pr.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/registry.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/resume.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/rules.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/runtime_watcher.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/session_template.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/spawn.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/spawn_harness_blocks.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/suppress.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/sync.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/test_interface.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/test_runner.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/_e007_respawn_harness.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/conftest.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_E001_cli_characterization.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_E001_integration_001_phase_a_rollback.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_E001_integration_002_phase_b_launch.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_E001_integration_003_resume_source_replaced.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_E001_smoke_001_two_phase_commit_real_fs.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_E002_integration_001_cold_start_spawns_planner.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_E002_integration_002_cold_start_writes_decisions_jsonl.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_E002_integration_003_cold_start_then_resume_reconstructs.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_E002_integration_004_complete_with_auto_merge.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_E002_integration_005_refactor_without_auto_merge_escalates.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_E009_integration_001_resume_invokes_transition_action.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_E009_integration_002_resume_spawns_pending_phase_persona.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_E009_integration_003_no_paper_fast_forward_on_block.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_E009_integration_004_already_complete_resume_idempotent.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_E009_smoke_001_resume_real_orchestration.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_E009_unit_001_missing_transition_action_fails_loudly.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_E025_integration_001_consumer_sweep_excludes_red_phase.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_E025_unit_consumer_validator_scope_gate.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_J3_integration_001_decision_per_transition.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_J3_integration_002_write_before_side_effect.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_J3_integration_003_resume_replays_correctly.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_K1_integration_001_spawn_at_each_transition.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_K1_integration_002_persona_prompts_loaded.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_K1_integration_003_persona_llm_honored.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_K1_integration_004_multiplexer_mode_honored.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_K1_integration_005_spawn_failure_retries_then_escalates.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_L002_integration_001_observer_cospawns_with_planner.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_L002_integration_002_observer_failure_does_not_block_persona.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_L002_unit_001_fake_multiplexer_records_both_spawns.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_L004_integration_001_observer_is_tab_not_pane.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_L004_integration_002_pane_count_unchanged.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_L004_integration_003_workspace_mode_unaffected.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_L004_unit_001_multiplexer_abc_supports_new_surface_in_pane.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_M3_integration_001_validators_fire_at_phase_exit.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_M3_integration_002_strict_violation_blocks.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_M3_integration_003_risk_threshold_block.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_R001_integration_001_resume_mid_run.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_R001_integration_002_no_duplicate_transitions.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_R001_integration_003_watcher_reconstruct.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_R001_smoke_001_resume_real_runtime.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_auto_phase.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_branch_empty_pr_defer.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_branch_is_registered.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_branch_protection.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_checkpoint.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_cli_readers_store_first.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_coach_agent_done_advance.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_coach_atomization_smoke.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_coach_cold_start_creates_worktree.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_coach_review_in_process.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_coach_stale_done_json_baseline.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_coach_sync_labels_extraction.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_coach_watcher_runtime_dir.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d001_integration_001_no_scope_leak.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d001_integration_001_one_pane_across_lifecycle_blocked_intact.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d001_integration_001_worker_added_as_right_pane_surface.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d001_smoke_001_judge_real_infrastructure.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d001_smoke_001_real_layout_holds_as_workers_added.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d001_unit_001_issue_surface_named_by_issue_identity.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d001_unit_001_judge_cli_returns_structured_or_fails_loud.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d001_unit_001_reviewer_cannot_write_worktree.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d001_unit_001_split_ratio_is_fixed_fifty_fifty.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d001_unit_001_state_machine_skeleton.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d001_unit_001_worked_example_doc_committed.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d001_unit_002_fail_open_matches_config.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d001_unit_002_flag_parsing.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d001_unit_002_integration_bugs_section_present.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d001_unit_002_issue_surface_resolved_or_created_once.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d001_unit_002_reviewer_output_channel_bounded.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d001_unit_003_compute_waves_reuse.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d001_unit_003_every_call_writes_judgments_jsonl.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d001_unit_003_persona_respawned_in_place_not_cleared.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d001_unit_003_production_readiness_disclaimer_noted.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d002_judge_integration_001_coach_routes.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d002_judge_unit_001_call_site_trigger_conditions.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d002_judge_unit_002_response_schemas.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d002_smoke_001_agent_cli_e2e.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d002_smoke_001_session_convention_committed_and_loadable.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d002_unit_001_session_convention_spawn_time_section.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d002_unit_001_subcommands_resolve.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d002_unit_002_commit_trailers.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d002_unit_003_ask_answer_roundtrip.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d003_integration_001_coach_routes_aggregate_decision.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d003_unit_001_mixed_verdict_fires_call_site_once.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d003_unit_002_aggregate_response_schema.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d004_integration_001_feeds_spawn_feedback.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d004_unit_001_legacy_alias_triggers_call_site.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d004_unit_002_consolidation_response_schema.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d005_integration_001_aggregate_feeds_pre_coach.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d005_smoke_001_issue_review_real_infrastructure.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d005_unit_001_multi_pass_cross_llm_discipline.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d005_unit_002_five_dimensions_per_pass.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d006_smoke_001_review_returns_parseable_verdict.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d006_unit_001_default_clients_registered.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d006_unit_001_issue_body_injected_inline.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d006_unit_002_missing_clients_degrade_gracefully.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d006_unit_002_rule_binding_survives_malformed_payload.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d006_unit_003_judge_works_with_registered_llm.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_d006_unit_003_repo_graph_summary_in_prompt.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e001_coach_transition_extraction.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e001_contract_001_agent_spawned_event_conforms.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e001_integration_001_between_wave_dependency_order_preserved.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e001_integration_001_coach_cli_uses_resolve_multiplexer_mode.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e001_integration_001_view_renders_into_canonical_tab.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e001_smoke_001_coach_transition_real.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e001_smoke_001_cycle_reaches_complete.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e001_smoke_001_pane_mode_in_real_cmux_session.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e001_smoke_001_real_coach_tab_shows_every_issue.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e001_smoke_002_artifacts_readable.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e001_unit_001_concurrent_spawn_before_terminal.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e001_unit_001_conforming_report_persists_and_emits_event.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e001_unit_001_observer_aggregate_approve.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e001_unit_001_one_status_row_per_managed_issue.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e001_unit_001_pane_mode_default_when_cmux_workspace_id_set.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e001_unit_001_spawn_cli_launches_session.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e001_unit_002_claude_code_adapter_invoked.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e001_unit_002_malformed_report_rejected_with_rule_id_error.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e001_unit_002_pane_mode_default_respects_tmux_env.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e001_unit_002_wave_joins_before_next_wave.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e001_unit_003_blocked_member_not_aborting_siblings.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e002_coach_reconcile_extraction.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e002_integration_001_cli_dispatch_routes_review.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e002_integration_001_coach_cli_no_prompt_when_not_tty.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e002_integration_001_headless_observer_uniform_across_backends.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e002_smoke_001_multiagent_observer_live.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e002_smoke_001_no_prompt_auto_in_piped_invocation.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e002_smoke_001_real_spawn_yields_one_tab_no_obs.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e002_smoke_001_rerun_after_no_marker_spawn_reattempts_current.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e002_unit_001_canonical_naming_and_layout_at_spawn.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e002_unit_001_cmd_spawn_runs_observer_headless.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e002_unit_001_coach_review_pr_spawns_reviewer_and_exits_on_verdict.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e002_unit_001_coach_starts_one_observer.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e002_unit_001_no_prompt_auto_enabled_when_not_tty.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e002_unit_001_warm_resume_respawns_current_without_marker.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e002_unit_002_commit_variant_skips_gh_resolution.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e002_unit_002_multiagent_observer_watches_all_dirs.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e002_unit_002_warm_resume_advances_when_current_completed.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e002_unit_003_agent_done_advances_only_on_persona_phase_match.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e002_unit_003_observer_debounced_no_subsecond_poll.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e002_unit_003_output_json_flag_returns_report_payload.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e002_unit_004_no_llm_registry_exits_nonzero_with_clear_error.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e002_unit_004_no_per_worker_obs_surface.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e002_unit_005_observer_terminates_on_coach_exit.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e003_coach_issues_read_extraction.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e003_integration_001_graph_helper_matches_spliced_content.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e003_integration_002_gc_detects_orphans.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e003_integration_003_gc_apply_closes.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e003_smoke_001_coach_issues_read_parity.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e003_smoke_002_gc_detects_orphans_real_cmux.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e003_smoke_003_gc_apply_closes_real_cmux.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e003_unit_001_close_on_rename_failure.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e003_unit_001_prompt_contains_architecture_section.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e003_unit_002_no_wagon_graceful_degrade.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e003_unit_004_inbox_drain_subcommand.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e003_unit_005_inbox_peek_subcommand.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e003_unit_006_dispatch_multiplexer_removed.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e003_unit_008_schema_deprecation.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e004_integration_001_claude_header_actually_renames.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e004_integration_001_coach_suite_creates_zero_cmux_workspaces.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e004_integration_002_uuid_captured.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e004_integration_003_status_surfaces_resume_hint.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e004_smoke_001_coach_suite_no_real_cmux_leak.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e004_smoke_001_coach_sync_labels_real_subprocess.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e004_unit_001_routing_test_is_hermetic.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e004_unit_002_suite_audit_no_live_multiplexer_callers.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e004_unit_003_fallback_to_direct_dispatch.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e004_unit_004_from_prompt_file_derives_defaults.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e005_integration_001_atdd_agent_done_resolves_from_injected_env.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e005_remaining_verbs_extraction.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e005_smoke_001_real_spawn_persona_completes_phase_transition.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e005_unit_001_parse_cli_defaults_review_phases_to_refactor.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e005_unit_001_persona_launch_env_carries_agent_id.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e005_unit_002_launch_prompt_states_agent_id_fallback.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e005_unit_002_skip_review_bypasses_default.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e005_unit_003_explicit_review_phases_override.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e005_unit_003_multiplexer_help_flag_exits_zero.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e006_smoke_001_no_orphan_pane_after_spawn_failure.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e006_unit_001_close_called_on_exception_after_surface_create.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e006_unit_001_persona_dir_co_created_with_observer.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e006_unit_002_close_not_called_on_success.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e006_unit_002_observer_cospawn_gated_on_persona.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e006_unit_003_close_tolerates_close_failure.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e007_integration_001_cmd_spawn_uses_surface_rpc.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e007_integration_001_multi_phase_fresh_process.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e007_integration_001_wave_planning_uses_graph.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e007_integration_002_merge_cascade_topological.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e007_integration_003_merge_cascade_blocks_orphan_creating_pr.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e007_smoke_001_is_registered_resolves_from_store_after_create.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e007_smoke_001_new_surface_in_pane_no_broken_pipe.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e007_smoke_001_real_respawn.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e007_smoke_001_wave_plan_against_real_repo_graph.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e007_unit_001_create_writes_branch_and_worktree_path_to_store.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e007_unit_001_respawn_primitive_backend_neutral.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e007_unit_001_surface_mode_calls_new_surface_in_pane.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e007_unit_002_not_in_store_returns_false_without_raising.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e007_unit_002_resolve_multiplexer_mode_defaults_surface.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e007_unit_002_transition_respawns_no_cli_quit.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e007_unit_003_deprecated_modes_raise_error.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e007_unit_003_existing_data_keys_preserved.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e007_unit_003_per_phase_adapter_selection.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e007_unit_004_phase_qualified_surface_name.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e008_integration_001_chosen_model_flows_to_spawn.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e008_integration_001_issue_creation_commits_manifest_with_dirty_index.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e008_integration_002_registration_failure_exits_non_zero.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e008_smoke_001_create_makes_zero_commits_on_main.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e008_smoke_001_interactive_tty_prompt.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e008_smoke_001_nonexistent_pr_exits_0_with_broken_verdict.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e008_smoke_001_registration_visible_cross_worktree.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e008_unit_001_behind_only_clean_fast_forwards_main.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e008_unit_001_path_scoped_commit_isolates_index.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e008_unit_001_pr_resolution_failure_in_process_writes_sentinel.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e008_unit_001_tty_prompt_shown_per_persona.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e008_unit_002_diverged_main_is_not_rewritten.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e008_unit_002_non_tty_no_prompt.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e008_unit_002_pr_resolution_failure_spawn_path_still_returns_2.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e008_unit_002_registration_failure_is_not_swallowed.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e008_unit_003_dirty_tree_skips_fast_forward.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e008_unit_003_persona_llm_flag_skips_prompt.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e008_unit_003_sentinel_summary_names_pr_resolution.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e008_unit_004_no_prompt_flag_skips_prompt.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e008_unit_005_invalid_model_rejected.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e009_integration_001_spawn_cli_resolves_new_adapter_ids.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e009_smoke_001_missing_env_var_produces_clear_adapter_error.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e009_unit_001_require_env_raises_adapter_error.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e009_unit_002_all_adapters_raise_on_missing_credentials.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e009_unit_003_adapter_returns_non_empty_command.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e009_unit_004_adapter_registry_has_five_entries.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e010_integration_001_full_spawn_path_with_readiness_gate.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e010_smoke_001_readiness_gate_with_real_multiplexer.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e010_smoke_001_real_branch_creation_starts_at_origin.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e010_unit_001_branch_manager_cuts_from_origin_default.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e010_unit_001_pre_trust_writes_worktree_entry.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e010_unit_002_ff_default_branch_clean_tree.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e010_unit_002_wait_for_claude_ready_polls_session_file.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e010_unit_003_ff_default_branch_dirty_tree_skipped.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e010_unit_003_wait_for_claude_ready_raises_timeout.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e010_unit_004_assert_worker_processing_passes_on_thinking_marker.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e010_unit_005_decision_log_gated_on_assertion.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e011_integration_001_full_spawn_path_verify_each_stage.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e011_smoke_001_real_fs_lock_prevents_concurrent_coaches.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e011_smoke_001_verify_stage_with_real_multiplexer.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e011_unit_001_lock_created_on_acquire.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e011_unit_001_verify_stage_raises_rename_not_accepted.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e011_unit_002_live_pid_raises_already_running.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e011_unit_002_verify_stage_raises_paste_did_not_land.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e011_unit_003_dead_pid_cleans_stale_lock.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e011_unit_003_verify_stage_raises_prompt_not_submitted.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e011_unit_004_capture_pane_text_on_multiplexer_backend.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e011_unit_004_context_manager_releases_on_exit.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e011_unit_005_apply_canonical_name_verify_after_send.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e011_unit_005_run_refuses_second_coach_with_clear_message.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e011_unit_006_assert_worker_processing_hard_raises.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e011_unit_006_no_progress_ttl_escalates_and_exits.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e011_unit_007_verify_stage_retries_once_before_raise.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e012_integration_001_full_spawn_atomic_rename_and_orphan_cleanup.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e012_smoke_001_atomic_rename_on_real_cmux.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e012_smoke_pre_commit_manifest_exception.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e012_unit_001_atomic_rename_send_no_separate_enter.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e012_unit_002_rename_accepted_requires_post_submit_signal.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e012_unit_003_fake_mux_models_enter_races_text.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e012_unit_004_orphan_pane_closed_on_readiness_timeout.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e012_unit_branch_self_heal.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e013_smoke_001_live_adapter_registry_passes_layer_b_validator.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e013_smoke_001_live_gh_search_runs_without_error.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e013_smoke_docs_models_and_manifest_backfill.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e013_unit_001_adapter_registry_has_permission_fields.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e013_unit_001_dup_check_warns_on_match.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e013_unit_002_claude_adapters_declare_accept_edits_flag.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e013_unit_002_dup_check_returns_empty_on_no_match.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e013_unit_003_new_aborts_on_match_without_no_dup_check.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e013_unit_003_validator_fails_on_missing_permission_fields.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e013_unit_004_new_proceeds_with_no_dup_check_flag.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e013_unit_docs_models_and_manifest_backfill.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e014_smoke_001_live_bash_auto_approve_no_stale_reference.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e014_smoke_001_spawn_guard_reachable_from_cli.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e014_unit_001_adapter_command_rejected.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e014_unit_001_bash_auto_approve_no_modal_typing_reference.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e014_unit_002_bash_auto_approve_fix_hint_references_allowlist.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e014_unit_002_clean_command_passes_guard.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e014_unit_003_claude_code_adapter_never_emits_forbidden_flag.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e015_smoke_001_deployed_templates_contain_smoke_acceptance_checklist.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e015_smoke_001_gate_output_contains_rules_in_live_repo.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e015_unit_001_gate_includes_portable_rules_when_yaml_exists.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e015_unit_001_session_launch_template_names_must_have_smoke_acceptance_rule.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e015_unit_002_gate_silent_when_no_yaml.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e015_unit_003_agent_rules_yaml_is_valid_yaml.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e016_unit_001_inject_agent_env_returns_tuple.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e016_unit_003_non_cli_return_shell_prefix_reconstructed.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e018_integration_001_scope_flag_in_cli_help.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e018_integration_002_scope_changed_files_exits_zero_on_clean_branch.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e018_smoke_001_scoped_check_exits_zero_on_this_branch.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e018_unit_001_scoped_check_exits_zero_no_wagon_sources.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e018_unit_002_scoped_check_exits_one_names_drifted_wagon.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e018_unit_003_pr578_replay_16_drifted_wagons_no_touch.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e019_integration_001_published_issue_passes_body_validators.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e019_smoke_001_live_create_zero_edit_calls.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e019_unit_001_single_graphql_call_on_create.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e019_unit_002_non_compliant_body_refused_before_publish.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e019_unit_003_edit_reruns_check_gate.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e020_smoke_001_live_sync_codex_produces_conductor_md.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e020_unit_001_agent_files_maps_codex_to_conductor_md.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e020_unit_002_persona_template_maps_codex_to_conductor_md_tmpl.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e020_unit_003_sync_codex_agent_writes_conductor_md.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e020_unit_004_conductor_md_tmpl_template_file_exists.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e020_unit_005_stale_agents_md_triggers_migration_notice.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e021_integration_001_ci_check_fails_on_drifted_pr.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e021_smoke_001_registry_check_passes_on_main_after_chore_pr.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e021_unit_001_registry_check_exits_zero_after_resync.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e021_unit_002_pre_push_hook_rejects_drift.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e021_unit_003_pre_push_hook_passes_after_resync.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e021_unit_004_fix_hint_names_exact_command.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e025_smoke_001_consumer_sweep_excludes_toolkit_only_tests.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e025_smoke_001_real_wagon_graph_output_present_and_well_formed.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e025_unit_001_graph_launch_prompt_emits_required_sections.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e025_unit_002_graph_launch_prompt_output_under_2kb.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e026_smoke_001_real_rendered_prompt_contains_graph_section.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e026_unit_001_session_launch_template_contains_wagon_graph_slot.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e026_unit_002_render_launch_prompt_injects_graph_section.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e026_unit_003_render_launch_prompt_omits_graph_on_command_failure.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e027_smoke_001_atdd_validate_coach_passes_with_graph_section_present.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e027_unit_001_session_convention_declares_wagon_graph_rule.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e027_unit_002_wagon_graph_rule_fires_on_template_missing_section.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e027_unit_003_wagon_graph_rule_passes_on_compliant_template.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e028_integration_001_cmd_spawn_with_surface_marker_probe_no_jsonl_needed.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e028_smoke_001_live_adapter_registry_claude_code_has_surface_marker_probe.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e028_unit_001_surface_marker_probe_returns_on_marker_match.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e028_unit_002_surface_marker_probe_raises_timeout_on_no_match.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e028_unit_003_process_alive_delay_probe_returns_after_min_delay.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e028_unit_004_process_alive_delay_probe_raises_if_proc_dies.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e028_unit_005_adapter_spec_readiness_probe_populated.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e028_unit_006_cmd_spawn_calls_readiness_probe_not_poll_jsonl.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e029_smoke_001_deployed_cmd_spawn_order_is_probe_then_paste_then_jsonl.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e029_unit_001_paste_precedes_jsonl_based_wait.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e029_unit_002_assert_worker_processing_called_after_paste.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e029_unit_003_worker_readiness_timeout_named_post_paste_on_no_processing.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e031_smoke_001_live_spawn_argv_config_driven_scoped_bash.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e031_unit_001_convention_declares_freedom_layer_data.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e031_unit_002_spawn_emits_convention_sourced_scoped_allowlist.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e034_integration_001_init_installs_three.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e034_smoke_001_real_init_installs_and_warns.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e036_unit_002_init_installs_git_shim.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e036_unit_004_gate_self_heals.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e043_smoke_001_live_cmux_native_launch.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e043_unit_002_spawn_default_routes_cmux_native.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e043_unit_003_cmux_native_liveness.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e044_smoke_001_toolkit_registry_build_leaves_no_stray_stub_dirs.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e044_unit_001_toolkit_only_config_creates_no_game_template_stub_dirs.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e044_unit_002_declared_default_roots_still_materialize.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e044_unit_003_declared_code_roots_excludes_merged_defaults.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e051_smoke_001_full_cycle_zero_projects_v2_graphql.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e051_unit_001_transition_label_rest_only_no_board_graphql.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e051_unit_002_issue_creation_zero_board_writes.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e051_unit_003_skip_board_sync_gate_retired.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e052_smoke_001_train_gate_enforces_offline_zero_board_graphql.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e052_unit_001_train_gate_reads_manifest_not_board.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e052_unit_002_train_gate_rejects_unknown_train_no_board_fallback.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e053_smoke_001_config_loads_and_github_imports_without_projects_v2.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e053_unit_001_no_projects_v2_module_or_token_in_shipped_code.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e053_unit_002_claude_md_source_of_truth_debanners_projects_v2.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e053_unit_003_board_contract_regression_tests_retired.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e054_smoke_001_reconcile_no_unboundlocalerror.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e054_unit_001_reconcile_resolves_module_issuemanager.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_e054_unit_002_no_local_issuemanager_shadow.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_git_hook_env_scrub.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_initializer_workflow_emission.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_is_atdd_source_repo.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_issue_branch_check.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_issue_chain_to_branch.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_issue_creation_injects_graph_context.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_issue_graph_store_first.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_issue_lifecycle.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_issue_planned_pr_gate.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_issue_template.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_issue_template_new_sections.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_issue_train_required_hint.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_k4_per_llm_convention_sync.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_l001_integration_001_cli_dispatch_wires_status.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_l001_smoke_001_claude_code_no_modal_on_bash_read.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_l001_smoke_001_status_cli_e2e.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_l001_unit_001_adapter_registry_has_non_interactive_smoke.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_l001_unit_001_no_runs_exits_zero.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_l001_unit_001_status_prints_per_surface_table.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_l001_unit_002_fixture_run_renders_table.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_l001_unit_003_json_flag_parseable.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_l001_unit_004_nonexistent_run_id_exits_nonzero.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_l002_unit_001_worktree_create_dispatches_to_creation.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_l002_unit_002_branch_alias_warns_and_delegates.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_l002_unit_003_worktree_list_shows_registered_worktrees.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_l002_unit_004_worktree_remove_refuses_main_checkout.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_l004_smoke_001_session_jsonl_appears_after_launch_prompt_paste.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_l004_unit_001_regression_lazy_jsonl_creation_pipeline_completes.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_l004_unit_002_regression_old_jsonl_boot_wait_would_have_deadlocked.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_m001_integration_001_runtime_event_latency.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_m001_integration_002_git_watcher_commit_observed.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_m001_integration_003_liveness_stuck_detection.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_m001_integration_004_watcher_reattachment.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_m001_integration_005_append_only_no_interleave.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_m001_smoke_001_basic_observer_rules_load_end_to_end.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_m001_smoke_001_integration_log_covers_every_handoff.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_m001_smoke_001_runtime_watcher_real_infrastructure.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_m001_unit_001_rule_01_unstructured_question.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_m001_unit_002_rule_02_token_silence.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_m001_unit_003_rule_03_completion_without_commit.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_m001_unit_004_rule_04_out_of_scope_edit.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_m001_unit_005_rule_05_missed_heartbeat.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_m001_unit_006_rule_08_reviewer_edit_attempt.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_m001_unit_007_rule_09_validator_failure_ignored.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_m001_unit_008_rules_co_located_as_yaml.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_m002_unit_001_rule_06_fires_above_threshold.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_m002_unit_002_config_override_lowers_threshold.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_m003_unit_005_yaml_loader_python_trigger.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_m004_smoke_001_substrate_rules_e2e.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_m004_unit_001_rule_10_stale_suppression.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_m004_unit_002_rule_11_unbound_rule_id.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_m004_unit_003_rule_12_grammar_violation.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_m004_unit_004_rule_17_disposition_declared.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_m005_smoke_001_real_observer_heartbeats_reach_coach.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_m005_unit_001_observer_emits_heartbeat_on_cadence.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_m005_unit_002_heartbeat_emission_is_adapter_agnostic.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_m006_smoke_001_real_blocked_worker_reaches_coach.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_m006_unit_001_blocked_worker_emits_ask.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_m006_unit_002_hard_blocked_worker_emits_escalate.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_m006_unit_003_healthy_worker_emits_no_ask_or_escalate.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_main_dispatcher.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_merge_cascade.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_merge_cascade_pyproject_resolve.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_merge_cascade_topology.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_multiplexer.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_observer_detectors.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_observer_scan_worktree_excludes_runtime.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_p001_smoke_001_observer_cli_e2e.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_p001_smoke_002_observer_loop_closes.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_p001_unit_001_decisions_append_only.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_p001_unit_001_observer_run_tails_log.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_p001_unit_002_correction_fires_and_writes.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_p001_unit_002_judgments_append_only.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_p001_unit_003_attach_prints_recent_observations.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_p001_unit_003_schema_validation_at_write.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_p001_unit_004_actions_idempotent.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_p001_unit_004_rule_failure_isolation.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_p001_unit_005_durability_smoke.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_p001_unit_005_rule_loading_order_independent.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_p001_unit_006_rule_load_error_surfaced.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_p001_unit_007_three_injection_paths_available.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_p001_unit_008_cmd_run_exits_when_persona_dir_removed.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_p001_unit_009_cmd_run_exits_after_idle_timeout.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_p001_unit_010_teardown_fixture_reaps_observer_procs.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_p002_integration_001_persona_heartbeat_produced.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_p002_smoke_001_blocked_persona_triggers_correction.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_p002_smoke_002_acquisition_and_observability.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_p002_unit_001_collect_input_reads_persona_dir.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_p002_unit_002_time_token_fields_populated.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_p002_unit_003_persona_output_stream_acquired.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_p002_unit_004_observer_status_line_and_trace.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_p002_unit_005_universal_operator_visibility.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_p2_integration_001_complete_triggers_merge.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_p2_integration_002_cleanup.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_p2_integration_003_no_auto_merge_without_flag.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_parent_body_template_seed.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_pr_base_validation.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_pr_risk_breakdown.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_r001_integration_001_answered_worker_unblocks.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_r001_smoke_001_live_bash_auto_approve_escalation_path.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_r001_smoke_001_real_ask_answer_roundtrip.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_r001_unit_001_answer_delivered_back_to_worker.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_r001_unit_001_deny_pattern_routes_to_escalate.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_r001_unit_002_roundtrip_delivery_is_adapter_agnostic.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_r002_integration_001_full_lifecycle_no_abort.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_r002_unit_001_green_is_not_terminal.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_r002_unit_002_loop_continues_through_green.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_r004_integration_001_branch_gate_passes_from_flat_sibling_worktree.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_r004_integration_002_init_worktree_layout_noop_on_already_flat.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_r004_integration_003_issue_reenter_create_branch_passes.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_registry_no_empty_code_root_stubs.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_rules_cli.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_security_rules_cli.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_session_template.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_session_template_checkpoint.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_spawn_harness_rules_blocks.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_spawn_harness_security_block.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_store_authoritative_writes.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_suppress_backfill.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_sync.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_sync_labels.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_sync_wmbts.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_sync_wmbts_autospec.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_telemetry_array_validation.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_test_runner.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_transition_side_effects.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_upgrader.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_urn_graph_edge_type_exclude_default.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_viz_app_journey_mode.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_wave_planning.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_worktree_gc.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_y001_integration_001_two_issues_resolve_to_one_tab.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_y001_integration_001_warm_resume_skips_planner.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_y001_smoke_001_help_text_shows_timeout_in_real_shell.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_y001_smoke_001_real_multiplexer_shows_one_coach_tab.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_y001_unit_001_canonical_coach_tab_name_is_invariant.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_y001_unit_001_default_timeout_is_30s.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_y001_unit_001_read_current_phase_at_startup.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_y001_unit_001_user_content_before_block_preserved.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_y001_unit_002_help_text_advertises_env_var.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_y001_unit_002_spawn_correct_persona_for_phase.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_y001_unit_002_user_content_after_block_preserved.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_y001_unit_003_within_block_deletion_warns.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_y002_integration_001_github_label_reflects_sm_phase.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_y002_integration_001_headless_observer_still_writes_corrections.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_y002_smoke_001_banner_absent_after_sync_in_real_env.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_y002_smoke_001_real_spawn_yields_one_tab.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_y002_unit_001_banner_muted_when_marker_exists.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_y002_unit_001_persona_spawn_creates_no_obs_surface.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_y002_unit_001_swap_phase_label_helper_exists.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_y002_unit_002_atdd_sync_writes_marker.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_y002_unit_002_label_swapped_on_each_watcher_advance.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_y003_smoke_001_resume_absent_from_real_help_output.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_y003_unit_001_resume_not_in_help_text.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_y003_unit_002_resume_flag_removed_or_hidden.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_y004_smoke_001_real_template_render_excludes_sibling_deps_from_merge_wait.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_y004_unit_001_parse_typed_deps_classifies_tagged_entries.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_y004_unit_002_bare_dep_classified_as_prereq_with_warning_flag.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_y004_unit_003_merge_wait_loop_excludes_sibling_deps.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_y004_unit_004_render_includes_sibling_context_block.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_y004_unit_005_no_prereqs_skips_merge_wait_loop.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_y004_unit_006_render_emits_bare_dep_warning.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_y006_smoke_init_hookspath_worktree_isolation.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/tests/test_y006_unit_init_hookspath_worktree_isolation.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/token_threshold.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/traceability.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/two_phase_commit.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/upgrader.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/urn.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/validation_baseline.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/viz_app.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/watchers.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/wave_planning.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/commands/worktree_gc.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/coach.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/code-roots.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/forbidden_commands.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/issue.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/naming.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/nodes/coach.execution.agent-liveness-and-structured-asks.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/nodes/coach.execution.atomic-registry-write.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/nodes/coach.execution.decisions-mediated-not-auto-executed.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/nodes/coach.execution.dispatch-verifies-channel-live.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/nodes/coach.execution.freedom-with-a-leash.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/nodes/coach.execution.one-agent-per-delivery-unit.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/nodes/coach.execution.out-of-contract-detection.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/nodes/coach.execution.runtime-state-not-a-delivery-artifact.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/nodes/coach.execution.structured-correction-and-escalation.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/nodes/coach.extension.realization-mapping.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/nodes/coach.graph.implementation-root-resolution.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/nodes/coach.lifecycle.no-green-to-refactor-without-smoke.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/nodes/coach.lifecycle.no-terminal-before-lifecycle-satisfied.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/nodes/coach.lifecycle.phase-machine.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/nodes/coach.lifecycle.session-type-required-phases.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/nodes/coach.lifecycle.single-step-advance-on-delivery.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/nodes/coach.lifecycle.universal-completion-gates.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/nodes/coach.role.cross-cutting-urn-types.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/nodes/coach.role.operator-decision-authority.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/nodes/coach.role.planner-tester-coder-sequence.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/nodes/coach.role.reviewer-no-write.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/nodes/coach.rule-id.disposition-required.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/nodes/coach.rule-id.grammar-and-schema.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/nodes/coach.rule-id.migration-playbook.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/nodes/coach.rule-id.stale-suppression.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/nodes/coach.rule-id.validator-binding-violation.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/nodes/coach.source-layout.no-bare-version-detection.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/nodes/coach.source-layout.no-toolkit-self-layout-assumption.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/nodes/coach.substrate.transport-realizes-mediation.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/nodes/coach.template.no-duplicated-convention.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/nodes/coach.wheel-completeness.fixture-missing-from-wheel.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/nodes/coach.workspace.emitted-cli-must-parse.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/observer.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/path_shim_gh.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/path_shim_git.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/phase_machine.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/pr.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/session.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/source-layout.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/template.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/conventions/wheel-completeness.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/core/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/core/types.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/gate/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/gate/approval.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/gate/approval_check.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/gate/approve_command.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/gate/command_check.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/gate/decision.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/gate/registrations.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/gate/registry.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/gate/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/gate/tests/test_c007_unit_multi_check_and_semantics.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/gate/tests/test_d019_unit_config_and_migration_safety.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/gate/tests/test_e045_integration_failing_check_refuses_transition.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/gate/tests/test_e045_smoke_real_subprocess_check.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/gate/tests/test_e046_smoke_real_missing_tool.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/gate/tests/test_e046_unit_fail_closed.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/gate/tests/test_e050_integration_001_no_token_refuses_transition.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/gate/tests/test_e050_integration_002_token_allows_transition.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/gate/tests/test_e050_smoke_001_real_block_then_approve_proceeds.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/gate/tests/test_e050_unit_001_token_sign_verify_scope.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/github.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/graph/relationships.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/handlers/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/handlers/decisions.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/handlers/observer.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/handlers/reviewer.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/handlers/spawn.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/handlers/state_machine.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/handlers/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/handlers/tests/test_e006_integration_001_persona_pane_and_spawned_event.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/handlers/tests/test_e006_integration_002_coach_blocks_loudly_on_persona_failure.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/handlers/tests/test_e006_smoke_001_real_green_to_smoke_spawn_creates_persona.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/handlers/tests/test_e006_unit_003_incomplete_persona_spawn_maps_to_error.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/handlers/tests/test_j5_integration_001_watcher_drives_state.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/handlers/tests/test_j5_integration_002_stale_warn_fires.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/handlers/tests/test_j5_integration_003_liveness_cleanup.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/handlers/tests/test_j5_integration_004_event_serialization.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/handlers/tests/test_j5_smoke_001_watcher_real_infrastructure.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/handlers/tests/test_l1_integration_001_observer_alongside_agent.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/handlers/tests/test_n5_integration_001_reviewer_at_phase_boundary.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/handlers/tests/test_n5_integration_002_verdict_routing.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/handlers/tests/test_n5_integration_003_skip_review_honored.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/handlers/tests/test_rpb_e005_integration_001_reviewer_fires_at_refactor_boundary_by_default.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/handlers/tests/test_spawn_transient_cmux_retry.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/handlers/two_phase_commit.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/handlers/validator_dispatch.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/handlers/watcher.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/observer/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/observer/predicates.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/observer_rules/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/observer_rules/bash_auto_approve.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/observer_rules/canonical_naming_drift.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/observer_rules/canonical_role_naming.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/observer_rules/detectors.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/observer_rules/layout_drift.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/observer_rules/smoke_skip.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/overlays/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/overlays/claude.md +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/overlays/glm.md +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/overlays/mistral.md +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/plugins/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/plugins/diagnostics.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/plugins/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/plugins/tests/test_diagnostics.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/plugins/tests/test_e001_contract_001_violations_jsonl_schema_conformant.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/plugins/tests/test_e001_smoke_001_violation_collector_real_subprocess.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/plugins/tests/test_e001_unit_001_pytest_plugin_captures_all_violations.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/plugins/violation_collector.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/prompts/judge/judge-reviewer-concern.prompt.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/prompts/judge-issue-review-aggregate.prompt.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/prompts/persona/coder/green.prompt.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/prompts/persona/coder/refactor.prompt.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/prompts/persona/planner/planned.prompt.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/prompts/persona/reviewer/green.prompt.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/prompts/persona/reviewer/planned.prompt.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/prompts/persona/reviewer/red.prompt.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/prompts/persona/reviewer/refactor.prompt.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/prompts/persona/reviewer/smoke.prompt.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/prompts/persona/tester/red.prompt.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/prompts/persona/tester/smoke.prompt.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/dashboard.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/dispatcher.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/git_watcher.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/graph.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/integration_logger.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/pr_watcher.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/reader.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/risk_score.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/status_render.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/suppression_filter.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/tests/test_c001_unit_001_toolkit_suppression_marker_absorbs_violation.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/tests/test_c001_unit_002_repo_rule_violation_never_suppressed.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/tests/test_c001_unit_003_stale_suppressions_populated.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/tests/test_d001_unit_001_green_phase_selects_all_green_repo_rules.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/tests/test_d001_unit_002_planned_runs_substrate_enforcement.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/tests/test_d001_unit_003_config_override_substitutes_selection.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/tests/test_dashboard_integration_001_cli_dispatch.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/tests/test_dashboard_unit_001_build_cards.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/tests/test_dashboard_unit_002_render_grid.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/tests/test_dashboard_unit_003_card_presentation.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/tests/test_dashboard_unit_004_filter_menu.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/tests/test_e002_contract_001_risk_score_schema_validated_at_write.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/tests/test_e002_unit_001_mixed_toolkit_and_repo_breakdown.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/tests/test_e007_unit_001_graph_resolves_wagon_deps.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/tests/test_graph_issue_wagon_map_store_first.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/tests/test_m001_integration_001_backoff_on_secondary_limit.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/tests/test_m001_integration_002_preflight_budget_check.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/tests/test_m001_integration_003_coach_watch_cli_batched.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/tests/test_m001_integration_004_agent_wait_ci_uses_watcher.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/tests/test_m001_unit_001_batched_poll_single_api_call.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/tests/test_m001_unit_001_commit_observed_event_emitted.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/tests/test_m001_unit_002_cheap_state_default.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/tests/test_m001_unit_002_missing_trailers_violation_routed_tier_1.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/tests/test_m001_unit_003_failures_on_demand.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/tests/test_m001_unit_003_git_watcher_smoke.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/runtime/validator_selection.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/schemas/coach-decision.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/schemas/coach-judgment.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/schemas/config.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/schemas/correction.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/schemas/issue-review-aggregate.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/schemas/issue-review-pass.response.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/schemas/judge-borderline-tier1.response.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/schemas/judge-cross-phase-regression.response.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/schemas/judge-issue-review-aggregate.response.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/schemas/judge-retry-vs-escalate.response.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/schemas/judge-reviewer-concern.response.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/schemas/judge-superseded-rule-consolidation.response.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/schemas/label_taxonomy.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/schemas/manifest.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/schemas/project_fields.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/schemas/review-report.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/schemas/risk-score.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/schemas/runtime-event.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/schemas/session.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/schemas/validator-result.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/schemas/worker-state.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/spawn/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/spawn/reviewer_adapter.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/spawn_harness/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/spawn_harness/renderer.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/spawn_harness/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/spawn_harness/tests/test_renderer_unit.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/spawn_harness/tests/test_repo_blocks_snapshot.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/ATDD-ISSUE-TEMPLATE.md +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/CONDUCTOR.md +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/PARENT-ISSUE-TEMPLATE.md +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/SESSION-LAUNCH-TEMPLATE.md +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/WMBT-SUBISSUE-TEMPLATE.md +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/bin/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/bin/tests/conftest.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/bin/tests/test_e032_integration_001_shim_blocks_create.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/bin/tests/test_e032_integration_002_shim_allows_other.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/bin/tests/test_e032_integration_003_shim_resolves_real_gh.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/bin/tests/test_e032_smoke_001_installed_shim_blocks_in_real_worktree.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/bin/tests/test_e032_unit_001_shim_classifier_precise.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/bin/tests/test_e036_integration_001_shim_blocks_unscoped_bare.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/bin/tests/test_e036_integration_002_shim_forwards_exactly.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/bin/tests/test_e036_integration_003_shim_resolves_real_git.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/bin/tests/test_e036_smoke_001_installed_shim_blocks_and_forwards_in_real_worktree.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/bin/tests/test_e036_unit_001_shim_classifier_precise.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/harness/mount-train.mjs +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/harness/vitest.config.mjs +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/pre-commit +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/_gh_issue_create_precommit_harness.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/conftest.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_C002_smoke_hooks_fire_via_git.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_C002_unit_commit_msg_mass_delete.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_C002_unit_pre_push_bare_mode.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_C003_smoke_prepush_validator.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_C003_unit_prepush_validator.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_M002_unit_prepush_postcommit_plan_validate_planner.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_Y004_smoke_pre_push_version_gate_no_pip.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_Y004_unit_pre_push_version_gate_never_auto_upgrades.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_e012_unit_pre_commit_manifest_exception.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_e022_smoke_001_post_commit_core_bare_unchanged.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_e022_unit_001_post_commit_excludes_slow_marker.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_e022_unit_002_smoke_test_has_slow_marker.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_e022_unit_003_post_commit_trap_restores_core_bare.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_e023_smoke_001_routine_push_zero_bypasses.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_e023_unit_001_skip_all_gates_bypass.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_e023_unit_002_version_gate_uses_repo_minimum.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_e023_unit_003_registry_auto_heal.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_e024_smoke_001_merge_produces_one_publish_success.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_e024_unit_001_atdd_validate_no_issues_trigger.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_e024_unit_002_publish_condition_head_branch_main.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_e026_smoke_001_routine_push_no_bypass.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_e026_unit_001_bypass_audit_table_committed.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_e026_unit_002_retired_flags_absent.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_e026_unit_003_bypass_reason_required.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_e026_unit_004_bypass_audit_jsonl.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_e030_smoke_001_zero_skip_grep_matches.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_e030_unit_001_all_skip_flags_absent.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_e030_unit_002_bypass_reason_absent.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_e031_smoke_001_emergency_cli_wired.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_e031_unit_001_emergency_command.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_e031_unit_002_hook_reads_emergency_bypass.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_e033_integration_001_precommit_blocks_staged.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_e033_integration_002_precommit_allows_md_docs.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_e033_smoke_001_real_commit_rejects_staged_create.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_e033_unit_001_precommit_regex_precise.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_precommit_branch_gate_store.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/hooks/tests/test_pretooluse_classifier_integration.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/workflows/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/templates/workflows/atdd-auto-phase.yml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/coach_config.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/coach_lock.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/config.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/coverage_phase.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/default_branch.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/diagnostics.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/disposition_gate.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/escalation_channel.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/ff_default_branch.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/forbidden_command_classifier.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/git.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/graph/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/graph/edge_validator.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/graph/graph_builder.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/graph/resolver.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/graph/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/graph/tests/test_get_subgraph_edge_type_exclude.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/graph/tests/test_graph_builder_security_edges.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/graph/tests/test_graph_builder_train_participants.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/graph/tests/test_graph_builder_train_step_edges.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/graph/tests/test_security_resolver.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/graph/tests/test_urn_extension_contract.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/graph/tests/test_urn_security_grammar.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/graph/urn.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/locale_phase.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/manifest.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/multiplexer.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/multiplexer_primer.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/phase_dispatch.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/repo.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/review_report_intake.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/risk_score.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/rule_binding.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/rule_id_registry.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/rule_validator_resolver.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/session_naming.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/session_naming_apply.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/suppression_scanner.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_coach_config.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_diagnostics.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_disposition_gate.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_e003_integration_001_spawn_failure_cleans_pane.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_e003_smoke_001_coach_invoked_from_worktree_parent.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_e003_smoke_001_spawn_failure_cleans_pane_real_cmux.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_e003_unit_001_find_worktree_root_walks_up.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_e003_unit_002_find_worktree_root_respects_repo_flag.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_e003_unit_003_actionable_error_when_no_worktree_found.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_e004_smoke_001_worktree_reused_not_duplicated.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_e004_unit_001_detect_existing_worktree.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_e004_unit_001_rename_submits_via_send_key.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_e004_unit_002_coach_reuses_existing_worktree.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_e004_unit_002_graceful_uuid_extraction.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_e004_unit_003_coach_adds_worktree_when_none_exists.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_e005_smoke_001_primer_printed_in_real_cmux_session.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_e005_unit_001_primer_printed_when_mux_detected.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_e005_unit_002_primer_text_contains_key_commands.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_e005_unit_004_primer_not_reprinted_in_same_session.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_escalation_channel.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_forbidden_command_classifier.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_get_code_roots.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_git.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_m001_smoke_001_live_session_naming_apply_no_slash_rename.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_m001_unit_001_apply_canonical_name_no_slash_rename.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_m001_unit_002_multiplexer_rename_still_called.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_m001_unit_003_verify_after_send_no_rename_accepted.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_multiplexer.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_multiplexer_persona_surface.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_phase_dispatch.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_r004_smoke_001_real_linked_worktree_recognized_worktree_ready.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_r004_unit_001_detector_resolves_linked_worktree_common_dir.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_repo_rule_walker.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_risk_score.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_rule_binding.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_rule_id_registry.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_rule_validator_resolver.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_security_walker.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_session_naming.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/tests/test_suppression_scanner.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/theme_map.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/theme_scanner.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/utils/train_spec_phase.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/_core_bare_baseline.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/_violation.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/claude_md_validators.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/conftest.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/fixtures/minimal_repo/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/fixtures/minimal_repo/test_minimal_pass.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/fixtures/toolkit_source_layout/pattern_a_clean.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/fixtures/toolkit_source_layout/pattern_a_violation.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/fixtures/toolkit_source_layout/pattern_b_clean.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/fixtures/toolkit_source_layout/pattern_b_violation.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/freedom_layer_validator.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/launch_prompt_wagon_graph_guard.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/red_phase_leak_scanner.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/rule_id_emission_extractor.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/shared_fixtures.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_C001_roundtrip.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_api_validators_marked_github_api.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_auto_phase_workflow_exists.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_branch_protection.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_canonical_role_naming.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_cleanup_command.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_conductor_md_no_duplicated_convention.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_config_themes.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_core_bare_self_heal.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_custom_theme_validation.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_d001_unit_001_six_schemas_exist.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_d001_unit_002_fixtures_validate.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_d002_unit_001_review_report_schema_committed.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_d002_unit_001_runtime_layout_doc_committed.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_d002_unit_002_pass_blocked_when_ac_not_covered.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_d002_unit_003_pass_blocked_with_strict_finding.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_d002_unit_004_rule_id_severity_matches_registry.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_d003_unit_001_five_phase_reviewer_prompts.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_d003_unit_001_validator_invocation_doc_committed.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_d004_unit_001_event_semantics_doc_complete.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_doctor_environment_diagnosis.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_e003_integration_001_block_verdict_fails_the_workflow.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_e003_integration_002_annotate_verdict_passes_with_comment.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_e003_unit_001_workflow_file_exists_with_correct_triggers.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_e005_integration_001_init_emits_only_parseable_atdd_commands.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_e005_integration_002_drift_validator_fires_in_validate_coach.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_e005_smoke_001_real_validate_coach_runs_extended_drift_validator.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_e005_unit_001_drift_scan_captures_all_atdd_lines.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_e005_unit_002_drift_validator_flags_unknown_subcommand.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_e009_runtime_artifacts_blocked.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_e022_smoke_001_live_claude_md_contains_no_atdd_skip_references.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_e022_unit_001_claude_md_contains_no_atdd_skip_references.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_e022_unit_002_claude_md_references_operator_emergency_bypass_doc.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_e022_unit_003_upgrade_banner_does_not_suggest_force.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_e023_smoke_001_live_claude_md_line_count_within_budget.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_e023_unit_001_claude_md_is_at_most_250_lines.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_e023_unit_002_claude_md_retains_atdd_lifecycle_and_command_pointers.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_e024_smoke_001_live_operator_emergency_bypass_doc_present_and_correct.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_e024_unit_001_operator_emergency_bypass_doc_exists.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_e024_unit_002_operator_emergency_bypass_doc_documents_cli_not_env_var.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_e032_unit_001_validator_rejects_forbidden_command_in_allowlist.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_e032_unit_002_validator_rejects_unscoped_bash_entry.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_e032_unit_003_validator_is_language_agnostic_data_only.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_e036_unit_003_shared_core_bare_baseline.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_e056_smoke_001_real_gate_scopes_to_current_pr.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_e056_unit_001_pre_smoke_gate_pr_scope.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_enrich_wagon_registry.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_github_client_mock_spec.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_hook_version_gate_honest_message.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_init_substrate_mode.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_init_themes_prompt.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_issue_advancement.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_issue_gate_completion.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_issue_validation.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_l003_smoke_001_dispatched_agent_bash_log_contains_no_atdd_skip_invocations.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_m002_smoke_001_live_observer_rules_pass_validator.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_m002_unit_spawn_non_interactive_validator.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_no_duplicate_rule_representation.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_no_red_phase_tests_in_consumer_entry_points.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_observer_universal_cospawn.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_open_issue_compliance.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_pr_base_branch.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_pr_closes_keyword_discipline.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_pr_mass_delete_guard.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_pr_merge_blocks_pre_smoke_close.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_pr_phase_alignment.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_prepush_repo_validate_opt_in.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_pytest_invocation_form.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_r002_smoke_001_atdd_validate_coach_includes_size_budget_rule.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_r002_unit_001_validator_fails_when_claude_md_exceeds_budget.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_r002_unit_002_validator_passes_when_claude_md_within_budget.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_r003_smoke_001_atdd_validate_coach_includes_no_bypass_advertising_rule.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_r003_unit_001_validator_fails_when_claude_md_contains_atdd_skip_token.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_r003_unit_002_validator_passes_when_claude_md_is_clean.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_readonly_commands_no_writes.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_registry.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_release_versioning.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_required_label_set.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_review_gate_ci_safe.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_rule_id_registry_coherence.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_rule_id_uniqueness.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_rule_validator_binding.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_session_naming.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_spawn_non_interactive_validator.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_sync_theme_block.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_theme_scanner.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_toolkit_source_layout_assumptions.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_traceability.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_train_registry.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_transport_realizes_mediation.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_unlabeled_open_issues.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_update_feature_paths.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_validate_contract_consumers.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_validate_uses_live_source_in_checkout.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_validator_test_isolation.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_wagonless_graph_context_compliance.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_wheel_completeness.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_workflow_consistency.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_workflow_template_command_drift.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_worktree_enforcement.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_y003_smoke_001_guard_catches_polluter.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/test_y003_unit_001_repo_root_bare_guard.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/tests/test_E025_regression_validator_red_phase_leak.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/tests/test_e061_smoke_001_real_cli_create_by_slug_warns.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/tests/test_e061_unit_001_create_by_slug_warns_and_still_routes.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/tests/test_github_client_mock_spec_validator.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/tests/test_github_client_stub_autofix.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/tests/test_issue_advancement_non_lifecycle.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/tests/test_issue_advancement_scoping.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/tests/test_phase_3a_rules_array_coverage.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/tests/test_pr_base_branch_helpers.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/tests/test_pr_merge_blocks_pre_smoke_close_helpers.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/tests/test_rule_id_emission_extractor.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/tests/test_rule_id_legacy_grammar.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/tests/test_rule_id_uniqueness_helpers.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/tests/test_smoke_rules_discoverability.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/tests/test_violation.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/tests/test_wheel_completeness_helpers.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/validators/tests/test_workflow_template_command_drift_helpers.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/wrappers/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/wrappers/atdd_cmux_send.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/wrappers/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/wrappers/tests/test_e004_smoke_001_shim_console_script_real_exit_codes.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/wrappers/tests/test_e004_unit_001_launch_intent_payload_rejected.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/wrappers/tests/test_e004_unit_002_non_launch_payload_passthrough.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coach/wrappers/tests/test_e004_unit_003_escape_flag_bypasses_classifier.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/conventions/adapter.recipe.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/conventions/backend.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/conventions/boundaries.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/conventions/commons.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/conventions/complexity.recipe.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/conventions/component-naming.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/conventions/composition.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/conventions/coverage.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/conventions/dead-code.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/conventions/design.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/conventions/design.recipe.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/conventions/dto.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/conventions/duplication.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/conventions/error-response.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/conventions/frontend.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/conventions/green.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/conventions/logging.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/conventions/performance.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/conventions/presentation.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/conventions/refactor.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/conventions/security.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/conventions/technology.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/conventions/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/conventions/tests/test_adapter_recipe.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/conventions/tests/test_complexity_recipe.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/conventions/tests/test_component_taxonomy.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/conventions/tests/test_component_urn_naming.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/conventions/tests/test_thinness_recipe.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/conventions/thinness.recipe.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/conventions/train.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/conventions/verification.protocol.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/schemas/design_system.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/utils/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/utils/python_file_walker.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/utils/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/utils/tests/test_python_file_walker.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/_ast_tsx.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/_four_tier_ratchet.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/_toolkit_roots.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/conftest.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/composition_completeness/python_fail_setter/python/bad_match/orchestrate_bad/composition.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/composition_completeness/python_fail_setter/python/bad_match/orchestrate_bad/src/application/play_match_use_case.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/composition_completeness/python_fail_setter/python/bad_match/orchestrate_bad/src/domain/match.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/composition_completeness/python_fail_setter/python/bad_match/orchestrate_bad/src/integration/match_repository.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/composition_completeness/python_fail_setter/python/bad_match/orchestrate_bad/src/presentation/controllers/match_controller.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/composition_completeness/python_pass/python/play_match/orchestrate_match/composition.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/composition_completeness/python_pass/python/play_match/orchestrate_match/src/application/play_match_use_case.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/composition_completeness/python_pass/python/play_match/orchestrate_match/src/domain/match.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/composition_completeness/python_pass/python/play_match/orchestrate_match/src/integration/match_repository.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/composition_completeness/python_pass/python/play_match/orchestrate_match/src/presentation/controllers/match_controller.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/composition_completeness/python_pass/python/rankings/calculate_elo/composition.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/composition_completeness/python_pass/python/rankings/calculate_elo/src/domain/elo_rating.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/composition_completeness/python_pass/python/rankings/calculate_elo/src/integration/elo_repository.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/composition_completeness/typescript_repo/tsconfig.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/composition_completeness/typescript_repo/web/src/arena/show-forecast/application/useForecast.ts +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/composition_completeness/typescript_repo/web/src/arena/show-forecast/domain/forecast.ts +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/composition_completeness/typescript_repo/web/src/arena/show-forecast/integration/ForecastGateway.ts +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/composition_completeness/typescript_repo/web/src/arena/show-forecast/presentation/ForecastView.tsx +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/composition_completeness/typescript_repo/web/src/manage-profile/display-profile/application/useCameoBalance.ts +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/composition_completeness/typescript_repo/web/src/manage-profile/display-profile/application/useFinalsRewards.ts +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/composition_completeness/typescript_repo/web/src/manage-profile/display-profile/domain/cameo-types.ts +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/composition_completeness/typescript_repo/web/src/manage-profile/display-profile/domain/finals-rewards-types.ts +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/composition_completeness/typescript_repo/web/src/manage-profile/display-profile/integration/CameoRepository.ts +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/composition_completeness/typescript_repo/web/src/manage-profile/display-profile/integration/FinalsRewardsRepository.ts +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/composition_completeness/typescript_repo/web/src/manage-profile/display-profile/presentation/FinalsRewardCard.tsx +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/composition_completeness/typescript_repo/web/src/manage-profile/display-profile/presentation/ProfilePage.tsx +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/composition_completeness/typescript_repo/web/src/manage-profile/display-profile/presentation/ProfileView.tsx +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/composition_completeness/typescript_repo/web/src/reveal-status/display-leaderboard/application/usePlayerRank.ts +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/composition_completeness/typescript_repo/web/src/reveal-status/display-leaderboard/domain/rank.ts +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/composition_completeness/typescript_repo/web/src/reveal-status/display-leaderboard/index.ts +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/composition_completeness/typescript_repo/web/src/reveal-status/display-leaderboard/integration/LeaderboardRepository.ts +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/composition_completeness/typescript_repo/web/src/reveal-status/display-leaderboard/presentation/LeaderboardPage.tsx +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/composition_completeness/typescript_repo/web/src/score/compute-elo/domain/elo.ts +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/composition_completeness/typescript_repo/web/src/score/compute-elo/integration/EloRepository.ts +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/route_train_wagon/dynamic_unknown.tsx +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/route_train_wagon/ghost_train.tsx +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/route_train_wagon/ghost_wagon.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/route_train_wagon/good_router.tsx +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/silent_swallow/python_clean/observed_handlers.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/silent_swallow/python_violations/seek_opponent.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/silent_swallow/typescript_clean/observedHandlers.ts +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/silent_swallow/typescript_violations/seekOpponent.ts +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/stub_presentation/arrow_null.tsx +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/stub_presentation/conditional_null_ok.tsx +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/stub_presentation/empty_div.tsx +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/stub_presentation/empty_fragment.tsx +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/stub_presentation/fn_return_null.tsx +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/stub_presentation/jel_app_repro/AuthGateShell.tsx +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/stub_presentation/passthrough_children_ok.tsx +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/fixtures/stub_presentation/ternary_both_null.tsx +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/presentation_ratchet.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/route_train_wagon_analyzer.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_commons_structure.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_complexity.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_complexity_typescript.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_composition_completeness.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_contract_driven_http.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_cross_language_consistency.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_dead_code_python.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_design_system_compliance.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_dto_testing_patterns.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_duplication_detector.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_duplication_detector_typescript.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_error_response_compliance.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_frontend_composition_root.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_frontend_security_patterns.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_god_hook_elimination.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_green_cross_stack_layers.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_green_layer_dependencies.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_green_python_layer_structure.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_green_supabase_layer_structure.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_gsap_layer_usage.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_hierarchy_coverage.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_i18n_runtime.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_import_boundaries.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_init_file_urns.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_no_silent_exception_swallowing_python.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_no_silent_exception_swallowing_typescript.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_no_stub_presentation_returns.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_page_elimination.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_preact_layer_boundaries.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_presentation_convention.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_presentation_ratchet_requires_smoke.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_python_architecture.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_quality_metrics.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_quality_metrics_typescript.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_query_count.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_route_train_compliance.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_route_train_wagon_coverage.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_security_patterns.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_state_store_invariants.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_state_store_sot_boundary.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_station_master_pattern.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_structured_logging.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_train_composition_smoke.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_train_infrastructure.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_train_urns.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_train_yaml_render_metadata.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_typescript_architecture.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_usecase_structure.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_wagon_boundaries.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_wagon_boundaries_typescript.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/test_wagon_trains_export_shape.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/tests/fixtures/flat_package/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/tests/fixtures/flat_package/app.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/tests/fixtures/flat_package/models.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/tests/fixtures/flat_package/runner.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/tests/fixtures/from_dot_import_x/python/app.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/tests/fixtures/from_dot_import_x/python/pkg/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/tests/fixtures/from_dot_import_x/python/pkg/models.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/tests/fixtures/from_dot_import_x/python/pkg/runner.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/tests/fixtures/relative_imports_regression/python/app.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/tests/fixtures/relative_imports_regression/python/trains/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/tests/fixtures/relative_imports_regression/python/trains/models.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/tests/fixtures/relative_imports_regression/python/trains/runner.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/tests/test_composition_toolkit_root_config_driven.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/tests/test_dead_code_python_relative_imports.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/tests/test_four_tier_ratchet_migration_safety.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/tests/test_four_tier_ratchet_smoke_new_violation.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/tests/test_hierarchy_coverage_config_driven.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/tests/test_hierarchy_coverage_smoke_unknown_stack.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/tests/test_quality_metrics_duplication.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/tests/test_structured_logging_unit.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/tests/test_toolkit_four_tier_smoke_live_scan.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/coder/validators/tests/test_wagon_boundaries_toolkit_root_config_driven.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/conftest.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/consolidate_coach_workspace/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/consolidate_coach_workspace/enforce_surface_conformance/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/consolidate_coach_workspace/enforce_surface_conformance/composition.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/consolidate_coach_workspace/enforce_surface_conformance/live_smoke.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/consolidate_coach_workspace/enforce_surface_conformance/src/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/consolidate_coach_workspace/enforce_surface_conformance/src/application/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/consolidate_coach_workspace/enforce_surface_conformance/src/application/apply_layout_use_case.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/consolidate_coach_workspace/enforce_surface_conformance/src/application/ports.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/consolidate_coach_workspace/enforce_surface_conformance/src/domain/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/consolidate_coach_workspace/enforce_surface_conformance/src/domain/canonical_name.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/consolidate_coach_workspace/enforce_surface_conformance/src/domain/layout_plan.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/consolidate_coach_workspace/enforce_surface_conformance/src/domain/role.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/consolidate_coach_workspace/enforce_surface_conformance/src/domain/workspace_handle.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/consolidate_coach_workspace/enforce_surface_conformance/src/integration/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/consolidate_coach_workspace/enforce_surface_conformance/src/integration/cmux_layout_adapter.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/consolidate_coach_workspace/enforce_surface_conformance/src/presentation/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/consolidate_coach_workspace/enforce_surface_conformance/src/presentation/apply_conformance.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/consolidate_coach_workspace/enforce_surface_conformance/src/presentation/workspace_handle_surface.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/consolidate_coach_workspace/enforce_surface_conformance/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/consolidate_coach_workspace/enforce_surface_conformance/tests/_helpers.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/consolidate_coach_workspace/enforce_surface_conformance/tests/test_c001_smoke_001_live_never_collapse.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/consolidate_coach_workspace/enforce_surface_conformance/tests/test_c001_unit_001_plan_never_merges_scopes.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/consolidate_coach_workspace/enforce_surface_conformance/tests/test_e003_integration_001_shim_records_layout_call.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/consolidate_coach_workspace/enforce_surface_conformance/tests/test_e003_smoke_001_meta_smoke_print_theater_guard.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/consolidate_coach_workspace/enforce_surface_conformance/tests/test_e003_unit_001_use_case_invokes_layout_port.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/consolidate_coach_workspace/enforce_surface_conformance/tests/test_e004_integration_001_validator_flags_non_role_name.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/consolidate_coach_workspace/enforce_surface_conformance/tests/test_e004_smoke_001_validator_over_live_surface_names.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/consolidate_coach_workspace/enforce_surface_conformance/tests/test_e004_unit_001_build_sanitize_parse_roundtrip.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/consolidate_coach_workspace/enforce_surface_conformance/tests/test_e005_smoke_001_surface_workspace_resolves_without_invalid_handle.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/consolidate_coach_workspace/enforce_surface_conformance/tests/test_e005_unit_001_sanitizer_extracts_bare_handle.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/consolidate_coach_workspace/enforce_surface_conformance/tests/test_e005_unit_002_list_workspaces_emits_only_bare_handles.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/doctor.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/enforce/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/enforce/cli.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/enforce/conventions.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/enforce/resolution.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/enforce/runner.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/enforce/substrate_guard.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/enforce_binding_plan/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/enforce_binding_plan/run_binding_plan/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/enforce_binding_plan/run_binding_plan/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/enforce_binding_plan/run_binding_plan/tests/conftest.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/enforce_binding_plan/run_binding_plan/tests/test_e001_smoke_001_conformance.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/enforce_binding_plan/run_binding_plan/tests/test_e002_smoke_001_exit_code.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/enforce_binding_plan/run_binding_plan/tests/test_e003_smoke_001_run_on_commit.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/enforce_binding_plan/run_binding_plan/tests/test_e004_smoke_001_dogfood_parity.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/enforce_binding_plan/run_binding_plan/tests/test_e005_smoke_001_boundary.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/enforce_binding_plan/run_binding_plan/tests/test_e006_smoke_001_rematerialization.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/integrations/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/integrations/github/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/integrations/github/_gh.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/integrations/github/checks.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/integrations/github/issue_state.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/integrations/github/pr.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/integrations/github/types.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/journey/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/journey/cargo.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/journey/runner.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/journey/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/journey/tests/test_engine_core.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/journey/types.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/apply_decision/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/apply_decision/composition.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/apply_decision/src/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/apply_decision/src/application/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/apply_decision/src/application/apply_use_case.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/apply_decision/src/application/ports.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/apply_decision/src/domain/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/apply_decision/src/domain/application_plan.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/apply_decision/src/domain/idempotency_key.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/apply_decision/src/domain/record.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/apply_decision/src/integration/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/apply_decision/src/integration/agent_control_applier.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/apply_decision/src/integration/jsonl_decision_ledger.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/apply_decision/src/presentation/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/apply_decision/src/presentation/apply_cli.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/apply_decision/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/apply_decision/tests/_helpers.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/apply_decision/tests/test_e002_integration_001_applied_once.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/apply_decision/tests/test_e002_unit_001_stable_idempotency_key.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/apply_decision/tests/test_k001_integration_001_record_written.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/apply_decision/tests/test_k001_smoke_001_live_ledger.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/apply_decision/tests/test_m002_integration_001_failure_recorded.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/apply_decision/tests/test_r001_unit_001_human_required_not_applied.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/composition.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/live_smoke.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/src/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/src/application/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/src/application/feed_runner.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/src/application/ports.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/src/domain/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/src/domain/feed_item.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/src/domain/feed_item_mapper.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/src/domain/feed_reply_mapper.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/src/domain/tool_input_safety.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/src/domain/workspace_scope.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/src/integration/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/src/integration/coach_context.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/src/integration/feed_advance_verifier.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/src/integration/feed_event_source.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/src/integration/feed_reply_applier.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/src/integration/llm_coach.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/src/presentation/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/src/presentation/feed_runner_cli.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/_helpers.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_c003_integration_001_no_reply_for_dangerous.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_c003_smoke_001_live_dangerous_not_auto_approved.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_c003_unit_001_dangerous_tool_input_human_required.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_c003_unit_002_dangerous_permission_policy.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_c003_unit_003_unrecognized_command_escalates_by_default.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_c007_unit_001_governance_escalates_no_verdict.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_c007_unit_002_routine_question_still_auto_answered.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_e003_integration_001_reply_once_per_request.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_e003_smoke_001_unblocks_live_agent.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_e003_unit_001_verdict_maps_to_feed_reply.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_e006_smoke_001_live_decider_answers_whole_doc.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_e006_unit_001_answers_every_block_by_kind.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_e006_unit_002_selection_constrained_to_block_options.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_e007_integration_001_roundtrip_each_block_kind.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_e007_smoke_001_live_multi_question_all_answered.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_e007_unit_001_reply_carries_per_question_selections.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_e009_integration_001_resolved_decision_is_the_oracle.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_e009_smoke_001_worker_actually_proceeds_after_reply.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_e009_unit_001_verified_advance_no_fallback.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_e009_unit_002_fallback_advances_stuck_worker.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_e009_unit_003_still_stuck_escalates_worker_stuck.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_e011_smoke_001_live_decides_with_convention_loaded.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_e011_unit_001_decider_carries_coach_convention.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_e011_unit_002_provider_seam_carries_same_context.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_e011_unit_003_safety_gate_unchanged_decider_not_consulted.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_l002_smoke_001_locates_live_blocked_agent.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_l002_unit_001_maps_feed_item_to_request.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_l003_smoke_001_live_multi_question_located_whole.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_l003_unit_001_preserves_every_question_as_block.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_l003_unit_002_single_question_still_maps.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_l005_integration_001_source_scopes_via_surface_list.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_l005_smoke_001_live_two_workers_no_cross_decide.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_l005_unit_001_scope_returns_only_own_workspace_items.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_l005_unit_002_cwd_fallback_when_workstream_unknown.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_l007_integration_001_worktree_cwd_item_included.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_l007_integration_002_unresolvable_surface_list_does_not_silently_empty_scope.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_l007_smoke_001_live_worktree_worker_decision_not_swallowed.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/bridge_cmux_feed/tests/test_l007_unit_001_permissive_scope_owns_every_item.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_answer_escalation/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_answer_escalation/live_smoke.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_answer_escalation/src/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_answer_escalation/src/application/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_answer_escalation/src/application/answer_escalation.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_answer_escalation/src/application/surface_escalations.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_answer_escalation/src/domain/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_answer_escalation/src/domain/escalation_surfacing.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_answer_escalation/src/domain/label_resolver.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_answer_escalation/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_answer_escalation/tests/test_c009_smoke_001_live_wrong_label_rejected_no_feed_reply.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_answer_escalation/tests/test_c009_unit_001_non_matching_label_rejected_loudly_no_reply.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_answer_escalation/tests/test_c009_unit_002_partial_prefix_label_rejected_not_silently_accepted.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_answer_escalation/tests/test_e014_integration_001_delivers_once_via_transport.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_answer_escalation/tests/test_e014_smoke_001_live_answer_advances_parked_worker.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_answer_escalation/tests/test_e014_unit_001_permission_reply_verb_and_params.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_answer_escalation/tests/test_e014_unit_002_question_reply_exact_label_selections.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_answer_escalation/tests/test_l008_smoke_001_live_status_surfaces_then_omits_after_answer.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_answer_escalation/tests/test_l008_unit_001_status_lists_unanswered_with_prompt_options.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_answer_escalation/tests/test_l008_unit_002_status_omits_answered_escalations.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/composition.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/live_smoke.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/src/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/src/application/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/src/application/coach_runtime.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/src/application/ports.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/src/domain/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/src/domain/cursor.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/src/domain/managed_daemon.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/src/integration/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/src/integration/daemon_manager.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/src/integration/jsonl_escalation_reader.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/src/log.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/src/presentation/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/src/presentation/attach_worker_daemon.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/src/presentation/coach_runtime_cli.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/tests/_helpers.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/tests/test_e010_smoke_001_live_start_launches_scoped_daemon.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/tests/test_e010_unit_001_start_writes_pidfile_and_spawns_once.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/tests/test_e010_unit_002_second_start_is_a_no_op.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/tests/test_e012_integration_001_spawn_handler_attaches_after_spawn.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/tests/test_e012_smoke_001_coach_dispatch_drives_fixture_through_one_mediated_decision.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/tests/test_e012_unit_001_dispatch_attach_starts_scoped_daemon_once.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/tests/test_e012_unit_002_attach_is_idempotent.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/tests/test_l006_smoke_001_live_wait_emits_induced_escalation.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/tests/test_l006_unit_001_pure_next_after_cursor.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/tests/test_l006_unit_002_wait_emits_one_advances_cursor_no_reemit.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/tests/test_m004_smoke_001_real_spawn_captures_daemon_output_to_log.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/tests/test_m004_unit_001_start_passes_durable_log_path_to_spawner.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/tests/test_m004_unit_002_subprocess_spawner_wires_stdout_stderr_to_log_file.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/tests/test_m005_smoke_001_real_coach_start_managed_daemon_writes_a_verdict.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/tests/test_m005_unit_001_run_cmux_raises_and_loud_logs_on_nonzero_exit.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/tests/test_m005_unit_002_start_launches_daemon_as_headless_cmux_surface.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/tests/test_m005_unit_003_stop_closes_daemon_workspace_and_liveness_from_existence.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/tests/test_r003_smoke_001_live_stop_terminates_managed_daemon.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/tests/test_r003_unit_001_stop_signals_pid_and_clears_pidfile.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/coach_runtime/tests/test_r003_unit_002_daemons_lists_live_and_stale.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/commons/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/commons/cmux_cli.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/commons/jsonl_writer.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/composition.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/live_smoke.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/src/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/src/application/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/src/application/feed_daemon.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/src/application/ports.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/src/domain/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/src/domain/answered_set.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/src/domain/daemon_config.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/src/integration/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/src/integration/jsonl_ledgers.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/src/integration/pidfile_lock.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/src/integration/signal_stop.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/src/presentation/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/src/presentation/feed_daemon_cli.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/tests/_helpers.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/tests/test_c004_integration_001_escalation_ledger_written_no_reply.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/tests/test_c004_smoke_001_live_dangerous_not_auto_answered.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/tests/test_c004_unit_001_dangerous_escalates_not_auto.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/tests/test_c005_integration_001_mixed_document_escalated_durably_no_reply.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/tests/test_c005_smoke_001_live_mixed_document_not_auto_answered.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/tests/test_c005_unit_001_mixed_document_escalates_whole.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/tests/test_c007_integration_001_governance_escalated_durably_no_reply.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/tests/test_c007_smoke_001_live_governance_not_auto_answered.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/tests/test_d002_integration_001_run_forever_refuses_when_locked.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/tests/test_d002_smoke_001_live_second_instance_refused.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/tests/test_d002_unit_001_second_acquire_refused_stale_reclaimed.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/tests/test_e004_smoke_001_live_loop_answers_blocked_agent.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/tests/test_e004_unit_001_tick_answers_a_blocked_item.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/tests/test_e005_integration_001_rehydrate_across_restart.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/tests/test_e005_smoke_001_live_restart_no_double_answer.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/tests/test_e005_unit_001_second_tick_skips_answered.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/tests/test_m003_smoke_001_live_daemon_writes_a_verdict.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/tests/test_m003_unit_001_decide_failure_logged_and_escalated_not_swallowed.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/tests/test_r002_integration_001_sigterm_sets_stop.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/tests/test_r002_smoke_001_live_sigterm_clean_shutdown.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/feed_daemon/tests/test_r002_unit_001_stop_signal_exits_loop_and_releases_lock.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/mediate_decision/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/mediate_decision/composition.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/mediate_decision/src/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/mediate_decision/src/application/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/mediate_decision/src/application/mediate_use_case.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/mediate_decision/src/application/ports.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/mediate_decision/src/domain/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/mediate_decision/src/domain/coach_reply_parser.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/mediate_decision/src/domain/danger_rules.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/mediate_decision/src/domain/governance_rules.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/mediate_decision/src/domain/safety_classifier.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/mediate_decision/src/domain/verdict.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/mediate_decision/src/integration/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/mediate_decision/src/presentation/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/mediate_decision/src/presentation/mediate_cli.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/mediate_decision/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/mediate_decision/tests/_helpers.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/mediate_decision/tests/test_c002_integration_001_gate_before_coach.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/mediate_decision/tests/test_c002_unit_001_danger_patterns_human_required.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/mediate_decision/tests/test_c002_unit_002_unrecognized_destructive_human_required.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/mediate_decision/tests/test_c008_unit_001_bootstrap_cd_prefix_and_repo_graph_auto.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/mediate_decision/tests/test_c008_unit_002_cd_unwrap_preserves_escalate_by_default.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/mediate_decision/tests/test_e001_unit_001_parse_or_error.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/mediate_decision/tests/test_m001_integration_001_timeout_escalates.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/mediate_decision/tests/test_p001_integration_001_coach_request_format.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/mediate_decision/tests/test_y001_unit_001_option_must_be_in_set.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/persistent_orchestrator/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/persistent_orchestrator/src/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/persistent_orchestrator/src/application/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/persistent_orchestrator/src/application/persistent_orchestrator.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/persistent_orchestrator/src/application/ports.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/persistent_orchestrator/src/domain/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/persistent_orchestrator/src/domain/orchestrator_config.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/persistent_orchestrator/src/domain/phase_snapshot.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/persistent_orchestrator/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/persistent_orchestrator/tests/_helpers.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/persistent_orchestrator/tests/test_c010_unit_001_advances_only_on_done_signal.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/persistent_orchestrator/tests/test_m006_unit_001_stall_is_loud_logged_and_exits.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/sense_decision/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/sense_decision/composition.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/sense_decision/src/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/sense_decision/src/application/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/sense_decision/src/application/ports.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/sense_decision/src/application/sense_use_case.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/sense_decision/src/domain/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/sense_decision/src/domain/decision_document.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/sense_decision/src/domain/decision_request.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/sense_decision/src/domain/prompt_parser.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/sense_decision/src/integration/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/sense_decision/src/presentation/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/sense_decision/src/presentation/emit_cli.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/sense_decision/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/sense_decision/tests/test_c001_unit_001_no_false_positive.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/sense_decision/tests/test_d001_integration_001_entry_path_parity.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/sense_decision/tests/test_l001_unit_001_extracts_latest_prompt.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/surface_worker_decisions/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/surface_worker_decisions/live_smoke.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/surface_worker_decisions/src/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/surface_worker_decisions/src/application/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/surface_worker_decisions/src/application/ports.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/surface_worker_decisions/src/application/resolve_surfacing_values.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/surface_worker_decisions/src/domain/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/surface_worker_decisions/src/domain/decision_surfacing_policy.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/surface_worker_decisions/src/domain/surfacing_renderer.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/surface_worker_decisions/src/integration/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/surface_worker_decisions/src/integration/cmux_hook_probe.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/surface_worker_decisions/src/presentation/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/surface_worker_decisions/src/presentation/dispatch_feed_hook_gate.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/surface_worker_decisions/src/presentation/surfacing_values_provider.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/surface_worker_decisions/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/surface_worker_decisions/tests/_helpers.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/surface_worker_decisions/tests/test_c006_integration_001_policy_rejects_forbidden_flag.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/surface_worker_decisions/tests/test_c006_smoke_001_live_bash_decision_surfaces_not_auto_executed.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/surface_worker_decisions/tests/test_c006_unit_001_no_bypass_and_bash_always_surfaced.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/surface_worker_decisions/tests/test_e008_smoke_001_live_spawned_worker_decision_appears_blocked_in_feed.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/surface_worker_decisions/tests/test_e008_unit_001_action_decisions_not_pre_authorized.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/surface_worker_decisions/tests/test_e013_smoke_001_dispatch_worker_decision_publishes_to_feed.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/surface_worker_decisions/tests/test_e013_unit_001_dispatch_launch_carries_no_hook_suppressing_flag.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/surface_worker_decisions/tests/test_e013_unit_002_dispatch_refuses_when_hook_path_inactive.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/surface_worker_decisions/tests/test_l004_integration_001_build_warns_when_hook_path_absent.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/surface_worker_decisions/tests/test_l004_smoke_001_live_worker_has_active_feed_hook.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/surface_worker_decisions/tests/test_l004_unit_001_probe_reports_hook_active_and_inactive.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/surface_worker_decisions/tests/test_y002_integration_001_spawn_adapter_command_realizes_policy.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/surface_worker_decisions/tests/test_y002_smoke_001_live_worker_launch_argv_matches_policy.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/surface_worker_decisions/tests/test_y002_unit_001_rendered_flags_realize_policy_exactly.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/mediate_worker_decisions/surface_worker_decisions/tests/test_y002_unit_002_spec_values_carry_policy_fields.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/observer/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/observer/__main__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/artifact_naming.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/author.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/author_context.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/author_init.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/author_issue.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/author_manifest.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/author_publish.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/author_registry.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/author_schemas.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/author_variant.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/compose.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/confirm_artifact_naming.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/confirm_interlocking.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/confirm_naming.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/plan_context.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/plan_session.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/plan_session_cli.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/_il_author_fixtures.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c001_smoke_001_cli_refuses_bad_input.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c001_smoke_001_plan_cli_refuses_bad_input.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c001_unit_001_plan_guard_rejects_bad_slug_path.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c001_unit_001_spine_rejects_bad_role.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c001_unit_002_spine_rejects_bad_id_and_path.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c002_smoke_001_cli_rejects_bad_node.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c002_smoke_001_plan_cli_refuses_wagon.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c002_unit_001_plan_wagon_rejects_invalid.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c002_unit_001_rejects_bad_role_and_rule_id.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c002_unit_002_rejects_subfolder_and_numbered_term.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c003_smoke_001_cli_rejects_bad_edge.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c003_smoke_001_plan_cli_refuses_feature.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c003_unit_001_plan_feature_rejects_invalid.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c003_unit_001_rejects_bad_type_and_ref.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c003_unit_002_rejects_non_role_prefixed_id.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c004_smoke_001_cli_rejects_bad_scope.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c004_smoke_001_plan_cli_refuses_wmbt.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c004_unit_001_plan_wmbt_rejects_invalid.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c004_unit_001_rejects_bad_id_and_selector_type.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c004_unit_002_rejects_zero_selectors.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c005_smoke_001_cli_rejects_bad_gate.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c005_smoke_001_plan_cli_refuses_train.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c005_unit_001_plan_train_rejects_invalid.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c005_unit_001_rejects_bad_id_trigger_strategy.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c005_unit_002_rejects_bad_action_and_implicit_exit.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c006_smoke_001_cli_manifest_roundtrip.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c006_smoke_001_plan_cli_refuses_acceptance.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c006_unit_001_manifest_validation.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c006_unit_001_plan_acceptance_rejects_invalid.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c006_unit_002_contract_compat.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c006_unit_002_implementation_contract.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c006_unit_003_capability_contracts.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c007_smoke_001_validate_package_cli.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c007_unit_001_realization_gate.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c008_smoke_001_plan_unit_spec_cli.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c008_unit_001_spine_rejects_non_object_spec.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c008_unit_002_plan_unit_spec_boundary.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c009_smoke_001_validate_refuses_orphan.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_c009_unit_001_extension_orphan_detection.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_convention_variant_scaffold_smoke.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_convention_variant_scaffold_unit.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_d001_smoke_001_schemas_load_and_validate.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_d001_unit_001_one_schema_per_kind.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_d001_unit_002_schemas_are_self_consistent.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_d001_unit_003_frozen_vocabularies_loadable_and_closed.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_define_plans_session_smoke.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e001_smoke_001_cli_creates_valid_node.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e001_smoke_001_plan_cli_creates_wagon.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e001_unit_001_flat_per_rule_file.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e001_unit_001_plan_wagon_canonical_home.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e001_unit_002_conflict_free_second_rule.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e002_smoke_001_plan_cli_creates_feature.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e002_smoke_001_two_edges_sorted_deduped.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e002_unit_001_plan_feature_canonical_home.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e002_unit_001_stable_sort_by_source.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e002_unit_002_idempotent_reinsert.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e003_smoke_001_plan_cli_creates_wmbt.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e003_smoke_001_scope_written_and_sorted.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e003_unit_001_plan_wmbt_seeds_smoke.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e003_unit_001_stable_sort_by_scope_id.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e003_unit_002_idempotent_atomic.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e004_smoke_001_cli_writes_valid_gate.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e004_smoke_001_plan_cli_creates_train.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e004_unit_001_plan_train_registry_insert.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e004_unit_001_stable_sort_by_gate_id.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e004_unit_002_carries_schema_required_keys.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e004_unit_002_idempotent_atomic.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e004_unit_003_alternate_path_train_carries_sequence.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e004_unit_004_preserves_caller_participants.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e005_smoke_001_package_composes.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e005_smoke_001_plan_cli_appends_acceptance.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e005_unit_001_composed_view_modes.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e005_unit_001_plan_acceptance_idempotent_append.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e007_integration_001_real_confirm_gate.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e007_smoke_001_cli_authors_interlocking.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e007_smoke_001_cli_writes_validation.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e007_unit_001_emits_validation_and_optional.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e007_unit_001_stamp_composes_digests.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e007_unit_002_missing_train_clean_error.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e007_unit_002_rejects_bad_validation.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e007_unit_003_graph_loader_exposes_validation.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e007_unit_003_idempotent_restamp.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e008_smoke_001_cli_authors_contract.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e008_unit_001_derives_path_id_and_registers.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e008_unit_002_rejects_bad_identity_before_write.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_e008_unit_003_build_author_fn_dispatches_contract.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_k001_integration_001_well_formed_and_not_quarantined.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_k001_smoke_001_authored_artifact_not_rejected.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_k001_unit_001_no_bypass_marker.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_p001_smoke_001_cli_extension_default_and_core_flag.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_p001_unit_001_resolution_order.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_p001_unit_002_extension_default_core_protected.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_p001_unit_003_extension_id_namespace.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_p002_smoke_001_cli_init.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_p002_unit_001_extension_init_scaffolder.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_p002_unit_002_workspace_init_scaffolder.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_plan_session_cli_live.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_plan_session_machine.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_plan_working_context_and_worked_example.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_planner_atomization_smoke.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_r001_integration_001_driver_resorts_dedups_union.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_r001_smoke_001_merge_driver_resolves_concurrent_inserts.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_r001_unit_001_gitattributes_registers_driver.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/commands/tests/test_wmbt_acceptance_schema_honesty.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/acceptance.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/appendix.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/artifact-naming.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/component.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/coverage.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/criteria.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/feature.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/interface.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/issue-body.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.acceptance.abstract-fields-required.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.acceptance.authoring-guidelines.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.acceptance.boundary-kind-vocabulary.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.acceptance.complete.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.acceptance.execution-kind.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.acceptance.extraction-no-inference.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.acceptance.generator-prompts.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.acceptance.given-when-then-structure.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.acceptance.harness-vocabulary.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.acceptance.harness.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.acceptance.hermetic-fake-contract.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.acceptance.id-pattern.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.acceptance.max-per-wmbt.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.acceptance.plane-keywords.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.acceptance.route-construction.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.acceptance.signal-telemetry-naming.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.acceptance.urn-generation.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.appendix.structure.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.artifact-naming.anti-patterns.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.artifact-naming.cardinality-from-aspect.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.artifact-naming.colon-for-hierarchy.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.artifact-naming.contract-file-mapping.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.artifact-naming.depth-guidelines.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.artifact-naming.dot-for-variant.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.artifact-naming.logical-physical-mapping.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.artifact-naming.migration-guide.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.artifact-naming.naming-pattern.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.artifact-naming.path-mirrors-identity.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.artifact-naming.planner-artifacts-use-stable.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.artifact-naming.pluralization.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.artifact-naming.schema-identifier.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.artifact-naming.separator-semantics.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.artifact-naming.theme-first-identity.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.artifact-naming.theme-taxonomy.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.artifact-naming.urn-structure.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.artifact-naming.validation-rules.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.contract.registry-coherence.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.coverage.bidirectional-coverage-between-trains.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.coverage.bidirectional-coverage-between-wagons.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.coverage.coverage-graph.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.coverage.every-wmbt-must-be.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.coverage.every-wmbt-must-have.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.coverage.exception-handling.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.criteria.defaults.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.criteria.harness-templates.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.criteria.metric-mapping.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.criteria.plane-keywords.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.criteria.sequence-routing.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.criteria.shape.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.feature.artifact-seeded-naming.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.feature.estimation.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.feature.feedback-loop-close-the-loop.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.feature.feedback-loop-kind.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.feature.feedback-loop-suppression.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.feature.footprint-scoring.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.feature.grouping-strategy.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.feature.hard-limits.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.feature.name-is-verb-object.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.feature.shape.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.feature.size-max-rule.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.feature.urn-naming.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.feature.validation-rules.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.feature.verb-selection-by-artifact-type.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.feature.wagon-link.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.issue-body.dependency-entries-must-be-classified.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.issue-body.graph-context-required.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.plan.confirm-before-author.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.plan.confirm-binds-an-issue.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.plan.confirm-requires-interlocking-sanity.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.plan.session-lifecycle.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.relationship.no-orphan-nodes.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.steps.sequence.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.theme.archetype-alignment.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.theme.canonical-taxonomy.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.theme.commons-coach-boundary.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.theme.must-be-canonical.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.theme.theme-zero-mandatory.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.theme.urn-namespace-matches.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.acceptance-commit-failures-covered.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.acceptances.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.artifact-flow.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.categories.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.dependencies.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.dispatch-composite-key-exceptional.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.dispatch-map-is-registry.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.family-matches-terminal-contract.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.family.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.initial-cargo-inputs-declared.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.interlocking-does-not-carry-cargo.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.interlocking-entrypoint-shape.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.interlocking-fragment-acceptance-binding.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.interlocking-guard-coverage.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.interlocking-guard-grammar.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.interlocking-home.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.interlocking-message-payload-typed.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.interlocking-payload-contract-body-required.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.interlocking-payload-contract-registered.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.interlocking-projection-equivalence.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.interlocking-route-category-matches-train-id.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.interlocking-route-resolution-deterministic.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.interlocking-structural-residual-explicit.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.interlocking-wmbt-surface-or-residual.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.linearity.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.naming.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.numbering.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.participants.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.production-implementation.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.registry.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.scope.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.sequence.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.terminal-contract.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.theme-alignment.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.theme-orchestrator-urn.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.theme-ranges.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.urn-naming.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.validation-rules.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.train.variation-strategies.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.wagon.artifact-contracts.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.wagon.complexity-model.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.wagon.coupling-complexity.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.wagon.features-format.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.wagon.features.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.wagon.logical-vs-filesystem-naming.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.wagon.name-is-verb-object.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.wagon.no-consume-cycle.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.wagon.produce-consume-artifacts.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.wagon.refinement-extraction.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.wagon.semantic-coherence.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.wagon.separability.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.wagon.slug-dirname-conversion.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.wagon.telemetry-filesystem.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.wagon.urn-naming.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.wagon.urn.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.wmbt.context-clarifier.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.wmbt.dimension-selection.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.wmbt.direction-selection.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.wmbt.filename-pattern.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.wmbt.lens-selection.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.wmbt.must-have-smoke-acceptance.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.wmbt.object-of-control.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.wmbt.shape.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.wmbt.splitting-rules.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.wmbt.statement-template.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.wmbt.step-code-vocabulary.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/nodes/planner.wmbt.urn-naming.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/plan.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/relationship.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/steps.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/theme.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/train.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/wagon.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/conventions/wmbt.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/interlocking/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/interlocking/digest.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/interlocking/discovery.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/interlocking/guards.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/interlocking/loader.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/interlocking/models.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/interlocking/projections.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/interlocking/routing.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/interlocking/sanity.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/interlocking/stamp.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/interlocking/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/interlocking/tests/_fixtures.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/interlocking/tests/test_digest.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/interlocking/tests/test_guards.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/interlocking/tests/test_loader_and_routing.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/interlocking/tests/test_projection.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/interlocking/tests/test_registry_and_backref.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/interlocking/tests/test_schema.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/interlocking/tests/test_validate.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/interlocking/validate.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/interlocking/violations.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/naming.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/schemas/acceptance.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/schemas/appendix.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/schemas/author/convention-node.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/schemas/author/gate.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/schemas/author/issue.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/schemas/author/relationship.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/schemas/author/scope.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/schemas/binding-lock.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/schemas/component.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/schemas/feature.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/schemas/registry-index.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/schemas/substrate-lock.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/schemas/substrate.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/schemas/train-interlocking-registry.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/schemas/train-interlocking.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/schemas/train.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/schemas/wagon.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/schemas/wmbt.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/validators/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/validators/_theme_taxonomy.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/validators/_wagon_cohesion.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/validators/conftest.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/validators/test_artifact_path_mirrors_identity.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/validators/test_artifact_theme_first_identity.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/validators/test_confirm_interlocking_sanity.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/validators/test_contract_registry_coherence.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/validators/test_custom_themes.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/validators/test_custom_themes_schema.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/validators/test_feature_name_is_verb_object.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/validators/test_issue_body_has_graph_context.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/validators/test_issue_deps_have_classification_tags.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/validators/test_plan_confirm_before_author.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/validators/test_plan_confirm_binds_issue.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/validators/test_plan_cross_refs.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/validators/test_plan_uniqueness.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/validators/test_plan_wagons.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/validators/test_sequence_diagram_sanity.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/validators/test_theme_archetype_alignment.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/validators/test_theme_must_be_canonical.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/validators/test_wagon_name_is_verb_object.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/validators/test_wagon_urn_chain.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/validators/test_wmbt_smoke_acceptance_rule_registered.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/validators/test_wmbt_vocabulary.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/validators/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/validators/tests/test_check_graph_context_unit.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/validators/tests/test_e027_smoke_001_audit_covers_all_current_smoke_acceptances.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/validators/tests/test_e027_unit_001_audit_doc_exists_with_required_structure.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/validators/tests/test_e028_unit_001_convention_has_real_entry_point_rule.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/validators/tests/test_e028_unit_002_convention_has_producer_only_rule.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/validators/tests/test_e028_unit_003_convention_has_handoff_coverage_rule.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/validators/tests/test_m002_unit_001_smoke_audit_has_future_tracking_section.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/planner/validators/tests/test_wagon_cohesion_metric.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/runners/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/runners/metric_runner.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/runners/metrics/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/runners/metrics/hardcoded_theme_map_literal_count.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/runners/security_runner.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/runners/test_metric_runner.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/runners/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/runners/tests/test_hardcoded_theme_map_literal_count.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/runners/tests/test_metric_runner_unit.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/runners/tests/test_security_runner_unit.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/runners/tests/test_security_validation.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/runtime/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/runtime/agent_control/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/runtime/agent_control/cmux_launch.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/runtime/agent_control/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/runtime/agent_control/tests/conftest.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/runtime/agent_control/tests/test_e031_unit_003_cmux_launch_argv_carries_scoped_bash_allowlist.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/runtime/agent_control/tests/test_e043_unit_001_cmux_native_launch_seed.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/runtime/agent_control/tests/test_forbidden_launch_flag_guard.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/runtime/elicit.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/runtime/interlocking/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/runtime/interlocking/runner.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/runtime/interlocking/station_master.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/runtime/interlocking/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/runtime/interlocking/tests/test_runner_contract.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/runtime/multiplexer.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/runtime/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/runtime/tests/test_elicit_contract.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/runtime/worktree.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/cli.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/db.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/hub.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/manifest_import.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/manifest_projection.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/migrations.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/paths.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/projections.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/providers.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/store.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/sync_cli.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/sync_engine.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_build_version_hook.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_control_root_scratch.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_db.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_e003_integration_001_worktree_only_rows_and_refs_carried_over.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_e003_smoke_001_live_consolidation_yields_single_store.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_e003_unit_001_merge_dedupes_work_items_by_external_ref.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_e003_unit_002_per_worktree_dbs_deleted_after_merge.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_e004_smoke_001_write_from_worktree_with_env_lands_in_shared_store.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_e004_unit_001_override_at_child_worktree_resolves_to_project_root.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_e004_unit_002_non_worktree_override_honored_verbatim.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_e005_smoke_001_live_extension_install_lands_in_control_root.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_e005_unit_001_substrate_project_root_resolves_to_control_root.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_e006_smoke_001_live_consolidation_yields_single_operational_atdd.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_e006_unit_001_fold_per_worktree_extensions_and_remove_them.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_e006_unit_002_control_root_extension_wins_runtime_left_scratch.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_e058_integration_001_reconcile_then_bump_yields_real_version_and_pending_drain.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_e058_smoke_001_publish_workflow_resolves_real_version_and_invokes_drain_double_gated.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_e058_unit_001_change_class_derives_from_conventional_commit_subject.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_e058_unit_002_set_version_reconciles_current_without_emitting_decision.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_e059_integration_001_reconcile_bump_over_real_merge_message_yields_3_152_0_not_4_0_0.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_e059_smoke_001_publish_job_configures_git_identity_so_annotated_tag_creation_succeeds.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_e059_unit_001_breaking_change_detected_only_as_a_conventional_commit_footer.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_hub.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_m002_smoke_001_doctor_flags_and_clears_rogue_store.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_m002_unit_001_layout_check_exits_nonzero_and_names_rogue_store.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_m002_unit_002_invariant_asserts_behavioral_exit_not_just_wiring.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_m003_smoke_001_layout_check_flags_rogue_extensions_live.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_m003_unit_001_guard_flags_per_worktree_extensions_not_scratch.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_manifest_import.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_manifest_projection.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_migration_release_kind.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_paths.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_providers.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_reconcile_release_base_integration_001_resolved_base_bumps_above_pypi.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_reconcile_release_base_smoke_001_cli_and_publish_yml_wired.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_reconcile_release_base_unit_001_semver_max_and_pypi_fallback.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_shared_store_layout.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_state_cli_live.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_store.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_sync_engine.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_version.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_version_cli_live.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_version_live_smoke.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_work_item_reader.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_work_item_reader_all_items.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_work_item_reader_cli_accessor.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/tests/test_work_item_reader_cold_start_seed.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/version.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/work_item_reader.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/state/work_item_writer.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/admission.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/binding/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/binding/binder.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/binding/commands.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/binding/composer.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/binding/lock_loader.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/binding/plan.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/binding/resolver.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/binding/router.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/binding/schemas.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/binding/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/binding/tests/conftest.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/binding/tests/fixtures/crashing_impl/test_gate.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/binding/tests/fixtures/failing_impl/test_gate.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/binding/tests/fixtures/passing_impl/test_gate.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/binding/tests/fixtures/provider/adapter/run.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/binding/tests/test_c001_smoke_001_tamper_refused.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/binding/tests/test_c001_unit_001_digest_mismatch_refused.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/binding/tests/test_c002_smoke_001_real_contract_compatible.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/binding/tests/test_c002_unit_001_contract_mismatch_refused.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/binding/tests/test_d001_smoke_001_schema_shipped.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/binding/tests/test_d001_unit_001_binding_plan_schema.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/binding/tests/test_e001_smoke_001_real_pytest_spawn.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/binding/tests/test_e001_unit_001_spawn_captures_violations.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/binding/tests/test_e002_smoke_001_real_bound_gate_blocks.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/binding/tests/test_e002_unit_001_shadow_and_gate.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/binding/tests/test_l001_smoke_001_load_real_substrate.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/binding/tests/test_l001_unit_001_load_enabled_only.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/binding/tests/test_m001_smoke_001_real_crash_falls_back.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/binding/tests/test_m001_unit_001_fail_safe_to_legacy.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/commands.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/installer.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/registry.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/resolver.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/schemas.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/tests/conftest.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/tests/fixtures/poisoned_extension/implementations/poison/poison.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/tests/test_c001_smoke_001_add_does_not_execute.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/tests/test_c001_unit_001_no_runtime_execution.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/tests/test_c002_smoke_001_ambiguous_add_refused.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/tests/test_c002_unit_001_ambiguous_alias_refusal.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/tests/test_c003_smoke_001_add_validates_cli.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/tests/test_c003_unit_001_admission_validates.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/tests/test_c004_smoke_001_remove_cli.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/tests/test_c004_unit_001_remove_dependency_refusal.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/tests/test_c005_smoke_001_flat_verb_deprecation_warns.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/tests/test_c006_smoke_001_readme_documents_grouped.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/tests/test_d001_smoke_001_schemas_shipped.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/tests/test_d001_unit_001_substrate_schemas.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/tests/test_e001_smoke_001_add_list_roundtrip.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/tests/test_e001_unit_001_install_and_lock.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/tests/test_e002_smoke_001_grouped_add_list_parity.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/tests/test_l001_smoke_001_search_cli.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/tests/test_l001_unit_001_registry_search.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/substrate/tests/test_l002_smoke_001_substrate_help_lists_five.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/conventions/acceptance-measurability.recipe.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/conventions/acceptance-phase.recipe.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/conventions/acceptance-rule-block.recipe.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/conventions/acceptance-test-headers.recipe.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/conventions/acceptance-violation.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/conventions/artifact.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/conventions/contract.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/conventions/coverage.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/conventions/filename.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/conventions/hermetic-integration-contract.recipe.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/conventions/hermetic-live-smoke-pairing.recipe.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/conventions/live-smoke-evidence.recipe.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/conventions/live-smoke-execution.recipe.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/conventions/metric-implementation.recipe.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/conventions/migration.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/conventions/red.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/conventions/routing.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/conventions/security-acceptance-binding.recipe.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/conventions/security.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/conventions/smoke.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/conventions/telemetry.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/conventions/test-isolation.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/conventions/train.convention.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/schemas/a11y.tmpl.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/schemas/artifact.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/schemas/contract.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/schemas/contract.tmpl.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/schemas/db.tmpl.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/schemas/e2e.tmpl.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/schemas/edge_function.tmpl.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/schemas/event.tmpl.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/schemas/http.tmpl.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/schemas/job.tmpl.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/schemas/load.tmpl.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/schemas/locale_manifest.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/schemas/metric.tmpl.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/schemas/pack.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/schemas/realtime.tmpl.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/schemas/rls.tmpl.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/schemas/script.tmpl.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/schemas/sec.tmpl.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/schemas/storage.tmpl.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/schemas/telemetry.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/schemas/telemetry_tracking_manifest.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/schemas/test_filename.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/schemas/test_intent.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/schemas/train-render-harness-result.schema.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/schemas/unit.tmpl.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/schemas/visual.tmpl.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/schemas/ws.tmpl.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/substrate/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/substrate/plugin.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/substrate/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/substrate/tests/test_plugin_integration.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/substrate/tests/test_plugin_unit.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/substrate/tests/test_security_plugin_integration.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/utils/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/utils/filename.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/_acceptance_walker.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/_no_polluting_patterns.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/cleanup_duplicate_headers.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/cleanup_duplicate_headers_v2.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/conftest.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/coverage_gap_report.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/fix_dual_ac_references.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/fixtures/phase_dispatch/mixed_phases.yaml +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/fixtures/train_renders_content/fail_empty/harness_output.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/fixtures/train_renders_content/fail_stub/harness_output.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/fixtures/train_renders_content/harness_error/harness_output.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/fixtures/train_renders_content/pass/harness_output.json +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/remove_duplicate_lines.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_acceptance_disposition.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_acceptance_measurable.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_acceptance_phase.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_acceptance_urn_filename_mapping.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_acceptance_urn_separator.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_artifact_naming_category.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_contract_schema_compliance.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_contract_security.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_contracts_structure.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_coverage_adequacy.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_dual_ac_reference.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_fixture_validity.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_hermetic_integration_contract.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_hermetic_live_smoke_pairing.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_isolation.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_live_smoke_execution.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_locale_coverage.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_metric_implementation.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_migration_coverage.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_migration_criteria.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_migration_generation.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_no_polluting_patterns.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_presentation_has_behavioral_test.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_presentation_smoke_coverage.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_python_test_naming.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_red_layer_validation.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_red_python_layer_structure.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_red_supabase_layer_structure.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_repo_validator_binding.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_security_ref_binding.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_smoke_coverage.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_smoke_no_collaborator_substitution.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_telemetry_structure.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_train_backend_e2e.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_train_completeness.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_train_e2e_existence.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_train_frontend_e2e.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_train_frontend_python.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_train_renders_content.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_train_route_smoke_coverage.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_typescript_test_naming.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_typescript_test_structure.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/test_urn_spec_v3.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/tests/test_acceptance_violation_fixtures.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/tests/test_hermetic_integration_fixtures.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/tests/test_live_smoke_constant_evidence_fixtures.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/tests/test_live_smoke_execution_fixtures.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/tests/test_owning_issue_phase_store_only.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/tests/test_phase_aware_validator_binding.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tester/validators/tests/test_smoke_no_collaborator_substitution_helpers.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tests/test_Y005_smoke_upgrade_messaging_install_method_aware.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tests/test_Y005_unit_upgrade_messaging_install_method_aware.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/tests/test_version_check.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/train/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/train/events.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/train/issue_runner.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/train/persistence.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/train/resume_cli.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/train/runner_iface.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/train/runners/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/train/runners/jsonl.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/train/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/train/tests/test_persistence_get_issue_store.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/train/types.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/train/wave_runner.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/_support/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/_support/assertions.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/_support/convention_loader.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/_support/evaluators.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/_support/graph_loader.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/_support/node_index.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/_support/package_index.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/_support/report_adapter.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/_support/rule_index.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/_support/sentinels.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/_support/template_contract.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/acyclicity/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/acyclicity/archetype.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/acyclicity/fixtures.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/binding/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/binding/archetype.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/binding/fixtures.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/binding/test_rule_validator_binding.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/binding/test_validator_binding_bidirectional.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/boundary/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/boundary/archetype.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/boundary/fixtures.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/coherence/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/coherence/archetype.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/coherence/fixtures.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/coherence/test_contract_telemetry_traceability.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/coherence/test_cross_language_consistency.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/coherence/test_green_cross_stack_layer_names.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/coherence/test_review_report_severity_matches_registry.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/coherence/test_rule_id_registry_coherence.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/coherence/test_theme_urn_namespace_matches.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/composition/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/composition/archetype.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/composition/fixtures.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/coverage/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/coverage/archetype.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/coverage/fixtures.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/coverage/test_composition_root_completeness.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/coverage/test_coverage_adequacy.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/coverage/test_dead_code_python.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/coverage/test_dead_code_typescript.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/coverage/test_design_hierarchy_coverage.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/coverage/test_migration_coverage.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/coverage/test_presentation_ratchet_requires_smoke.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/coverage/test_smoke_coverage.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/coverage/test_station_master_composition.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/coverage/test_train_completeness.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/coverage/test_train_e2e_existence.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/coverage/test_train_registry_completeness.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/coverage/test_train_route_smoke_coverage.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/coverage/test_wheel_fixture_completeness.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/grammar/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/grammar/archetype.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/grammar/fixtures.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/grammar/test_acceptance_urn_grammar.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/grammar/test_artifact_naming_grammar.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/grammar/test_contracts_path_grammar.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/grammar/test_init_file_urn_grammar.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/grammar/test_python_test_naming.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/grammar/test_red_layer_structure.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/grammar/test_red_python_layer_structure.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/grammar/test_red_supabase_layer_structure.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/grammar/test_telemetry_naming_grammar.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/grammar/test_theme_must_be_canonical.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/grammar/test_train_backend_e2e_naming.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/grammar/test_train_urn_grammar.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/grammar/test_typescript_test_naming.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/grammar/test_urn_header_spec_v3.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/grammar/test_wmbt_vocabulary.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/policy/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/policy/archetype.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/policy/fixtures.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/policy/test_acceptance_disposition_absent.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/policy/test_live_smoke_no_self_skip.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/policy/test_no_polluting_patterns.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/policy/test_smoke_no_collaborator_substitution.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/presence/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/presence/archetype.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/presence/fixtures.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/presence/test_acceptance_measurable.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/presence/test_acceptance_phase_declared.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/presence/test_claude_md_references_emergency_doc.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/presence/test_claude_md_retains_lifecycle_pointers.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/presence/test_contract_security_requirements.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/presence/test_dual_ac_reference.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/presence/test_frontend_composition_root.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/presence/test_green_layer_dependency_rules.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/presence/test_green_python_four_layer.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/presence/test_green_supabase_four_layer.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/presence/test_hermetic_fake_contract_declared.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/presence/test_hermetic_live_smoke_pairing.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/presence/test_train_infrastructure_present.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/presence/test_typescript_test_structure.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/presence/test_wagon_trains_export_shape.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/resolution/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/resolution/archetype.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/resolution/fixtures.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/resolution/test_metric_implementation_resolves.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/resolution/test_plan_cross_refs.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/resolution/test_route_train_wagon_chain.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/resolution/test_security_ref_resolution.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/resolution/test_wagon_urn_chain.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/schema/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/schema/archetype.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/schema/fixtures.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/schema/test_contract_schema_conformance.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/schema/test_fixture_schema_conformance.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/schema/test_plan_wagons.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/schema/test_train_yaml_render_metadata.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/sizing/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/sizing/archetype.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/sizing/fixtures.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/sizing/test_claude_md_line_budget.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/sizing/test_complexity_python.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/sizing/test_complexity_typescript.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/sizing/test_hook_size_limit.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/sizing/test_quality_metrics_python.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/sizing/test_quality_metrics_typescript.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/sizing/test_query_count_nplus1.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/tests/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/tests/conftest.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/tests/test_e001_registry_shape.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/tests/test_e002_registry_archetype_roundtrip.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/tests/test_e003_template_contract_fields.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/tests/test_e004_family_folder_files.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/tests/test_e005_legacy_validators_unmoved.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/tests/test_e011_variant_metadata.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/tests/test_e013_no_legacy_import.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/tests/test_e014_parallel_suite.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/tests/test_e015_no_persona_folder_variant.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/tests/test_e018_conventions_authoritative.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/tests/test_foundation_official_path.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/uniqueness/__init__.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/uniqueness/archetype.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/uniqueness/fixtures.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/uniqueness/test_plan_uniqueness.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/conventions/uniqueness/test_rule_id_uniqueness.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/validators/emit.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd/version_check.py +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd.egg-info/dependency_links.txt +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd.egg-info/entry_points.txt +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd.egg-info/requires.txt +0 -0
- {atdd-4.2.0 → atdd-4.2.2}/src/atdd.egg-info/top_level.txt +0 -0
atdd-4.2.2/PKG-INFO
ADDED
|
@@ -0,0 +1,750 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: atdd
|
|
3
|
+
Version: 4.2.2
|
|
4
|
+
Summary: ATDD Platform - Acceptance Test Driven Development toolkit
|
|
5
|
+
License: MIT
|
|
6
|
+
Project-URL: Homepage, https://github.com/afokapu/atdd
|
|
7
|
+
Project-URL: Repository, https://github.com/afokapu/atdd
|
|
8
|
+
Project-URL: Issues, https://github.com/afokapu/atdd/issues
|
|
9
|
+
Project-URL: Changelog, https://github.com/afokapu/atdd/releases
|
|
10
|
+
Requires-Python: >=3.10
|
|
11
|
+
Description-Content-Type: text/markdown
|
|
12
|
+
License-File: LICENSE
|
|
13
|
+
Requires-Dist: pyyaml
|
|
14
|
+
Requires-Dist: pytest>=7.0
|
|
15
|
+
Requires-Dist: pytest-xdist
|
|
16
|
+
Requires-Dist: pytest-github-actions-annotate-failures
|
|
17
|
+
Requires-Dist: jsonschema
|
|
18
|
+
Requires-Dist: pytest-html
|
|
19
|
+
Requires-Dist: radon>=5.0
|
|
20
|
+
Requires-Dist: tree-sitter>=0.23
|
|
21
|
+
Requires-Dist: tree-sitter-typescript>=0.23
|
|
22
|
+
Provides-Extra: dev
|
|
23
|
+
Provides-Extra: viz
|
|
24
|
+
Requires-Dist: streamlit; extra == "viz"
|
|
25
|
+
Requires-Dist: st-link-analysis; extra == "viz"
|
|
26
|
+
Dynamic: license-file
|
|
27
|
+
|
|
28
|
+
# ATDD
|
|
29
|
+
|
|
30
|
+
[](https://pypi.org/project/atdd/) [](https://github.com/afokapu/atdd/actions) [](#license)
|
|
31
|
+
|
|
32
|
+
> **Agentic Train Driven Development** — a toolkit for turning intent into evidence-gated trains of work, then using agents to plan, test, implement, validate, review, and merge one safe step at a time.
|
|
33
|
+
|
|
34
|
+
ATDD gives AI agents a track. Instead of asking an agent to “build the feature,” ATDD turns the work into a train: a route, stops, evidence gates, validation rules, and clear handoffs between planning, testing, implementation, smoke verification, refactor, and merge.
|
|
35
|
+
|
|
36
|
+
```mermaid
|
|
37
|
+
flowchart LR
|
|
38
|
+
A[Intent / Job to be Done] --> P[atdd plan<br/>decomposition session]
|
|
39
|
+
P --> T[Train<br/>wagon + WMBTs + acceptance]
|
|
40
|
+
T --> I[atdd issue<br/>register approved work]
|
|
41
|
+
I --> C[atdd coach<br/>supervise execution]
|
|
42
|
+
C --> R[RED Tests]
|
|
43
|
+
R --> G[GREEN Code]
|
|
44
|
+
G --> S[SMOKE Evidence]
|
|
45
|
+
S --> F[REFACTOR]
|
|
46
|
+
F --> M[COMPLETE → MERGED]
|
|
47
|
+
F -.->|feedback| T
|
|
48
|
+
classDef phase fill:#1f2937,color:#fff,stroke:#3b82f6,stroke-width:2px
|
|
49
|
+
class P,T,I,C,R,G,S,F,M phase
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**Jump to:** [What ATDD means](#what-atdd-means) · [Quick Start](#quick-start) · [Core concepts](#core-concepts) · [Consumer repos](#consumer-repos) · [Commands](#commands) · [Lifecycle](#the-atdd-lifecycle) · [Architecture direction](#architecture-direction) · [Validators](#validators) · [Installation](#installation)
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## What ATDD means
|
|
57
|
+
|
|
58
|
+
ATDD now means **Agentic Train Driven Development**.
|
|
59
|
+
|
|
60
|
+
For a layperson:
|
|
61
|
+
|
|
62
|
+
- **Agentic** means AI agents do real work, but inside clear boundaries.
|
|
63
|
+
- **Train** means the work has a route: phases, dependencies, evidence, gates, and a definition of done.
|
|
64
|
+
- **Development** means the route ends in shipped, reviewed, validated changes.
|
|
65
|
+
|
|
66
|
+
A train is not just a list of tasks. It is the structured path from intent to merged work.
|
|
67
|
+
|
|
68
|
+
| Train metaphor | ATDD meaning |
|
|
69
|
+
|---|---|
|
|
70
|
+
| Route | planned path from intent to implementation |
|
|
71
|
+
| Stations | phases such as PLANNED, RED, GREEN, SMOKE, REFACTOR |
|
|
72
|
+
| Cargo | the feature, fix, refactor, or planning artifact being delivered |
|
|
73
|
+
| Tickets | WMBTs, acceptance claims, rule IDs, and evidence requirements |
|
|
74
|
+
| Signals | validators, CI, review verdicts, smoke evidence |
|
|
75
|
+
| Conductor | Coach / operator supervision |
|
|
76
|
+
| Train runner | the execution engine that drives the train over time |
|
|
77
|
+
| Logbook | events.jsonl, decisions.jsonl, validator reports |
|
|
78
|
+
|
|
79
|
+
In short:
|
|
80
|
+
|
|
81
|
+
> ATDD turns ambiguous work into an evidence-gated train, then lets agents move through that train safely.
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Why ATDD
|
|
86
|
+
|
|
87
|
+
| You want to… | ATDD gives you… |
|
|
88
|
+
|---|---|
|
|
89
|
+
| stop agents skipping instructions | `atdd gate` — coercive mandatory tool-output bootstrap |
|
|
90
|
+
| turn vague intent into executable structure | `atdd plan` — a gated decomposition session (Define→Locate→Prepare→Confirm→author) |
|
|
91
|
+
| keep planning, testing, and code in lock-step | a deterministic lifecycle: `INIT → PLANNED → RED → GREEN → SMOKE → REFACTOR → COMPLETE → MERGED` |
|
|
92
|
+
| run multiple agents without merge chaos | `atdd coach` + worktrees + per-issue runtime isolation |
|
|
93
|
+
| recover from interrupted work | JSONL event logs and resumable train runs *(decomposition target)* |
|
|
94
|
+
| catch regressions before review | validators + per-rule dispositions + rule-ID binding |
|
|
95
|
+
| sync rules across Claude, Codex, Gemini, GLM | `atdd sync` — managed blocks that preserve user content |
|
|
96
|
+
| treat issues, PRs, plan artifacts, and releases as one system | GitHub Issues + Project v2 fields + manifest + release gates |
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Quick Start
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
pipx install atdd # Install, isolated from project Python
|
|
104
|
+
atdd init # Bootstrap .atdd/ + GitHub infrastructure
|
|
105
|
+
atdd gate # Start every agent session with this
|
|
106
|
+
|
|
107
|
+
# Current registration/execution flow
|
|
108
|
+
atdd issue my-new-feature # Create parent issue + WMBT sub-issues
|
|
109
|
+
atdd branch <N> # Create worktree + draft PR
|
|
110
|
+
atdd coach <N> # Drive issue through the lifecycle
|
|
111
|
+
atdd validate # Run validators
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Planning-first flow via the gated `atdd plan` session:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
atdd plan start --id my-plan --main-job "What job is to be done?"
|
|
118
|
+
atdd plan advance --id my-plan --step locate
|
|
119
|
+
atdd plan source --id my-plan "docs/spec.md + repo context"
|
|
120
|
+
atdd plan advance --id my-plan --step prepare
|
|
121
|
+
atdd plan unit --id my-plan --kind wagon --ref my-wagon --spec '{...}'
|
|
122
|
+
atdd plan advance --id my-plan --step confirm
|
|
123
|
+
atdd plan decide --id my-plan --ref my-wagon --verdict keep
|
|
124
|
+
atdd plan confirm --id my-plan # confirm-before-author boundary
|
|
125
|
+
atdd plan author --id my-plan # system authors each kept unit via `atdd author`
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
> **Mandatory:** issue and PR creation go through `atdd`. Direct `gh issue create` / `gh pr create` bypass manifest registration, WMBT sub-issues, Project v2 fields, and branch/merge guards.
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## Core concepts
|
|
133
|
+
|
|
134
|
+
### Plan
|
|
135
|
+
|
|
136
|
+
`atdd plan` is the gated decomposition session: a durable, on-disk state machine
|
|
137
|
+
that runs **Define → Locate → Prepare → Confirm → author** (the LLM/agent runs the
|
|
138
|
+
dialogue within each step; `atdd plan` holds the gated session state and enforces
|
|
139
|
+
the transitions).
|
|
140
|
+
|
|
141
|
+
It answers:
|
|
142
|
+
|
|
143
|
+
> Given this main job, these sources, and current repo context, what decomposition should we author?
|
|
144
|
+
|
|
145
|
+
The gates:
|
|
146
|
+
|
|
147
|
+
- **Define** — establish the JTBD main job (no advance without it);
|
|
148
|
+
- **Locate** — capture sources and current `plan/` state;
|
|
149
|
+
- **Prepare** — draft candidate units, each carrying a valid `atdd author` spec;
|
|
150
|
+
- **Confirm** — operator keep/pivot/kill locks the decomposition. This is the
|
|
151
|
+
**confirm-before-author** boundary: nothing is written before confirm;
|
|
152
|
+
- **author** — on confirm, the system invokes `atdd author <kind>` per locked unit,
|
|
153
|
+
landing schema-valid plan artifacts deterministically.
|
|
154
|
+
|
|
155
|
+
### Train
|
|
156
|
+
|
|
157
|
+
A train is the durable domain route for work.
|
|
158
|
+
|
|
159
|
+
It contains:
|
|
160
|
+
|
|
161
|
+
- wagon and feature scope;
|
|
162
|
+
- WMBTs and acceptance claims;
|
|
163
|
+
- phase evidence requirements;
|
|
164
|
+
- dependencies and ordering;
|
|
165
|
+
- validator expectations;
|
|
166
|
+
- the path from planning to merge.
|
|
167
|
+
|
|
168
|
+
The train is **what should happen**.
|
|
169
|
+
|
|
170
|
+
### Coach
|
|
171
|
+
|
|
172
|
+
Coach is the supervision and policy surface.
|
|
173
|
+
|
|
174
|
+
It decides whether the train may advance, whether evidence is sufficient, whether a run should block, and whether the operator must intervene.
|
|
175
|
+
|
|
176
|
+
Coach should not be a giant runtime process. In the decomposition target, Coach-core becomes pure policy.
|
|
177
|
+
|
|
178
|
+
### TrainRunner
|
|
179
|
+
|
|
180
|
+
The TrainRunner is the execution engine.
|
|
181
|
+
|
|
182
|
+
It drives a train over time:
|
|
183
|
+
|
|
184
|
+
- creates a run;
|
|
185
|
+
- materializes evidence;
|
|
186
|
+
- asks Coach-core for a decision;
|
|
187
|
+
- dispatches worker agents;
|
|
188
|
+
- records events;
|
|
189
|
+
- resumes after interruption;
|
|
190
|
+
- handles waves and concurrency.
|
|
191
|
+
|
|
192
|
+
The first runner is local and JSONL-backed. Temporal or LangGraph are optional future backends behind the same seam, not prerequisites.
|
|
193
|
+
|
|
194
|
+
### Runtime
|
|
195
|
+
|
|
196
|
+
Runtime is where execution happens:
|
|
197
|
+
|
|
198
|
+
- worktrees;
|
|
199
|
+
- agent control;
|
|
200
|
+
- prompt delivery;
|
|
201
|
+
- correction inboxes;
|
|
202
|
+
- output logs;
|
|
203
|
+
- optional multiplexer views.
|
|
204
|
+
|
|
205
|
+
The multiplexer is for observability, not control. Agent control should go through structured channels such as cli-return.
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## Consumer repos
|
|
210
|
+
|
|
211
|
+
A consumer repo should experience ATDD as a stable command surface, not as internal orchestration machinery.
|
|
212
|
+
|
|
213
|
+
Typical structure after `atdd init`:
|
|
214
|
+
|
|
215
|
+
```text
|
|
216
|
+
your-project/
|
|
217
|
+
├── your-project.code-workspace
|
|
218
|
+
├── main/
|
|
219
|
+
├── feat-some-feature/
|
|
220
|
+
├── CLAUDE.md
|
|
221
|
+
├── AGENTS.md
|
|
222
|
+
└── .atdd/
|
|
223
|
+
├── manifest.yaml
|
|
224
|
+
├── config.yaml
|
|
225
|
+
├── hooks/
|
|
226
|
+
└── runtime/ # train-run events, agent logs, status snapshots
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
Typical consumer flow:
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
atdd gate
|
|
233
|
+
atdd plan start --id my-feature --main-job "..." # gated decomposition session
|
|
234
|
+
atdd issue my-feature --type planning # register approved planning work
|
|
235
|
+
atdd branch <N>
|
|
236
|
+
atdd coach <N>
|
|
237
|
+
atdd observer
|
|
238
|
+
atdd validate
|
|
239
|
+
atdd pr <N>
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
For the consumer, the benefit is simple:
|
|
243
|
+
|
|
244
|
+
- safer worktrees;
|
|
245
|
+
- less fragile agent launching;
|
|
246
|
+
- clearer planning before issue creation;
|
|
247
|
+
- resumable runs;
|
|
248
|
+
- event logs for debugging;
|
|
249
|
+
- GitHub issue / PR / Project v2 sync;
|
|
250
|
+
- evidence-based phase advancement.
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## The ATDD Lifecycle
|
|
255
|
+
|
|
256
|
+
```mermaid
|
|
257
|
+
stateDiagram-v2
|
|
258
|
+
[*] --> INIT
|
|
259
|
+
INIT --> PLANNED: planner persona
|
|
260
|
+
PLANNED --> RED: tester persona
|
|
261
|
+
RED --> GREEN: coder persona
|
|
262
|
+
GREEN --> SMOKE: tester persona
|
|
263
|
+
SMOKE --> REFACTOR: coder persona
|
|
264
|
+
REFACTOR --> COMPLETE: reviewer persona
|
|
265
|
+
COMPLETE --> MERGED: merge gate
|
|
266
|
+
PLANNED --> BLOCKED
|
|
267
|
+
RED --> BLOCKED
|
|
268
|
+
GREEN --> BLOCKED
|
|
269
|
+
SMOKE --> BLOCKED
|
|
270
|
+
REFACTOR --> BLOCKED
|
|
271
|
+
BLOCKED --> INIT: resume / repair
|
|
272
|
+
BLOCKED --> OBSOLETE
|
|
273
|
+
MERGED --> [*]
|
|
274
|
+
OBSOLETE --> [*]
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
| State | Persona | Deliverable | Validator phase |
|
|
278
|
+
|---|---|---|---|
|
|
279
|
+
| `INIT` | planner | wagon + WMBTs + acceptance | `atdd validate planner` |
|
|
280
|
+
| `PLANNED` | tester | RED tests from acceptance | `atdd validate tester` |
|
|
281
|
+
| `RED` | coder | GREEN implementation | `atdd validate coder` |
|
|
282
|
+
| `GREEN` | tester | SMOKE evidence against real wiring | `atdd validate tester` |
|
|
283
|
+
| `SMOKE` | coder | refactor to intended architecture | `atdd validate coder` |
|
|
284
|
+
| `REFACTOR` | reviewer | review verdict / merge readiness | `atdd validate coach` |
|
|
285
|
+
| `COMPLETE` | — | PR open + CI clean | gate validators |
|
|
286
|
+
| `MERGED` | — | release tag + cleanup | publish workflow |
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
## Commands
|
|
291
|
+
|
|
292
|
+
### Initialization
|
|
293
|
+
|
|
294
|
+
```bash
|
|
295
|
+
atdd init # Bootstrap .atdd/ + GitHub labels + Project v2 fields
|
|
296
|
+
atdd init --force # Reinitialize managed blocks
|
|
297
|
+
atdd init --worktree-layout # Migrate to flat-sibling worktree layout
|
|
298
|
+
atdd init --export-schemas # Export convention schemas to consumer repo
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
### Planning
|
|
302
|
+
|
|
303
|
+
```bash
|
|
304
|
+
atdd plan start --id <id> --main-job "<job to be done>"
|
|
305
|
+
atdd plan advance --id <id> --step locate|prepare|confirm
|
|
306
|
+
atdd plan source/unit/decide --id <id> ...
|
|
307
|
+
atdd plan confirm --id <id> && atdd plan author --id <id>
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
`atdd plan` is a read-only planning surface. It should render a deterministic brief and propose a train. It should not mutate GitHub, git, the manifest, or `plan/` artifacts.
|
|
311
|
+
|
|
312
|
+
### Substrate authoring (`atdd author`)
|
|
313
|
+
|
|
314
|
+
Creates schema-valid substrate artifacts **by construction** — the malformed case is impossible because every command validates role/id/path on a shared spine and the artifact against its frozen schema before any write. **Extension-first:** by default it writes into a self-contained extension package; `--core` is required (and protected) to touch the ATDD core protocol.
|
|
315
|
+
|
|
316
|
+
```bash
|
|
317
|
+
# extension-first (default) — writes into extensions/<publisher>.extension.<name>/
|
|
318
|
+
atdd author convention-node --extension acme.extension.component-header --rule-id coder.source.header-required --statement "..." --term "marker=..."
|
|
319
|
+
atdd author relationship --extension acme.extension.component-header --source coder.source.a --type enables --target coder.source.b
|
|
320
|
+
atdd author scope --extension acme.extension.component-header --scope-id scope.source.python --artifact-kind source_file \
|
|
321
|
+
--selector-id selector.source.python.glob --selector-type path_glob --include "src/**/*.py" --exclude ".venv/**"
|
|
322
|
+
atdd author gate --extension acme.extension.component-header --gate-id gate.pre_push.x --trigger-type git_hook --trigger-name pre-push --selection blast_radius --action block
|
|
323
|
+
|
|
324
|
+
# core protocol (explicit, protected)
|
|
325
|
+
atdd author convention-node --core --role coach --rule-id coach.extension.manifest-has-owner-boundary --statement "..." --term "owner=..."
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
Artifact kinds and homes:
|
|
329
|
+
|
|
330
|
+
| Kind | Extension home | Core home |
|
|
331
|
+
|---|---|---|
|
|
332
|
+
| convention-node | `conventions/<rule_id>.convention.yaml` (per-file) | `src/atdd/<role>/conventions/nodes/` |
|
|
333
|
+
| scope (+ embedded selectors) | `scopes/<scope_id>.scope.yaml` (per-file) | `src/atdd/coach/selectors/scopes/` |
|
|
334
|
+
| relationship fragment | `relationships.yaml` | `src/atdd/coach/graph/relationships.yaml` |
|
|
335
|
+
| gate fragment | `gates/<trigger>.fragment.yaml` | `src/atdd/coach/gates/<trigger>.yaml` |
|
|
336
|
+
|
|
337
|
+
Registry-class kinds (relationship/scope/gate) use deterministic sorted-insert; concurrent inserts into the same registry resolve via a `.gitattributes`-registered re-sort/dedup git **merge driver**, so parallel authoring never produces hand-merge conflicts.
|
|
338
|
+
|
|
339
|
+
### Issue & PR
|
|
340
|
+
|
|
341
|
+
```bash
|
|
342
|
+
atdd issue <slug> # Create parent issue + WMBT sub-issues
|
|
343
|
+
atdd issue <slug> --type planning # Register approved planning work
|
|
344
|
+
atdd issue <slug> --archetypes be,fe # Scope touched archetypes
|
|
345
|
+
atdd issue <N> # Enter issue context
|
|
346
|
+
atdd issue <N> --status <STATUS> # Transition state; auto-swaps labels
|
|
347
|
+
atdd issue <N> --check # Template compliance feedback
|
|
348
|
+
atdd issue <N> --sync-wmbts # Backfill missing WMBT sub-issues
|
|
349
|
+
atdd issue review <N> --passes 2 # Multi-pass cross-LLM issue review
|
|
350
|
+
|
|
351
|
+
atdd branch <N> # Create worktree + draft PR
|
|
352
|
+
atdd pr <N> # Open / promote PR
|
|
353
|
+
atdd pr <N> --auto --merge-strategy squash
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
### Coach / train execution
|
|
357
|
+
|
|
358
|
+
```bash
|
|
359
|
+
atdd coach <N> # Drive issue through lifecycle
|
|
360
|
+
atdd coach <N1> <N2> ... # Wave-ordered parallel run
|
|
361
|
+
atdd coach <N> --persona-llm tester=glm-5.1,coder=claude-sonnet-4-6
|
|
362
|
+
atdd coach <N> --review-phases planned,red,green,smoke
|
|
363
|
+
atdd coach <N> --skip-review
|
|
364
|
+
atdd coach <N> --auto-merge
|
|
365
|
+
atdd coach <N> --resume <run-id>
|
|
366
|
+
atdd coach <N> --multiplexer-mode pane
|
|
367
|
+
atdd coach <N> --dry-run
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
As the TrainRunner decomposition lands, `atdd resume <run-id>` becomes the explicit resume surface.
|
|
371
|
+
|
|
372
|
+
### Observer
|
|
373
|
+
|
|
374
|
+
```bash
|
|
375
|
+
atdd observer
|
|
376
|
+
atdd observer status
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
Observer is the read-only visibility surface for train events, agent output logs, and active runs.
|
|
380
|
+
|
|
381
|
+
### Validation
|
|
382
|
+
|
|
383
|
+
```bash
|
|
384
|
+
atdd validate
|
|
385
|
+
atdd validate planner
|
|
386
|
+
atdd validate tester
|
|
387
|
+
atdd validate coder
|
|
388
|
+
atdd validate coach
|
|
389
|
+
atdd validate --quick
|
|
390
|
+
atdd validate --coverage
|
|
391
|
+
atdd validate --verify-baseline
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
### Agent config sync
|
|
395
|
+
|
|
396
|
+
```bash
|
|
397
|
+
atdd sync
|
|
398
|
+
atdd sync --agent claude
|
|
399
|
+
atdd sync --verify
|
|
400
|
+
atdd sync --status
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
| Agent | Managed file |
|
|
404
|
+
|---|---|
|
|
405
|
+
| claude | `CLAUDE.md` |
|
|
406
|
+
| codex | `AGENTS.md` |
|
|
407
|
+
| gemini | `GEMINI.md` |
|
|
408
|
+
| glm | `GLM.md` |
|
|
409
|
+
| qwen | `QWEN.md` |
|
|
410
|
+
|
|
411
|
+
### Discovery & visualization
|
|
412
|
+
|
|
413
|
+
```bash
|
|
414
|
+
atdd rules show <rule_id>
|
|
415
|
+
atdd rules where <rule_id>
|
|
416
|
+
atdd rules grep <pattern>
|
|
417
|
+
atdd inventory
|
|
418
|
+
atdd inventory --trace
|
|
419
|
+
atdd repo viz
|
|
420
|
+
atdd repo viz --mode journey
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
### Maintenance
|
|
424
|
+
|
|
425
|
+
```bash
|
|
426
|
+
atdd upgrade
|
|
427
|
+
atdd merge-cascade <pr1> ...
|
|
428
|
+
atdd status
|
|
429
|
+
atdd registry update
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
---
|
|
433
|
+
|
|
434
|
+
## Architecture direction
|
|
435
|
+
|
|
436
|
+
ATDD is moving toward a layered train architecture:
|
|
437
|
+
|
|
438
|
+
```mermaid
|
|
439
|
+
flowchart TB
|
|
440
|
+
CLI[CLI<br/>atdd cli + command shells] --> TR[TrainRunner<br/>stateful execution]
|
|
441
|
+
TR --> PERSIST[train.persistence<br/>events + evidence]
|
|
442
|
+
PERSIST --> CORE[Coach-core<br/>pure policy]
|
|
443
|
+
TR --> RUNTIME[Runtime<br/>worktree + agent_control]
|
|
444
|
+
TR --> GH[Integrations<br/>GitHub issue / PR / checks / Projects v2]
|
|
445
|
+
TR --> VAL[Validators<br/>ValidatorReport]
|
|
446
|
+
OBS[Observer<br/>read-only event stream] --> PERSIST
|
|
447
|
+
RUNTIME --> AGENT[worker agents]
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
Layer responsibilities:
|
|
451
|
+
|
|
452
|
+
| Layer | Owns | Does not own |
|
|
453
|
+
|---|---|---|
|
|
454
|
+
| `atdd.plan` | the gated decomposition session (D/L/P/C) + on-confirm authoring via `atdd author` | issue creation, branches, PRs, merge policy |
|
|
455
|
+
| `atdd.train` | train model, run state, persistence, events, TrainRunner | phase policy, low-level runtime control |
|
|
456
|
+
| `atdd.coach.core` | pure policy: advance/block/escalate/merge readiness | I/O, subprocess, GitHub, cmux, worktrees |
|
|
457
|
+
| `atdd.runtime` | worktrees, agent control, multiplexer views | ATDD phase decisions |
|
|
458
|
+
| `atdd.integrations.github` | labels, Projects v2, PRs, checks | ATDD policy |
|
|
459
|
+
| `atdd.validators` | validation reports | orchestration decisions |
|
|
460
|
+
| `atdd.observer` | read-only visibility | writing orchestration state |
|
|
461
|
+
|
|
462
|
+
Temporal and LangGraph are not required to use ATDD.
|
|
463
|
+
|
|
464
|
+
- JSONL-backed TrainRunner is the default local runner.
|
|
465
|
+
- Temporal may become a future TrainRunner backend for cross-machine durable orchestration.
|
|
466
|
+
- LangGraph may become a future review/judge subgraph backend, not necessarily the whole lifecycle runner.
|
|
467
|
+
|
|
468
|
+
---
|
|
469
|
+
|
|
470
|
+
## Extension-first migration (in progress)
|
|
471
|
+
|
|
472
|
+
ATDD is migrating from a Python-centric validation toolkit into an **extensible agent-delivery protocol**: a small, protected **core** + self-contained **extension** packages for each use case, programming language, or workspace.
|
|
473
|
+
|
|
474
|
+
```text
|
|
475
|
+
ATDD core = the protocol engine (schemas, lifecycle, gates, runners)
|
|
476
|
+
extension = a self-contained use-case package (conventions, scopes, gate
|
|
477
|
+
fragments, validators, tests, fixtures, runtime/workspace)
|
|
478
|
+
workspace = a runtime/build/test environment an extension uses
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
The guiding rule: **a use case never scatters files across core.** It is packaged as one extension that owns its substrate behind a manifest boundary, so it can be installed, indexed, and removed as a unit.
|
|
482
|
+
|
|
483
|
+
**Naming.** Packages use `<publisher>.<scope>.<artifact-name>` where scope is `core | extension`. `atdd.*` is the reserved publisher for official ATDD packages.
|
|
484
|
+
|
|
485
|
+
```text
|
|
486
|
+
atdd.core.* official core/protocol artifacts
|
|
487
|
+
atdd.extension.* official ATDD extensions
|
|
488
|
+
<publisher>.extension.* external/project/team extensions
|
|
489
|
+
```
|
|
490
|
+
|
|
491
|
+
**Where things live:**
|
|
492
|
+
|
|
493
|
+
```text
|
|
494
|
+
src/atdd/ ATDD core protocol (small)
|
|
495
|
+
extensions/<extension-id>/ source extensions (this repo)
|
|
496
|
+
.atdd/extensions/<id>/<ver>/ installed extensions (consumer repo)
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
**Migration phases:**
|
|
500
|
+
|
|
501
|
+
| Phase | Scope | Status |
|
|
502
|
+
|---|---|---|
|
|
503
|
+
| 1 | substrate schemas + extension-first `atdd author` (with `--core` protection); first Python workspace extension | author wagon shipped (`atdd author`, extension-first, namespace-validated) |
|
|
504
|
+
| 2 | wrap existing validators in extension/implementation manifests; keep legacy paths working | next |
|
|
505
|
+
| 3 | new validators only via extension bundles; move mature validators into extension packages | planned |
|
|
506
|
+
| 4 | consumer repos install only the extensions/workspaces they need | planned |
|
|
507
|
+
|
|
508
|
+
`atdd author` is the **authoring** half (it creates compliant substrate by construction). The **packaging** half — extension/workspace/implementation manifests, install/remove, validation-flow wiring — is built as a separate wagon that *consumes* `atdd author` inside a train to assemble an extension.
|
|
509
|
+
|
|
510
|
+
Boundary recap:
|
|
511
|
+
|
|
512
|
+
```text
|
|
513
|
+
atdd author creates compliant substrate artifacts (extension by default; --core protected)
|
|
514
|
+
atdd substrate admits / binds / inspects the local substrate (add/remove/bind/capabilities/list)
|
|
515
|
+
atdd validate verifies substrate artifacts
|
|
516
|
+
atdd gate decides whether a validation failure blocks
|
|
517
|
+
```
|
|
518
|
+
|
|
519
|
+
### Managing the substrate — `atdd substrate`
|
|
520
|
+
|
|
521
|
+
The substrate-management verbs are grouped under one noun. `atdd substrate`
|
|
522
|
+
operates on the local install ledger (`.atdd/substrate.lock.yaml` +
|
|
523
|
+
`.atdd/binding.lock.yaml`), which covers both `atdd.extension.*` and
|
|
524
|
+
`atdd.workspace.*` packages:
|
|
525
|
+
|
|
526
|
+
```text
|
|
527
|
+
atdd substrate add <ref|--path> admit an extension/workspace into the local substrate
|
|
528
|
+
atdd substrate remove <id> withdraw an admitted artifact (refuses dependents unless --force)
|
|
529
|
+
atdd substrate bind [--check] compose the runtime binding plan from the locked substrate
|
|
530
|
+
atdd substrate capabilities show conventions gated by bound implementations vs legacy-fallback
|
|
531
|
+
atdd substrate list list the installed substrate from the lockfile
|
|
532
|
+
```
|
|
533
|
+
|
|
534
|
+
The flat `atdd add` / `remove` / `bind` / `capabilities` verbs and
|
|
535
|
+
`atdd list --substrate` remain as **deprecated-but-working** aliases (they print
|
|
536
|
+
a deprecation notice pointing at the grouped form); their removal is the breaking
|
|
537
|
+
`4.0.0` step tracked in #1207. `atdd enforce` and `atdd validate` stay top-level
|
|
538
|
+
— they are the CI/operator hot path, not substrate administration.
|
|
539
|
+
|
|
540
|
+
---
|
|
541
|
+
|
|
542
|
+
## Validators
|
|
543
|
+
|
|
544
|
+
Validators map evidence to rule-bound reports. Each rule declares a canonical rule ID and disposition.
|
|
545
|
+
|
|
546
|
+
| Disposition | CI behavior |
|
|
547
|
+
|---|---|
|
|
548
|
+
| `strict` | any violation fails CI |
|
|
549
|
+
| `suppress-and-clean` | pre-existing sites may carry deadline suppressions; new violations fail |
|
|
550
|
+
| `advisory` | warnings only |
|
|
551
|
+
|
|
552
|
+
Phase coverage:
|
|
553
|
+
|
|
554
|
+
| Phase | Checks |
|
|
555
|
+
|---|---|
|
|
556
|
+
| planner | wagons, WMBTs, acceptance, train shape, URNs |
|
|
557
|
+
| tester | RED tests, naming, contracts, telemetry, SMOKE coverage |
|
|
558
|
+
| coder | architecture, boundaries, dead code, complexity, implementation evidence |
|
|
559
|
+
| coach | issues, registries, lifecycle, release gates, label compliance |
|
|
560
|
+
|
|
561
|
+
---
|
|
562
|
+
|
|
563
|
+
## Conventions registry
|
|
564
|
+
|
|
565
|
+
YAML conventions declare rule IDs, severities, dispositions, and fix hints.
|
|
566
|
+
|
|
567
|
+
| Domain | Conventions |
|
|
568
|
+
|---|---|
|
|
569
|
+
| planner | wagon, acceptance, WMBT, feature, artifact, decomposition protocol |
|
|
570
|
+
| tester | red, filename, contract, artifact, smoke |
|
|
571
|
+
| coder | green, refactor, boundaries, backend, frontend, design |
|
|
572
|
+
| coach | issue, orchestration, persona prompts, judge call-sites |
|
|
573
|
+
| train | phase machine, run evidence, runner events *(decomposition target)* |
|
|
574
|
+
|
|
575
|
+
Browse: `src/atdd/<phase>/conventions/*.convention.yaml`.
|
|
576
|
+
|
|
577
|
+
---
|
|
578
|
+
|
|
579
|
+
## Release & publishing
|
|
580
|
+
|
|
581
|
+
```mermaid
|
|
582
|
+
flowchart LR
|
|
583
|
+
A[feat/fix branch] -->|version bump| B[PR]
|
|
584
|
+
B -->|CI clean| C[merge to main]
|
|
585
|
+
C -->|workflow_run| D[publish.yml]
|
|
586
|
+
D -->|read version| E[git tag vX.Y.Z]
|
|
587
|
+
E -->|release notes| F[GitHub Release]
|
|
588
|
+
F -->|trusted publishing| G[pypi.org/atdd]
|
|
589
|
+
```
|
|
590
|
+
|
|
591
|
+
`atdd init` ships workflows for validation, release publishing, and post-merge lifecycle management.
|
|
592
|
+
|
|
593
|
+
Configure release in `.atdd/config.yaml`:
|
|
594
|
+
|
|
595
|
+
```yaml
|
|
596
|
+
release:
|
|
597
|
+
version_file: "pyproject.toml"
|
|
598
|
+
tag_prefix: "v"
|
|
599
|
+
```
|
|
600
|
+
|
|
601
|
+
---
|
|
602
|
+
|
|
603
|
+
## Installation
|
|
604
|
+
|
|
605
|
+
### Standard
|
|
606
|
+
|
|
607
|
+
```bash
|
|
608
|
+
pipx install atdd
|
|
609
|
+
pipx upgrade atdd
|
|
610
|
+
pipx install atdd[viz]
|
|
611
|
+
```
|
|
612
|
+
|
|
613
|
+
`pipx` keeps ATDD isolated from project Python.
|
|
614
|
+
|
|
615
|
+
### Alternative
|
|
616
|
+
|
|
617
|
+
```bash
|
|
618
|
+
pip install atdd
|
|
619
|
+
pip install --upgrade atdd
|
|
620
|
+
```
|
|
621
|
+
|
|
622
|
+
### Development
|
|
623
|
+
|
|
624
|
+
```bash
|
|
625
|
+
git clone https://github.com/afokapu/atdd.git
|
|
626
|
+
cd atdd && pip install -e ".[dev]"
|
|
627
|
+
atdd --help
|
|
628
|
+
```
|
|
629
|
+
|
|
630
|
+
### Uninstall from a consumer repo
|
|
631
|
+
|
|
632
|
+
```bash
|
|
633
|
+
python -m pip uninstall atdd
|
|
634
|
+
# Then manually delete .atdd/ and managed blocks in CLAUDE.md / AGENTS.md / etc.
|
|
635
|
+
```
|
|
636
|
+
|
|
637
|
+
---
|
|
638
|
+
|
|
639
|
+
## Project structure
|
|
640
|
+
|
|
641
|
+
Target structure as the train decomposition lands:
|
|
642
|
+
|
|
643
|
+
```text
|
|
644
|
+
src/atdd/
|
|
645
|
+
├── cli.py
|
|
646
|
+
├── plan/ or planner/
|
|
647
|
+
│ ├── commands/ # atdd plan — gated decomposition session (plan_session*.py)
|
|
648
|
+
│ ├── prompts/ # reusable planner fragments
|
|
649
|
+
│ ├── conventions/
|
|
650
|
+
│ ├── schemas/
|
|
651
|
+
│ └── validators/
|
|
652
|
+
├── train/
|
|
653
|
+
│ ├── runner_iface.py # TrainRunner protocol
|
|
654
|
+
│ ├── jsonl_runner.py # default local runner
|
|
655
|
+
│ ├── persistence.py # evidence + events + resume state
|
|
656
|
+
│ ├── events.py
|
|
657
|
+
│ └── wave_runner.py
|
|
658
|
+
├── coach/
|
|
659
|
+
│ ├── core/ # pure policy functions
|
|
660
|
+
│ ├── commands/ # thin public command shells
|
|
661
|
+
│ ├── conventions/
|
|
662
|
+
│ └── validators/
|
|
663
|
+
├── runtime/
|
|
664
|
+
│ ├── worktree.py
|
|
665
|
+
│ ├── agent_control.py
|
|
666
|
+
│ └── multiplexer.py
|
|
667
|
+
├── integrations/
|
|
668
|
+
│ └── github/
|
|
669
|
+
├── tester/
|
|
670
|
+
└── coder/
|
|
671
|
+
```
|
|
672
|
+
|
|
673
|
+
Current releases may still carry some of these responsibilities under `coach/commands`; the decomposition is migrating them behind typed seams.
|
|
674
|
+
|
|
675
|
+
---
|
|
676
|
+
|
|
677
|
+
## Worker model selection
|
|
678
|
+
|
|
679
|
+
Worker agents can run on any wrapper. See `docs/MODELS.md` when available.
|
|
680
|
+
|
|
681
|
+
| Class | When to use |
|
|
682
|
+
|---|---|
|
|
683
|
+
| compliant | lifecycle work with structured prompts and fixed states |
|
|
684
|
+
| frontier | ambiguous design, novel planning, hard refactors |
|
|
685
|
+
|
|
686
|
+
Configure defaults in `.atdd/config.yaml`; override per invocation with `atdd coach <N> --persona-llm tester=...,coder=...`.
|
|
687
|
+
|
|
688
|
+
---
|
|
689
|
+
|
|
690
|
+
## Requirements
|
|
691
|
+
|
|
692
|
+
| | |
|
|
693
|
+
|---|---|
|
|
694
|
+
| Python | 3.10+ |
|
|
695
|
+
| Runtime deps | pyyaml, jsonschema |
|
|
696
|
+
| GitHub CLI | `gh` authenticated with required project/repo scopes |
|
|
697
|
+
| Multiplexer | cmux, zellij, or tmux for visual parallel runs |
|
|
698
|
+
| Dev deps | pytest, pytest-xdist, pytest-html |
|
|
699
|
+
|
|
700
|
+
Optional environment variables:
|
|
701
|
+
|
|
702
|
+
| Var | Effect |
|
|
703
|
+
|---|---|
|
|
704
|
+
| `ATDD_MAX_UNCOMMITTED` | pre-push micro-commit warning threshold |
|
|
705
|
+
| `ATDD_MAX_STAGED` | pre-commit micro-commit warning threshold |
|
|
706
|
+
| `ATDD_SKIP_PREPUSH_VALIDATE` | bypass pre-push validator hook when needed |
|
|
707
|
+
|
|
708
|
+
---
|
|
709
|
+
|
|
710
|
+
## Development
|
|
711
|
+
|
|
712
|
+
```bash
|
|
713
|
+
PYTHONPATH=src python3 -m pytest src/atdd/ -v
|
|
714
|
+
PYTHONPATH=src python3 -m pytest src/atdd/coder/validators/ -v
|
|
715
|
+
PYTHONPATH=src python3 -m pytest --cov=atdd --cov-report=html
|
|
716
|
+
```
|
|
717
|
+
|
|
718
|
+
Adding a validator:
|
|
719
|
+
|
|
720
|
+
1. Create `src/atdd/<phase>/validators/test_<name>.py`.
|
|
721
|
+
2. Bind a canonical rule ID at module import.
|
|
722
|
+
3. Declare the rule in the matching convention YAML.
|
|
723
|
+
4. Emit normalized validator reports as the train architecture lands.
|
|
724
|
+
|
|
725
|
+
Adding a convention:
|
|
726
|
+
|
|
727
|
+
1. Create `src/atdd/<phase>/conventions/<name>.convention.yaml`.
|
|
728
|
+
2. Declare `id`, `severity`, `disposition`, `description`, and optional `fix_hint`.
|
|
729
|
+
3. Reference it from validators and planning briefs.
|
|
730
|
+
|
|
731
|
+
---
|
|
732
|
+
|
|
733
|
+
## Documentation
|
|
734
|
+
|
|
735
|
+
| Doc | Purpose |
|
|
736
|
+
|---|---|
|
|
737
|
+
| `docs/coach-decomposition.md` | source of truth for Coach → TrainRunner / runtime / integrations decomposition |
|
|
738
|
+
| `docs/plan-decomposition.md` | proposed source of truth for standalone `atdd plan` capability |
|
|
739
|
+
| `atdd-plan-spec-v11.md` | planning command and brief-renderer track |
|
|
740
|
+
| `atdd-coach-spec-v9.md` | single-command lifecycle spec |
|
|
741
|
+
| `atdd-repo-substrate-spec-v12.md` | repo archetype + rule substrate |
|
|
742
|
+
| `docs/coach-worked-example.md` | end-to-end worked example |
|
|
743
|
+
| `docs/MODELS.md` | worker-model selection |
|
|
744
|
+
| Convention files | machine-readable rule definitions |
|
|
745
|
+
|
|
746
|
+
---
|
|
747
|
+
|
|
748
|
+
## License
|
|
749
|
+
|
|
750
|
+
MIT
|