codd-dev 2.66.0__tar.gz → 2.68.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 (607) hide show
  1. {codd_dev-2.66.0 → codd_dev-2.68.0}/PKG-INFO +1 -1
  2. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/__init__.py +1 -1
  3. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/coverage_execution_coherence.py +505 -9
  4. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/greenfield/pipeline.py +183 -3
  5. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/implement_oracle.py +546 -2
  6. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/implementer.py +17 -3
  7. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/languages/__init__.py +17 -0
  8. codd_dev-2.68.0/codd/languages/contract.py +248 -0
  9. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/languages/registry.py +6 -0
  10. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/repair/verify_runner.py +26 -0
  11. codd_dev-2.68.0/codd/stack/__init__.py +62 -0
  12. codd_dev-2.68.0/codd/stack/adapters/__init__.py +36 -0
  13. codd_dev-2.68.0/codd/stack/adapters/_base.py +18 -0
  14. codd_dev-2.68.0/codd/stack/adapters/nextjs.py +77 -0
  15. codd_dev-2.68.0/codd/stack/adapters/playwright.py +53 -0
  16. codd_dev-2.68.0/codd/stack/compose.py +268 -0
  17. codd_dev-2.68.0/codd/stack/loader.py +302 -0
  18. codd_dev-2.68.0/codd/stack/lock.py +133 -0
  19. codd_dev-2.68.0/codd/stack/obligations.py +76 -0
  20. codd_dev-2.68.0/codd/stack/profile.py +356 -0
  21. codd_dev-2.68.0/codd/stack/profiles/addons/playwright.yaml +54 -0
  22. codd_dev-2.68.0/codd/stack/profiles/addons/prisma.yaml +51 -0
  23. codd_dev-2.68.0/codd/stack/profiles/frameworks/nextjs.yaml +150 -0
  24. codd_dev-2.68.0/codd/stack/project.py +70 -0
  25. codd_dev-2.68.0/codd/stack/registry.py +112 -0
  26. codd_dev-2.68.0/codd/stack/resolve.py +79 -0
  27. {codd_dev-2.66.0 → codd_dev-2.68.0}/pyproject.toml +1 -1
  28. {codd_dev-2.66.0 → codd_dev-2.68.0}/.gitignore +0 -0
  29. {codd_dev-2.66.0 → codd_dev-2.68.0}/LICENSE +0 -0
  30. {codd_dev-2.66.0 → codd_dev-2.68.0}/README.md +0 -0
  31. {codd_dev-2.66.0 → codd_dev-2.68.0}/bench_fixture/README.md +0 -0
  32. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/__main__.py +0 -0
  33. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/_git_helper.py +0 -0
  34. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/action_outcome.py +0 -0
  35. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/ai_invoke.py +0 -0
  36. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/ai_patch.py +0 -0
  37. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/artifact_contract.py +0 -0
  38. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/artifact_ids.py +0 -0
  39. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/artifacts/catalog.yaml +0 -0
  40. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/ask_user_question_adapter.py +0 -0
  41. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/assembler.py +0 -0
  42. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/bridge.py +0 -0
  43. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/brownfield/__init__.py +0 -0
  44. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/brownfield/pipeline.py +0 -0
  45. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/capability_completeness.py +0 -0
  46. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/claude_cli.py +0 -0
  47. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/cli.py +0 -0
  48. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/clustering.py +0 -0
  49. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/coherence_adapters.py +0 -0
  50. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/coherence_engine.py +0 -0
  51. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/confidence.py +0 -0
  52. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/config.py +0 -0
  53. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/config_schema.py +0 -0
  54. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/contracts.py +0 -0
  55. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/contracts_registry/__init__.py +0 -0
  56. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/contracts_registry/__main__.py +0 -0
  57. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/contracts_registry/certify.py +0 -0
  58. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/contracts_registry/generate_matrix.py +0 -0
  59. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/contracts_registry/registry.py +0 -0
  60. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/coverage_auditor.py +0 -0
  61. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/coverage_metrics.py +0 -0
  62. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/__init__.py +0 -0
  63. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/auto_repair.py +0 -0
  64. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/builder.py +0 -0
  65. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/checks/__init__.py +0 -0
  66. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
  67. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/checks/artifact_contract_check.py +0 -0
  68. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/checks/ci_health.py +0 -0
  69. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/checks/dependency_freshness.py +0 -0
  70. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/checks/depends_on_consistency.py +0 -0
  71. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/checks/deployment_completeness.py +0 -0
  72. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/checks/edge_validity.py +0 -0
  73. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/checks/environment_coverage.py +0 -0
  74. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/checks/implementation_coverage.py +0 -0
  75. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/checks/node_completeness.py +0 -0
  76. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/checks/opt_out.py +0 -0
  77. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/checks/task_completion.py +0 -0
  78. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/checks/transitive_closure.py +0 -0
  79. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/checks/ui_coherence.py +0 -0
  80. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/checks/user_journey_coherence.py +0 -0
  81. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/coverage_axes.py +0 -0
  82. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/defaults/cli.yaml +0 -0
  83. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
  84. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/defaults/csharp.yaml +0 -0
  85. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/defaults/elixir.yaml +0 -0
  86. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/defaults/generic.yaml +0 -0
  87. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/defaults/iot.yaml +0 -0
  88. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/defaults/java.yaml +0 -0
  89. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/defaults/kotlin.yaml +0 -0
  90. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/defaults/mobile.yaml +0 -0
  91. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/defaults/ruby.yaml +0 -0
  92. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/defaults/rust.yaml +0 -0
  93. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/defaults/scala.yaml +0 -0
  94. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/defaults/swift.yaml +0 -0
  95. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
  96. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/defaults/web.yaml +0 -0
  97. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/extractor.py +0 -0
  98. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/impact.py +0 -0
  99. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dag/runner.py +0 -0
  100. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/defaults.py +0 -0
  101. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/defaults.yaml +0 -0
  102. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/dependency_lock_coherence.py +0 -0
  103. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/deploy_targets/__init__.py +0 -0
  104. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/deploy_targets/app_service.py +0 -0
  105. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/deploy_targets/base.py +0 -0
  106. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/deploy_targets/docker_compose.py +0 -0
  107. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/deployer.py +0 -0
  108. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/deployment/__init__.py +0 -0
  109. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/deployment/checks/__init__.py +0 -0
  110. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
  111. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
  112. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
  113. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
  114. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/deployment/extractor.py +0 -0
  115. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/deployment/providers/__init__.py +0 -0
  116. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/deployment/providers/ai_command.py +0 -0
  117. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/deployment/providers/ai_command_factory.py +0 -0
  118. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/deployment/providers/codex_app_server.py +0 -0
  119. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/deployment/providers/llm_consideration.py +0 -0
  120. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/deployment/providers/schema/__init__.py +0 -0
  121. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/deployment/providers/schema/prisma.py +0 -0
  122. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/deployment/providers/target/__init__.py +0 -0
  123. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/deployment/providers/target/docker_compose.py +0 -0
  124. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/deployment/providers/verification/__init__.py +0 -0
  125. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
  126. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
  127. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
  128. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
  129. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
  130. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/deployment/providers/verification/curl.py +0 -0
  131. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
  132. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
  133. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/deployment/providers/verification/playwright.py +0 -0
  134. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/deployment/providers/verification/pytest_http.py +0 -0
  135. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/deployment/providers/verification/vitest.py +0 -0
  136. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/design_md.py +0 -0
  137. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/diff/__init__.py +0 -0
  138. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/diff/apply.py +0 -0
  139. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/diff/engine.py +0 -0
  140. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/diff/persistence.py +0 -0
  141. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/diff/templates/diff_prompt.md +0 -0
  142. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/discovery.py +0 -0
  143. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/drift.py +0 -0
  144. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/e2e_contract_coherence.py +0 -0
  145. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/e2e_extractor.py +0 -0
  146. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/e2e_generator.py +0 -0
  147. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/e2e_harness.py +0 -0
  148. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/e2e_runner.py +0 -0
  149. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/elicit/__init__.py +0 -0
  150. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/elicit/apply.py +0 -0
  151. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/elicit/engine.py +0 -0
  152. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/elicit/finding.py +0 -0
  153. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/elicit/formatters/__init__.py +0 -0
  154. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/elicit/formatters/base.py +0 -0
  155. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/elicit/formatters/interactive.py +0 -0
  156. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/elicit/formatters/json_fmt.py +0 -0
  157. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/elicit/formatters/md.py +0 -0
  158. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/elicit/lexicon_loader.py +0 -0
  159. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/elicit/persistence.py +0 -0
  160. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
  161. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/env_refs.py +0 -0
  162. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/extract_ai.py +0 -0
  163. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/extract_paths.py +0 -0
  164. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/extractor.py +0 -0
  165. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/fix/__init__.py +0 -0
  166. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/fix/candidate_selector.py +0 -0
  167. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/fix/design_updater.py +0 -0
  168. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/fix/impl_propagation.py +0 -0
  169. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/fix/interactive_prompt.py +0 -0
  170. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/fix/phenomenon_fixer.py +0 -0
  171. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/fix/phenomenon_parser.py +0 -0
  172. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/fix/risk_classifier.py +0 -0
  173. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/fix/templates/clarification_question.txt +0 -0
  174. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/fix/templates/design_update.txt +0 -0
  175. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/fix/templates/impl_update.txt +0 -0
  176. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
  177. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/fix/templates/risk_assessment.txt +0 -0
  178. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/fix/templates_loader.py +0 -0
  179. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/fixer.py +0 -0
  180. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/fixup_drift.py +0 -0
  181. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/fixup_drift_strategies/__init__.py +0 -0
  182. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
  183. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
  184. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
  185. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/frontmatter.py +0 -0
  186. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/generator.py +0 -0
  187. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/git_evidence.py +0 -0
  188. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/graph.py +0 -0
  189. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/greenfield/__init__.py +0 -0
  190. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/hitl_session.py +0 -0
  191. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/hooks/__init__.py +0 -0
  192. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/hooks/pre-commit +0 -0
  193. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
  194. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
  195. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/hooks/recipes/codex_hook.sh +0 -0
  196. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
  197. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
  198. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/iac_nfr.py +0 -0
  199. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/implement_oracle_scope.py +0 -0
  200. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/implementer/__init__.py +0 -0
  201. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/implementer/chunked_runner.py +0 -0
  202. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/implementer/typecheck_loop.py +0 -0
  203. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/import_coherence.py +0 -0
  204. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/inheritance.py +0 -0
  205. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/init/__init__.py +0 -0
  206. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/init/lexicon_suggest.py +0 -0
  207. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/init/llm_lexicon_suggester.py +0 -0
  208. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/init/stack_detector.py +0 -0
  209. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/knowledge_fetcher.py +0 -0
  210. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/languages/compat.py +0 -0
  211. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/languages/loader.py +0 -0
  212. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/languages/path_planner.py +0 -0
  213. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/languages/profile.py +0 -0
  214. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/languages/profiles/go.yaml +0 -0
  215. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/languages/profiles/python.yaml +0 -0
  216. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/languages/profiles/typescript.yaml +0 -0
  217. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/lexicon.py +0 -0
  218. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/lexicon_cli/__init__.py +0 -0
  219. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
  220. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/lexicon_cli/formatters/html.py +0 -0
  221. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
  222. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/lexicon_cli/formatters/md.py +0 -0
  223. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/lexicon_cli/inspector.py +0 -0
  224. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/lexicon_cli/manager.py +0 -0
  225. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/lexicon_cli/reporter.py +0 -0
  226. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/lexicon_cli/threshold.py +0 -0
  227. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/llm/__init__.py +0 -0
  228. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/llm/approval.py +0 -0
  229. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/llm/best_practice_augmenter.py +0 -0
  230. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/llm/criteria_expander.py +0 -0
  231. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/llm/design_doc_extractor.py +0 -0
  232. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/llm/impl_step_deriver.py +0 -0
  233. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/llm/means_catalog_loader.py +0 -0
  234. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/llm/parser.py +0 -0
  235. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/llm/plan_deriver.py +0 -0
  236. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/llm/prompt_builder.py +0 -0
  237. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/llm/strategy_validator.py +0 -0
  238. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
  239. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
  240. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
  241. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
  242. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
  243. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/llm/templates/meta_instruction.md +0 -0
  244. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/llm/templates/plan_derive_meta.md +0 -0
  245. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
  246. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/mcp_server.py +0 -0
  247. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/measure.py +0 -0
  248. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/operational_e2e_audit.py +0 -0
  249. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/operations_derive.py +0 -0
  250. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/parsing/__init__.py +0 -0
  251. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/parsing/_shared.py +0 -0
  252. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/parsing/api_specs.py +0 -0
  253. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/parsing/filesystem_routes.py +0 -0
  254. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/parsing/iac.py +0 -0
  255. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/parsing/python_ast.py +0 -0
  256. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/parsing/schemas.py +0 -0
  257. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/parsing/tests_builddeps.py +0 -0
  258. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/parsing/treesitter.py +0 -0
  259. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/planner.py +0 -0
  260. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/policy.py +0 -0
  261. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/preflight/__init__.py +0 -0
  262. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/preflight/defaults/cli.yaml +0 -0
  263. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/preflight/defaults/generic.yaml +0 -0
  264. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/preflight/defaults/iot.yaml +0 -0
  265. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/preflight/defaults/mobile.yaml +0 -0
  266. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/preflight/defaults/web.yaml +0 -0
  267. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/project_types.py +0 -0
  268. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/propagate.py +0 -0
  269. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/propagation_common.py +0 -0
  270. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/propagator.py +0 -0
  271. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/reconciliation_ledger.py +0 -0
  272. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/reference_resolution.py +0 -0
  273. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/registry.py +0 -0
  274. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/repair/__init__.py +0 -0
  275. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/repair/approval_repair.py +0 -0
  276. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/repair/auto_scope_guard.py +0 -0
  277. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/repair/engine.py +0 -0
  278. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/repair/git_patcher.py +0 -0
  279. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/repair/history.py +0 -0
  280. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/repair/llm_repair_engine.py +0 -0
  281. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/repair/loop.py +0 -0
  282. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/repair/primary_picker.py +0 -0
  283. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/repair/proof_breaks.py +0 -0
  284. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/repair/repair_result.py +0 -0
  285. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/repair/repairability_classifier.py +0 -0
  286. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/repair/schema.py +0 -0
  287. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/repair/templates/analyze_meta.md +0 -0
  288. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/repair/templates/propose_meta.md +0 -0
  289. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
  290. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/repair/templates/repairability_meta.md +0 -0
  291. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/repair/test_failure_attribution.py +0 -0
  292. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/repair_slice.py +0 -0
  293. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/require.py +0 -0
  294. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/require_plugins.py +0 -0
  295. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/require_propagate.py +0 -0
  296. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
  297. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
  298. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
  299. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
  300. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/required_artifacts/defaults/web.yaml +0 -0
  301. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/required_artifacts_deriver.py +0 -0
  302. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
  303. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
  304. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
  305. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
  306. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
  307. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/requirement_completeness_auditor.py +0 -0
  308. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/requirement_reconciliation.py +0 -0
  309. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/requirements_meta.py +0 -0
  310. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/restoration_report.py +0 -0
  311. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/restore.py +0 -0
  312. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/routes_extractor.py +0 -0
  313. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/runtime_smoke/__init__.py +0 -0
  314. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/runtime_smoke/checks.py +0 -0
  315. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/runtime_smoke/config.py +0 -0
  316. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/runtime_smoke/report.py +0 -0
  317. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/runtime_smoke/runner.py +0 -0
  318. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/scanner.py +0 -0
  319. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/schema_refs.py +0 -0
  320. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/screen_flow_validator.py +0 -0
  321. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/screen_transition_extractor.py +0 -0
  322. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/screen_transitions/defaults.yaml +0 -0
  323. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/skills_cli/__init__.py +0 -0
  324. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/skills_cli/discovery.py +0 -0
  325. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/skills_cli/manager.py +0 -0
  326. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/skills_cli/paths.py +0 -0
  327. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/surface_reconciliation.py +0 -0
  328. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/synth.py +0 -0
  329. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/templates/codd.yaml.tmpl +0 -0
  330. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/templates/conventions.yaml.tmpl +0 -0
  331. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
  332. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/templates/doc_links.yaml.tmpl +0 -0
  333. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
  334. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
  335. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
  336. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
  337. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
  338. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/templates/extracted/system-context.md.j2 +0 -0
  339. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/templates/gitignore.tmpl +0 -0
  340. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/templates/lexicon_questions.md +0 -0
  341. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/templates/lexicon_schema.yaml +0 -0
  342. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/templates/overrides.yaml.tmpl +0 -0
  343. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/test_detection.py +0 -0
  344. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/test_import_coherence.py +0 -0
  345. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/traceability.py +0 -0
  346. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/validator.py +0 -0
  347. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/vb_marker_authenticity.py +0 -0
  348. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/vb_rerun_scope.py +0 -0
  349. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/verifiable_behavior_audit.py +0 -0
  350. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/watch/__init__.py +0 -0
  351. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/watch/events.py +0 -0
  352. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/watch/propagation_log.py +0 -0
  353. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/watch/propagation_pipeline.py +0 -0
  354. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/watch/test_runner.py +0 -0
  355. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/watch/watcher.py +0 -0
  356. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd/wiring.py +0 -0
  357. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
  358. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
  359. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
  360. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
  361. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
  362. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
  363. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
  364. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
  365. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
  366. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
  367. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
  368. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
  369. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
  370. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
  371. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
  372. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
  373. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
  374. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
  375. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
  376. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
  377. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
  378. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
  379. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
  380. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
  381. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
  382. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
  383. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
  384. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
  385. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
  386. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
  387. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
  388. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
  389. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
  390. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
  391. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
  392. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
  393. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
  394. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
  395. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
  396. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
  397. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
  398. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
  399. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
  400. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
  401. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
  402. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
  403. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
  404. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
  405. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
  406. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
  407. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
  408. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
  409. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
  410. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
  411. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
  412. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
  413. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
  414. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
  415. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
  416. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
  417. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
  418. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
  419. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
  420. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
  421. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
  422. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
  423. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
  424. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
  425. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
  426. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
  427. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
  428. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
  429. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
  430. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
  431. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
  432. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
  433. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
  434. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
  435. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
  436. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
  437. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
  438. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
  439. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
  440. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
  441. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
  442. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
  443. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
  444. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
  445. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
  446. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
  447. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
  448. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
  449. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
  450. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
  451. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
  452. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
  453. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
  454. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
  455. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
  456. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
  457. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
  458. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
  459. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
  460. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
  461. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
  462. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
  463. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
  464. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
  465. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
  466. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
  467. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
  468. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
  469. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
  470. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
  471. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
  472. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
  473. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
  474. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
  475. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
  476. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
  477. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
  478. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
  479. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
  480. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
  481. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
  482. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
  483. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
  484. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
  485. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
  486. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
  487. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
  488. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
  489. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
  490. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
  491. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
  492. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
  493. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
  494. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
  495. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
  496. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
  497. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
  498. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
  499. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
  500. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
  501. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
  502. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
  503. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
  504. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
  505. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
  506. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
  507. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
  508. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
  509. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
  510. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
  511. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
  512. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
  513. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
  514. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
  515. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
  516. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
  517. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
  518. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
  519. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
  520. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
  521. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
  522. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
  523. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
  524. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
  525. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
  526. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
  527. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
  528. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
  529. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
  530. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
  531. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
  532. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
  533. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
  534. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
  535. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
  536. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
  537. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
  538. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
  539. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
  540. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
  541. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
  542. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
  543. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
  544. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
  545. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
  546. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
  547. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
  548. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
  549. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
  550. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
  551. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
  552. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
  553. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
  554. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
  555. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
  556. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
  557. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
  558. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
  559. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
  560. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
  561. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
  562. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
  563. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
  564. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
  565. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
  566. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
  567. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
  568. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
  569. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
  570. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
  571. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
  572. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
  573. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
  574. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
  575. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
  576. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
  577. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
  578. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
  579. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
  580. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
  581. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
  582. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
  583. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
  584. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
  585. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
  586. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
  587. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
  588. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
  589. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
  590. {codd_dev-2.66.0 → codd_dev-2.68.0}/codd_plugins/stack_map.yaml +0 -0
  591. {codd_dev-2.66.0 → codd_dev-2.68.0}/docs/cookbook/cdp_browser/README.md +0 -0
  592. {codd_dev-2.66.0 → codd_dev-2.68.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
  593. {codd_dev-2.66.0 → codd_dev-2.68.0}/docs/requirements/README.md +0 -0
  594. {codd_dev-2.66.0 → codd_dev-2.68.0}/dogfood/README.md +0 -0
  595. {codd_dev-2.66.0 → codd_dev-2.68.0}/dogfood/fixtures/flat_py_app/README.md +0 -0
  596. {codd_dev-2.66.0 → codd_dev-2.68.0}/examples/README.md +0 -0
  597. {codd_dev-2.66.0 → codd_dev-2.68.0}/skills/codd-assemble/SKILL.md +0 -0
  598. {codd_dev-2.66.0 → codd_dev-2.68.0}/skills/codd-evolve/SKILL.md +0 -0
  599. {codd_dev-2.66.0 → codd_dev-2.68.0}/skills/codd-generate/SKILL.md +0 -0
  600. {codd_dev-2.66.0 → codd_dev-2.68.0}/skills/codd-greenfield/SKILL.md +0 -0
  601. {codd_dev-2.66.0 → codd_dev-2.68.0}/skills/codd-impact/SKILL.md +0 -0
  602. {codd_dev-2.66.0 → codd_dev-2.68.0}/skills/codd-init/SKILL.md +0 -0
  603. {codd_dev-2.66.0 → codd_dev-2.68.0}/skills/codd-propagate/SKILL.md +0 -0
  604. {codd_dev-2.66.0 → codd_dev-2.68.0}/skills/codd-restore/SKILL.md +0 -0
  605. {codd_dev-2.66.0 → codd_dev-2.68.0}/skills/codd-scan/SKILL.md +0 -0
  606. {codd_dev-2.66.0 → codd_dev-2.68.0}/skills/codd-validate/SKILL.md +0 -0
  607. {codd_dev-2.66.0 → codd_dev-2.68.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.66.0
3
+ Version: 2.68.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.66.0"
3
+ __version__ = "2.68.0"
@@ -43,10 +43,13 @@ THE THREE PIECES (all per-profile; gate logic is language-agnostic)
43
43
  to another (the codex14 ``0 e2e scanned`` half of the bug).
44
44
  3. **Runner-report adapter** — per-profile normalization of the campaign report
45
45
  into the set of executed + passed test FILES (and, when available, cases).
46
- ``vitest-json`` is implemented; ``pytest-junit-xml`` / ``go-test-json`` are
47
- documented extension points (:func:`resolve_runner_report_adapter`). A report
46
+ ``vitest-json`` and ``go-test-json`` are implemented; ``pytest-junit-xml`` is a
47
+ documented extension point (:func:`resolve_runner_report_adapter`). A report
48
48
  the gate cannot read is an EXPLICIT degrade/observability error — never a
49
- silent green.
49
+ silent green. A runner that reports per-test-case identity (Go) reconciles each
50
+ VB at TEST granularity via :class:`RunnerExecution.executed_passed_cases`; a
51
+ file-level runner (vitest/pytest) reconciles at FILE granularity — both share
52
+ the same gate, selected by the adapter's ``produces_test_case_identity``.
50
53
 
51
54
  GENERALITY (see ``feedback_codd_generality_preservation``): the gate logic here
52
55
  is language-agnostic. Every language-specific operation — the campaign command,
@@ -251,16 +254,352 @@ class VitestJsonReportAdapter:
251
254
  )
252
255
 
253
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
+
593
+
254
594
  #: report_format → adapter. A new runner registers ONE entry here + sets the
255
595
  #: matching ``report_format`` on its profile's :class:`VerifyCampaignSpec`.
256
- #: ``pytest-junit-xml`` / ``go-test-json`` are documented extension points
257
- #: (the design's per-language adapter list): pytest JUnit XML parses
258
- #: ``<testcase classname name>`` + ``<skipped>``/``<failure>``/``<error>``
259
- #: children; ``go test -json`` parses the streamed ``{Action: "pass"|"fail",
260
- #: Test, Package}`` events. Until added they resolve to ``None`` and the gate
261
- #: degrades EXPLICITLY for that stack (never a silent green).
596
+ #: ``pytest-junit-xml`` is the remaining documented extension point (pytest JUnit
597
+ #: XML parses ``<testcase classname name>`` + ``<skipped>``/``<failure>``/``<error>``
598
+ #: children); until added it resolves to ``None`` and the gate degrades EXPLICITLY
599
+ #: for that stack (never a silent green).
262
600
  _RUNNER_REPORT_ADAPTERS: dict[str, RunnerReportAdapter] = {
263
601
  "vitest-json": VitestJsonReportAdapter(),
602
+ "go-test-json": GoTestJsonReportAdapter(),
264
603
  }
265
604
 
266
605
 
@@ -534,6 +873,111 @@ def _authentic_cover_files(
534
873
  return authentic, True
535
874
 
536
875
 
876
+ def _norm_vb_key(vb_id: str) -> str:
877
+ """The audit's canonical VB id (so the per-case map keys match a row's id)."""
878
+ from codd.verifiable_behavior_audit import _normalize_vb_id
879
+
880
+ return _normalize_vb_id(vb_id)
881
+
882
+
883
+ def _authentic_cover_case_keys(
884
+ project_root: Path,
885
+ *,
886
+ config: dict[str, Any] | None,
887
+ profile: Any,
888
+ vb_audit: VBAuditReport,
889
+ authenticity: AuthenticityReport,
890
+ ) -> dict[str, set[str]] | None:
891
+ """Per-VB ``{normalized_vb_id → {"<relfile>::TestFunc", ...}}`` covering case keys.
892
+
893
+ Returns ``None`` (⇒ the gate uses FILE-level reconciliation, unchanged) UNLESS
894
+ this stack supports per-test-case reconciliation: its runner adapter declares
895
+ ``produces_test_case_identity()`` True (Go) AND its test-block profile parses
896
+ blocks whose label is the runner-case identity (``TestFunc``). For every AUTHENTIC
897
+ ``codd: covers vb=`` marker, the covering case key is ``"<relfile>::<top-level
898
+ TestFunc>"`` — the file the marker sits in plus the top-level test function of the
899
+ block it attaches to, using the SAME ``_attached_block`` attachment the
900
+ authenticity gate uses (so static coverage and execution reconciliation agree).
901
+ A marker that does not attach to an executable block, or whose block is
902
+ inauthentic for this VB, contributes NO key (it is not a credible covering case).
903
+
904
+ This is the static half of the ``(Package, Test)``→case-key join the Go runner
905
+ adapter performs; matching keys on both sides is what lets a passed ``TestA``
906
+ prove its VB while a sibling ``TestB`` skip in the same file does not drag it down.
907
+ """
908
+
909
+ adapter_getter = getattr(profile, "runner_report_adapter", None) if profile is not None else None
910
+ adapter = adapter_getter() if callable(adapter_getter) else None
911
+ if adapter is None or not _adapter_produces_case_identity(adapter):
912
+ return None
913
+ block_getter = getattr(profile, "test_block_profile", None)
914
+ test_block_profile = block_getter() if callable(block_getter) else None
915
+ if test_block_profile is None:
916
+ return None
917
+
918
+ from codd.vb_marker_authenticity import _attached_block, _scan_cover_markers_with_lines
919
+
920
+ # Authentic-marker filter: a (path, vb) flagged inauthentic (skipped/unattached/
921
+ # no-assertion/orphan) contributes no covering case — same files-drop discipline
922
+ # as ``_authentic_cover_files`` but at marker granularity.
923
+ inauthentic: set[tuple[str, str]] = {
924
+ (_norm_test_path(v.path), _norm_vb_key(v.vb_id))
925
+ for v in authenticity.violations
926
+ if v.kind != "hook"
927
+ }
928
+
929
+ keys_by_vb: dict[str, set[str]] = {}
930
+ for path in _iter_test_files(project_root, test_dirs=_resolve_vb_scan_dirs(project_root, config)):
931
+ rel = _norm_test_path(_rel_path(path, project_root))
932
+ try:
933
+ text = path.read_text(encoding="utf-8")
934
+ except (OSError, UnicodeDecodeError):
935
+ continue
936
+ markers = _scan_cover_markers_with_lines(text, rel)
937
+ if not markers:
938
+ continue
939
+ if not test_block_profile.handles_file(rel):
940
+ continue
941
+ try:
942
+ blocks = test_block_profile.parse_test_blocks(text)
943
+ except Exception: # noqa: BLE001 — an unparseable file contributes no keys.
944
+ blocks = []
945
+ if not blocks:
946
+ continue
947
+ rel_dir = rel.rsplit("/", 1)[0] if "/" in rel else ""
948
+ for marker in markers:
949
+ vb_key = _norm_vb_key(marker.vb_id)
950
+ if (rel, vb_key) in inauthentic:
951
+ continue # this VB's marker here is not credible coverage
952
+ block = _attached_block(marker.line, text, blocks)
953
+ if block is None or not block.is_executable:
954
+ continue
955
+ test_func = (block.label or "").split("/", 1)[0].strip()
956
+ if not test_func:
957
+ continue
958
+ # The runner-case key the Go adapter emits is module-relative-dir + func;
959
+ # here the relfile already carries the dir, so the key is rel-file based —
960
+ # we key by ``<relfile>::TestFunc`` (the adapter writes the SAME, having
961
+ # resolved (Package, Test) back to relfile via the static index).
962
+ keys_by_vb.setdefault(vb_key, set()).add(f"{rel}::{test_func}")
963
+ return keys_by_vb
964
+
965
+
966
+ def _adapter_produces_case_identity(adapter: Any) -> bool:
967
+ """Whether ``adapter`` declares per-test-case identity (best-effort, default False).
968
+
969
+ A runner adapter opts into per-case reconciliation by defining
970
+ ``produces_test_case_identity() -> True`` (the Go adapter). vitest/pytest do not
971
+ define it ⇒ False ⇒ they keep the file-level branch (byte-identical)."""
972
+ getter = getattr(adapter, "produces_test_case_identity", None)
973
+ if not callable(getter):
974
+ return False
975
+ try:
976
+ return bool(getter())
977
+ except Exception: # noqa: BLE001
978
+ return False
979
+
980
+
537
981
  def build_coherence_report(
538
982
  project_root: Path | str,
539
983
  *,
@@ -580,6 +1024,24 @@ def build_coherence_report(
580
1024
  detail="no verifiable behaviors declared — coverage-execution coherence is N/A",
581
1025
  )
582
1026
 
1027
+ # PER-CASE reconciliation capability (GPT-5.5 design, dogfood go-test-json):
1028
+ # a runner whose adapter emits per-test-case identities AND a static profile that
1029
+ # can map a VB marker to the SAME runner-case key reconciles a VB by its covering
1030
+ # (file, test-case) — NOT by file status. This is REQUIRED for Go, where many
1031
+ # independent ``func TestXxx`` share one ``_test.go`` (file-level status would
1032
+ # false-RED a passed VB whose sibling skipped). It is OFF for vitest/pytest (their
1033
+ # adapters expose no per-case identity), which keep the byte-identical file branch
1034
+ # below. The static covering case keys reuse the SAME marker→block attachment the
1035
+ # authenticity gate uses (no re-invented attachment ⇒ coverage + execution agree).
1036
+ case_keys_by_vb = _authentic_cover_case_keys(
1037
+ project_root, config=config, profile=profile, vb_audit=vb_audit, authenticity=authenticity
1038
+ )
1039
+ case_reconciliation = (
1040
+ case_keys_by_vb is not None
1041
+ and execution is not None
1042
+ and execution.test_level_available
1043
+ )
1044
+
583
1045
  unblocked = [row for row in vb_audit.rows if row.coverage_status != "blocked"]
584
1046
  unverified: list[UnverifiedVB] = []
585
1047
  verified_count = 0
@@ -609,6 +1071,39 @@ def build_coherence_report(
609
1071
  )
610
1072
  )
611
1073
  continue
1074
+
1075
+ if case_reconciliation:
1076
+ # VB verified iff ANY authentic covering (file, top-level TestFunc) case
1077
+ # key passed in the runner report. A skipped/failed/missing covering case
1078
+ # never appears in ``executed_passed_cases`` ⇒ correctly unverified; a
1079
+ # sibling test's outcome in the same file is irrelevant (the false-RED the
1080
+ # file branch would cause for Go is avoided).
1081
+ covering_cases = case_keys_by_vb.get(_norm_vb_key(row.vb_id), set())
1082
+ assert execution is not None # case_reconciliation implies execution
1083
+ passed = sorted(k for k in covering_cases if k in execution.executed_passed_cases)
1084
+ if passed:
1085
+ verified_count += 1
1086
+ continue
1087
+ # Distinguish "ran but failed/skipped" from "never ran" for the message: a
1088
+ # covering file that the runner included (failed/skipped) → failed; else
1089
+ # never ran. (Falls back to file-level inclusion for the reason only.)
1090
+ ran_files = sorted(
1091
+ f for f in authentic_files
1092
+ if (entry := inventory.get(f)) is not None and entry.runner_inclusion
1093
+ )
1094
+ reason = "covering_test_failed" if ran_files else "no_covering_test_executed"
1095
+ unverified.append(
1096
+ UnverifiedVB(
1097
+ vb_id=row.vb_id,
1098
+ description=row.description,
1099
+ source_doc=row.source_doc,
1100
+ covering_files=tuple(sorted(covering_cases) or sorted(authentic_files)),
1101
+ reason=reason,
1102
+ )
1103
+ )
1104
+ continue
1105
+
1106
+ # FILE-level reconciliation (vitest/pytest — UNCHANGED, byte-identical).
612
1107
  # Verified iff ANY authentic covering file executed AND passed.
613
1108
  passed_files = sorted(f for f in authentic_files if inventory.passed(f))
614
1109
  if passed_files:
@@ -1157,6 +1652,7 @@ __all__ = [
1157
1652
  "CoherenceError",
1158
1653
  "CoherenceObservabilityError",
1159
1654
  "CoherenceReport",
1655
+ "GoTestJsonReportAdapter",
1160
1656
  "RunnerExecution",
1161
1657
  "RunnerReportAdapter",
1162
1658
  "RunnerReportUnsupported",