codd-dev 2.72.0__tar.gz → 2.74.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.72.0 → codd_dev-2.74.0}/PKG-INFO +1 -1
  2. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/__init__.py +1 -1
  3. codd_dev-2.74.0/codd/languages/verify_executor.py +391 -0
  4. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/languages/verify_plan.py +47 -2
  5. {codd_dev-2.72.0 → codd_dev-2.74.0}/pyproject.toml +1 -1
  6. {codd_dev-2.72.0 → codd_dev-2.74.0}/.gitignore +0 -0
  7. {codd_dev-2.72.0 → codd_dev-2.74.0}/LICENSE +0 -0
  8. {codd_dev-2.72.0 → codd_dev-2.74.0}/README.md +0 -0
  9. {codd_dev-2.72.0 → codd_dev-2.74.0}/bench_fixture/README.md +0 -0
  10. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/__main__.py +0 -0
  11. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/_git_helper.py +0 -0
  12. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/action_outcome.py +0 -0
  13. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/ai_invoke.py +0 -0
  14. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/ai_patch.py +0 -0
  15. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/artifact_contract.py +0 -0
  16. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/artifact_ids.py +0 -0
  17. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/artifacts/catalog.yaml +0 -0
  18. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/ask_user_question_adapter.py +0 -0
  19. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/assembler.py +0 -0
  20. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/bridge.py +0 -0
  21. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/brownfield/__init__.py +0 -0
  22. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/brownfield/pipeline.py +0 -0
  23. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/capability_completeness.py +0 -0
  24. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/claude_cli.py +0 -0
  25. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/cli.py +0 -0
  26. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/clustering.py +0 -0
  27. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/coherence_adapters.py +0 -0
  28. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/coherence_engine.py +0 -0
  29. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/confidence.py +0 -0
  30. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/config.py +0 -0
  31. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/config_schema.py +0 -0
  32. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/contracts.py +0 -0
  33. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/contracts_registry/__init__.py +0 -0
  34. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/contracts_registry/__main__.py +0 -0
  35. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/contracts_registry/certify.py +0 -0
  36. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/contracts_registry/generate_matrix.py +0 -0
  37. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/contracts_registry/registry.py +0 -0
  38. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/coverage_auditor.py +0 -0
  39. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/coverage_execution_coherence.py +0 -0
  40. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/coverage_metrics.py +0 -0
  41. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/__init__.py +0 -0
  42. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/auto_repair.py +0 -0
  43. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/builder.py +0 -0
  44. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/checks/__init__.py +0 -0
  45. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
  46. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/checks/artifact_contract_check.py +0 -0
  47. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/checks/ci_health.py +0 -0
  48. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/checks/dependency_freshness.py +0 -0
  49. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/checks/depends_on_consistency.py +0 -0
  50. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/checks/deployment_completeness.py +0 -0
  51. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/checks/edge_validity.py +0 -0
  52. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/checks/environment_coverage.py +0 -0
  53. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/checks/implementation_coverage.py +0 -0
  54. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/checks/node_completeness.py +0 -0
  55. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/checks/opt_out.py +0 -0
  56. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/checks/task_completion.py +0 -0
  57. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/checks/transitive_closure.py +0 -0
  58. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/checks/ui_coherence.py +0 -0
  59. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/checks/user_journey_coherence.py +0 -0
  60. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/coverage_axes.py +0 -0
  61. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/defaults/cli.yaml +0 -0
  62. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
  63. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/defaults/csharp.yaml +0 -0
  64. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/defaults/elixir.yaml +0 -0
  65. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/defaults/generic.yaml +0 -0
  66. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/defaults/iot.yaml +0 -0
  67. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/defaults/java.yaml +0 -0
  68. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/defaults/kotlin.yaml +0 -0
  69. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/defaults/mobile.yaml +0 -0
  70. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/defaults/ruby.yaml +0 -0
  71. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/defaults/rust.yaml +0 -0
  72. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/defaults/scala.yaml +0 -0
  73. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/defaults/swift.yaml +0 -0
  74. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
  75. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/defaults/web.yaml +0 -0
  76. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/extractor.py +0 -0
  77. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/impact.py +0 -0
  78. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/runner.py +0 -0
  79. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/defaults.py +0 -0
  80. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/defaults.yaml +0 -0
  81. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dependency_lock_coherence.py +0 -0
  82. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deploy_targets/__init__.py +0 -0
  83. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deploy_targets/app_service.py +0 -0
  84. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deploy_targets/base.py +0 -0
  85. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deploy_targets/docker_compose.py +0 -0
  86. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployer.py +0 -0
  87. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/__init__.py +0 -0
  88. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/checks/__init__.py +0 -0
  89. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
  90. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
  91. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
  92. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
  93. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/extractor.py +0 -0
  94. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/__init__.py +0 -0
  95. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/ai_command.py +0 -0
  96. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/ai_command_factory.py +0 -0
  97. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/codex_app_server.py +0 -0
  98. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/llm_consideration.py +0 -0
  99. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/schema/__init__.py +0 -0
  100. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/schema/prisma.py +0 -0
  101. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/target/__init__.py +0 -0
  102. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/target/docker_compose.py +0 -0
  103. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/verification/__init__.py +0 -0
  104. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
  105. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
  106. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
  107. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
  108. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
  109. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/verification/curl.py +0 -0
  110. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
  111. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
  112. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/verification/playwright.py +0 -0
  113. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/verification/pytest_http.py +0 -0
  114. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/verification/vitest.py +0 -0
  115. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/design_md.py +0 -0
  116. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/diff/__init__.py +0 -0
  117. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/diff/apply.py +0 -0
  118. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/diff/engine.py +0 -0
  119. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/diff/persistence.py +0 -0
  120. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/diff/templates/diff_prompt.md +0 -0
  121. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/discovery.py +0 -0
  122. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/drift.py +0 -0
  123. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/e2e_contract_coherence.py +0 -0
  124. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/e2e_extractor.py +0 -0
  125. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/e2e_generator.py +0 -0
  126. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/e2e_harness.py +0 -0
  127. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/e2e_runner.py +0 -0
  128. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/elicit/__init__.py +0 -0
  129. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/elicit/apply.py +0 -0
  130. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/elicit/engine.py +0 -0
  131. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/elicit/finding.py +0 -0
  132. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/elicit/formatters/__init__.py +0 -0
  133. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/elicit/formatters/base.py +0 -0
  134. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/elicit/formatters/interactive.py +0 -0
  135. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/elicit/formatters/json_fmt.py +0 -0
  136. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/elicit/formatters/md.py +0 -0
  137. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/elicit/lexicon_loader.py +0 -0
  138. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/elicit/persistence.py +0 -0
  139. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
  140. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/env_refs.py +0 -0
  141. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/extract_ai.py +0 -0
  142. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/extract_paths.py +0 -0
  143. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/extractor.py +0 -0
  144. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fix/__init__.py +0 -0
  145. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fix/candidate_selector.py +0 -0
  146. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fix/design_updater.py +0 -0
  147. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fix/impl_propagation.py +0 -0
  148. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fix/interactive_prompt.py +0 -0
  149. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fix/phenomenon_fixer.py +0 -0
  150. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fix/phenomenon_parser.py +0 -0
  151. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fix/risk_classifier.py +0 -0
  152. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fix/templates/clarification_question.txt +0 -0
  153. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fix/templates/design_update.txt +0 -0
  154. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fix/templates/impl_update.txt +0 -0
  155. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
  156. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fix/templates/risk_assessment.txt +0 -0
  157. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fix/templates_loader.py +0 -0
  158. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fixer.py +0 -0
  159. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fixup_drift.py +0 -0
  160. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fixup_drift_strategies/__init__.py +0 -0
  161. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
  162. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
  163. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
  164. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/frontmatter.py +0 -0
  165. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/generator.py +0 -0
  166. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/git_evidence.py +0 -0
  167. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/graph.py +0 -0
  168. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/greenfield/__init__.py +0 -0
  169. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/greenfield/pipeline.py +0 -0
  170. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/hitl_session.py +0 -0
  171. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/hooks/__init__.py +0 -0
  172. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/hooks/pre-commit +0 -0
  173. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
  174. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
  175. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/hooks/recipes/codex_hook.sh +0 -0
  176. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
  177. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
  178. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/iac_nfr.py +0 -0
  179. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/implement_oracle.py +0 -0
  180. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/implement_oracle_scope.py +0 -0
  181. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/implementer/__init__.py +0 -0
  182. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/implementer/chunked_runner.py +0 -0
  183. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/implementer/typecheck_loop.py +0 -0
  184. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/implementer.py +0 -0
  185. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/import_coherence.py +0 -0
  186. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/inheritance.py +0 -0
  187. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/init/__init__.py +0 -0
  188. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/init/lexicon_suggest.py +0 -0
  189. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/init/llm_lexicon_suggester.py +0 -0
  190. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/init/stack_detector.py +0 -0
  191. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/knowledge_fetcher.py +0 -0
  192. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/languages/__init__.py +0 -0
  193. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/languages/adapters/__init__.py +0 -0
  194. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/languages/adapters/runner_report.py +0 -0
  195. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/languages/builtin_adapters.py +0 -0
  196. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/languages/compat.py +0 -0
  197. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/languages/contract.py +0 -0
  198. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/languages/loader.py +0 -0
  199. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/languages/path_planner.py +0 -0
  200. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/languages/profile.py +0 -0
  201. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/languages/profiles/go.yaml +0 -0
  202. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/languages/profiles/python.yaml +0 -0
  203. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/languages/profiles/typescript.yaml +0 -0
  204. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/languages/registry.py +0 -0
  205. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/lexicon.py +0 -0
  206. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/lexicon_cli/__init__.py +0 -0
  207. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
  208. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/lexicon_cli/formatters/html.py +0 -0
  209. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
  210. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/lexicon_cli/formatters/md.py +0 -0
  211. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/lexicon_cli/inspector.py +0 -0
  212. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/lexicon_cli/manager.py +0 -0
  213. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/lexicon_cli/reporter.py +0 -0
  214. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/lexicon_cli/threshold.py +0 -0
  215. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/__init__.py +0 -0
  216. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/approval.py +0 -0
  217. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/best_practice_augmenter.py +0 -0
  218. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/criteria_expander.py +0 -0
  219. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/design_doc_extractor.py +0 -0
  220. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/impl_step_deriver.py +0 -0
  221. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/means_catalog_loader.py +0 -0
  222. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/parser.py +0 -0
  223. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/plan_deriver.py +0 -0
  224. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/prompt_builder.py +0 -0
  225. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/strategy_validator.py +0 -0
  226. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
  227. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
  228. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
  229. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
  230. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
  231. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/templates/meta_instruction.md +0 -0
  232. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/templates/plan_derive_meta.md +0 -0
  233. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
  234. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/mcp_server.py +0 -0
  235. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/measure.py +0 -0
  236. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/operational_e2e_audit.py +0 -0
  237. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/operations_derive.py +0 -0
  238. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/parsing/__init__.py +0 -0
  239. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/parsing/_shared.py +0 -0
  240. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/parsing/api_specs.py +0 -0
  241. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/parsing/filesystem_routes.py +0 -0
  242. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/parsing/iac.py +0 -0
  243. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/parsing/python_ast.py +0 -0
  244. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/parsing/schemas.py +0 -0
  245. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/parsing/tests_builddeps.py +0 -0
  246. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/parsing/treesitter.py +0 -0
  247. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/planner.py +0 -0
  248. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/policy.py +0 -0
  249. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/preflight/__init__.py +0 -0
  250. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/preflight/defaults/cli.yaml +0 -0
  251. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/preflight/defaults/generic.yaml +0 -0
  252. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/preflight/defaults/iot.yaml +0 -0
  253. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/preflight/defaults/mobile.yaml +0 -0
  254. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/preflight/defaults/web.yaml +0 -0
  255. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/project_types.py +0 -0
  256. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/propagate.py +0 -0
  257. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/propagation_common.py +0 -0
  258. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/propagator.py +0 -0
  259. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/reconciliation_ledger.py +0 -0
  260. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/reference_resolution.py +0 -0
  261. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/registry.py +0 -0
  262. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/__init__.py +0 -0
  263. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/approval_repair.py +0 -0
  264. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/auto_scope_guard.py +0 -0
  265. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/engine.py +0 -0
  266. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/git_patcher.py +0 -0
  267. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/history.py +0 -0
  268. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/llm_repair_engine.py +0 -0
  269. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/loop.py +0 -0
  270. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/primary_picker.py +0 -0
  271. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/proof_breaks.py +0 -0
  272. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/repair_result.py +0 -0
  273. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/repairability_classifier.py +0 -0
  274. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/schema.py +0 -0
  275. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/templates/analyze_meta.md +0 -0
  276. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/templates/propose_meta.md +0 -0
  277. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
  278. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/templates/repairability_meta.md +0 -0
  279. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/test_failure_attribution.py +0 -0
  280. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/verify_runner.py +0 -0
  281. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair_slice.py +0 -0
  282. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/require.py +0 -0
  283. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/require_plugins.py +0 -0
  284. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/require_propagate.py +0 -0
  285. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
  286. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
  287. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
  288. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
  289. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/required_artifacts/defaults/web.yaml +0 -0
  290. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/required_artifacts_deriver.py +0 -0
  291. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
  292. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
  293. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
  294. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
  295. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
  296. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/requirement_completeness_auditor.py +0 -0
  297. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/requirement_reconciliation.py +0 -0
  298. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/requirements_meta.py +0 -0
  299. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/restoration_report.py +0 -0
  300. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/restore.py +0 -0
  301. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/routes_extractor.py +0 -0
  302. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/runtime_smoke/__init__.py +0 -0
  303. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/runtime_smoke/checks.py +0 -0
  304. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/runtime_smoke/config.py +0 -0
  305. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/runtime_smoke/report.py +0 -0
  306. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/runtime_smoke/runner.py +0 -0
  307. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/scanner.py +0 -0
  308. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/schema_refs.py +0 -0
  309. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/screen_flow_validator.py +0 -0
  310. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/screen_transition_extractor.py +0 -0
  311. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/screen_transitions/defaults.yaml +0 -0
  312. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/skills_cli/__init__.py +0 -0
  313. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/skills_cli/discovery.py +0 -0
  314. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/skills_cli/manager.py +0 -0
  315. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/skills_cli/paths.py +0 -0
  316. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/stack/__init__.py +0 -0
  317. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/stack/adapters/__init__.py +0 -0
  318. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/stack/adapters/_base.py +0 -0
  319. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/stack/adapters/nextjs.py +0 -0
  320. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/stack/adapters/playwright.py +0 -0
  321. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/stack/compose.py +0 -0
  322. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/stack/loader.py +0 -0
  323. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/stack/lock.py +0 -0
  324. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/stack/obligations.py +0 -0
  325. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/stack/profile.py +0 -0
  326. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/stack/profiles/addons/playwright.yaml +0 -0
  327. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/stack/profiles/addons/prisma.yaml +0 -0
  328. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/stack/profiles/frameworks/nextjs.yaml +0 -0
  329. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/stack/project.py +0 -0
  330. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/stack/registry.py +0 -0
  331. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/stack/resolve.py +0 -0
  332. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/surface_reconciliation.py +0 -0
  333. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/synth.py +0 -0
  334. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/templates/codd.yaml.tmpl +0 -0
  335. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/templates/conventions.yaml.tmpl +0 -0
  336. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
  337. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/templates/doc_links.yaml.tmpl +0 -0
  338. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
  339. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
  340. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
  341. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
  342. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
  343. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/templates/extracted/system-context.md.j2 +0 -0
  344. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/templates/gitignore.tmpl +0 -0
  345. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/templates/lexicon_questions.md +0 -0
  346. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/templates/lexicon_schema.yaml +0 -0
  347. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/templates/overrides.yaml.tmpl +0 -0
  348. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/test_detection.py +0 -0
  349. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/test_import_coherence.py +0 -0
  350. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/traceability.py +0 -0
  351. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/validator.py +0 -0
  352. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/vb_marker_authenticity.py +0 -0
  353. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/vb_rerun_scope.py +0 -0
  354. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/verifiable_behavior_audit.py +0 -0
  355. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/watch/__init__.py +0 -0
  356. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/watch/events.py +0 -0
  357. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/watch/propagation_log.py +0 -0
  358. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/watch/propagation_pipeline.py +0 -0
  359. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/watch/test_runner.py +0 -0
  360. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/watch/watcher.py +0 -0
  361. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/wiring.py +0 -0
  362. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
  363. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
  364. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
  365. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
  366. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
  367. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
  368. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
  369. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
  370. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
  371. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
  372. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
  373. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
  374. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
  375. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
  376. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
  377. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
  378. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
  379. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
  380. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
  381. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
  382. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
  383. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
  384. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
  385. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
  386. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
  387. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
  388. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
  389. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
  390. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
  391. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
  392. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
  393. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
  394. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
  395. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
  396. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
  397. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
  398. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
  399. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
  400. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
  401. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
  402. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
  403. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
  404. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
  405. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
  406. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
  407. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
  408. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
  409. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
  410. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
  411. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
  412. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
  413. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
  414. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
  415. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
  416. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
  417. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
  418. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
  419. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
  420. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
  421. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
  422. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
  423. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
  424. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
  425. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
  426. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
  427. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
  428. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
  429. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
  430. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
  431. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
  432. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
  433. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
  434. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
  435. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
  436. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
  437. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
  438. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
  439. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
  440. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
  441. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
  442. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
  443. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
  444. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
  445. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
  446. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
  447. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
  448. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
  449. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
  450. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
  451. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
  452. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
  453. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
  454. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
  455. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
  456. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
  457. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
  458. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
  459. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
  460. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
  461. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
  462. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
  463. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
  464. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
  465. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
  466. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
  467. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
  468. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
  469. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
  470. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
  471. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
  472. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
  473. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
  474. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
  475. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
  476. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
  477. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
  478. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
  479. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
  480. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
  481. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
  482. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
  483. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
  484. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
  485. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
  486. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
  487. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
  488. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
  489. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
  490. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
  491. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
  492. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
  493. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
  494. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
  495. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
  496. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
  497. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
  498. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
  499. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
  500. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
  501. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
  502. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
  503. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
  504. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
  505. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
  506. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
  507. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
  508. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
  509. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
  510. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
  511. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
  512. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
  513. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
  514. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
  515. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
  516. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
  517. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
  518. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
  519. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
  520. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
  521. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
  522. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
  523. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
  524. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
  525. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
  526. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
  527. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
  528. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
  529. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
  530. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
  531. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
  532. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
  533. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
  534. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
  535. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
  536. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
  537. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
  538. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
  539. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
  540. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
  541. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
  542. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
  543. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
  544. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
  545. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
  546. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
  547. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
  548. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
  549. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
  550. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
  551. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
  552. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
  553. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
  554. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
  555. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
  556. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
  557. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
  558. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
  559. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
  560. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
  561. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
  562. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
  563. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
  564. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
  565. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
  566. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
  567. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
  568. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
  569. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
  570. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
  571. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
  572. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
  573. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
  574. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
  575. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
  576. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
  577. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
  578. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
  579. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
  580. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
  581. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
  582. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
  583. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
  584. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
  585. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
  586. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
  587. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
  588. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
  589. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
  590. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
  591. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
  592. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
  593. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
  594. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
  595. {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/stack_map.yaml +0 -0
  596. {codd_dev-2.72.0 → codd_dev-2.74.0}/docs/cookbook/cdp_browser/README.md +0 -0
  597. {codd_dev-2.72.0 → codd_dev-2.74.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
  598. {codd_dev-2.72.0 → codd_dev-2.74.0}/docs/requirements/README.md +0 -0
  599. {codd_dev-2.72.0 → codd_dev-2.74.0}/dogfood/README.md +0 -0
  600. {codd_dev-2.72.0 → codd_dev-2.74.0}/dogfood/fixtures/flat_py_app/README.md +0 -0
  601. {codd_dev-2.72.0 → codd_dev-2.74.0}/examples/README.md +0 -0
  602. {codd_dev-2.72.0 → codd_dev-2.74.0}/skills/codd-assemble/SKILL.md +0 -0
  603. {codd_dev-2.72.0 → codd_dev-2.74.0}/skills/codd-evolve/SKILL.md +0 -0
  604. {codd_dev-2.72.0 → codd_dev-2.74.0}/skills/codd-generate/SKILL.md +0 -0
  605. {codd_dev-2.72.0 → codd_dev-2.74.0}/skills/codd-greenfield/SKILL.md +0 -0
  606. {codd_dev-2.72.0 → codd_dev-2.74.0}/skills/codd-impact/SKILL.md +0 -0
  607. {codd_dev-2.72.0 → codd_dev-2.74.0}/skills/codd-init/SKILL.md +0 -0
  608. {codd_dev-2.72.0 → codd_dev-2.74.0}/skills/codd-propagate/SKILL.md +0 -0
  609. {codd_dev-2.72.0 → codd_dev-2.74.0}/skills/codd-restore/SKILL.md +0 -0
  610. {codd_dev-2.72.0 → codd_dev-2.74.0}/skills/codd-scan/SKILL.md +0 -0
  611. {codd_dev-2.72.0 → codd_dev-2.74.0}/skills/codd-validate/SKILL.md +0 -0
  612. {codd_dev-2.72.0 → codd_dev-2.74.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.72.0
3
+ Version: 2.74.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.72.0"
3
+ __version__ = "2.74.0"
@@ -0,0 +1,391 @@
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
+ * a required test set (``plan.required_test_sets``) had ZERO executed files in the
37
+ parsed report → ``SCOPE_MISSING`` (Step 5; the "unit-only PASS" hole). Checked
38
+ LAST, after the zero/failed/rc!=0 branches (so a more fundamental failure always
39
+ wins) and just before PASS (so a scope miss on an exit-0 clean report is RED).
40
+ * else (rc==0, report parsed, collected ≥ floor, no failed/skipped, every required
41
+ scope covered) → ``PASS``.
42
+
43
+ How a SKIP is detected from :class:`RunnerExecution`. The adapters fold a skipped
44
+ case into the FILE-level signal: a file carrying ANY skipped (or failed) case is
45
+ put in ``executed_failed_files``, never ``executed_passed_files`` (see the vitest /
46
+ go-test adapters — "a skip proves nothing"). So a skipped test surfaces here as a
47
+ ``executed_failed_files`` member, which the failed-test branch already reds. We
48
+ ALSO red the count-mismatch shape (``passed_cases < total_cases`` while no file is
49
+ marked failed) because a runner that reports cases but where passed < total has a
50
+ non-passed (failed/skipped) case the file rollup may not have attributed — a
51
+ defensive not-green so a partial report never sneaks to PASS.
52
+ """
53
+
54
+ from __future__ import annotations
55
+
56
+ import os
57
+ import subprocess # noqa: S404 — argv is from the trusted language profile, shell=False
58
+ from dataclasses import dataclass
59
+ from pathlib import Path
60
+
61
+ from .builtin_adapters import ensure_builtin_adapters_registered
62
+ from .registry import AdapterRegistry, default_adapter_registry
63
+ from .verify_plan import VerifyClass, VerifyRunPlan
64
+ from .adapters.runner_report import RunnerExecution
65
+
66
+ #: Default wall-clock cap for a verify subprocess. A run that exceeds it is a FAIL
67
+ #: (a timeout is never green), never a hang that blocks the gate forever.
68
+ DEFAULT_VERIFY_TIMEOUT_SECONDS = 1800
69
+
70
+
71
+ @dataclass(frozen=True)
72
+ class VerifyExecutionResult:
73
+ """Outcome of running a verify plan through the executor.
74
+
75
+ ``verify_class`` is the anti-false-green verdict (only ``PASS`` is green).
76
+ ``returncode`` is the subprocess exit code (``None`` if it never spawned / timed
77
+ out). ``execution`` is the parsed :class:`RunnerExecution` (``None`` when no
78
+ report was parsed — tool missing, report absent/unreadable, etc.). ``detail`` is
79
+ a short human reason, always populated for a not-green class.
80
+ """
81
+
82
+ verify_class: VerifyClass
83
+ returncode: int | None
84
+ execution: RunnerExecution | None
85
+ detail: str
86
+
87
+ @property
88
+ def is_green(self) -> bool:
89
+ return self.verify_class.is_green
90
+
91
+
92
+ def execute_verify_plan(
93
+ plan: VerifyRunPlan,
94
+ project_root: Path,
95
+ *,
96
+ adapter_registry: AdapterRegistry | None = None,
97
+ timeout: float | None = None,
98
+ ) -> VerifyExecutionResult:
99
+ """Run ``plan`` under ``project_root`` and classify the outcome (anti-false-green).
100
+
101
+ Steps, in order:
102
+
103
+ a. cwd = ``project_root / plan.cwd`` (or ``project_root``); env = ``os.environ``
104
+ copy updated with ``plan.env``.
105
+ b. If ``plan.report_path`` is set, UNLINK any stale report file BEFORE running —
106
+ a leftover green report from a prior run must never be read as this run's
107
+ result (the canonical stale-report false-green).
108
+ c. ``subprocess.run(plan.argv, shell=False, …, capture_output=True, text=True,
109
+ timeout=…)``. ``FileNotFoundError`` / ``OSError`` (tool not found / spawn
110
+ failure) → ``TOOL_MISSING``; ``TimeoutExpired`` → ``FAIL`` (never green).
111
+ d. If ``plan.report_capture == "stdout"``, persist the captured stdout to the
112
+ report path (``mkdir`` parents) — ``go test -json`` writes no file itself.
113
+ e. Resolve the runner_report adapter via
114
+ :func:`ensure_builtin_adapters_registered` then ``registry.get(...)``. If the
115
+ plan requires a report but the adapter is unavailable, the executor cannot
116
+ observe → ``REPORT_UNREADABLE`` (fail-closed; never PASS).
117
+ f. Classify with not-green BEFORE any PASS (see module docstring / GPT §5).
118
+ """
119
+
120
+ registry = adapter_registry if adapter_registry is not None else default_adapter_registry
121
+ run_timeout = timeout if timeout is not None else DEFAULT_VERIFY_TIMEOUT_SECONDS
122
+
123
+ # (a) Resolve cwd + env.
124
+ cwd = (project_root / plan.cwd) if plan.cwd else project_root
125
+ env = os.environ.copy()
126
+ env.update(plan.env)
127
+
128
+ # (b) Anti-false-green: unlink any STALE report before the run so a leftover
129
+ # green report can never be mistaken for this run's output.
130
+ report_path: Path | None = None
131
+ if plan.report_path:
132
+ report_path = (project_root / plan.report_path)
133
+ if not report_path.is_absolute():
134
+ report_path = report_path.resolve()
135
+ try:
136
+ report_path.unlink()
137
+ except FileNotFoundError:
138
+ pass
139
+ except OSError:
140
+ # An unremovable stale file is itself an observability hazard: we cannot
141
+ # guarantee what we read next is THIS run's report → fail-closed.
142
+ return VerifyExecutionResult(
143
+ verify_class=VerifyClass.REPORT_UNREADABLE,
144
+ returncode=None,
145
+ execution=None,
146
+ detail=f"could not remove stale report at {report_path} before run",
147
+ )
148
+
149
+ # (c) Run the command.
150
+ try:
151
+ completed = subprocess.run( # noqa: S603 — trusted argv, shell=False
152
+ list(plan.argv),
153
+ shell=False,
154
+ cwd=str(cwd),
155
+ env=env,
156
+ capture_output=True,
157
+ text=True,
158
+ timeout=run_timeout,
159
+ )
160
+ except (FileNotFoundError, OSError) as exc:
161
+ return VerifyExecutionResult(
162
+ verify_class=VerifyClass.TOOL_MISSING,
163
+ returncode=None,
164
+ execution=None,
165
+ detail=f"verify command could not spawn ({plan.command_str!r}): {exc}",
166
+ )
167
+ except subprocess.TimeoutExpired:
168
+ return VerifyExecutionResult(
169
+ verify_class=VerifyClass.FAIL,
170
+ returncode=None,
171
+ execution=None,
172
+ detail=f"verify command timed out after {run_timeout}s ({plan.command_str!r})",
173
+ )
174
+
175
+ returncode = completed.returncode
176
+
177
+ # (d) Persist captured stdout to the report path when the command streams its
178
+ # machine-readable report to stdout (e.g. `go test -json`).
179
+ if report_path is not None and (plan.report_capture or "").strip().lower() == "stdout":
180
+ try:
181
+ report_path.parent.mkdir(parents=True, exist_ok=True)
182
+ report_path.write_text(completed.stdout or "", encoding="utf-8")
183
+ except OSError as exc:
184
+ return VerifyExecutionResult(
185
+ verify_class=VerifyClass.REPORT_UNREADABLE,
186
+ returncode=returncode,
187
+ execution=None,
188
+ detail=f"could not persist captured stdout to {report_path}: {exc}",
189
+ )
190
+
191
+ # (e) Resolve the runner_report adapter (fail-closed when a required report has
192
+ # no adapter to read it — the executor cannot observe, so it must not PASS).
193
+ ensure_builtin_adapters_registered(registry)
194
+ adapter = None
195
+ if plan.report_adapter is not None:
196
+ adapter = registry.get("runner_report", plan.report_adapter)
197
+ if plan.report_required and adapter is None:
198
+ return VerifyExecutionResult(
199
+ verify_class=VerifyClass.REPORT_UNREADABLE,
200
+ returncode=returncode,
201
+ execution=None,
202
+ detail=(
203
+ f"required runner_report adapter "
204
+ f"{plan.report_adapter!r} is not registered — the executor cannot "
205
+ "observe the report, so the run cannot be classified green "
206
+ "(fail-closed; never PASS)"
207
+ ),
208
+ )
209
+
210
+ # (f) Classify — not-green BEFORE any PASS (GPT §5 ordering).
211
+ return _classify(plan, returncode, report_path, adapter, project_root)
212
+
213
+
214
+ def _norm_rel_posix(path: str) -> str:
215
+ """Normalize a path to comparable project-relative POSIX form for scope matching.
216
+
217
+ Mirrors how :class:`RunnerExecution` already stores executed files (project-
218
+ relative, POSIX) but is defensive about a stray ``./`` prefix / backslash and a
219
+ trailing slash so a root and an executed-file path compare on the same footing.
220
+ Uses PREFIX stripping (not ``lstrip("./")``, which is a character class and would
221
+ wrongly eat a legitimate leading dot, e.g. ``.codd/x`` → ``codd/x``).
222
+ """
223
+ p = str(path or "").replace("\\", "/")
224
+ if p.startswith("./"):
225
+ p = p[2:]
226
+ return p.rstrip("/")
227
+
228
+
229
+ def _set_is_covered(root: str, executed: list[str]) -> bool:
230
+ """True iff some executed file falls under ``root`` (a directory prefix match).
231
+
232
+ ``root`` is normalized like the executed paths. A root of ``.`` or ``""`` (a
233
+ colocated set, whose tests sit anywhere among the sources) is trivially covered
234
+ by ANY executed file. A specific root such as ``tests/e2e`` is covered only by an
235
+ executed file equal to it or beneath it (``path == root`` or
236
+ ``path.startswith(root + "/")``) — so ``tests/unit/...`` never counts as covering
237
+ ``tests/e2e``.
238
+ """
239
+ norm_root = _norm_rel_posix(root)
240
+ if norm_root in ("", "."):
241
+ return bool(executed)
242
+ prefix = norm_root + "/"
243
+ return any(p == norm_root or p.startswith(prefix) for p in executed)
244
+
245
+
246
+ def _classify(
247
+ plan: VerifyRunPlan,
248
+ returncode: int,
249
+ report_path: Path | None,
250
+ adapter: object | None,
251
+ project_root: Path,
252
+ ) -> VerifyExecutionResult:
253
+ """Map observed signals to a class, not-green ordered before PASS (pure of I/O
254
+ spawning — it only reads the report and inspects ``returncode``)."""
255
+
256
+ # report_required and report file absent → REPORT_MISSING.
257
+ if plan.report_required:
258
+ if report_path is None or not report_path.exists():
259
+ return VerifyExecutionResult(
260
+ verify_class=VerifyClass.REPORT_MISSING,
261
+ returncode=returncode,
262
+ execution=None,
263
+ detail=(
264
+ f"required report not found at {report_path} after the verify run "
265
+ "(an absent report is a not-green observation, never an empty pass)"
266
+ ),
267
+ )
268
+
269
+ execution: RunnerExecution | None = None
270
+ if plan.report_required and adapter is not None and report_path is not None:
271
+ # report present but adapter.parse(...) raises → REPORT_UNREADABLE.
272
+ try:
273
+ execution = adapter.parse(report_path, project_root=project_root) # type: ignore[attr-defined]
274
+ except Exception as exc: # noqa: BLE001 — ANY parse failure is unreadable, not a pass
275
+ return VerifyExecutionResult(
276
+ verify_class=VerifyClass.REPORT_UNREADABLE,
277
+ returncode=returncode,
278
+ execution=None,
279
+ detail=(
280
+ f"report at {report_path} present but unparseable by adapter "
281
+ f"{plan.report_adapter!r}: {exc}"
282
+ ),
283
+ )
284
+
285
+ if execution is not None:
286
+ collected = execution.total_cases
287
+ executed_files = execution.executed_files
288
+ # zero tests: nothing collected AND no executed file → ZERO_TESTS.
289
+ if collected == 0 and not executed_files:
290
+ return VerifyExecutionResult(
291
+ verify_class=VerifyClass.ZERO_TESTS,
292
+ returncode=returncode,
293
+ execution=execution,
294
+ detail="report parsed but it observed zero tests (no cases, no executed files)",
295
+ )
296
+ # collected below the policy floor → ZERO_TESTS (effectively no tests). The
297
+ # policy may RAISE min_collected_tests (stricter), never lower it below 1.
298
+ if collected < plan.observation.min_collected_tests:
299
+ return VerifyExecutionResult(
300
+ verify_class=VerifyClass.ZERO_TESTS,
301
+ returncode=returncode,
302
+ execution=execution,
303
+ detail=(
304
+ f"collected {collected} test(s), below the required minimum "
305
+ f"{plan.observation.min_collected_tests} (an under-collected run is "
306
+ "not an authentic pass)"
307
+ ),
308
+ )
309
+ # any failed test/file → FAIL. A SKIPPED case is folded by the adapters into
310
+ # executed_failed_files (a skip is not a clean pass), so this branch also
311
+ # reds a skip-tainted file (observation.skipped_tests == "red").
312
+ if execution.executed_failed_files:
313
+ return VerifyExecutionResult(
314
+ verify_class=VerifyClass.FAIL,
315
+ returncode=returncode,
316
+ execution=execution,
317
+ detail=(
318
+ f"report shows failed/skipped test file(s): "
319
+ f"{sorted(execution.executed_failed_files)} (a fail or a skip is "
320
+ "not an authentic pass)"
321
+ ),
322
+ )
323
+ # Defensive: per-case granularity available but passed < total ⇒ a non-passed
324
+ # (failed/skipped) case exists that the file rollup did not attribute → red,
325
+ # so a partial report never reaches PASS.
326
+ if execution.test_level_available and execution.passed_cases < execution.total_cases:
327
+ return VerifyExecutionResult(
328
+ verify_class=VerifyClass.FAIL,
329
+ returncode=returncode,
330
+ execution=execution,
331
+ detail=(
332
+ f"report shows {execution.passed_cases} passed of "
333
+ f"{execution.total_cases} collected — a non-passed (failed/skipped) "
334
+ "case is present, which is not an authentic pass"
335
+ ),
336
+ )
337
+
338
+ # returncode != 0 → FAIL (a nonzero exit beats a green-looking report).
339
+ if returncode != 0:
340
+ return VerifyExecutionResult(
341
+ verify_class=VerifyClass.FAIL,
342
+ returncode=returncode,
343
+ execution=execution,
344
+ detail=f"verify command exited {returncode} (nonzero exit beats a green-looking report)",
345
+ )
346
+
347
+ # Step 5 — SCOPE observation. A clean, exit-0, parsed report can still be a
348
+ # FALSE green if it never ran a test set it was REQUIRED to cover (the
349
+ # "unit-only PASS" hole: a mutation that only ran unit tests while an e2e set
350
+ # was required). For each required ``(set_id, root)``, check whether ANY file
351
+ # the report says it executed falls under that set's root; a required set with
352
+ # ZERO covering executed files → SCOPE_MISSING (RED).
353
+ #
354
+ # Ordering: this runs AFTER the zero/failed/rc!=0 branches above (so a more
355
+ # fundamental failure always wins — a report with a FAILED file is FAIL even if
356
+ # e2e is also uncovered, because the failed-file branch returned earlier) and
357
+ # is the LAST not-green gate BEFORE PASS (so a scope miss on an otherwise
358
+ # green-looking exit-0 report is correctly RED, never PASS).
359
+ #
360
+ # We only have something to check when a report was parsed; the no-report /
361
+ # failing cases are already classified above. ``execution.executed_files`` are
362
+ # project-relative, POSIX, normalized test-file paths (see RunnerExecution), so
363
+ # we match a root the same way: strip leading ``./``, POSIX separators, and
364
+ # treat ``root`` as a directory PREFIX — a path covers the root iff
365
+ # ``path == root`` or ``path.startswith(root + "/")``. A root of ``.`` or ``""``
366
+ # (a colocated set) matches every executed file, so any executed file trivially
367
+ # covers it.
368
+ if execution is not None and plan.required_test_sets:
369
+ executed = [_norm_rel_posix(p) for p in execution.executed_files]
370
+ for set_id, raw_root in plan.required_test_sets:
371
+ if not _set_is_covered(raw_root, executed):
372
+ return VerifyExecutionResult(
373
+ verify_class=VerifyClass.SCOPE_MISSING,
374
+ returncode=returncode,
375
+ execution=execution,
376
+ detail=(
377
+ f"required test set {set_id!r} (root {raw_root!r}) had zero "
378
+ f"executed files in the report — the verify did not run what it "
379
+ f"must cover (a report that is green only because it skipped a "
380
+ f"required set is not an authentic pass)"
381
+ ),
382
+ )
383
+
384
+ # All not-green checks passed: rc==0, required report parsed, collected ≥ floor,
385
+ # no failed/skipped, every required scope covered → the only green class.
386
+ return VerifyExecutionResult(
387
+ verify_class=VerifyClass.PASS,
388
+ returncode=returncode,
389
+ execution=execution,
390
+ detail="verify passed (exit 0, report parsed, collected ≥ minimum, no failed/skipped tests)",
391
+ )
@@ -29,12 +29,29 @@ from .profile import VerifyObservationPolicy
29
29
 
30
30
 
31
31
  class VerifyClass(str, Enum):
32
- """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
+
40
+ ``SCOPE_MISSING`` (Contract Kernel Step 5) is the verify that PARSED a clean,
41
+ exit-0 report but did NOT cover a test set it was REQUIRED to cover (a
42
+ ``scope.must_include_test_sets`` entry with zero executed files under its root —
43
+ e.g. only the unit set ran while an e2e set was required). It closes the
44
+ "unit-only PASS" hole: a report that looks green only because it never ran the
45
+ set that matters is not-green, not PASS. Like the others it is NOT green
46
+ (``is_green`` stays PASS-only).
47
+ """
33
48
 
34
49
  PASS = "PASS"
35
50
  FAIL = "FAIL"
36
51
  ZERO_TESTS = "ZERO_TESTS"
37
52
  REPORT_MISSING = "REPORT_MISSING"
53
+ REPORT_UNREADABLE = "REPORT_UNREADABLE"
54
+ SCOPE_MISSING = "SCOPE_MISSING"
38
55
  TOOL_MISSING = "TOOL_MISSING"
39
56
  CONFIG_ERROR = "CONFIG_ERROR"
40
57
 
@@ -55,7 +72,19 @@ class VerifyRunPlan:
55
72
  report_adapter: str | None
56
73
  report_required: bool
57
74
  must_include_test_sets: tuple[str, ...]
75
+ #: Resolved ``(id, root)`` for each ``must_include_test_sets`` id that names a
76
+ #: real TestSet in ``contract.profile.layout.test_sets`` — the scope check (Step
77
+ #: 5) needs the set ROOTS, not just ids, to ask "did any executed file fall under
78
+ #: this set's root?". Populated by :func:`build_verify_plan`; ids that match no
79
+ #: TestSet are deliberately dropped here (a profile inconsistency, see there).
80
+ required_test_sets: tuple[tuple[str, str], ...]
58
81
  observation: VerifyObservationPolicy
82
+ #: ``report.capture`` from the verify CommandSpec (e.g. Go's ``stdout``). When
83
+ #: ``"stdout"`` the verify command streams its machine-readable report to stdout
84
+ #: and the EXECUTOR must persist that captured stdout to ``report_path`` before
85
+ #: the adapter reads it (``go test -json`` writes no file of its own). ``None``
86
+ #: ⇒ the command produces the report file directly (no executor capture).
87
+ report_capture: str | None = None
59
88
 
60
89
  @property
61
90
  def command_str(self) -> str:
@@ -76,6 +105,20 @@ def build_verify_plan(contract: ResolvedLanguageContract) -> VerifyRunPlan | Non
76
105
  return None
77
106
  report = cmd.report
78
107
  scope = cmd.scope
108
+ must_include = scope.must_include_test_sets if scope else ()
109
+ # Resolve each must_include id to its TestSet ROOT (the scope check in the
110
+ # executor matches executed_files against roots, so it needs roots, not ids).
111
+ # A must_include id that names NO TestSet in the layout is a PROFILE
112
+ # INCONSISTENCY (a command requires coverage of a set the topology never
113
+ # declares): we keep it simple and just don't add a root for it — but we do
114
+ # NOT drop the id from ``must_include_test_sets`` and we do NOT silently make
115
+ # scope un-checkable for a REAL set; only the unresolvable id is skipped here.
116
+ sets_by_id = {ts.id: ts for ts in contract.profile.layout.test_sets}
117
+ required_test_sets = tuple(
118
+ (set_id, sets_by_id[set_id].root)
119
+ for set_id in must_include
120
+ if set_id in sets_by_id
121
+ )
79
122
  return VerifyRunPlan(
80
123
  language_id=contract.language_id,
81
124
  argv=tuple(cmd.argv),
@@ -84,7 +127,9 @@ def build_verify_plan(contract: ResolvedLanguageContract) -> VerifyRunPlan | Non
84
127
  report_path=(report.path if report else None),
85
128
  report_adapter=(report.adapter if report else None),
86
129
  report_required=bool(report and report.path),
87
- must_include_test_sets=(scope.must_include_test_sets if scope else ()),
130
+ report_capture=(report.capture if report else None),
131
+ must_include_test_sets=must_include,
132
+ required_test_sets=required_test_sets,
88
133
  # None on the command ⇒ the strict defaults (the invariant), never weaker.
89
134
  observation=(cmd.observation or VerifyObservationPolicy()),
90
135
  )
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "codd-dev"
7
- version = "2.72.0"
7
+ version = "2.74.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