codd-dev 2.71.0__tar.gz → 2.73.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (612) hide show
  1. {codd_dev-2.71.0 → codd_dev-2.73.0}/PKG-INFO +1 -1
  2. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/__init__.py +1 -1
  3. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/languages/__init__.py +2 -0
  4. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/languages/loader.py +13 -0
  5. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/languages/profile.py +79 -0
  6. codd_dev-2.73.0/codd/languages/verify_executor.py +322 -0
  7. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/languages/verify_plan.py +20 -1
  8. {codd_dev-2.71.0 → codd_dev-2.73.0}/pyproject.toml +1 -1
  9. {codd_dev-2.71.0 → codd_dev-2.73.0}/.gitignore +0 -0
  10. {codd_dev-2.71.0 → codd_dev-2.73.0}/LICENSE +0 -0
  11. {codd_dev-2.71.0 → codd_dev-2.73.0}/README.md +0 -0
  12. {codd_dev-2.71.0 → codd_dev-2.73.0}/bench_fixture/README.md +0 -0
  13. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/__main__.py +0 -0
  14. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/_git_helper.py +0 -0
  15. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/action_outcome.py +0 -0
  16. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/ai_invoke.py +0 -0
  17. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/ai_patch.py +0 -0
  18. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/artifact_contract.py +0 -0
  19. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/artifact_ids.py +0 -0
  20. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/artifacts/catalog.yaml +0 -0
  21. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/ask_user_question_adapter.py +0 -0
  22. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/assembler.py +0 -0
  23. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/bridge.py +0 -0
  24. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/brownfield/__init__.py +0 -0
  25. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/brownfield/pipeline.py +0 -0
  26. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/capability_completeness.py +0 -0
  27. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/claude_cli.py +0 -0
  28. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/cli.py +0 -0
  29. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/clustering.py +0 -0
  30. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/coherence_adapters.py +0 -0
  31. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/coherence_engine.py +0 -0
  32. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/confidence.py +0 -0
  33. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/config.py +0 -0
  34. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/config_schema.py +0 -0
  35. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/contracts.py +0 -0
  36. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/contracts_registry/__init__.py +0 -0
  37. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/contracts_registry/__main__.py +0 -0
  38. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/contracts_registry/certify.py +0 -0
  39. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/contracts_registry/generate_matrix.py +0 -0
  40. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/contracts_registry/registry.py +0 -0
  41. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/coverage_auditor.py +0 -0
  42. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/coverage_execution_coherence.py +0 -0
  43. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/coverage_metrics.py +0 -0
  44. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/__init__.py +0 -0
  45. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/auto_repair.py +0 -0
  46. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/builder.py +0 -0
  47. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/checks/__init__.py +0 -0
  48. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
  49. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/checks/artifact_contract_check.py +0 -0
  50. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/checks/ci_health.py +0 -0
  51. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/checks/dependency_freshness.py +0 -0
  52. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/checks/depends_on_consistency.py +0 -0
  53. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/checks/deployment_completeness.py +0 -0
  54. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/checks/edge_validity.py +0 -0
  55. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/checks/environment_coverage.py +0 -0
  56. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/checks/implementation_coverage.py +0 -0
  57. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/checks/node_completeness.py +0 -0
  58. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/checks/opt_out.py +0 -0
  59. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/checks/task_completion.py +0 -0
  60. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/checks/transitive_closure.py +0 -0
  61. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/checks/ui_coherence.py +0 -0
  62. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/checks/user_journey_coherence.py +0 -0
  63. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/coverage_axes.py +0 -0
  64. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/defaults/cli.yaml +0 -0
  65. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
  66. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/defaults/csharp.yaml +0 -0
  67. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/defaults/elixir.yaml +0 -0
  68. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/defaults/generic.yaml +0 -0
  69. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/defaults/iot.yaml +0 -0
  70. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/defaults/java.yaml +0 -0
  71. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/defaults/kotlin.yaml +0 -0
  72. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/defaults/mobile.yaml +0 -0
  73. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/defaults/ruby.yaml +0 -0
  74. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/defaults/rust.yaml +0 -0
  75. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/defaults/scala.yaml +0 -0
  76. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/defaults/swift.yaml +0 -0
  77. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
  78. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/defaults/web.yaml +0 -0
  79. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/extractor.py +0 -0
  80. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/impact.py +0 -0
  81. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dag/runner.py +0 -0
  82. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/defaults.py +0 -0
  83. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/defaults.yaml +0 -0
  84. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/dependency_lock_coherence.py +0 -0
  85. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/deploy_targets/__init__.py +0 -0
  86. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/deploy_targets/app_service.py +0 -0
  87. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/deploy_targets/base.py +0 -0
  88. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/deploy_targets/docker_compose.py +0 -0
  89. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/deployer.py +0 -0
  90. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/deployment/__init__.py +0 -0
  91. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/deployment/checks/__init__.py +0 -0
  92. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
  93. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
  94. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
  95. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
  96. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/deployment/extractor.py +0 -0
  97. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/deployment/providers/__init__.py +0 -0
  98. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/deployment/providers/ai_command.py +0 -0
  99. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/deployment/providers/ai_command_factory.py +0 -0
  100. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/deployment/providers/codex_app_server.py +0 -0
  101. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/deployment/providers/llm_consideration.py +0 -0
  102. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/deployment/providers/schema/__init__.py +0 -0
  103. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/deployment/providers/schema/prisma.py +0 -0
  104. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/deployment/providers/target/__init__.py +0 -0
  105. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/deployment/providers/target/docker_compose.py +0 -0
  106. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/deployment/providers/verification/__init__.py +0 -0
  107. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
  108. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
  109. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
  110. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
  111. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
  112. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/deployment/providers/verification/curl.py +0 -0
  113. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
  114. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
  115. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/deployment/providers/verification/playwright.py +0 -0
  116. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/deployment/providers/verification/pytest_http.py +0 -0
  117. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/deployment/providers/verification/vitest.py +0 -0
  118. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/design_md.py +0 -0
  119. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/diff/__init__.py +0 -0
  120. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/diff/apply.py +0 -0
  121. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/diff/engine.py +0 -0
  122. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/diff/persistence.py +0 -0
  123. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/diff/templates/diff_prompt.md +0 -0
  124. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/discovery.py +0 -0
  125. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/drift.py +0 -0
  126. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/e2e_contract_coherence.py +0 -0
  127. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/e2e_extractor.py +0 -0
  128. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/e2e_generator.py +0 -0
  129. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/e2e_harness.py +0 -0
  130. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/e2e_runner.py +0 -0
  131. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/elicit/__init__.py +0 -0
  132. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/elicit/apply.py +0 -0
  133. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/elicit/engine.py +0 -0
  134. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/elicit/finding.py +0 -0
  135. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/elicit/formatters/__init__.py +0 -0
  136. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/elicit/formatters/base.py +0 -0
  137. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/elicit/formatters/interactive.py +0 -0
  138. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/elicit/formatters/json_fmt.py +0 -0
  139. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/elicit/formatters/md.py +0 -0
  140. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/elicit/lexicon_loader.py +0 -0
  141. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/elicit/persistence.py +0 -0
  142. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
  143. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/env_refs.py +0 -0
  144. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/extract_ai.py +0 -0
  145. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/extract_paths.py +0 -0
  146. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/extractor.py +0 -0
  147. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/fix/__init__.py +0 -0
  148. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/fix/candidate_selector.py +0 -0
  149. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/fix/design_updater.py +0 -0
  150. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/fix/impl_propagation.py +0 -0
  151. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/fix/interactive_prompt.py +0 -0
  152. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/fix/phenomenon_fixer.py +0 -0
  153. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/fix/phenomenon_parser.py +0 -0
  154. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/fix/risk_classifier.py +0 -0
  155. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/fix/templates/clarification_question.txt +0 -0
  156. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/fix/templates/design_update.txt +0 -0
  157. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/fix/templates/impl_update.txt +0 -0
  158. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
  159. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/fix/templates/risk_assessment.txt +0 -0
  160. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/fix/templates_loader.py +0 -0
  161. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/fixer.py +0 -0
  162. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/fixup_drift.py +0 -0
  163. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/fixup_drift_strategies/__init__.py +0 -0
  164. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
  165. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
  166. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
  167. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/frontmatter.py +0 -0
  168. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/generator.py +0 -0
  169. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/git_evidence.py +0 -0
  170. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/graph.py +0 -0
  171. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/greenfield/__init__.py +0 -0
  172. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/greenfield/pipeline.py +0 -0
  173. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/hitl_session.py +0 -0
  174. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/hooks/__init__.py +0 -0
  175. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/hooks/pre-commit +0 -0
  176. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
  177. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
  178. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/hooks/recipes/codex_hook.sh +0 -0
  179. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
  180. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
  181. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/iac_nfr.py +0 -0
  182. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/implement_oracle.py +0 -0
  183. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/implement_oracle_scope.py +0 -0
  184. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/implementer/__init__.py +0 -0
  185. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/implementer/chunked_runner.py +0 -0
  186. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/implementer/typecheck_loop.py +0 -0
  187. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/implementer.py +0 -0
  188. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/import_coherence.py +0 -0
  189. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/inheritance.py +0 -0
  190. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/init/__init__.py +0 -0
  191. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/init/lexicon_suggest.py +0 -0
  192. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/init/llm_lexicon_suggester.py +0 -0
  193. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/init/stack_detector.py +0 -0
  194. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/knowledge_fetcher.py +0 -0
  195. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/languages/adapters/__init__.py +0 -0
  196. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/languages/adapters/runner_report.py +0 -0
  197. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/languages/builtin_adapters.py +0 -0
  198. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/languages/compat.py +0 -0
  199. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/languages/contract.py +0 -0
  200. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/languages/path_planner.py +0 -0
  201. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/languages/profiles/go.yaml +0 -0
  202. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/languages/profiles/python.yaml +0 -0
  203. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/languages/profiles/typescript.yaml +0 -0
  204. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/languages/registry.py +0 -0
  205. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/lexicon.py +0 -0
  206. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/lexicon_cli/__init__.py +0 -0
  207. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
  208. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/lexicon_cli/formatters/html.py +0 -0
  209. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
  210. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/lexicon_cli/formatters/md.py +0 -0
  211. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/lexicon_cli/inspector.py +0 -0
  212. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/lexicon_cli/manager.py +0 -0
  213. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/lexicon_cli/reporter.py +0 -0
  214. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/lexicon_cli/threshold.py +0 -0
  215. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/llm/__init__.py +0 -0
  216. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/llm/approval.py +0 -0
  217. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/llm/best_practice_augmenter.py +0 -0
  218. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/llm/criteria_expander.py +0 -0
  219. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/llm/design_doc_extractor.py +0 -0
  220. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/llm/impl_step_deriver.py +0 -0
  221. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/llm/means_catalog_loader.py +0 -0
  222. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/llm/parser.py +0 -0
  223. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/llm/plan_deriver.py +0 -0
  224. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/llm/prompt_builder.py +0 -0
  225. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/llm/strategy_validator.py +0 -0
  226. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
  227. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
  228. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
  229. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
  230. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
  231. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/llm/templates/meta_instruction.md +0 -0
  232. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/llm/templates/plan_derive_meta.md +0 -0
  233. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
  234. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/mcp_server.py +0 -0
  235. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/measure.py +0 -0
  236. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/operational_e2e_audit.py +0 -0
  237. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/operations_derive.py +0 -0
  238. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/parsing/__init__.py +0 -0
  239. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/parsing/_shared.py +0 -0
  240. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/parsing/api_specs.py +0 -0
  241. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/parsing/filesystem_routes.py +0 -0
  242. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/parsing/iac.py +0 -0
  243. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/parsing/python_ast.py +0 -0
  244. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/parsing/schemas.py +0 -0
  245. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/parsing/tests_builddeps.py +0 -0
  246. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/parsing/treesitter.py +0 -0
  247. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/planner.py +0 -0
  248. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/policy.py +0 -0
  249. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/preflight/__init__.py +0 -0
  250. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/preflight/defaults/cli.yaml +0 -0
  251. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/preflight/defaults/generic.yaml +0 -0
  252. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/preflight/defaults/iot.yaml +0 -0
  253. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/preflight/defaults/mobile.yaml +0 -0
  254. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/preflight/defaults/web.yaml +0 -0
  255. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/project_types.py +0 -0
  256. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/propagate.py +0 -0
  257. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/propagation_common.py +0 -0
  258. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/propagator.py +0 -0
  259. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/reconciliation_ledger.py +0 -0
  260. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/reference_resolution.py +0 -0
  261. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/registry.py +0 -0
  262. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/repair/__init__.py +0 -0
  263. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/repair/approval_repair.py +0 -0
  264. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/repair/auto_scope_guard.py +0 -0
  265. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/repair/engine.py +0 -0
  266. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/repair/git_patcher.py +0 -0
  267. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/repair/history.py +0 -0
  268. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/repair/llm_repair_engine.py +0 -0
  269. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/repair/loop.py +0 -0
  270. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/repair/primary_picker.py +0 -0
  271. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/repair/proof_breaks.py +0 -0
  272. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/repair/repair_result.py +0 -0
  273. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/repair/repairability_classifier.py +0 -0
  274. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/repair/schema.py +0 -0
  275. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/repair/templates/analyze_meta.md +0 -0
  276. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/repair/templates/propose_meta.md +0 -0
  277. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
  278. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/repair/templates/repairability_meta.md +0 -0
  279. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/repair/test_failure_attribution.py +0 -0
  280. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/repair/verify_runner.py +0 -0
  281. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/repair_slice.py +0 -0
  282. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/require.py +0 -0
  283. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/require_plugins.py +0 -0
  284. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/require_propagate.py +0 -0
  285. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
  286. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
  287. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
  288. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
  289. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/required_artifacts/defaults/web.yaml +0 -0
  290. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/required_artifacts_deriver.py +0 -0
  291. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
  292. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
  293. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
  294. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
  295. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
  296. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/requirement_completeness_auditor.py +0 -0
  297. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/requirement_reconciliation.py +0 -0
  298. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/requirements_meta.py +0 -0
  299. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/restoration_report.py +0 -0
  300. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/restore.py +0 -0
  301. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/routes_extractor.py +0 -0
  302. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/runtime_smoke/__init__.py +0 -0
  303. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/runtime_smoke/checks.py +0 -0
  304. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/runtime_smoke/config.py +0 -0
  305. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/runtime_smoke/report.py +0 -0
  306. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/runtime_smoke/runner.py +0 -0
  307. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/scanner.py +0 -0
  308. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/schema_refs.py +0 -0
  309. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/screen_flow_validator.py +0 -0
  310. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/screen_transition_extractor.py +0 -0
  311. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/screen_transitions/defaults.yaml +0 -0
  312. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/skills_cli/__init__.py +0 -0
  313. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/skills_cli/discovery.py +0 -0
  314. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/skills_cli/manager.py +0 -0
  315. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/skills_cli/paths.py +0 -0
  316. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/stack/__init__.py +0 -0
  317. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/stack/adapters/__init__.py +0 -0
  318. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/stack/adapters/_base.py +0 -0
  319. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/stack/adapters/nextjs.py +0 -0
  320. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/stack/adapters/playwright.py +0 -0
  321. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/stack/compose.py +0 -0
  322. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/stack/loader.py +0 -0
  323. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/stack/lock.py +0 -0
  324. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/stack/obligations.py +0 -0
  325. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/stack/profile.py +0 -0
  326. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/stack/profiles/addons/playwright.yaml +0 -0
  327. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/stack/profiles/addons/prisma.yaml +0 -0
  328. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/stack/profiles/frameworks/nextjs.yaml +0 -0
  329. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/stack/project.py +0 -0
  330. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/stack/registry.py +0 -0
  331. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/stack/resolve.py +0 -0
  332. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/surface_reconciliation.py +0 -0
  333. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/synth.py +0 -0
  334. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/templates/codd.yaml.tmpl +0 -0
  335. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/templates/conventions.yaml.tmpl +0 -0
  336. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
  337. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/templates/doc_links.yaml.tmpl +0 -0
  338. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
  339. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
  340. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
  341. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
  342. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
  343. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/templates/extracted/system-context.md.j2 +0 -0
  344. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/templates/gitignore.tmpl +0 -0
  345. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/templates/lexicon_questions.md +0 -0
  346. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/templates/lexicon_schema.yaml +0 -0
  347. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/templates/overrides.yaml.tmpl +0 -0
  348. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/test_detection.py +0 -0
  349. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/test_import_coherence.py +0 -0
  350. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/traceability.py +0 -0
  351. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/validator.py +0 -0
  352. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/vb_marker_authenticity.py +0 -0
  353. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/vb_rerun_scope.py +0 -0
  354. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/verifiable_behavior_audit.py +0 -0
  355. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/watch/__init__.py +0 -0
  356. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/watch/events.py +0 -0
  357. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/watch/propagation_log.py +0 -0
  358. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/watch/propagation_pipeline.py +0 -0
  359. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/watch/test_runner.py +0 -0
  360. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/watch/watcher.py +0 -0
  361. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd/wiring.py +0 -0
  362. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
  363. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
  364. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
  365. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
  366. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
  367. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
  368. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
  369. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
  370. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
  371. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
  372. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
  373. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
  374. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
  375. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
  376. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
  377. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
  378. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
  379. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
  380. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
  381. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
  382. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
  383. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
  384. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
  385. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
  386. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
  387. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
  388. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
  389. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
  390. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
  391. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
  392. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
  393. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
  394. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
  395. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
  396. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
  397. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
  398. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
  399. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
  400. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
  401. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
  402. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
  403. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
  404. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
  405. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
  406. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
  407. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
  408. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
  409. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
  410. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
  411. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
  412. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
  413. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
  414. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
  415. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
  416. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
  417. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
  418. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
  419. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
  420. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
  421. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
  422. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
  423. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
  424. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
  425. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
  426. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
  427. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
  428. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
  429. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
  430. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
  431. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
  432. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
  433. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
  434. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
  435. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
  436. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
  437. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
  438. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
  439. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
  440. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
  441. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
  442. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
  443. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
  444. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
  445. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
  446. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
  447. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
  448. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
  449. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
  450. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
  451. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
  452. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
  453. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
  454. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
  455. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
  456. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
  457. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
  458. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
  459. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
  460. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
  461. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
  462. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
  463. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
  464. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
  465. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
  466. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
  467. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
  468. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
  469. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
  470. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
  471. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
  472. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
  473. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
  474. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
  475. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
  476. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
  477. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
  478. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
  479. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
  480. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
  481. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
  482. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
  483. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
  484. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
  485. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
  486. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
  487. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
  488. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
  489. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
  490. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
  491. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
  492. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
  493. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
  494. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
  495. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
  496. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
  497. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
  498. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
  499. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
  500. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
  501. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
  502. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
  503. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
  504. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
  505. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
  506. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
  507. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
  508. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
  509. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
  510. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
  511. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
  512. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
  513. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
  514. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
  515. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
  516. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
  517. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
  518. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
  519. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
  520. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
  521. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
  522. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
  523. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
  524. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
  525. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
  526. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
  527. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
  528. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
  529. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
  530. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
  531. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
  532. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
  533. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
  534. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
  535. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
  536. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
  537. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
  538. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
  539. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
  540. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
  541. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
  542. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
  543. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
  544. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
  545. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
  546. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
  547. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
  548. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
  549. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
  550. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
  551. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
  552. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
  553. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
  554. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
  555. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
  556. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
  557. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
  558. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
  559. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
  560. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
  561. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
  562. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
  563. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
  564. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
  565. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
  566. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
  567. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
  568. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
  569. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
  570. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
  571. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
  572. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
  573. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
  574. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
  575. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
  576. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
  577. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
  578. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
  579. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
  580. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
  581. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
  582. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
  583. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
  584. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
  585. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
  586. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
  587. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
  588. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
  589. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
  590. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
  591. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
  592. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
  593. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
  594. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
  595. {codd_dev-2.71.0 → codd_dev-2.73.0}/codd_plugins/stack_map.yaml +0 -0
  596. {codd_dev-2.71.0 → codd_dev-2.73.0}/docs/cookbook/cdp_browser/README.md +0 -0
  597. {codd_dev-2.71.0 → codd_dev-2.73.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
  598. {codd_dev-2.71.0 → codd_dev-2.73.0}/docs/requirements/README.md +0 -0
  599. {codd_dev-2.71.0 → codd_dev-2.73.0}/dogfood/README.md +0 -0
  600. {codd_dev-2.71.0 → codd_dev-2.73.0}/dogfood/fixtures/flat_py_app/README.md +0 -0
  601. {codd_dev-2.71.0 → codd_dev-2.73.0}/examples/README.md +0 -0
  602. {codd_dev-2.71.0 → codd_dev-2.73.0}/skills/codd-assemble/SKILL.md +0 -0
  603. {codd_dev-2.71.0 → codd_dev-2.73.0}/skills/codd-evolve/SKILL.md +0 -0
  604. {codd_dev-2.71.0 → codd_dev-2.73.0}/skills/codd-generate/SKILL.md +0 -0
  605. {codd_dev-2.71.0 → codd_dev-2.73.0}/skills/codd-greenfield/SKILL.md +0 -0
  606. {codd_dev-2.71.0 → codd_dev-2.73.0}/skills/codd-impact/SKILL.md +0 -0
  607. {codd_dev-2.71.0 → codd_dev-2.73.0}/skills/codd-init/SKILL.md +0 -0
  608. {codd_dev-2.71.0 → codd_dev-2.73.0}/skills/codd-propagate/SKILL.md +0 -0
  609. {codd_dev-2.71.0 → codd_dev-2.73.0}/skills/codd-restore/SKILL.md +0 -0
  610. {codd_dev-2.71.0 → codd_dev-2.73.0}/skills/codd-scan/SKILL.md +0 -0
  611. {codd_dev-2.71.0 → codd_dev-2.73.0}/skills/codd-validate/SKILL.md +0 -0
  612. {codd_dev-2.71.0 → codd_dev-2.73.0}/tests/integration/standalone_repair_skeleton/README.md +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codd-dev
3
- Version: 2.71.0
3
+ Version: 2.73.0
4
4
  Summary: CoDD: Coherence-Driven Development — cross-artifact change impact analysis
5
5
  Project-URL: Homepage, https://github.com/yohey-w/codd-dev
6
6
  Project-URL: Repository, https://github.com/yohey-w/codd-dev
@@ -1,3 +1,3 @@
1
1
  """CoDD — Coherence-Driven Development."""
2
2
 
3
- __version__ = "2.71.0"
3
+ __version__ = "2.73.0"
@@ -33,6 +33,7 @@ from .profile import (
33
33
  TestSet,
34
34
  TestsSpec,
35
35
  ToolchainSpec,
36
+ VerifyObservationPolicy,
36
37
  VerifySpec,
37
38
  )
38
39
  from .loader import LanguageProfileError, load_language_profile
@@ -86,6 +87,7 @@ __all__ = [
86
87
  "TestSet",
87
88
  "TestsSpec",
88
89
  "ToolchainSpec",
90
+ "VerifyObservationPolicy",
89
91
  "VerifySpec",
90
92
  # loader
91
93
  "LanguageProfileError",
@@ -37,6 +37,7 @@ from .profile import (
37
37
  TestSet,
38
38
  TestsSpec,
39
39
  ToolchainSpec,
40
+ VerifyObservationPolicy,
40
41
  VerifySpec,
41
42
  )
42
43
 
@@ -238,8 +239,19 @@ def _parse_command(cmd_id: str, raw: Any) -> CommandSpec:
238
239
  "requires_materialized_deps",
239
240
  "report",
240
241
  "scope",
242
+ "observation",
241
243
  }
242
244
  extra = {k: v for k, v in m.items() if k not in known}
245
+ # An ``observation:`` block is validated STRICTLY at load time: any weakening
246
+ # of the anti-false-green invariant is a profile error, not a silent green.
247
+ observation = None
248
+ if "observation" in m:
249
+ try:
250
+ observation = VerifyObservationPolicy.from_mapping(
251
+ m.get("observation"), where=f"{where}.observation"
252
+ )
253
+ except ValueError as exc:
254
+ raise LanguageProfileError(str(exc)) from exc
243
255
  return CommandSpec(
244
256
  id=cmd_id,
245
257
  argv=argv,
@@ -249,6 +261,7 @@ def _parse_command(cmd_id: str, raw: Any) -> CommandSpec:
249
261
  requires_materialized_deps=bool(m.get("requires_materialized_deps", False)),
250
262
  report=_parse_report(m.get("report")),
251
263
  scope=_parse_scope(m.get("scope")),
264
+ observation=observation,
252
265
  extra=extra,
253
266
  )
254
267
 
@@ -210,6 +210,82 @@ class ScopeSpec:
210
210
  must_include_test_sets: tuple[str, ...] = ()
211
211
 
212
212
 
213
+ @dataclass(frozen=True)
214
+ class VerifyObservationPolicy:
215
+ """Unweakenable anti-false-green observation policy for a verify command.
216
+
217
+ The DEFAULTS are the invariant: a verify run is green ONLY if it observed at
218
+ least ``min_collected_tests`` real tests, produced a parseable report, and
219
+ had no failed/skipped tests. A profile may STRENGTHEN (raise
220
+ ``min_collected_tests``) but NEVER weaken — every weakening declaration
221
+ (``allow_zero_tests``, ``zero_tests: warn``, ``report_missing: pass``,
222
+ ``min_collected_tests: 0``, an unknown key, …) is rejected by
223
+ :meth:`from_mapping` at load time, so a profile cannot silently turn a
224
+ not-green verify outcome green (a profile is a contract, not a way to
225
+ disable the invariant).
226
+ """
227
+
228
+ min_collected_tests: int = 1
229
+ zero_tests: Literal["red"] = "red"
230
+ report_missing: Literal["red"] = "red"
231
+ report_parse_error: Literal["red"] = "red"
232
+ failed_tests: Literal["red"] = "red"
233
+ skipped_tests: Literal["red"] = "red"
234
+
235
+ #: Fields that may ONLY ever be "red" — they cannot be weakened by a profile.
236
+ RED_ONLY: ClassVar[tuple[str, ...]] = (
237
+ "zero_tests",
238
+ "report_missing",
239
+ "report_parse_error",
240
+ "failed_tests",
241
+ "skipped_tests",
242
+ )
243
+
244
+ @classmethod
245
+ def from_mapping(
246
+ cls, raw: Any, *, where: str = "commands.verify.observation"
247
+ ) -> "VerifyObservationPolicy":
248
+ """Parse + STRICTLY validate an ``observation:`` block; raise on weakening.
249
+
250
+ ``None`` → the strict defaults. Any weakening (a RED_ONLY field set to
251
+ anything but "red", ``min_collected_tests < 1``, or an unknown key such
252
+ as ``allow_zero_tests``) raises :class:`ValueError`.
253
+ """
254
+ if raw is None:
255
+ return cls()
256
+ if not isinstance(raw, Mapping):
257
+ raise ValueError(f"{where}: expected a mapping, got {type(raw).__name__}")
258
+ known = {"min_collected_tests", *cls.RED_ONLY}
259
+ unknown = sorted(k for k in raw if k not in known)
260
+ if unknown:
261
+ raise ValueError(
262
+ f"{where}: unknown observation key(s) {unknown} — the anti-false-green "
263
+ f"observation policy cannot be extended with weakening flags "
264
+ f"(e.g. allow_zero_tests). Permitted keys: {sorted(known)}."
265
+ )
266
+ for key in cls.RED_ONLY:
267
+ if key in raw and str(raw[key]).strip().lower() != "red":
268
+ raise ValueError(
269
+ f"{where}: {key}={raw[key]!r} weakens an anti-false-green invariant; "
270
+ f"only 'red' is permitted (a profile cannot turn a not-green verify "
271
+ f"outcome green)."
272
+ )
273
+ mct_raw = raw.get("min_collected_tests", 1)
274
+ try:
275
+ mct = int(mct_raw)
276
+ except (TypeError, ValueError):
277
+ raise ValueError(
278
+ f"{where}: min_collected_tests must be an integer, got {mct_raw!r}"
279
+ )
280
+ if mct < 1:
281
+ raise ValueError(
282
+ f"{where}: min_collected_tests={mct} weakens the invariant; it must be "
283
+ f">= 1 (a verify that observed zero tests is never green). Profiles may "
284
+ f"raise it (stricter), never lower it."
285
+ )
286
+ return cls(min_collected_tests=mct)
287
+
288
+
213
289
  @dataclass(frozen=True)
214
290
  class CommandSpec:
215
291
  """A single runnable command (design §1.4).
@@ -227,6 +303,9 @@ class CommandSpec:
227
303
  requires_materialized_deps: bool = False
228
304
  report: ReportSpec | None = None
229
305
  scope: ScopeSpec | None = None
306
+ #: Unweakenable anti-false-green observation policy (verify commands). ``None``
307
+ #: ⇒ the strict defaults apply (see :meth:`VerifyObservationPolicy.from_mapping`).
308
+ observation: VerifyObservationPolicy | None = None
230
309
  #: Free-form leftover keys (e.g. ``pass_condition``) preserved for later phases.
231
310
  extra: Mapping[str, Any] = field(default_factory=lambda: MappingProxyType({}))
232
311
 
@@ -0,0 +1,322 @@
1
+ """Contract-driven verify EXECUTOR (Contract Kernel Step 4 — fixtures only).
2
+
3
+ Runs a :class:`~codd.languages.verify_plan.VerifyRunPlan`, captures + parses its
4
+ machine-readable report, and classifies the outcome into a
5
+ :class:`~codd.languages.verify_plan.VerifyClass`. This is the imperative half that
6
+ :mod:`codd.languages.verify_plan`'s pure classifier deliberately is NOT: it spawns
7
+ the process, persists/locates the report, runs the report adapter, and then maps
8
+ the observed signals to a class.
9
+
10
+ NOT WIRED IN. The live ``VerifyRunner`` still uses the legacy path; this executor
11
+ is exercised only by fixtures (``tests/languages/test_verify_executor.py``). The
12
+ switch is Step 6.
13
+
14
+ THE CARDINAL RULE (anti-false-green). A not-green signal ALWAYS beats an
15
+ exit-0 / clean-looking result. Every observation failure — a missing report, an
16
+ unreadable report, zero collected tests, a failed test, a SKIPPED test (a skip is
17
+ not an authentic pass), a missing report adapter, a timeout — is classified as a
18
+ not-green class BEFORE any PASS is considered. There is deliberately NO "allow"
19
+ path: nothing in this module lets a zero/missing/failed/skipped observation become
20
+ PASS. The observation policy fields
21
+ (:class:`~codd.languages.profile.VerifyObservationPolicy`) are the invariant; they
22
+ only ever raise the bar (``min_collected_tests``), never lower it.
23
+
24
+ Mapping of :class:`~codd.languages.adapters.runner_report.RunnerExecution` fields
25
+ to classes (the anti-false-green ordering, GPT §5):
26
+
27
+ * ``report_required`` and report file absent → ``REPORT_MISSING``.
28
+ * report present but ``adapter.parse(...)`` raises → ``REPORT_UNREADABLE``.
29
+ * ``execution.total_cases == 0`` AND ``execution.executed_files == ∅`` (no executed
30
+ file) → ``ZERO_TESTS``; also ``execution.total_cases < observation.min_collected_tests``
31
+ → ``ZERO_TESTS`` (collected below the floor is "effectively no tests").
32
+ * ``execution.executed_failed_files`` non-empty (any failed test/file) → ``FAIL``.
33
+ * a SKIPPED test was observed (``observation.skipped_tests == "red"``) → ``FAIL``
34
+ (skip is not an authentic pass; see below for how a skip is detected).
35
+ * ``returncode != 0`` → ``FAIL`` (a nonzero exit beats a green-looking report).
36
+ * else (rc==0, report parsed, collected ≥ floor, no failed/skipped) → ``PASS``.
37
+
38
+ How a SKIP is detected from :class:`RunnerExecution`. The adapters fold a skipped
39
+ case into the FILE-level signal: a file carrying ANY skipped (or failed) case is
40
+ put in ``executed_failed_files``, never ``executed_passed_files`` (see the vitest /
41
+ go-test adapters — "a skip proves nothing"). So a skipped test surfaces here as a
42
+ ``executed_failed_files`` member, which the failed-test branch already reds. We
43
+ ALSO red the count-mismatch shape (``passed_cases < total_cases`` while no file is
44
+ marked failed) because a runner that reports cases but where passed < total has a
45
+ non-passed (failed/skipped) case the file rollup may not have attributed — a
46
+ defensive not-green so a partial report never sneaks to PASS.
47
+ """
48
+
49
+ from __future__ import annotations
50
+
51
+ import os
52
+ import subprocess # noqa: S404 — argv is from the trusted language profile, shell=False
53
+ from dataclasses import dataclass
54
+ from pathlib import Path
55
+
56
+ from .builtin_adapters import ensure_builtin_adapters_registered
57
+ from .registry import AdapterRegistry, default_adapter_registry
58
+ from .verify_plan import VerifyClass, VerifyRunPlan
59
+ from .adapters.runner_report import RunnerExecution
60
+
61
+ #: Default wall-clock cap for a verify subprocess. A run that exceeds it is a FAIL
62
+ #: (a timeout is never green), never a hang that blocks the gate forever.
63
+ DEFAULT_VERIFY_TIMEOUT_SECONDS = 1800
64
+
65
+
66
+ @dataclass(frozen=True)
67
+ class VerifyExecutionResult:
68
+ """Outcome of running a verify plan through the executor.
69
+
70
+ ``verify_class`` is the anti-false-green verdict (only ``PASS`` is green).
71
+ ``returncode`` is the subprocess exit code (``None`` if it never spawned / timed
72
+ out). ``execution`` is the parsed :class:`RunnerExecution` (``None`` when no
73
+ report was parsed — tool missing, report absent/unreadable, etc.). ``detail`` is
74
+ a short human reason, always populated for a not-green class.
75
+ """
76
+
77
+ verify_class: VerifyClass
78
+ returncode: int | None
79
+ execution: RunnerExecution | None
80
+ detail: str
81
+
82
+ @property
83
+ def is_green(self) -> bool:
84
+ return self.verify_class.is_green
85
+
86
+
87
+ def execute_verify_plan(
88
+ plan: VerifyRunPlan,
89
+ project_root: Path,
90
+ *,
91
+ adapter_registry: AdapterRegistry | None = None,
92
+ timeout: float | None = None,
93
+ ) -> VerifyExecutionResult:
94
+ """Run ``plan`` under ``project_root`` and classify the outcome (anti-false-green).
95
+
96
+ Steps, in order:
97
+
98
+ a. cwd = ``project_root / plan.cwd`` (or ``project_root``); env = ``os.environ``
99
+ copy updated with ``plan.env``.
100
+ b. If ``plan.report_path`` is set, UNLINK any stale report file BEFORE running —
101
+ a leftover green report from a prior run must never be read as this run's
102
+ result (the canonical stale-report false-green).
103
+ c. ``subprocess.run(plan.argv, shell=False, …, capture_output=True, text=True,
104
+ timeout=…)``. ``FileNotFoundError`` / ``OSError`` (tool not found / spawn
105
+ failure) → ``TOOL_MISSING``; ``TimeoutExpired`` → ``FAIL`` (never green).
106
+ d. If ``plan.report_capture == "stdout"``, persist the captured stdout to the
107
+ report path (``mkdir`` parents) — ``go test -json`` writes no file itself.
108
+ e. Resolve the runner_report adapter via
109
+ :func:`ensure_builtin_adapters_registered` then ``registry.get(...)``. If the
110
+ plan requires a report but the adapter is unavailable, the executor cannot
111
+ observe → ``REPORT_UNREADABLE`` (fail-closed; never PASS).
112
+ f. Classify with not-green BEFORE any PASS (see module docstring / GPT §5).
113
+ """
114
+
115
+ registry = adapter_registry if adapter_registry is not None else default_adapter_registry
116
+ run_timeout = timeout if timeout is not None else DEFAULT_VERIFY_TIMEOUT_SECONDS
117
+
118
+ # (a) Resolve cwd + env.
119
+ cwd = (project_root / plan.cwd) if plan.cwd else project_root
120
+ env = os.environ.copy()
121
+ env.update(plan.env)
122
+
123
+ # (b) Anti-false-green: unlink any STALE report before the run so a leftover
124
+ # green report can never be mistaken for this run's output.
125
+ report_path: Path | None = None
126
+ if plan.report_path:
127
+ report_path = (project_root / plan.report_path)
128
+ if not report_path.is_absolute():
129
+ report_path = report_path.resolve()
130
+ try:
131
+ report_path.unlink()
132
+ except FileNotFoundError:
133
+ pass
134
+ except OSError:
135
+ # An unremovable stale file is itself an observability hazard: we cannot
136
+ # guarantee what we read next is THIS run's report → fail-closed.
137
+ return VerifyExecutionResult(
138
+ verify_class=VerifyClass.REPORT_UNREADABLE,
139
+ returncode=None,
140
+ execution=None,
141
+ detail=f"could not remove stale report at {report_path} before run",
142
+ )
143
+
144
+ # (c) Run the command.
145
+ try:
146
+ completed = subprocess.run( # noqa: S603 — trusted argv, shell=False
147
+ list(plan.argv),
148
+ shell=False,
149
+ cwd=str(cwd),
150
+ env=env,
151
+ capture_output=True,
152
+ text=True,
153
+ timeout=run_timeout,
154
+ )
155
+ except (FileNotFoundError, OSError) as exc:
156
+ return VerifyExecutionResult(
157
+ verify_class=VerifyClass.TOOL_MISSING,
158
+ returncode=None,
159
+ execution=None,
160
+ detail=f"verify command could not spawn ({plan.command_str!r}): {exc}",
161
+ )
162
+ except subprocess.TimeoutExpired:
163
+ return VerifyExecutionResult(
164
+ verify_class=VerifyClass.FAIL,
165
+ returncode=None,
166
+ execution=None,
167
+ detail=f"verify command timed out after {run_timeout}s ({plan.command_str!r})",
168
+ )
169
+
170
+ returncode = completed.returncode
171
+
172
+ # (d) Persist captured stdout to the report path when the command streams its
173
+ # machine-readable report to stdout (e.g. `go test -json`).
174
+ if report_path is not None and (plan.report_capture or "").strip().lower() == "stdout":
175
+ try:
176
+ report_path.parent.mkdir(parents=True, exist_ok=True)
177
+ report_path.write_text(completed.stdout or "", encoding="utf-8")
178
+ except OSError as exc:
179
+ return VerifyExecutionResult(
180
+ verify_class=VerifyClass.REPORT_UNREADABLE,
181
+ returncode=returncode,
182
+ execution=None,
183
+ detail=f"could not persist captured stdout to {report_path}: {exc}",
184
+ )
185
+
186
+ # (e) Resolve the runner_report adapter (fail-closed when a required report has
187
+ # no adapter to read it — the executor cannot observe, so it must not PASS).
188
+ ensure_builtin_adapters_registered(registry)
189
+ adapter = None
190
+ if plan.report_adapter is not None:
191
+ adapter = registry.get("runner_report", plan.report_adapter)
192
+ if plan.report_required and adapter is None:
193
+ return VerifyExecutionResult(
194
+ verify_class=VerifyClass.REPORT_UNREADABLE,
195
+ returncode=returncode,
196
+ execution=None,
197
+ detail=(
198
+ f"required runner_report adapter "
199
+ f"{plan.report_adapter!r} is not registered — the executor cannot "
200
+ "observe the report, so the run cannot be classified green "
201
+ "(fail-closed; never PASS)"
202
+ ),
203
+ )
204
+
205
+ # (f) Classify — not-green BEFORE any PASS (GPT §5 ordering).
206
+ return _classify(plan, returncode, report_path, adapter, project_root)
207
+
208
+
209
+ def _classify(
210
+ plan: VerifyRunPlan,
211
+ returncode: int,
212
+ report_path: Path | None,
213
+ adapter: object | None,
214
+ project_root: Path,
215
+ ) -> VerifyExecutionResult:
216
+ """Map observed signals to a class, not-green ordered before PASS (pure of I/O
217
+ spawning — it only reads the report and inspects ``returncode``)."""
218
+
219
+ # report_required and report file absent → REPORT_MISSING.
220
+ if plan.report_required:
221
+ if report_path is None or not report_path.exists():
222
+ return VerifyExecutionResult(
223
+ verify_class=VerifyClass.REPORT_MISSING,
224
+ returncode=returncode,
225
+ execution=None,
226
+ detail=(
227
+ f"required report not found at {report_path} after the verify run "
228
+ "(an absent report is a not-green observation, never an empty pass)"
229
+ ),
230
+ )
231
+
232
+ execution: RunnerExecution | None = None
233
+ if plan.report_required and adapter is not None and report_path is not None:
234
+ # report present but adapter.parse(...) raises → REPORT_UNREADABLE.
235
+ try:
236
+ execution = adapter.parse(report_path, project_root=project_root) # type: ignore[attr-defined]
237
+ except Exception as exc: # noqa: BLE001 — ANY parse failure is unreadable, not a pass
238
+ return VerifyExecutionResult(
239
+ verify_class=VerifyClass.REPORT_UNREADABLE,
240
+ returncode=returncode,
241
+ execution=None,
242
+ detail=(
243
+ f"report at {report_path} present but unparseable by adapter "
244
+ f"{plan.report_adapter!r}: {exc}"
245
+ ),
246
+ )
247
+
248
+ if execution is not None:
249
+ collected = execution.total_cases
250
+ executed_files = execution.executed_files
251
+ # zero tests: nothing collected AND no executed file → ZERO_TESTS.
252
+ if collected == 0 and not executed_files:
253
+ return VerifyExecutionResult(
254
+ verify_class=VerifyClass.ZERO_TESTS,
255
+ returncode=returncode,
256
+ execution=execution,
257
+ detail="report parsed but it observed zero tests (no cases, no executed files)",
258
+ )
259
+ # collected below the policy floor → ZERO_TESTS (effectively no tests). The
260
+ # policy may RAISE min_collected_tests (stricter), never lower it below 1.
261
+ if collected < plan.observation.min_collected_tests:
262
+ return VerifyExecutionResult(
263
+ verify_class=VerifyClass.ZERO_TESTS,
264
+ returncode=returncode,
265
+ execution=execution,
266
+ detail=(
267
+ f"collected {collected} test(s), below the required minimum "
268
+ f"{plan.observation.min_collected_tests} (an under-collected run is "
269
+ "not an authentic pass)"
270
+ ),
271
+ )
272
+ # any failed test/file → FAIL. A SKIPPED case is folded by the adapters into
273
+ # executed_failed_files (a skip is not a clean pass), so this branch also
274
+ # reds a skip-tainted file (observation.skipped_tests == "red").
275
+ if execution.executed_failed_files:
276
+ return VerifyExecutionResult(
277
+ verify_class=VerifyClass.FAIL,
278
+ returncode=returncode,
279
+ execution=execution,
280
+ detail=(
281
+ f"report shows failed/skipped test file(s): "
282
+ f"{sorted(execution.executed_failed_files)} (a fail or a skip is "
283
+ "not an authentic pass)"
284
+ ),
285
+ )
286
+ # Defensive: per-case granularity available but passed < total ⇒ a non-passed
287
+ # (failed/skipped) case exists that the file rollup did not attribute → red,
288
+ # so a partial report never reaches PASS.
289
+ if execution.test_level_available and execution.passed_cases < execution.total_cases:
290
+ return VerifyExecutionResult(
291
+ verify_class=VerifyClass.FAIL,
292
+ returncode=returncode,
293
+ execution=execution,
294
+ detail=(
295
+ f"report shows {execution.passed_cases} passed of "
296
+ f"{execution.total_cases} collected — a non-passed (failed/skipped) "
297
+ "case is present, which is not an authentic pass"
298
+ ),
299
+ )
300
+
301
+ # returncode != 0 → FAIL (a nonzero exit beats a green-looking report).
302
+ if returncode != 0:
303
+ return VerifyExecutionResult(
304
+ verify_class=VerifyClass.FAIL,
305
+ returncode=returncode,
306
+ execution=execution,
307
+ detail=f"verify command exited {returncode} (nonzero exit beats a green-looking report)",
308
+ )
309
+
310
+ # TODO(Step 5 — scope observation): once scope checking lands, also red a run
311
+ # whose parsed execution does not cover every plan.must_include_test_sets (a
312
+ # report where, e.g., only the unit set ran while an e2e set was required is a
313
+ # not-green scope miss). Scope checking is deliberately NOT implemented here.
314
+
315
+ # All not-green checks passed: rc==0, required report parsed, collected ≥ floor,
316
+ # no failed/skipped → the only green class.
317
+ return VerifyExecutionResult(
318
+ verify_class=VerifyClass.PASS,
319
+ returncode=returncode,
320
+ execution=execution,
321
+ detail="verify passed (exit 0, report parsed, collected ≥ minimum, no failed/skipped tests)",
322
+ )
@@ -25,15 +25,24 @@ from enum import Enum
25
25
  from typing import Mapping
26
26
 
27
27
  from .contract import ResolvedLanguageContract
28
+ from .profile import VerifyObservationPolicy
28
29
 
29
30
 
30
31
  class VerifyClass(str, Enum):
31
- """Semantic class of a verify outcome (design §v2.69a)."""
32
+ """Semantic class of a verify outcome (design §v2.69a / §5).
33
+
34
+ ``REPORT_MISSING`` vs ``REPORT_UNREADABLE`` are deliberately distinct (GPT §5,
35
+ "MECE では missing と unreadable は別"): the report being ABSENT is a different
36
+ observability failure from the report being PRESENT but unparseable (a garbled
37
+ JSON/JSONL, or no adapter able to read it). Both are not-green — only ``PASS``
38
+ is green — but keeping them separate lets the executor report the honest reason.
39
+ """
32
40
 
33
41
  PASS = "PASS"
34
42
  FAIL = "FAIL"
35
43
  ZERO_TESTS = "ZERO_TESTS"
36
44
  REPORT_MISSING = "REPORT_MISSING"
45
+ REPORT_UNREADABLE = "REPORT_UNREADABLE"
37
46
  TOOL_MISSING = "TOOL_MISSING"
38
47
  CONFIG_ERROR = "CONFIG_ERROR"
39
48
 
@@ -54,6 +63,13 @@ class VerifyRunPlan:
54
63
  report_adapter: str | None
55
64
  report_required: bool
56
65
  must_include_test_sets: tuple[str, ...]
66
+ observation: VerifyObservationPolicy
67
+ #: ``report.capture`` from the verify CommandSpec (e.g. Go's ``stdout``). When
68
+ #: ``"stdout"`` the verify command streams its machine-readable report to stdout
69
+ #: and the EXECUTOR must persist that captured stdout to ``report_path`` before
70
+ #: the adapter reads it (``go test -json`` writes no file of its own). ``None``
71
+ #: ⇒ the command produces the report file directly (no executor capture).
72
+ report_capture: str | None = None
57
73
 
58
74
  @property
59
75
  def command_str(self) -> str:
@@ -82,7 +98,10 @@ def build_verify_plan(contract: ResolvedLanguageContract) -> VerifyRunPlan | Non
82
98
  report_path=(report.path if report else None),
83
99
  report_adapter=(report.adapter if report else None),
84
100
  report_required=bool(report and report.path),
101
+ report_capture=(report.capture if report else None),
85
102
  must_include_test_sets=(scope.must_include_test_sets if scope else ()),
103
+ # None on the command ⇒ the strict defaults (the invariant), never weaker.
104
+ observation=(cmd.observation or VerifyObservationPolicy()),
86
105
  )
87
106
 
88
107
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "codd-dev"
7
- version = "2.71.0"
7
+ version = "2.73.0"
8
8
  description = "CoDD: Coherence-Driven Development — cross-artifact change impact analysis"
9
9
  readme = "README.md"
10
10
  license = "MIT"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes