codd-dev 2.69.0__tar.gz → 2.71.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 (611) hide show
  1. {codd_dev-2.69.0 → codd_dev-2.71.0}/PKG-INFO +1 -1
  2. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/__init__.py +1 -1
  3. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/coverage_execution_coherence.py +26 -500
  4. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/greenfield/pipeline.py +23 -37
  5. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/languages/__init__.py +2 -0
  6. codd_dev-2.71.0/codd/languages/adapters/__init__.py +14 -0
  7. codd_dev-2.71.0/codd/languages/adapters/runner_report.py +533 -0
  8. codd_dev-2.71.0/codd/languages/builtin_adapters.py +87 -0
  9. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/languages/contract.py +16 -1
  10. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/languages/loader.py +18 -0
  11. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/languages/profile.py +21 -0
  12. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/languages/profiles/go.yaml +7 -0
  13. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/languages/profiles/python.yaml +8 -0
  14. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/languages/profiles/typescript.yaml +8 -0
  15. {codd_dev-2.69.0 → codd_dev-2.71.0}/pyproject.toml +1 -1
  16. {codd_dev-2.69.0 → codd_dev-2.71.0}/.gitignore +0 -0
  17. {codd_dev-2.69.0 → codd_dev-2.71.0}/LICENSE +0 -0
  18. {codd_dev-2.69.0 → codd_dev-2.71.0}/README.md +0 -0
  19. {codd_dev-2.69.0 → codd_dev-2.71.0}/bench_fixture/README.md +0 -0
  20. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/__main__.py +0 -0
  21. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/_git_helper.py +0 -0
  22. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/action_outcome.py +0 -0
  23. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/ai_invoke.py +0 -0
  24. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/ai_patch.py +0 -0
  25. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/artifact_contract.py +0 -0
  26. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/artifact_ids.py +0 -0
  27. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/artifacts/catalog.yaml +0 -0
  28. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/ask_user_question_adapter.py +0 -0
  29. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/assembler.py +0 -0
  30. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/bridge.py +0 -0
  31. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/brownfield/__init__.py +0 -0
  32. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/brownfield/pipeline.py +0 -0
  33. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/capability_completeness.py +0 -0
  34. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/claude_cli.py +0 -0
  35. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/cli.py +0 -0
  36. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/clustering.py +0 -0
  37. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/coherence_adapters.py +0 -0
  38. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/coherence_engine.py +0 -0
  39. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/confidence.py +0 -0
  40. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/config.py +0 -0
  41. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/config_schema.py +0 -0
  42. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/contracts.py +0 -0
  43. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/contracts_registry/__init__.py +0 -0
  44. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/contracts_registry/__main__.py +0 -0
  45. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/contracts_registry/certify.py +0 -0
  46. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/contracts_registry/generate_matrix.py +0 -0
  47. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/contracts_registry/registry.py +0 -0
  48. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/coverage_auditor.py +0 -0
  49. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/coverage_metrics.py +0 -0
  50. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/__init__.py +0 -0
  51. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/auto_repair.py +0 -0
  52. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/builder.py +0 -0
  53. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/checks/__init__.py +0 -0
  54. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
  55. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/checks/artifact_contract_check.py +0 -0
  56. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/checks/ci_health.py +0 -0
  57. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/checks/dependency_freshness.py +0 -0
  58. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/checks/depends_on_consistency.py +0 -0
  59. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/checks/deployment_completeness.py +0 -0
  60. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/checks/edge_validity.py +0 -0
  61. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/checks/environment_coverage.py +0 -0
  62. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/checks/implementation_coverage.py +0 -0
  63. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/checks/node_completeness.py +0 -0
  64. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/checks/opt_out.py +0 -0
  65. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/checks/task_completion.py +0 -0
  66. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/checks/transitive_closure.py +0 -0
  67. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/checks/ui_coherence.py +0 -0
  68. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/checks/user_journey_coherence.py +0 -0
  69. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/coverage_axes.py +0 -0
  70. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/defaults/cli.yaml +0 -0
  71. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
  72. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/defaults/csharp.yaml +0 -0
  73. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/defaults/elixir.yaml +0 -0
  74. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/defaults/generic.yaml +0 -0
  75. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/defaults/iot.yaml +0 -0
  76. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/defaults/java.yaml +0 -0
  77. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/defaults/kotlin.yaml +0 -0
  78. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/defaults/mobile.yaml +0 -0
  79. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/defaults/ruby.yaml +0 -0
  80. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/defaults/rust.yaml +0 -0
  81. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/defaults/scala.yaml +0 -0
  82. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/defaults/swift.yaml +0 -0
  83. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
  84. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/defaults/web.yaml +0 -0
  85. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/extractor.py +0 -0
  86. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/impact.py +0 -0
  87. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dag/runner.py +0 -0
  88. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/defaults.py +0 -0
  89. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/defaults.yaml +0 -0
  90. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/dependency_lock_coherence.py +0 -0
  91. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/deploy_targets/__init__.py +0 -0
  92. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/deploy_targets/app_service.py +0 -0
  93. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/deploy_targets/base.py +0 -0
  94. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/deploy_targets/docker_compose.py +0 -0
  95. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/deployer.py +0 -0
  96. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/deployment/__init__.py +0 -0
  97. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/deployment/checks/__init__.py +0 -0
  98. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
  99. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
  100. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
  101. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
  102. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/deployment/extractor.py +0 -0
  103. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/deployment/providers/__init__.py +0 -0
  104. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/deployment/providers/ai_command.py +0 -0
  105. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/deployment/providers/ai_command_factory.py +0 -0
  106. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/deployment/providers/codex_app_server.py +0 -0
  107. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/deployment/providers/llm_consideration.py +0 -0
  108. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/deployment/providers/schema/__init__.py +0 -0
  109. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/deployment/providers/schema/prisma.py +0 -0
  110. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/deployment/providers/target/__init__.py +0 -0
  111. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/deployment/providers/target/docker_compose.py +0 -0
  112. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/deployment/providers/verification/__init__.py +0 -0
  113. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
  114. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
  115. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
  116. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
  117. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
  118. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/deployment/providers/verification/curl.py +0 -0
  119. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
  120. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
  121. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/deployment/providers/verification/playwright.py +0 -0
  122. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/deployment/providers/verification/pytest_http.py +0 -0
  123. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/deployment/providers/verification/vitest.py +0 -0
  124. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/design_md.py +0 -0
  125. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/diff/__init__.py +0 -0
  126. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/diff/apply.py +0 -0
  127. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/diff/engine.py +0 -0
  128. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/diff/persistence.py +0 -0
  129. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/diff/templates/diff_prompt.md +0 -0
  130. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/discovery.py +0 -0
  131. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/drift.py +0 -0
  132. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/e2e_contract_coherence.py +0 -0
  133. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/e2e_extractor.py +0 -0
  134. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/e2e_generator.py +0 -0
  135. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/e2e_harness.py +0 -0
  136. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/e2e_runner.py +0 -0
  137. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/elicit/__init__.py +0 -0
  138. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/elicit/apply.py +0 -0
  139. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/elicit/engine.py +0 -0
  140. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/elicit/finding.py +0 -0
  141. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/elicit/formatters/__init__.py +0 -0
  142. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/elicit/formatters/base.py +0 -0
  143. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/elicit/formatters/interactive.py +0 -0
  144. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/elicit/formatters/json_fmt.py +0 -0
  145. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/elicit/formatters/md.py +0 -0
  146. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/elicit/lexicon_loader.py +0 -0
  147. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/elicit/persistence.py +0 -0
  148. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
  149. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/env_refs.py +0 -0
  150. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/extract_ai.py +0 -0
  151. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/extract_paths.py +0 -0
  152. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/extractor.py +0 -0
  153. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/fix/__init__.py +0 -0
  154. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/fix/candidate_selector.py +0 -0
  155. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/fix/design_updater.py +0 -0
  156. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/fix/impl_propagation.py +0 -0
  157. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/fix/interactive_prompt.py +0 -0
  158. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/fix/phenomenon_fixer.py +0 -0
  159. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/fix/phenomenon_parser.py +0 -0
  160. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/fix/risk_classifier.py +0 -0
  161. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/fix/templates/clarification_question.txt +0 -0
  162. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/fix/templates/design_update.txt +0 -0
  163. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/fix/templates/impl_update.txt +0 -0
  164. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
  165. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/fix/templates/risk_assessment.txt +0 -0
  166. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/fix/templates_loader.py +0 -0
  167. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/fixer.py +0 -0
  168. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/fixup_drift.py +0 -0
  169. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/fixup_drift_strategies/__init__.py +0 -0
  170. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
  171. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
  172. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
  173. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/frontmatter.py +0 -0
  174. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/generator.py +0 -0
  175. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/git_evidence.py +0 -0
  176. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/graph.py +0 -0
  177. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/greenfield/__init__.py +0 -0
  178. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/hitl_session.py +0 -0
  179. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/hooks/__init__.py +0 -0
  180. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/hooks/pre-commit +0 -0
  181. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
  182. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
  183. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/hooks/recipes/codex_hook.sh +0 -0
  184. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
  185. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
  186. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/iac_nfr.py +0 -0
  187. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/implement_oracle.py +0 -0
  188. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/implement_oracle_scope.py +0 -0
  189. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/implementer/__init__.py +0 -0
  190. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/implementer/chunked_runner.py +0 -0
  191. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/implementer/typecheck_loop.py +0 -0
  192. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/implementer.py +0 -0
  193. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/import_coherence.py +0 -0
  194. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/inheritance.py +0 -0
  195. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/init/__init__.py +0 -0
  196. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/init/lexicon_suggest.py +0 -0
  197. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/init/llm_lexicon_suggester.py +0 -0
  198. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/init/stack_detector.py +0 -0
  199. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/knowledge_fetcher.py +0 -0
  200. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/languages/compat.py +0 -0
  201. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/languages/path_planner.py +0 -0
  202. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/languages/registry.py +0 -0
  203. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/languages/verify_plan.py +0 -0
  204. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/lexicon.py +0 -0
  205. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/lexicon_cli/__init__.py +0 -0
  206. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
  207. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/lexicon_cli/formatters/html.py +0 -0
  208. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
  209. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/lexicon_cli/formatters/md.py +0 -0
  210. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/lexicon_cli/inspector.py +0 -0
  211. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/lexicon_cli/manager.py +0 -0
  212. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/lexicon_cli/reporter.py +0 -0
  213. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/lexicon_cli/threshold.py +0 -0
  214. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/llm/__init__.py +0 -0
  215. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/llm/approval.py +0 -0
  216. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/llm/best_practice_augmenter.py +0 -0
  217. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/llm/criteria_expander.py +0 -0
  218. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/llm/design_doc_extractor.py +0 -0
  219. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/llm/impl_step_deriver.py +0 -0
  220. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/llm/means_catalog_loader.py +0 -0
  221. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/llm/parser.py +0 -0
  222. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/llm/plan_deriver.py +0 -0
  223. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/llm/prompt_builder.py +0 -0
  224. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/llm/strategy_validator.py +0 -0
  225. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
  226. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
  227. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
  228. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
  229. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
  230. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/llm/templates/meta_instruction.md +0 -0
  231. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/llm/templates/plan_derive_meta.md +0 -0
  232. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
  233. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/mcp_server.py +0 -0
  234. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/measure.py +0 -0
  235. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/operational_e2e_audit.py +0 -0
  236. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/operations_derive.py +0 -0
  237. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/parsing/__init__.py +0 -0
  238. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/parsing/_shared.py +0 -0
  239. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/parsing/api_specs.py +0 -0
  240. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/parsing/filesystem_routes.py +0 -0
  241. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/parsing/iac.py +0 -0
  242. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/parsing/python_ast.py +0 -0
  243. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/parsing/schemas.py +0 -0
  244. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/parsing/tests_builddeps.py +0 -0
  245. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/parsing/treesitter.py +0 -0
  246. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/planner.py +0 -0
  247. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/policy.py +0 -0
  248. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/preflight/__init__.py +0 -0
  249. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/preflight/defaults/cli.yaml +0 -0
  250. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/preflight/defaults/generic.yaml +0 -0
  251. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/preflight/defaults/iot.yaml +0 -0
  252. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/preflight/defaults/mobile.yaml +0 -0
  253. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/preflight/defaults/web.yaml +0 -0
  254. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/project_types.py +0 -0
  255. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/propagate.py +0 -0
  256. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/propagation_common.py +0 -0
  257. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/propagator.py +0 -0
  258. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/reconciliation_ledger.py +0 -0
  259. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/reference_resolution.py +0 -0
  260. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/registry.py +0 -0
  261. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/repair/__init__.py +0 -0
  262. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/repair/approval_repair.py +0 -0
  263. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/repair/auto_scope_guard.py +0 -0
  264. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/repair/engine.py +0 -0
  265. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/repair/git_patcher.py +0 -0
  266. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/repair/history.py +0 -0
  267. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/repair/llm_repair_engine.py +0 -0
  268. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/repair/loop.py +0 -0
  269. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/repair/primary_picker.py +0 -0
  270. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/repair/proof_breaks.py +0 -0
  271. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/repair/repair_result.py +0 -0
  272. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/repair/repairability_classifier.py +0 -0
  273. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/repair/schema.py +0 -0
  274. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/repair/templates/analyze_meta.md +0 -0
  275. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/repair/templates/propose_meta.md +0 -0
  276. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
  277. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/repair/templates/repairability_meta.md +0 -0
  278. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/repair/test_failure_attribution.py +0 -0
  279. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/repair/verify_runner.py +0 -0
  280. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/repair_slice.py +0 -0
  281. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/require.py +0 -0
  282. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/require_plugins.py +0 -0
  283. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/require_propagate.py +0 -0
  284. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
  285. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
  286. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
  287. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
  288. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/required_artifacts/defaults/web.yaml +0 -0
  289. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/required_artifacts_deriver.py +0 -0
  290. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
  291. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
  292. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
  293. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
  294. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
  295. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/requirement_completeness_auditor.py +0 -0
  296. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/requirement_reconciliation.py +0 -0
  297. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/requirements_meta.py +0 -0
  298. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/restoration_report.py +0 -0
  299. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/restore.py +0 -0
  300. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/routes_extractor.py +0 -0
  301. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/runtime_smoke/__init__.py +0 -0
  302. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/runtime_smoke/checks.py +0 -0
  303. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/runtime_smoke/config.py +0 -0
  304. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/runtime_smoke/report.py +0 -0
  305. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/runtime_smoke/runner.py +0 -0
  306. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/scanner.py +0 -0
  307. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/schema_refs.py +0 -0
  308. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/screen_flow_validator.py +0 -0
  309. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/screen_transition_extractor.py +0 -0
  310. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/screen_transitions/defaults.yaml +0 -0
  311. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/skills_cli/__init__.py +0 -0
  312. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/skills_cli/discovery.py +0 -0
  313. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/skills_cli/manager.py +0 -0
  314. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/skills_cli/paths.py +0 -0
  315. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/stack/__init__.py +0 -0
  316. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/stack/adapters/__init__.py +0 -0
  317. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/stack/adapters/_base.py +0 -0
  318. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/stack/adapters/nextjs.py +0 -0
  319. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/stack/adapters/playwright.py +0 -0
  320. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/stack/compose.py +0 -0
  321. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/stack/loader.py +0 -0
  322. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/stack/lock.py +0 -0
  323. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/stack/obligations.py +0 -0
  324. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/stack/profile.py +0 -0
  325. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/stack/profiles/addons/playwright.yaml +0 -0
  326. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/stack/profiles/addons/prisma.yaml +0 -0
  327. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/stack/profiles/frameworks/nextjs.yaml +0 -0
  328. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/stack/project.py +0 -0
  329. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/stack/registry.py +0 -0
  330. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/stack/resolve.py +0 -0
  331. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/surface_reconciliation.py +0 -0
  332. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/synth.py +0 -0
  333. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/templates/codd.yaml.tmpl +0 -0
  334. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/templates/conventions.yaml.tmpl +0 -0
  335. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
  336. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/templates/doc_links.yaml.tmpl +0 -0
  337. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
  338. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
  339. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
  340. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
  341. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
  342. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/templates/extracted/system-context.md.j2 +0 -0
  343. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/templates/gitignore.tmpl +0 -0
  344. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/templates/lexicon_questions.md +0 -0
  345. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/templates/lexicon_schema.yaml +0 -0
  346. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/templates/overrides.yaml.tmpl +0 -0
  347. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/test_detection.py +0 -0
  348. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/test_import_coherence.py +0 -0
  349. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/traceability.py +0 -0
  350. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/validator.py +0 -0
  351. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/vb_marker_authenticity.py +0 -0
  352. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/vb_rerun_scope.py +0 -0
  353. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/verifiable_behavior_audit.py +0 -0
  354. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/watch/__init__.py +0 -0
  355. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/watch/events.py +0 -0
  356. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/watch/propagation_log.py +0 -0
  357. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/watch/propagation_pipeline.py +0 -0
  358. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/watch/test_runner.py +0 -0
  359. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/watch/watcher.py +0 -0
  360. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd/wiring.py +0 -0
  361. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
  362. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
  363. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
  364. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
  365. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
  366. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
  367. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
  368. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
  369. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
  370. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
  371. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
  372. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
  373. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
  374. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
  375. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
  376. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
  377. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
  378. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
  379. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
  380. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
  381. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
  382. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
  383. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
  384. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
  385. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
  386. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
  387. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
  388. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
  389. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
  390. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
  391. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
  392. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
  393. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
  394. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
  395. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
  396. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
  397. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
  398. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
  399. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
  400. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
  401. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
  402. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
  403. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
  404. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
  405. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
  406. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
  407. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
  408. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
  409. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
  410. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
  411. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
  412. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
  413. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
  414. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
  415. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
  416. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
  417. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
  418. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
  419. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
  420. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
  421. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
  422. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
  423. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
  424. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
  425. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
  426. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
  427. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
  428. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
  429. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
  430. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
  431. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
  432. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
  433. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
  434. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
  435. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
  436. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
  437. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
  438. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
  439. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
  440. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
  441. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
  442. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
  443. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
  444. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
  445. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
  446. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
  447. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
  448. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
  449. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
  450. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
  451. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
  452. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
  453. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
  454. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
  455. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
  456. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
  457. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
  458. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
  459. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
  460. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
  461. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
  462. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
  463. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
  464. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
  465. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
  466. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
  467. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
  468. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
  469. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
  470. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
  471. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
  472. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
  473. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
  474. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
  475. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
  476. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
  477. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
  478. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
  479. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
  480. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
  481. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
  482. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
  483. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
  484. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
  485. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
  486. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
  487. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
  488. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
  489. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
  490. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
  491. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
  492. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
  493. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
  494. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
  495. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
  496. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
  497. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
  498. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
  499. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
  500. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
  501. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
  502. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
  503. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
  504. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
  505. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
  506. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
  507. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
  508. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
  509. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
  510. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
  511. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
  512. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
  513. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
  514. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
  515. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
  516. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
  517. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
  518. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
  519. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
  520. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
  521. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
  522. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
  523. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
  524. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
  525. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
  526. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
  527. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
  528. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
  529. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
  530. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
  531. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
  532. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
  533. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
  534. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
  535. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
  536. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
  537. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
  538. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
  539. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
  540. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
  541. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
  542. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
  543. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
  544. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
  545. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
  546. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
  547. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
  548. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
  549. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
  550. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
  551. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
  552. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
  553. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
  554. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
  555. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
  556. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
  557. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
  558. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
  559. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
  560. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
  561. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
  562. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
  563. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
  564. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
  565. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
  566. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
  567. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
  568. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
  569. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
  570. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
  571. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
  572. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
  573. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
  574. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
  575. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
  576. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
  577. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
  578. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
  579. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
  580. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
  581. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
  582. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
  583. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
  584. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
  585. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
  586. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
  587. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
  588. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
  589. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
  590. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
  591. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
  592. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
  593. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
  594. {codd_dev-2.69.0 → codd_dev-2.71.0}/codd_plugins/stack_map.yaml +0 -0
  595. {codd_dev-2.69.0 → codd_dev-2.71.0}/docs/cookbook/cdp_browser/README.md +0 -0
  596. {codd_dev-2.69.0 → codd_dev-2.71.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
  597. {codd_dev-2.69.0 → codd_dev-2.71.0}/docs/requirements/README.md +0 -0
  598. {codd_dev-2.69.0 → codd_dev-2.71.0}/dogfood/README.md +0 -0
  599. {codd_dev-2.69.0 → codd_dev-2.71.0}/dogfood/fixtures/flat_py_app/README.md +0 -0
  600. {codd_dev-2.69.0 → codd_dev-2.71.0}/examples/README.md +0 -0
  601. {codd_dev-2.69.0 → codd_dev-2.71.0}/skills/codd-assemble/SKILL.md +0 -0
  602. {codd_dev-2.69.0 → codd_dev-2.71.0}/skills/codd-evolve/SKILL.md +0 -0
  603. {codd_dev-2.69.0 → codd_dev-2.71.0}/skills/codd-generate/SKILL.md +0 -0
  604. {codd_dev-2.69.0 → codd_dev-2.71.0}/skills/codd-greenfield/SKILL.md +0 -0
  605. {codd_dev-2.69.0 → codd_dev-2.71.0}/skills/codd-impact/SKILL.md +0 -0
  606. {codd_dev-2.69.0 → codd_dev-2.71.0}/skills/codd-init/SKILL.md +0 -0
  607. {codd_dev-2.69.0 → codd_dev-2.71.0}/skills/codd-propagate/SKILL.md +0 -0
  608. {codd_dev-2.69.0 → codd_dev-2.71.0}/skills/codd-restore/SKILL.md +0 -0
  609. {codd_dev-2.69.0 → codd_dev-2.71.0}/skills/codd-scan/SKILL.md +0 -0
  610. {codd_dev-2.69.0 → codd_dev-2.71.0}/skills/codd-validate/SKILL.md +0 -0
  611. {codd_dev-2.69.0 → codd_dev-2.71.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.69.0
3
+ Version: 2.71.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.69.0"
3
+ __version__ = "2.71.0"
@@ -61,11 +61,10 @@ backstop, UNCHANGED.
61
61
 
62
62
  from __future__ import annotations
63
63
 
64
- import json
65
64
  import subprocess
66
65
  from dataclasses import dataclass, field
67
66
  from pathlib import Path
68
- from typing import Any, Callable, Iterable, Protocol
67
+ from typing import Any, Callable, Iterable
69
68
 
70
69
  from codd.operational_e2e_audit import (
71
70
  _classify_test_level,
@@ -83,6 +82,26 @@ from codd.vb_marker_authenticity import (
83
82
  build_authenticity_report,
84
83
  )
85
84
 
85
+ # The runner-report parser cluster (RunnerExecution / Protocol / the vitest & Go
86
+ # adapters + their module-level helpers) was RELOCATED to the leaf module
87
+ # :mod:`codd.languages.adapters.runner_report` for the Contract Kernel so the
88
+ # coverage-execution coherence gate AND the language contract resolve ONE source
89
+ # of these adapters. They are RE-EXPORTED here (same objects — identity preserved)
90
+ # so ``from codd.coverage_execution_coherence import RunnerExecution`` and the
91
+ # ``_RUNNER_REPORT_ADAPTERS`` map below keep working unchanged. ``_norm_test_path``
92
+ # moved with them (the moved Go index needs it) and is re-imported here because the
93
+ # inventory/gate code below still uses it. (runner_report imports only stdlib +
94
+ # operational_e2e_audit + vb_marker_authenticity — none import codd.languages —
95
+ # so this import introduces NO cycle.)
96
+ from codd.languages.adapters.runner_report import ( # noqa: E402 — leaf re-export
97
+ GoTestJsonReportAdapter,
98
+ RunnerExecution,
99
+ RunnerReportAdapter,
100
+ RunnerReportUnsupported,
101
+ VitestJsonReportAdapter,
102
+ _norm_test_path,
103
+ )
104
+
86
105
 
87
106
  COHERENCE_CONTRACT_VERSION = "coverage-execution-coherence/v1"
88
107
 
@@ -92,504 +111,11 @@ COHERENCE_CONTRACT_VERSION = "coverage-execution-coherence/v1"
92
111
  # ───────────────────────────────────────────────────────────────────────────
93
112
 
94
113
 
95
- class RunnerReportUnsupported(RuntimeError):
96
- """Raised when a campaign declares a report format with no registered adapter."""
97
-
98
-
99
- @dataclass(frozen=True)
100
- class RunnerExecution:
101
- """Normalized execution evidence parsed from a verify-campaign report.
102
-
103
- ``executed_passed_files`` / ``executed_failed_files`` are project-relative,
104
- POSIX, normalized test-file paths. A file is in ``executed_passed_files`` only
105
- when it ran AND every executed test case in it passed (no failure/error) AND
106
- it collected at least one case — the file-level pass that the coherence gate
107
- treats as a VB's execution proof. ``executed_passed_cases`` is the set of
108
- ``"<relfile>::<fully-qualified-test-name>"`` keys for passed cases (when the
109
- runner reports test-level granularity), available for finer reconciliation;
110
- it is best-effort and may be empty for a file-level-only runner.
111
-
112
- ``test_level_available`` is True when the report carried per-test-case results
113
- (vitest JSON does); when False, only file-level reconciliation is possible and
114
- the gate applies the design's degraded-pass rule (file in runner + no static
115
- skip/todo). ``total_cases`` / ``passed_cases`` are summary counts for
116
- diagnostics.
117
- """
118
-
119
- executed_passed_files: frozenset[str] = frozenset()
120
- executed_failed_files: frozenset[str] = frozenset()
121
- executed_passed_cases: frozenset[str] = frozenset()
122
- test_level_available: bool = False
123
- total_cases: int = 0
124
- passed_cases: int = 0
125
-
126
- @property
127
- def executed_files(self) -> frozenset[str]:
128
- return self.executed_passed_files | self.executed_failed_files
129
-
130
-
131
- class RunnerReportAdapter(Protocol):
132
- """Per-profile parser of a verify-campaign report → :class:`RunnerExecution`.
133
-
134
- Implementations are PURE and best-effort on shape, but MUST raise on a report
135
- that is structurally unreadable (missing/garbled) so the gate degrades
136
- EXPLICITLY rather than silently treating "no parseable executions" as "nothing
137
- needed to run". ``report_path`` is the resolved campaign report file;
138
- ``project_root`` lets the adapter normalize absolute runner paths to project-
139
- relative POSIX (the form :class:`TestInventory` and the VB audit use).
140
- """
141
-
142
- def parse(self, report_path: Path, *, project_root: Path) -> RunnerExecution:
143
- """Parse the report at ``report_path`` into normalized execution evidence."""
144
-
145
-
146
- def _relativize(raw: str, project_root: Path) -> str | None:
147
- """Normalize a runner-emitted path to project-relative POSIX, or ``None``.
148
-
149
- Runners report absolute file paths (vitest: ``testResults[].name``). We make
150
- them project-relative + POSIX so they reconcile with the VB audit's
151
- ``matched_tests`` / :class:`TestInventory` keys. A path outside the project
152
- tree (a stray absolute path) returns ``None`` (it is not one of our tests).
153
- """
154
-
155
- if not raw:
156
- return None
157
- text = str(raw).strip()
158
- if not text:
159
- return None
160
- path = Path(text)
161
- try:
162
- if path.is_absolute():
163
- return path.resolve().relative_to(project_root).as_posix()
164
- except ValueError:
165
- return None
166
- # Already relative (or a bare name) — normalize separators only.
167
- return text.replace("\\", "/").lstrip("./") or None
168
-
169
-
170
- @dataclass(frozen=True)
171
- class VitestJsonReportAdapter:
172
- """vitest (and Jest-compatible) JSON reporter adapter.
173
-
174
- The vitest ``--reporter=json`` output is a top-level object with
175
- ``testResults: [{name, status, assertionResults: [{status, fullName, ...}]}]``
176
- (``name`` is the absolute test FILE; ``assertionResults`` are its test CASES,
177
- each ``status`` one of ``passed`` / ``failed`` / ``skipped`` / ``todo`` /
178
- ``pending``). A file is PASSED only when it ran ≥1 case and NONE failed/errored
179
- — a file with a failing OR a skipped/todo case is NOT a clean execution proof
180
- for a VB (a skipped case proves nothing; the static authenticity gate also
181
- rejects skip, so they agree). Jest's near-identical schema parses through the
182
- same path.
183
- """
184
-
185
- def parse(self, report_path: Path, *, project_root: Path) -> RunnerExecution:
186
- try:
187
- payload = json.loads(report_path.read_text(encoding="utf-8"))
188
- except (OSError, json.JSONDecodeError) as exc:
189
- raise RunnerReportUnsupported(
190
- f"vitest JSON report unreadable at {report_path}: {exc}"
191
- ) from exc
192
- if not isinstance(payload, dict):
193
- raise RunnerReportUnsupported(
194
- f"vitest JSON report at {report_path} is not an object"
195
- )
196
- file_results = payload.get("testResults")
197
- if not isinstance(file_results, list):
198
- raise RunnerReportUnsupported(
199
- f"vitest JSON report at {report_path} has no testResults array"
200
- )
201
-
202
- passed_files: set[str] = set()
203
- failed_files: set[str] = set()
204
- passed_cases: set[str] = set()
205
- total_cases = 0
206
- passed_count = 0
207
- for file_entry in file_results:
208
- if not isinstance(file_entry, dict):
209
- continue
210
- rel = _relativize(str(file_entry.get("name") or ""), project_root)
211
- if rel is None:
212
- continue
213
- cases = file_entry.get("assertionResults")
214
- cases = cases if isinstance(cases, list) else []
215
- any_case = False
216
- file_clean = True
217
- for case in cases:
218
- if not isinstance(case, dict):
219
- continue
220
- status = str(case.get("status") or "").strip().lower()
221
- if not status:
222
- continue
223
- any_case = True
224
- total_cases += 1
225
- if status == "passed":
226
- passed_count += 1
227
- name = str(case.get("fullName") or case.get("title") or "").strip()
228
- if name:
229
- passed_cases.add(f"{rel}::{name}")
230
- else:
231
- # failed / skipped / todo / pending — none is a clean pass; a
232
- # file carrying any of them is not a VB execution proof.
233
- file_clean = False
234
- # Fall back to the file-level status when a runner omits case detail.
235
- file_status = str(file_entry.get("status") or "").strip().lower()
236
- if not any_case:
237
- if file_status == "passed":
238
- passed_files.add(rel)
239
- elif file_status in ("failed", "error"):
240
- failed_files.add(rel)
241
- # an empty file with no status is neither (collected nothing)
242
- continue
243
- if file_clean and file_status not in ("failed", "error"):
244
- passed_files.add(rel)
245
- else:
246
- failed_files.add(rel)
247
- return RunnerExecution(
248
- executed_passed_files=frozenset(passed_files),
249
- executed_failed_files=frozenset(failed_files),
250
- executed_passed_cases=frozenset(passed_cases),
251
- test_level_available=total_cases > 0,
252
- total_cases=total_cases,
253
- passed_cases=passed_count,
254
- )
255
-
256
-
257
- @dataclass(frozen=True)
258
- class GoTestJsonReportAdapter:
259
- """``go test -json`` (line-delimited JSON) reporter adapter.
260
-
261
- ``go test -json ./...`` streams one JSON object per line, each a *test event*::
262
-
263
- {"Action":"run|pass|fail|skip|output|...","Package":"<import/path>",
264
- "Test":"TestXxx","Elapsed":..}
265
-
266
- A test's FINAL outcome is the LAST ``pass``/``fail``/``skip`` ``Action`` for its
267
- ``(Package, Test)`` key (Go emits ``run`` then ``output``\\* then exactly one
268
- terminal action). Subtests are ``Test":"TestX/sub"``. A line WITHOUT a ``Test``
269
- field is a PACKAGE-level event; a package-level ``fail`` with no test is a build/
270
- compile/setup failure — an HONEST fail for that whole package, never a silent
271
- pass (Go emits ``{"Action":"build-fail",..}`` + ``{"Action":"fail","Package":..}``
272
- with no ``Test`` when a ``*_test.go`` does not compile). Non-JSON lines (rare —
273
- raw build-error text) are TOLERATED (skip-parse), but a package that compiled
274
- yet emitted ZERO test events when test files exist is NOT a silent pass (the
275
- upstream empty-report ``CampaignError`` covers a wholly-empty report; per-package
276
- "expected tests but ran none" surfaces as those files staying ``not_executed`` in
277
- the inventory ⇒ any VB they cover is execution-unverified).
278
-
279
- THE FILE BRIDGE (anti-false-green core). ``go test -json`` reports
280
- ``(Package, Test)`` — NOT a file path — while the coherence gate reconciles at
281
- FILE granularity (a VB's ``matched_tests`` are the ``_test.go`` FILES its marker
282
- sits in). A Go *package* is a *directory* (one package per directory; every
283
- ``*_test.go`` in it is the same compiled test binary), so we map
284
- ``Package``→``dir`` by stripping the go.mod ``module`` path prefix, then attribute
285
- each ``(Package, TestFunc)`` to the ``_test.go`` FILE in that dir that statically
286
- declares ``func TestFunc`` — a join that is UNAMBIGUOUS because Go forbids two
287
- top-level ``func TestFunc`` with the same name in one package (a compile error).
288
- :meth:`normalize_runner_identity` is the pure key used for that join and matches
289
- :class:`~codd.vb_marker_authenticity.GoTestBlockProfile`'s static block label
290
- (the leading ``TestFunc`` before any ``/subtest``).
291
-
292
- SKIP/FAIL granularity (mirrors vitest's "any non-pass case taints the FILE"):
293
- a ``_test.go`` is in ``executed_passed_files`` only when it had ≥1 passed test
294
- AND no failed/SKIPPED test attributed to it; ANY failed OR skipped test (a skip
295
- proves nothing — the same rule the vitest adapter and the static authenticity
296
- gate apply) puts the file in ``executed_failed_files``. A package-level build/
297
- setup fail taints EVERY ``_test.go`` in its directory (none could have run).
298
- ``executed_passed_cases`` carries the per-test ``"<relfile>::TestFunc"`` keys
299
- for the passed tests (finer reconciliation; best-effort, parallel to vitest's
300
- ``fullName`` cases).
301
- """
302
-
303
- def parse(self, report_path: Path, *, project_root: Path) -> RunnerExecution:
304
- try:
305
- raw = report_path.read_text(encoding="utf-8")
306
- except OSError as exc:
307
- raise RunnerReportUnsupported(
308
- f"go test -json report unreadable at {report_path}: {exc}"
309
- ) from exc
310
- events = _parse_go_test_json_lines(raw)
311
- if events is None:
312
- raise RunnerReportUnsupported(
313
- f"go test -json report at {report_path} contained no parseable JSON "
314
- "event lines (a wholly non-JSON report is unreadable, not an empty pass)"
315
- )
316
-
317
- module_path = _read_go_module_path(project_root)
318
- # Static index: dir → {TestFunc → relfile} for every *_test.go in the tree.
319
- # Built once; the join that turns (Package, TestFunc) into the FILE the gate
320
- # keys on. Lazily limited to dirs the runner actually reports below.
321
- dir_func_index = _go_static_test_func_index(project_root)
322
-
323
- # Aggregation at TWO granularities (GPT-5.5 design, dogfood go-test-json):
324
- # * PER-CASE (the VB-verification authority): every PASSED top-level TestFunc
325
- # contributes ``"<relfile>::TestFunc"`` to ``executed_passed_cases`` —
326
- # INDEPENDENT of any sibling's outcome. This is what lets a passed ``TestA``
327
- # prove its VB even when an unrelated ``TestB`` in the SAME file skipped
328
- # (file-level taint would false-RED ``TestA`` — Go puts many independent
329
- # ``func TestXxx`` in one file). A skip is NOT a pass, so a skipped func's
330
- # key never appears ⇒ its VB is correctly unverified.
331
- # * PER-FILE (coarse signals only — inventory, clean-execution, observability):
332
- # a file is in ``executed_passed_files`` iff it had ≥1 pass AND no
333
- # fail/skip/build-fail attributed to it; ANY fail/skip taints it. These
334
- # NEVER gate a Go VB (the per-case keys do) — they keep the file-level
335
- # clean-execution gate honest (a skip anywhere still reds the whole run).
336
- file_passed_funcs: dict[str, set[str]] = {}
337
- file_tainted: set[str] = set() # any fail/skip/build-fail ⇒ not a clean file
338
- passed_case_keys: set[str] = set()
339
- build_failed_dirs: set[str] = set()
340
- total_cases = 0
341
- passed_count = 0
342
-
343
- for ev in events:
344
- action = ev.get("Action")
345
- pkg = ev.get("Package")
346
- test = ev.get("Test")
347
- rel_dir = _go_package_to_dir(pkg, module_path) if pkg else None
348
-
349
- if action == "build-fail":
350
- # A ``build-fail`` carries ``ImportPath`` (not ``Package``/``Test``);
351
- # recover the dir from it so a non-compiling package taints its dir.
352
- # Checked FIRST: it has no ``Test`` so it must not fall into the
353
- # package-level branch below (which only inspects ``fail``).
354
- bdir = _go_package_to_dir(_go_import_path_base(ev.get("ImportPath")), module_path)
355
- if bdir is not None:
356
- build_failed_dirs.add(bdir)
357
- continue
358
- if not test:
359
- # Package-level (no ``Test``) terminal event. A ``fail`` here is EITHER
360
- # a build/compile/setup failure OR merely the summary of individual test
361
- # failures. Only the BUILD/SETUP variety taints the whole dir (nothing
362
- # ran); a summary of per-test failures is already handled by the
363
- # individual ``fail`` events (GPT edge ruling #1).
364
- if action == "fail" and rel_dir is not None:
365
- failed_build = ev.get("FailedBuild")
366
- output = str(ev.get("Output") or "")
367
- if failed_build or "[build failed]" in output or "[setup failed]" in output:
368
- build_failed_dirs.add(rel_dir)
369
- continue
370
- if action not in ("pass", "fail", "skip"):
371
- continue # run/output/etc. are not terminal outcomes
372
- if rel_dir is None:
373
- continue # external/std package (not under our module) — ignore
374
- func = _go_test_func_root(test) # "TestX/sub" → "TestX"
375
- relfile = dir_func_index.get(rel_dir, {}).get(func)
376
- total_cases += 1
377
- # ``relfile is None`` here = an in-tree package whose TestFunc maps to NO
378
- # static _test.go (a parser miss / generated-or-conditional source). It is
379
- # NOT credited (fail-closed: it adds to no passed-case key, so it can prove
380
- # no VB) — but it is NOT hard-failed either, because the static parser's
381
- # incompleteness must never false-RED a legitimately-running test (the same
382
- # generality discipline the authenticity gate applies to unparseable user
383
- # files; see ``feedback_codd_generality_preservation``). It still counts in
384
- # ``total_cases`` so the report is not deemed empty.
385
- if action == "pass":
386
- passed_count += 1
387
- if relfile is not None:
388
- file_passed_funcs.setdefault(relfile, set()).add(func)
389
- passed_case_keys.add(f"{relfile}::{func}")
390
- else:
391
- # fail OR skip — a skip proves nothing (vitest/authenticity parity), a
392
- # fail is honest. Either taints the FILE (the coarse clean-execution
393
- # signal; the per-case keys above are the VB-verification authority).
394
- if relfile is not None:
395
- file_tainted.add(relfile)
396
-
397
- # Build/setup-failed dirs taint EVERY static _test.go in them (nothing ran).
398
- for rel_dir in build_failed_dirs:
399
- for relfile in dir_func_index.get(rel_dir, {}).values():
400
- file_tainted.add(relfile)
401
-
402
- passed_files: set[str] = set()
403
- failed_files: set[str] = set()
404
- for relfile, funcs in file_passed_funcs.items():
405
- if relfile in file_tainted:
406
- failed_files.add(relfile)
407
- else:
408
- passed_files.add(relfile)
409
- failed_files |= file_tainted # tainted files are failed even with no pass
410
-
411
- return RunnerExecution(
412
- executed_passed_files=frozenset(passed_files),
413
- executed_failed_files=frozenset(failed_files),
414
- executed_passed_cases=frozenset(passed_case_keys),
415
- test_level_available=total_cases > 0,
416
- total_cases=total_cases,
417
- passed_cases=passed_count,
418
- )
419
-
420
- @staticmethod
421
- def produces_test_case_identity() -> bool:
422
- """True: this adapter emits per-test-case identities the gate can reconcile.
423
-
424
- ``go test -json`` reports ``(Package, Test)`` per test, and the static
425
- :class:`~codd.vb_marker_authenticity.GoTestBlockProfile` labels each block
426
- with its ``TestFunc`` name — so a VB marker can be mapped to the SAME
427
- ``"<relfile>::TestFunc"`` runner-case key and reconciled at TEST granularity
428
- (not file). The coherence gate keys off this capability to use per-case
429
- reconciliation for Go while leaving file-level runners (vitest/pytest, which
430
- do NOT define this method ⇒ treated as False) on the file branch unchanged.
431
- """
432
- return True
433
-
434
- @staticmethod
435
- def normalize_runner_identity(package: str, test: str, *, module_path: str | None = None) -> str:
436
- """Pure identity key for a runner ``(Package, Test)`` → the static join key.
437
-
438
- Returns ``"<reldir>::<TestFunc>"`` where ``<reldir>`` is the package's repo-
439
- root-relative directory (the go.mod ``module`` prefix stripped) and
440
- ``<TestFunc>`` is the top-level function name (a ``TestX/sub`` subtest folds
441
- to ``TestX``) — the SAME pairing key
442
- :class:`~codd.vb_marker_authenticity.GoTestBlockProfile` produces from a
443
- ``func TestFunc`` block label, so the gate can pair a runner case with the
444
- static test block that carries the VB marker. ``module_path`` (the go.mod
445
- ``module`` line) lets the dir be made relative; when absent the package path
446
- is used as the dir (still a stable, self-consistent key for pairing two
447
- identities computed the same way).
448
- """
449
-
450
- rel_dir = _go_package_to_dir(package, module_path)
451
- if rel_dir is None:
452
- rel_dir = str(package or "").strip().replace("\\", "/")
453
- return f"{rel_dir}::{_go_test_func_root(test)}"
454
-
455
-
456
- def _parse_go_test_json_lines(raw: str) -> list[dict[str, Any]] | None:
457
- """Parse a ``go test -json`` stream into its JSON event objects (tolerant).
458
-
459
- Each line is one JSON object; NON-JSON lines (raw build-error text Go prints
460
- before the JSON stream, or a stray banner) are SKIPPED rather than fatal — a
461
- build failure still surfaces through the structured ``build-fail`` / package
462
- ``fail`` events. Returns ``None`` ONLY when the report has NO parseable JSON
463
- object at all (a wholly unreadable report is an observability error, not an
464
- empty pass); an empty/whitespace report also yields ``None``.
465
- """
466
-
467
- events: list[dict[str, Any]] = []
468
- saw_any_line = False
469
- for line in raw.splitlines():
470
- stripped = line.strip()
471
- if not stripped:
472
- continue
473
- saw_any_line = True
474
- try:
475
- obj = json.loads(stripped)
476
- except json.JSONDecodeError:
477
- continue # non-JSON line (build noise) — tolerate
478
- if isinstance(obj, dict):
479
- events.append(obj)
480
- if not saw_any_line:
481
- return None
482
- if not events:
483
- return None
484
- return events
485
-
486
-
487
- def _read_go_module_path(project_root: Path) -> str | None:
488
- """The ``module`` path declared on go.mod's ``module`` line, or ``None``.
489
-
490
- go.mod's first meaningful directive is ``module <import/path>``. We read it so a
491
- runner ``Package`` import-path can be made repo-root-relative. Missing/unreadable
492
- go.mod ⇒ ``None`` (the package→dir mapper then fails-open: it cannot relativize,
493
- so it treats the package as external and the file attribution simply finds no
494
- match — fail-CLOSED toward "not executed", never a false pass).
495
- """
496
-
497
- gomod = project_root / "go.mod"
498
- try:
499
- text = gomod.read_text(encoding="utf-8")
500
- except OSError:
501
- return None
502
- for line in text.splitlines():
503
- stripped = line.strip()
504
- if stripped.startswith("module "):
505
- return stripped[len("module ") :].strip().strip('"')
506
- return None
507
-
508
-
509
- def _go_package_to_dir(package: str | None, module_path: str | None) -> str | None:
510
- """Map a Go ``Package`` import-path to its repo-root-relative POSIX directory.
511
-
512
- ``example.com/m/internal/store`` with module ``example.com/m`` → ``internal/store``;
513
- the module root package itself (``example.com/m``) → ``""`` (the repo root). A
514
- package that is NOT under the module prefix (an external / stdlib import that has
515
- no ``_test.go`` of ours) → ``None`` (ignored, like vitest's ``_relativize``
516
- returning ``None`` for a path outside the project tree). When ``module_path`` is
517
- unknown, ``None`` (cannot relativize) so the caller fails-closed.
518
- """
519
-
520
- if not package or not module_path:
521
- return None
522
- pkg = str(package).strip()
523
- mod = str(module_path).strip()
524
- if pkg == mod:
525
- return ""
526
- prefix = mod.rstrip("/") + "/"
527
- if pkg.startswith(prefix):
528
- return pkg[len(prefix) :].replace("\\", "/").strip("/")
529
- return None
530
-
531
-
532
- def _go_test_func_root(test: str | None) -> str:
533
- """The top-level ``TestFunc`` of a runner ``Test`` field (``TestX/sub`` → ``TestX``)."""
534
- return str(test or "").split("/", 1)[0].strip()
535
-
536
-
537
- def _go_import_path_base(import_path: str | None) -> str | None:
538
- """The package import-path from a ``build-fail`` event's ``ImportPath`` field.
539
-
540
- ``go test -json`` build-failure events carry ``ImportPath`` shaped like
541
- ``"example.com/m/internal/store [example.com/m/internal/store.test]"`` (the test
542
- binary's import path with a bracketed variant). We take the leading import path
543
- (before the space/bracket) so it can be mapped to a directory like a normal
544
- ``Package`` field. ``None``/empty ⇒ ``None``.
545
- """
546
- if not import_path:
547
- return None
548
- return str(import_path).split(" ", 1)[0].strip() or None
549
-
550
-
551
- def _go_static_test_func_index(project_root: Path) -> dict[str, dict[str, str]]:
552
- """Index ``reldir → {TestFunc → relfile}`` over every ``*_test.go`` in the tree.
553
-
554
- Reuses the SHARED test-file discovery (:func:`_iter_test_files`, the same glob
555
- the inventory + VB audit consume) so the files indexed here are EXACTLY the files
556
- the gate keys on, then parses each with the Go structural adapter
557
- (:class:`~codd.vb_marker_authenticity.GoTestBlockProfile`) to read its top-level
558
- ``func TestFunc`` names. This is the static half of the ``(Package, Test)``→FILE
559
- join: ``dir = relfile's parent``; ``TestFunc`` is unique within a dir in valid Go
560
- (duplicate top-level test funcs in one package do not compile), so the map is
561
- well-defined. Files the adapter cannot parse contribute nothing (fail-closed:
562
- their tests then read as not-executed, never a false pass).
563
- """
564
-
565
- from codd.vb_marker_authenticity import GoTestBlockProfile
566
-
567
- adapter = GoTestBlockProfile()
568
- index: dict[str, dict[str, str]] = {}
569
- for path in _iter_test_files(project_root, test_dirs=None):
570
- rel = _norm_test_path(_rel_path(path, project_root))
571
- if not rel.endswith("_test.go"):
572
- continue
573
- rel_dir = rel.rsplit("/", 1)[0] if "/" in rel else ""
574
- try:
575
- text = path.read_text(encoding="utf-8")
576
- except (OSError, UnicodeDecodeError):
577
- continue
578
- try:
579
- blocks = adapter.parse_test_blocks(text)
580
- except Exception: # noqa: BLE001 — a parse failure contributes no funcs.
581
- continue
582
- bucket = index.setdefault(rel_dir, {})
583
- for block in blocks:
584
- label = (block.label or "").strip()
585
- # Top-level funcs only (subtest blocks carry a ``<Func>/subtest`` label);
586
- # the func before any ``/`` is the join key, and the FIRST file that
587
- # declares it wins (unique per dir in valid Go, so order is immaterial).
588
- func = label.split("/", 1)[0].strip()
589
- if func.startswith("Test") and func not in bucket:
590
- bucket[func] = rel
591
- return index
592
-
114
+ # The runner-report PARSERS (RunnerReportUnsupported / RunnerExecution /
115
+ # RunnerReportAdapter / VitestJsonReportAdapter / GoTestJsonReportAdapter) and
116
+ # their helpers were RELOCATED to codd/languages/adapters/runner_report.py for
117
+ # the Contract Kernel (re-imported above; same objects). The format->adapter MAP
118
+ # and its resolvers STAY here: they are the coverage gate's lookup surface.
593
119
 
594
120
  #: report_format → adapter. A new runner registers ONE entry here + sets the
595
121
  #: matching ``report_format`` on its profile's :class:`VerifyCampaignSpec`.
@@ -3124,44 +3124,30 @@ def _certify_verify_executed(project_root: Path, result: Any) -> str:
3124
3124
  )
3125
3125
 
3126
3126
 
3127
- # Language ecosystems whose CI needs a toolchain bootstrap before the test
3128
- # command can run. Keyed by a marker file; the value is the GitHub Actions
3129
- # setup steps to prepend. An unrecognised ecosystem still gets checkout + the
3130
- # detected test command (authentic — it runs the real suite — just without a
3131
- # toolchain step). This per-ecosystem dispatch is the v3.0 short-term bridge;
3132
- # v3.1 moves the CI template into the language/stack profile (profile-driven CI).
3133
- _CI_SETUP_STEPS: tuple[tuple[str, list[dict[str, Any]]], ...] = (
3134
- ("go.mod", [{"uses": "actions/setup-go@v5", "with": {"go-version": "stable"}}]),
3135
- (
3136
- "package.json",
3137
- [
3138
- {"uses": "actions/setup-node@v4", "with": {"node-version": "lts/*"}},
3139
- {"run": "npm ci"},
3140
- ],
3141
- ),
3142
- (
3143
- "pyproject.toml",
3144
- [
3145
- {"uses": "actions/setup-python@v5", "with": {"python-version": "3.x"}},
3146
- {"run": "python -m pip install --upgrade pip && pip install -e ."},
3147
- ],
3148
- ),
3149
- (
3150
- "setup.py",
3151
- [
3152
- {"uses": "actions/setup-python@v5", "with": {"python-version": "3.x"}},
3153
- {"run": "python -m pip install --upgrade pip && pip install -e ."},
3154
- ],
3155
- ),
3156
- ("Cargo.toml", [{"uses": "dtolnay/rust-toolchain@stable"}]),
3157
- )
3158
-
3159
-
3160
3127
  def _ci_setup_steps(project_root: Path) -> list[dict[str, Any]]:
3161
- for marker, steps in _CI_SETUP_STEPS:
3162
- if (project_root / marker).exists():
3163
- return [dict(step) for step in steps]
3164
- return []
3128
+ """CI toolchain setup steps from the resolved language profile (``profile.ci``).
3129
+
3130
+ Contract-driven (Contract Kernel, v2.70): the steps come from the project's
3131
+ language profile — the pipeline core does NOT branch on a language name or a
3132
+ marker file. No CoDD config, no resolvable language, or no ``ci`` section →
3133
+ no setup steps (the workflow still runs checkout + the real test command; an
3134
+ unsupported ecosystem simply gets no toolchain bootstrap, the honest
3135
+ pluggable default). The per-marker hardcoded table (v2.67.0) is gone.
3136
+ """
3137
+ from codd.config import load_project_config
3138
+ from codd.languages import resolve_language_profile
3139
+
3140
+ try:
3141
+ config = load_project_config(project_root)
3142
+ except (FileNotFoundError, ValueError):
3143
+ return []
3144
+ try:
3145
+ profile = resolve_language_profile(config)
3146
+ except Exception: # noqa: BLE001 — unknown/unsupported language → no setup, never a crash.
3147
+ return []
3148
+ if profile is None or profile.ci is None:
3149
+ return []
3150
+ return [dict(step) for step in profile.ci.setup_steps]
3165
3151
 
3166
3152
 
3167
3153
  def _ci_opt_out_declared(project_root: Path) -> bool:
@@ -17,6 +17,7 @@ from __future__ import annotations
17
17
  from .profile import (
18
18
  AdapterRef,
19
19
  ArtifactsSpec,
20
+ CiSpec,
20
21
  CommandSpec,
21
22
  DependencyIntegrityFile,
22
23
  Identity,
@@ -69,6 +70,7 @@ __all__ = [
69
70
  # model
70
71
  "AdapterRef",
71
72
  "ArtifactsSpec",
73
+ "CiSpec",
72
74
  "CommandSpec",
73
75
  "DependencyIntegrityFile",
74
76
  "Identity",
@@ -0,0 +1,14 @@
1
+ """Concrete language adapters for the Contract Kernel (relocated leaves).
2
+
3
+ This package holds the concrete adapter implementations the language contract
4
+ resolves (runner-report parsers today). It is intentionally a LEAF surface: this
5
+ ``__init__`` imports NOTHING (no submodule, no registration) so that importing
6
+ ``codd.languages`` — or even ``codd.languages.adapters`` — never pulls an adapter
7
+ implementation or populates :data:`codd.languages.registry.default_adapter_registry`
8
+ at package-load time. Registration stays LAZY (see
9
+ :mod:`codd.languages.builtin_adapters`); adapter modules are imported only inside
10
+ the functions that need them, which is what keeps this package free of an import
11
+ cycle with :mod:`codd.coverage_execution_coherence`.
12
+ """
13
+
14
+ from __future__ import annotations