codd-dev 2.53.0__tar.gz → 2.55.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 (581) hide show
  1. {codd_dev-2.53.0 → codd_dev-2.55.0}/PKG-INFO +1 -1
  2. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/__init__.py +1 -1
  3. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/planner.py +65 -2
  4. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/vb_marker_authenticity.py +356 -16
  5. {codd_dev-2.53.0 → codd_dev-2.55.0}/pyproject.toml +1 -1
  6. {codd_dev-2.53.0 → codd_dev-2.55.0}/.gitignore +0 -0
  7. {codd_dev-2.53.0 → codd_dev-2.55.0}/LICENSE +0 -0
  8. {codd_dev-2.53.0 → codd_dev-2.55.0}/README.md +0 -0
  9. {codd_dev-2.53.0 → codd_dev-2.55.0}/bench_fixture/README.md +0 -0
  10. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/__main__.py +0 -0
  11. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/_git_helper.py +0 -0
  12. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/action_outcome.py +0 -0
  13. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/ai_invoke.py +0 -0
  14. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/ai_patch.py +0 -0
  15. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/artifact_contract.py +0 -0
  16. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/artifact_ids.py +0 -0
  17. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/artifacts/catalog.yaml +0 -0
  18. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/ask_user_question_adapter.py +0 -0
  19. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/assembler.py +0 -0
  20. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/bridge.py +0 -0
  21. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/brownfield/__init__.py +0 -0
  22. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/brownfield/pipeline.py +0 -0
  23. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/capability_completeness.py +0 -0
  24. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/claude_cli.py +0 -0
  25. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/cli.py +0 -0
  26. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/clustering.py +0 -0
  27. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/coherence_adapters.py +0 -0
  28. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/coherence_engine.py +0 -0
  29. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/confidence.py +0 -0
  30. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/config.py +0 -0
  31. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/config_schema.py +0 -0
  32. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/contracts.py +0 -0
  33. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/contracts_registry/__init__.py +0 -0
  34. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/contracts_registry/__main__.py +0 -0
  35. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/contracts_registry/certify.py +0 -0
  36. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/contracts_registry/generate_matrix.py +0 -0
  37. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/contracts_registry/registry.py +0 -0
  38. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/coverage_auditor.py +0 -0
  39. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/coverage_execution_coherence.py +0 -0
  40. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/coverage_metrics.py +0 -0
  41. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/__init__.py +0 -0
  42. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/auto_repair.py +0 -0
  43. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/builder.py +0 -0
  44. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/checks/__init__.py +0 -0
  45. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
  46. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/checks/artifact_contract_check.py +0 -0
  47. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/checks/ci_health.py +0 -0
  48. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/checks/dependency_freshness.py +0 -0
  49. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/checks/depends_on_consistency.py +0 -0
  50. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/checks/deployment_completeness.py +0 -0
  51. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/checks/edge_validity.py +0 -0
  52. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/checks/environment_coverage.py +0 -0
  53. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/checks/implementation_coverage.py +0 -0
  54. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/checks/node_completeness.py +0 -0
  55. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/checks/opt_out.py +0 -0
  56. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/checks/task_completion.py +0 -0
  57. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/checks/transitive_closure.py +0 -0
  58. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/checks/ui_coherence.py +0 -0
  59. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/checks/user_journey_coherence.py +0 -0
  60. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/coverage_axes.py +0 -0
  61. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/defaults/cli.yaml +0 -0
  62. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
  63. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/defaults/csharp.yaml +0 -0
  64. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/defaults/elixir.yaml +0 -0
  65. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/defaults/generic.yaml +0 -0
  66. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/defaults/iot.yaml +0 -0
  67. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/defaults/java.yaml +0 -0
  68. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/defaults/kotlin.yaml +0 -0
  69. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/defaults/mobile.yaml +0 -0
  70. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/defaults/ruby.yaml +0 -0
  71. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/defaults/rust.yaml +0 -0
  72. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/defaults/scala.yaml +0 -0
  73. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/defaults/swift.yaml +0 -0
  74. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
  75. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/defaults/web.yaml +0 -0
  76. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/extractor.py +0 -0
  77. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/impact.py +0 -0
  78. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/runner.py +0 -0
  79. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/defaults.py +0 -0
  80. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/defaults.yaml +0 -0
  81. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dependency_lock_coherence.py +0 -0
  82. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deploy_targets/__init__.py +0 -0
  83. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deploy_targets/app_service.py +0 -0
  84. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deploy_targets/base.py +0 -0
  85. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deploy_targets/docker_compose.py +0 -0
  86. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployer.py +0 -0
  87. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/__init__.py +0 -0
  88. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/checks/__init__.py +0 -0
  89. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
  90. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
  91. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
  92. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
  93. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/extractor.py +0 -0
  94. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/__init__.py +0 -0
  95. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/ai_command.py +0 -0
  96. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/ai_command_factory.py +0 -0
  97. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/codex_app_server.py +0 -0
  98. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/llm_consideration.py +0 -0
  99. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/schema/__init__.py +0 -0
  100. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/schema/prisma.py +0 -0
  101. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/target/__init__.py +0 -0
  102. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/target/docker_compose.py +0 -0
  103. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/verification/__init__.py +0 -0
  104. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
  105. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
  106. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
  107. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
  108. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
  109. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/verification/curl.py +0 -0
  110. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
  111. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
  112. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/verification/playwright.py +0 -0
  113. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/verification/pytest_http.py +0 -0
  114. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/verification/vitest.py +0 -0
  115. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/design_md.py +0 -0
  116. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/diff/__init__.py +0 -0
  117. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/diff/apply.py +0 -0
  118. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/diff/engine.py +0 -0
  119. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/diff/persistence.py +0 -0
  120. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/diff/templates/diff_prompt.md +0 -0
  121. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/discovery.py +0 -0
  122. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/drift.py +0 -0
  123. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/e2e_contract_coherence.py +0 -0
  124. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/e2e_extractor.py +0 -0
  125. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/e2e_generator.py +0 -0
  126. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/e2e_harness.py +0 -0
  127. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/e2e_runner.py +0 -0
  128. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/elicit/__init__.py +0 -0
  129. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/elicit/apply.py +0 -0
  130. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/elicit/engine.py +0 -0
  131. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/elicit/finding.py +0 -0
  132. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/elicit/formatters/__init__.py +0 -0
  133. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/elicit/formatters/base.py +0 -0
  134. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/elicit/formatters/interactive.py +0 -0
  135. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/elicit/formatters/json_fmt.py +0 -0
  136. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/elicit/formatters/md.py +0 -0
  137. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/elicit/lexicon_loader.py +0 -0
  138. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/elicit/persistence.py +0 -0
  139. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
  140. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/env_refs.py +0 -0
  141. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/extract_ai.py +0 -0
  142. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/extract_paths.py +0 -0
  143. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/extractor.py +0 -0
  144. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fix/__init__.py +0 -0
  145. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fix/candidate_selector.py +0 -0
  146. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fix/design_updater.py +0 -0
  147. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fix/impl_propagation.py +0 -0
  148. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fix/interactive_prompt.py +0 -0
  149. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fix/phenomenon_fixer.py +0 -0
  150. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fix/phenomenon_parser.py +0 -0
  151. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fix/risk_classifier.py +0 -0
  152. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fix/templates/clarification_question.txt +0 -0
  153. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fix/templates/design_update.txt +0 -0
  154. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fix/templates/impl_update.txt +0 -0
  155. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
  156. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fix/templates/risk_assessment.txt +0 -0
  157. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fix/templates_loader.py +0 -0
  158. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fixer.py +0 -0
  159. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fixup_drift.py +0 -0
  160. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fixup_drift_strategies/__init__.py +0 -0
  161. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
  162. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
  163. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
  164. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/frontmatter.py +0 -0
  165. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/generator.py +0 -0
  166. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/git_evidence.py +0 -0
  167. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/graph.py +0 -0
  168. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/greenfield/__init__.py +0 -0
  169. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/greenfield/pipeline.py +0 -0
  170. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/hitl_session.py +0 -0
  171. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/hooks/__init__.py +0 -0
  172. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/hooks/pre-commit +0 -0
  173. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
  174. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
  175. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/hooks/recipes/codex_hook.sh +0 -0
  176. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
  177. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
  178. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/iac_nfr.py +0 -0
  179. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/implement_oracle.py +0 -0
  180. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/implement_oracle_scope.py +0 -0
  181. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/implementer/__init__.py +0 -0
  182. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/implementer/chunked_runner.py +0 -0
  183. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/implementer/typecheck_loop.py +0 -0
  184. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/implementer.py +0 -0
  185. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/import_coherence.py +0 -0
  186. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/inheritance.py +0 -0
  187. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/init/__init__.py +0 -0
  188. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/init/lexicon_suggest.py +0 -0
  189. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/init/llm_lexicon_suggester.py +0 -0
  190. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/init/stack_detector.py +0 -0
  191. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/knowledge_fetcher.py +0 -0
  192. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/lexicon.py +0 -0
  193. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/lexicon_cli/__init__.py +0 -0
  194. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
  195. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/lexicon_cli/formatters/html.py +0 -0
  196. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
  197. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/lexicon_cli/formatters/md.py +0 -0
  198. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/lexicon_cli/inspector.py +0 -0
  199. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/lexicon_cli/manager.py +0 -0
  200. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/lexicon_cli/reporter.py +0 -0
  201. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/lexicon_cli/threshold.py +0 -0
  202. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/__init__.py +0 -0
  203. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/approval.py +0 -0
  204. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/best_practice_augmenter.py +0 -0
  205. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/criteria_expander.py +0 -0
  206. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/design_doc_extractor.py +0 -0
  207. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/impl_step_deriver.py +0 -0
  208. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/means_catalog_loader.py +0 -0
  209. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/parser.py +0 -0
  210. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/plan_deriver.py +0 -0
  211. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/prompt_builder.py +0 -0
  212. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/strategy_validator.py +0 -0
  213. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
  214. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
  215. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
  216. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
  217. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
  218. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/templates/meta_instruction.md +0 -0
  219. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/templates/plan_derive_meta.md +0 -0
  220. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
  221. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/mcp_server.py +0 -0
  222. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/measure.py +0 -0
  223. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/operational_e2e_audit.py +0 -0
  224. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/operations_derive.py +0 -0
  225. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/parsing/__init__.py +0 -0
  226. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/parsing/_shared.py +0 -0
  227. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/parsing/api_specs.py +0 -0
  228. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/parsing/filesystem_routes.py +0 -0
  229. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/parsing/iac.py +0 -0
  230. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/parsing/python_ast.py +0 -0
  231. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/parsing/schemas.py +0 -0
  232. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/parsing/tests_builddeps.py +0 -0
  233. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/parsing/treesitter.py +0 -0
  234. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/policy.py +0 -0
  235. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/preflight/__init__.py +0 -0
  236. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/preflight/defaults/cli.yaml +0 -0
  237. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/preflight/defaults/generic.yaml +0 -0
  238. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/preflight/defaults/iot.yaml +0 -0
  239. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/preflight/defaults/mobile.yaml +0 -0
  240. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/preflight/defaults/web.yaml +0 -0
  241. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/project_types.py +0 -0
  242. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/propagate.py +0 -0
  243. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/propagation_common.py +0 -0
  244. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/propagator.py +0 -0
  245. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/reconciliation_ledger.py +0 -0
  246. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/reference_resolution.py +0 -0
  247. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/registry.py +0 -0
  248. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/__init__.py +0 -0
  249. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/approval_repair.py +0 -0
  250. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/auto_scope_guard.py +0 -0
  251. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/engine.py +0 -0
  252. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/git_patcher.py +0 -0
  253. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/history.py +0 -0
  254. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/llm_repair_engine.py +0 -0
  255. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/loop.py +0 -0
  256. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/primary_picker.py +0 -0
  257. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/proof_breaks.py +0 -0
  258. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/repair_result.py +0 -0
  259. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/repairability_classifier.py +0 -0
  260. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/schema.py +0 -0
  261. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/templates/analyze_meta.md +0 -0
  262. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/templates/propose_meta.md +0 -0
  263. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
  264. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/templates/repairability_meta.md +0 -0
  265. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/test_failure_attribution.py +0 -0
  266. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/verify_runner.py +0 -0
  267. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair_slice.py +0 -0
  268. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/require.py +0 -0
  269. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/require_plugins.py +0 -0
  270. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/require_propagate.py +0 -0
  271. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
  272. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
  273. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
  274. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
  275. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/required_artifacts/defaults/web.yaml +0 -0
  276. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/required_artifacts_deriver.py +0 -0
  277. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
  278. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
  279. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
  280. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
  281. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
  282. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/requirement_completeness_auditor.py +0 -0
  283. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/requirement_reconciliation.py +0 -0
  284. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/requirements_meta.py +0 -0
  285. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/restoration_report.py +0 -0
  286. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/restore.py +0 -0
  287. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/routes_extractor.py +0 -0
  288. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/runtime_smoke/__init__.py +0 -0
  289. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/runtime_smoke/checks.py +0 -0
  290. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/runtime_smoke/config.py +0 -0
  291. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/runtime_smoke/report.py +0 -0
  292. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/runtime_smoke/runner.py +0 -0
  293. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/scanner.py +0 -0
  294. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/schema_refs.py +0 -0
  295. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/screen_flow_validator.py +0 -0
  296. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/screen_transition_extractor.py +0 -0
  297. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/screen_transitions/defaults.yaml +0 -0
  298. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/skills_cli/__init__.py +0 -0
  299. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/skills_cli/discovery.py +0 -0
  300. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/skills_cli/manager.py +0 -0
  301. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/skills_cli/paths.py +0 -0
  302. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/surface_reconciliation.py +0 -0
  303. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/synth.py +0 -0
  304. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/templates/codd.yaml.tmpl +0 -0
  305. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/templates/conventions.yaml.tmpl +0 -0
  306. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
  307. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/templates/doc_links.yaml.tmpl +0 -0
  308. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
  309. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
  310. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
  311. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
  312. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
  313. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/templates/extracted/system-context.md.j2 +0 -0
  314. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/templates/gitignore.tmpl +0 -0
  315. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/templates/lexicon_questions.md +0 -0
  316. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/templates/lexicon_schema.yaml +0 -0
  317. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/templates/overrides.yaml.tmpl +0 -0
  318. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/test_detection.py +0 -0
  319. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/test_import_coherence.py +0 -0
  320. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/traceability.py +0 -0
  321. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/validator.py +0 -0
  322. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/vb_rerun_scope.py +0 -0
  323. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/verifiable_behavior_audit.py +0 -0
  324. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/watch/__init__.py +0 -0
  325. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/watch/events.py +0 -0
  326. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/watch/propagation_log.py +0 -0
  327. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/watch/propagation_pipeline.py +0 -0
  328. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/watch/test_runner.py +0 -0
  329. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/watch/watcher.py +0 -0
  330. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/wiring.py +0 -0
  331. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
  332. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
  333. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
  334. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
  335. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
  336. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
  337. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
  338. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
  339. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
  340. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
  341. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
  342. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
  343. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
  344. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
  345. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
  346. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
  347. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
  348. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
  349. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
  350. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
  351. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
  352. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
  353. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
  354. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
  355. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
  356. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
  357. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
  358. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
  359. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
  360. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
  361. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
  362. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
  363. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
  364. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
  365. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
  366. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
  367. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
  368. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
  369. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
  370. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
  371. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
  372. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
  373. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
  374. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
  375. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
  376. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
  377. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
  378. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
  379. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
  380. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
  381. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
  382. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
  383. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
  384. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
  385. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
  386. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
  387. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
  388. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
  389. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
  390. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
  391. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
  392. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
  393. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
  394. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
  395. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
  396. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
  397. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
  398. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
  399. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
  400. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
  401. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
  402. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
  403. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
  404. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
  405. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
  406. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
  407. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
  408. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
  409. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
  410. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
  411. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
  412. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
  413. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
  414. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
  415. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
  416. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
  417. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
  418. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
  419. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
  420. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
  421. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
  422. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
  423. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
  424. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
  425. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
  426. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
  427. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
  428. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
  429. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
  430. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
  431. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
  432. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
  433. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
  434. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
  435. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
  436. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
  437. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
  438. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
  439. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
  440. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
  441. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
  442. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
  443. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
  444. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
  445. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
  446. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
  447. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
  448. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
  449. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
  450. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
  451. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
  452. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
  453. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
  454. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
  455. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
  456. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
  457. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
  458. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
  459. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
  460. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
  461. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
  462. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
  463. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
  464. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
  465. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
  466. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
  467. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
  468. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
  469. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
  470. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
  471. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
  472. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
  473. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
  474. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
  475. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
  476. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
  477. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
  478. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
  479. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
  480. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
  481. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
  482. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
  483. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
  484. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
  485. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
  486. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
  487. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
  488. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
  489. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
  490. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
  491. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
  492. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
  493. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
  494. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
  495. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
  496. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
  497. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
  498. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
  499. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
  500. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
  501. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
  502. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
  503. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
  504. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
  505. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
  506. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
  507. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
  508. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
  509. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
  510. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
  511. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
  512. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
  513. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
  514. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
  515. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
  516. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
  517. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
  518. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
  519. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
  520. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
  521. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
  522. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
  523. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
  524. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
  525. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
  526. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
  527. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
  528. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
  529. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
  530. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
  531. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
  532. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
  533. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
  534. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
  535. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
  536. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
  537. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
  538. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
  539. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
  540. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
  541. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
  542. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
  543. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
  544. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
  545. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
  546. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
  547. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
  548. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
  549. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
  550. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
  551. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
  552. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
  553. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
  554. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
  555. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
  556. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
  557. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
  558. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
  559. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
  560. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
  561. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
  562. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
  563. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
  564. {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/stack_map.yaml +0 -0
  565. {codd_dev-2.53.0 → codd_dev-2.55.0}/docs/cookbook/cdp_browser/README.md +0 -0
  566. {codd_dev-2.53.0 → codd_dev-2.55.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
  567. {codd_dev-2.53.0 → codd_dev-2.55.0}/docs/requirements/README.md +0 -0
  568. {codd_dev-2.53.0 → codd_dev-2.55.0}/dogfood/README.md +0 -0
  569. {codd_dev-2.53.0 → codd_dev-2.55.0}/dogfood/fixtures/flat_py_app/README.md +0 -0
  570. {codd_dev-2.53.0 → codd_dev-2.55.0}/examples/README.md +0 -0
  571. {codd_dev-2.53.0 → codd_dev-2.55.0}/skills/codd-assemble/SKILL.md +0 -0
  572. {codd_dev-2.53.0 → codd_dev-2.55.0}/skills/codd-evolve/SKILL.md +0 -0
  573. {codd_dev-2.53.0 → codd_dev-2.55.0}/skills/codd-generate/SKILL.md +0 -0
  574. {codd_dev-2.53.0 → codd_dev-2.55.0}/skills/codd-greenfield/SKILL.md +0 -0
  575. {codd_dev-2.53.0 → codd_dev-2.55.0}/skills/codd-impact/SKILL.md +0 -0
  576. {codd_dev-2.53.0 → codd_dev-2.55.0}/skills/codd-init/SKILL.md +0 -0
  577. {codd_dev-2.53.0 → codd_dev-2.55.0}/skills/codd-propagate/SKILL.md +0 -0
  578. {codd_dev-2.53.0 → codd_dev-2.55.0}/skills/codd-restore/SKILL.md +0 -0
  579. {codd_dev-2.53.0 → codd_dev-2.55.0}/skills/codd-scan/SKILL.md +0 -0
  580. {codd_dev-2.53.0 → codd_dev-2.55.0}/skills/codd-validate/SKILL.md +0 -0
  581. {codd_dev-2.53.0 → codd_dev-2.55.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.53.0
3
+ Version: 2.55.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.53.0"
3
+ __version__ = "2.55.0"
@@ -421,8 +421,9 @@ def plan_init(
421
421
  prompt = _build_brownfield_plan_init_prompt(config, extracted_documents, capabilities)
422
422
 
423
423
  prompt = generator_module._inject_lexicon(prompt, project_root)
424
- raw_wave_config = generator_module._invoke_ai_command(resolved_ai_command, prompt)
425
- wave_config = _parse_wave_config_output(raw_wave_config)
424
+ wave_config = _invoke_and_parse_wave_config(
425
+ resolved_ai_command, prompt, max_retries=_plan_init_max_retries(config)
426
+ )
426
427
 
427
428
  from codd.config import find_codd_dir
428
429
  config["wave_config"] = wave_config
@@ -1119,6 +1120,68 @@ def _build_brownfield_plan_init_prompt(
1119
1120
  return "\n".join(lines).rstrip() + "\n"
1120
1121
 
1121
1122
 
1123
+ #: Bounded re-invocations when the AI returns an unparseable wave_config.
1124
+ #: Overridable per project via `plan.init_retry.max_retries` in codd.yaml.
1125
+ DEFAULT_PLAN_INIT_MAX_RETRIES = 2
1126
+
1127
+
1128
+ def _plan_init_max_retries(config: dict[str, Any]) -> int:
1129
+ """Read `plan.init_retry.max_retries` (default 2; 0 disables the retry loop)."""
1130
+
1131
+ plan_cfg = config.get("plan")
1132
+ if isinstance(plan_cfg, dict):
1133
+ retry_cfg = plan_cfg.get("init_retry")
1134
+ if isinstance(retry_cfg, dict):
1135
+ value = retry_cfg.get("max_retries")
1136
+ if isinstance(value, int) and value >= 0:
1137
+ return value
1138
+ return DEFAULT_PLAN_INIT_MAX_RETRIES
1139
+
1140
+
1141
+ def _append_wave_config_retry_feedback(prompt: str, error: str) -> str:
1142
+ """Re-state the strict-YAML contract after a parse failure, for the next attempt."""
1143
+
1144
+ note = (
1145
+ "\n\n---\n"
1146
+ "YOUR PREVIOUS RESPONSE WAS REJECTED: it could not be parsed as valid wave_config "
1147
+ f"YAML ({error}). Output ONLY the wave_config mapping as STRICT, valid YAML — no "
1148
+ "prose, no Markdown fences, no arrows (`->`) or annotations. Every key must be "
1149
+ "followed by a colon and a value, and every list item must start with `- `. "
1150
+ "Re-emit the COMPLETE wave_config now."
1151
+ )
1152
+ return prompt + note
1153
+
1154
+
1155
+ def _invoke_and_parse_wave_config(
1156
+ ai_command: str, base_prompt: str, *, max_retries: int = DEFAULT_PLAN_INIT_MAX_RETRIES
1157
+ ) -> dict[str, list[dict[str, Any]]]:
1158
+ """Invoke the AI for a wave_config with a bounded parse-feedback retry loop.
1159
+
1160
+ A weaker model can emit syntactically malformed YAML (a stray ``-> `` arrow, a
1161
+ key with no colon) that no generic textual sanitization can repair. Hard-failing
1162
+ the whole plan stage on a single bad response violates the weakest-model
1163
+ principle — a strong model masks the gap a weak one exposes. So each retry feeds
1164
+ the parse error back to the model (mirrors generator._generate_document_body).
1165
+ Infra failures (``AI command failed``) propagate immediately; exhausted retries
1166
+ re-raise the last parse error unchanged (backward compat).
1167
+ """
1168
+
1169
+ last_error: ValueError | None = None
1170
+ feedback: str | None = None
1171
+ for _attempt in range(max(0, max_retries) + 1):
1172
+ prompt = base_prompt if feedback is None else _append_wave_config_retry_feedback(base_prompt, feedback)
1173
+ try:
1174
+ raw = generator_module._invoke_ai_command(ai_command, prompt)
1175
+ return _parse_wave_config_output(raw)
1176
+ except ValueError as exc:
1177
+ if str(exc).startswith("AI command failed"):
1178
+ raise # infra failure: retrying the same broken command cannot help
1179
+ last_error = exc
1180
+ feedback = str(exc)
1181
+ assert last_error is not None
1182
+ raise last_error
1183
+
1184
+
1122
1185
  def _parse_wave_config_output(raw_output: str) -> dict[str, list[dict[str, Any]]]:
1123
1186
  """Parse an AI command's stdout into a validated wave_config mapping.
1124
1187
 
@@ -91,7 +91,9 @@ evidence (the design's "unresolved helper = fail" rule).
91
91
  from __future__ import annotations
92
92
 
93
93
  import ast
94
+ import builtins
94
95
  import re
96
+ import sys
95
97
  import textwrap
96
98
  from dataclasses import dataclass, field
97
99
  from pathlib import Path
@@ -448,25 +450,50 @@ def _helper_evidence(
448
450
  return AssertionEvidence(ok=False, reason="no_assertion", detail="resolver error")
449
451
 
450
452
 
451
- def _direct_evidence(adapter: TestBlockProfile, block: TestBlock) -> AssertionEvidence:
453
+ def _direct_evidence(
454
+ adapter: TestBlockProfile,
455
+ block: TestBlock,
456
+ *,
457
+ importer_text: str = "",
458
+ importer_rel: str = "",
459
+ project_root: Path | None = None,
460
+ config: dict[str, Any] | None = None,
461
+ profile: Any = None,
462
+ ) -> AssertionEvidence:
452
463
  """Resolve a block's DIRECT (in-body) primitive-assertion evidence.
453
464
 
454
465
  The built-in Python/TypeScript adapters expose
455
466
  ``resolve_direct_assertion_evidence`` which decides whether the direct
456
- primitive assertion is constant-only (``constant_direct`` ⇒ not ok) or
457
- references a real name (``direct`` ⇒ ok). An EXTERNAL adapter that predates
458
- this method has no such hook; for back-compat it keeps the pre-existing
459
- behavior (a raw primitive is credited as ``direct``) only the built-in
460
- stacks are tightened here.
467
+ primitive assertion is constant-only (``constant_direct`` ⇒ not ok),
468
+ library-only (``library_only_direct`` ⇒ not ok), or references a real name
469
+ (``direct`` ok). The test-file context (``importer_text`` / ``project_root``
470
+ / ``profile``) is forwarded for origin classification. An EXTERNAL adapter that
471
+ predates the context kwargs (accepts only ``(block)``) is called the old way
472
+ (TypeError fallback); one that predates the hook entirely keeps the pre-existing
473
+ behavior (a raw primitive is credited as ``direct``) — only the built-in stacks
474
+ are tightened here.
461
475
  """
462
476
 
463
477
  resolver = getattr(adapter, "resolve_direct_assertion_evidence", None)
464
- if callable(resolver):
478
+ if not callable(resolver):
479
+ return AssertionEvidence(ok=True, reason="direct")
480
+ try:
481
+ return resolver(
482
+ block,
483
+ importer_text=importer_text,
484
+ importer_rel=importer_rel,
485
+ project_root=project_root,
486
+ config=config,
487
+ profile=profile,
488
+ )
489
+ except TypeError:
490
+ # Older adapter signature: resolve_direct_assertion_evidence(block) only.
465
491
  try:
466
492
  return resolver(block)
467
493
  except Exception: # noqa: BLE001 — a resolver that throws ⇒ keep credit (back-compat).
468
494
  return AssertionEvidence(ok=True, reason="direct")
469
- return AssertionEvidence(ok=True, reason="direct")
495
+ except Exception: # noqa: BLE001 — a resolver that throws ⇒ keep credit (back-compat).
496
+ return AssertionEvidence(ok=True, reason="direct")
470
497
 
471
498
 
472
499
  def build_authenticity_report(
@@ -653,7 +680,15 @@ def build_authenticity_report(
653
680
  # the same block may ALSO call a credible helper, so we fall back to
654
681
  # the helper resolver and only RED when BOTH paths fail.
655
682
  if block.has_assertion:
656
- evidence = _direct_evidence(adapter, block)
683
+ evidence = _direct_evidence(
684
+ adapter,
685
+ block,
686
+ importer_text=text,
687
+ importer_rel=rel,
688
+ project_root=project_root,
689
+ config=config,
690
+ profile=profile,
691
+ )
657
692
  if not evidence.ok:
658
693
  helper_evidence = _helper_evidence(
659
694
  adapter,
@@ -726,6 +761,15 @@ def _no_assertion_message(
726
761
  "a constant assertion proves nothing. Assert against an observed result, "
727
762
  "exception, state, or output that would FAIL if the behavior were broken."
728
763
  )
764
+ elif evidence.reason == "library_only_direct":
765
+ detail = f" ({evidence.detail})" if evidence.detail else ""
766
+ why = (
767
+ " whose direct primitive assertion observes ONLY library/builtin behavior"
768
+ f"{detail} (`math.sqrt`, `os.path`, a third-party package, `sorted`, etc.) "
769
+ "and never references a first-party result, local observation, fixture, or "
770
+ "unknown runtime value — a library property test does not prove the VB. Call "
771
+ "the SUT and assert against ITS result, state, or raised error."
772
+ )
729
773
  elif evidence.reason == "unresolved_helper":
730
774
  why = (
731
775
  " whose only assertion is delegated to a helper that could not be resolved "
@@ -1001,7 +1045,257 @@ def _is_py_primitive_assert_node(node: ast.AST) -> bool:
1001
1045
  return False
1002
1046
 
1003
1047
 
1004
- def _python_direct_assertion_evidence(body_text: str) -> AssertionEvidence:
1048
+ #: Python standard-library top-level module names (PEP-official frozenset; includes
1049
+ #: platform-specific and disabled modules). Used to POSITIVELY classify a stdlib
1050
+ #: import as a library reference. Absence here never forces a verdict (fail-open).
1051
+ _PY_STDLIB_NAMES = frozenset(getattr(sys, "stdlib_module_names", frozenset()))
1052
+ #: Python runtime builtins (``sorted``, ``abs``, ``round``, …). Used to classify a
1053
+ #: builtin-only assertion as a library reference. NOTE: builtins are classified
1054
+ #: here, NOT added to ``_PY_DIRECT_IGNORED_NAMES`` — a first-party import that
1055
+ #: SHADOWS a builtin (``from app.sorting import sorted``) must still credit.
1056
+ _PY_BUILTIN_NAMES = frozenset(dir(builtins))
1057
+
1058
+
1059
+ @dataclass(frozen=True)
1060
+ class _PyOriginContext:
1061
+ """Per-test-block context for classifying assertion reference names by ORIGIN.
1062
+
1063
+ The contract is ``direct.library_only_reference.v1`` (GPT-5.5 Pro design,
1064
+ dogfood/gpt_authenticity_sut_ref_design.md): a direct primitive assertion is
1065
+ not credible VB evidence when EVERY non-framework reference is POSITIVELY a
1066
+ library/runtime/builtin reference and none is first-party / local / unknown.
1067
+ ``unknown`` always credits — "not provably first-party" must NEVER be treated
1068
+ as third-party (that would false-RED src-layout / editable / path-alias code).
1069
+ """
1070
+
1071
+ imports: dict[str, tuple[str, bool]] # bound-name -> (dotted module, is_relative)
1072
+ local_names: frozenset[str] # body assignment targets + this block's params
1073
+ package_name: str | None
1074
+ source_roots: tuple[Path, ...]
1075
+ third_party: frozenset[str] # normalized manifest dependency top-names
1076
+
1077
+
1078
+ def _python_file_import_table(text: str) -> dict[str, tuple[str, bool]]:
1079
+ """Map each imported BOUND NAME to ``(dotted module, is_relative)``.
1080
+
1081
+ ``import a.b`` binds ``a``; ``import a.b as x`` binds ``x``; ``from a.b import c``
1082
+ binds ``c``; ``from .m import c`` is relative (within the SUT package). Star
1083
+ imports bind no specific name (their names stay UNKNOWN ⇒ credit). Parse
1084
+ failure ⇒ empty table (fail-open). Walks the whole tree so function-level
1085
+ imports are seen too.
1086
+ """
1087
+
1088
+ table: dict[str, tuple[str, bool]] = {}
1089
+ try:
1090
+ tree = ast.parse(text)
1091
+ except (SyntaxError, ValueError):
1092
+ return table
1093
+ for node in ast.walk(tree):
1094
+ if isinstance(node, ast.Import):
1095
+ for alias in node.names:
1096
+ bound = alias.asname or alias.name.split(".")[0]
1097
+ table[bound] = (alias.name, False)
1098
+ elif isinstance(node, ast.ImportFrom):
1099
+ is_relative = (node.level or 0) > 0
1100
+ module = node.module or ""
1101
+ for alias in node.names:
1102
+ if alias.name == "*":
1103
+ continue
1104
+ bound = alias.asname or alias.name
1105
+ table[bound] = (module, is_relative)
1106
+ return table
1107
+
1108
+
1109
+ def _python_function_param_names(text: str, func_name: str) -> set[str]:
1110
+ """Parameter names of the top-level ``def func_name`` (incl. fixtures) — or {}."""
1111
+
1112
+ try:
1113
+ tree = ast.parse(text)
1114
+ except (SyntaxError, ValueError):
1115
+ return set()
1116
+ for node in getattr(tree, "body", []):
1117
+ if isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef)) and node.name == func_name:
1118
+ a = node.args
1119
+ names: set[str] = set()
1120
+ for arg in (*a.posonlyargs, *a.args, *a.kwonlyargs):
1121
+ names.add(arg.arg)
1122
+ if a.vararg:
1123
+ names.add(a.vararg.arg)
1124
+ if a.kwarg:
1125
+ names.add(a.kwarg.arg)
1126
+ return names
1127
+ return set()
1128
+
1129
+
1130
+ def _target_names(target: ast.AST) -> set[str]:
1131
+ """Bound names in an assignment-target node (Name / Tuple / List / Starred)."""
1132
+
1133
+ names: set[str] = set()
1134
+ if isinstance(target, ast.Name):
1135
+ names.add(target.id)
1136
+ elif isinstance(target, (ast.Tuple, ast.List)):
1137
+ for elt in target.elts:
1138
+ names |= _target_names(elt)
1139
+ elif isinstance(target, ast.Starred):
1140
+ names |= _target_names(target.value)
1141
+ return names
1142
+
1143
+
1144
+ def _python_body_assigned_names(body_text: str) -> set[str]:
1145
+ """Names BOUND inside a test body: assignments, with-as, for-targets, walrus,
1146
+ comprehension targets. These are LOCAL observations (a local may hold a SUT
1147
+ result; by policy we do NOT taint-track, so a local always credits)."""
1148
+
1149
+ names: set[str] = set()
1150
+ try:
1151
+ tree = ast.parse(textwrap.dedent(body_text))
1152
+ except (SyntaxError, ValueError):
1153
+ return names
1154
+ for node in ast.walk(tree):
1155
+ if isinstance(node, ast.Assign):
1156
+ for t in node.targets:
1157
+ names |= _target_names(t)
1158
+ elif isinstance(node, (ast.AnnAssign, ast.AugAssign)):
1159
+ names |= _target_names(node.target)
1160
+ elif isinstance(node, ast.NamedExpr):
1161
+ names |= _target_names(node.target)
1162
+ elif isinstance(node, (ast.For, ast.AsyncFor)):
1163
+ names |= _target_names(node.target)
1164
+ elif isinstance(node, (ast.With, ast.AsyncWith)):
1165
+ for item in node.items:
1166
+ if item.optional_vars is not None:
1167
+ names |= _target_names(item.optional_vars)
1168
+ elif isinstance(node, (ast.ListComp, ast.SetComp, ast.DictComp, ast.GeneratorExp)):
1169
+ for gen in node.generators:
1170
+ names |= _target_names(gen.target)
1171
+ return names
1172
+
1173
+
1174
+ def _python_manifest_top_dependencies(project_root: Path | None) -> frozenset[str]:
1175
+ """Declared third-party dependency names from ``pyproject.toml`` (PEP 621 +
1176
+ poetry), normalized for top-module matching. Empty when absent/unparseable —
1177
+ an unconfirmable third-party import then stays UNKNOWN (credit), per design."""
1178
+
1179
+ if project_root is None:
1180
+ return frozenset()
1181
+ path = project_root / "pyproject.toml"
1182
+ if not path.exists():
1183
+ return frozenset()
1184
+ try:
1185
+ import tomllib
1186
+
1187
+ data = tomllib.loads(path.read_text(encoding="utf-8"))
1188
+ except Exception: # noqa: BLE001 — no manifest signal ⇒ fail-open (empty set).
1189
+ return frozenset()
1190
+ reqs: list[str] = []
1191
+ project = data.get("project", {})
1192
+ if isinstance(project, dict):
1193
+ deps = project.get("dependencies", [])
1194
+ if isinstance(deps, list):
1195
+ reqs.extend(d for d in deps if isinstance(d, str))
1196
+ optional = project.get("optional-dependencies", {})
1197
+ if isinstance(optional, dict):
1198
+ for group in optional.values():
1199
+ if isinstance(group, list):
1200
+ reqs.extend(d for d in group if isinstance(d, str))
1201
+ poetry = data.get("tool", {}).get("poetry", {}) if isinstance(data.get("tool"), dict) else {}
1202
+ if isinstance(poetry, dict):
1203
+ pdeps = poetry.get("dependencies", {})
1204
+ if isinstance(pdeps, dict):
1205
+ reqs.extend(k for k in pdeps if isinstance(k, str) and k.lower() != "python")
1206
+ names: set[str] = set()
1207
+ for req in reqs:
1208
+ m = re.match(r"\s*([A-Za-z0-9._-]+)", req)
1209
+ if not m:
1210
+ continue
1211
+ dist = m.group(1).lower()
1212
+ names.add(dist)
1213
+ names.add(dist.replace("-", "_"))
1214
+ return frozenset(names)
1215
+
1216
+
1217
+ def _module_resolves_first_party(module: str, top: str, source_roots: tuple[Path, ...]) -> bool:
1218
+ """True when ``module`` (or its top package) resolves to a source file under a
1219
+ configured source root — covers flat AND src/<package> layouts."""
1220
+
1221
+ rel = module.replace(".", "/") if module else ""
1222
+ for root in source_roots:
1223
+ if rel and ((root / f"{rel}.py").exists() or (root / rel / "__init__.py").exists()):
1224
+ return True
1225
+ if top and (
1226
+ (root / f"{top}.py").exists()
1227
+ or (root / top / "__init__.py").exists()
1228
+ or (root / top).is_dir()
1229
+ ):
1230
+ return True
1231
+ return False
1232
+
1233
+
1234
+ def _classify_py_name(name: str, ctx: _PyOriginContext) -> str:
1235
+ """Classify one assertion reference name as ``"library"`` or ``"credit"``.
1236
+
1237
+ Order (GPT design): local/param shadowing ▸ first-party import ▸ stdlib ▸
1238
+ confirmed third-party ▸ builtin ▸ UNKNOWN. Only stdlib / confirmed-third-party
1239
+ / builtin are ``"library"``; everything else (incl. UNKNOWN) credits."""
1240
+
1241
+ if name in ctx.local_names:
1242
+ return "credit" # LOCAL_OR_PARAM
1243
+ entry = ctx.imports.get(name)
1244
+ if entry is not None:
1245
+ module, is_relative = entry
1246
+ if is_relative:
1247
+ return "credit" # relative import = within the SUT package
1248
+ top = module.split(".")[0] if module else ""
1249
+ if not top:
1250
+ return "credit"
1251
+ if ctx.package_name and top == ctx.package_name:
1252
+ return "credit" # FIRST_PARTY by package name
1253
+ if _module_resolves_first_party(module, top, ctx.source_roots):
1254
+ return "credit" # FIRST_PARTY by source-file existence
1255
+ if top in _PY_STDLIB_NAMES:
1256
+ return "library" # stdlib
1257
+ if top.lower() in ctx.third_party:
1258
+ return "library" # confirmed external dependency
1259
+ return "credit" # imported but origin unconfirmable ⇒ UNKNOWN ⇒ fail-open
1260
+ if name in _PY_BUILTIN_NAMES:
1261
+ return "library" # builtin (only when NOT shadowed by a first-party import/local)
1262
+ return "credit" # param / fixture / free name / star-imported ⇒ UNKNOWN ⇒ fail-open
1263
+
1264
+
1265
+ def _build_py_origin_context(
1266
+ block: TestBlock,
1267
+ *,
1268
+ importer_text: str,
1269
+ project_root: Path | None,
1270
+ profile: Any,
1271
+ ) -> _PyOriginContext:
1272
+ """Assemble the per-block origin-classification context from the test file."""
1273
+
1274
+ package_name = getattr(profile, "package_name", None) if profile is not None else None
1275
+ source_roots: list[Path] = []
1276
+ if project_root is not None:
1277
+ source_root = getattr(profile, "source_root", None) if profile is not None else None
1278
+ if source_root:
1279
+ source_roots.append(project_root / source_root)
1280
+ package_root = getattr(profile, "package_root", None) if profile is not None else None
1281
+ if package_root:
1282
+ source_roots.append((project_root / package_root).parent)
1283
+ source_roots.append(project_root)
1284
+ local_names = _python_body_assigned_names(block.body_text)
1285
+ if importer_text and block.label:
1286
+ local_names |= _python_function_param_names(importer_text, block.label)
1287
+ return _PyOriginContext(
1288
+ imports=_python_file_import_table(importer_text) if importer_text else {},
1289
+ local_names=frozenset(local_names),
1290
+ package_name=package_name,
1291
+ source_roots=tuple(dict.fromkeys(source_roots)),
1292
+ third_party=_python_manifest_top_dependencies(project_root),
1293
+ )
1294
+
1295
+
1296
+ def _python_direct_assertion_evidence(
1297
+ body_text: str, *, origin_ctx: _PyOriginContext | None = None
1298
+ ) -> AssertionEvidence:
1005
1299
  """AST verdict: does ``body_text`` carry a NON-constant direct primitive assertion?
1006
1300
 
1007
1301
  For each primitive-assert node, collect every ``ast.Name`` id inside it and
@@ -1011,6 +1305,15 @@ def _python_direct_assertion_evidence(body_text: str) -> AssertionEvidence:
1011
1305
  (not ok). Falls back to the lexical scanner on a syntax error so an
1012
1306
  un-parseable body never false-REDs here (it degrades to the line-based path,
1013
1307
  which itself fails OPEN per window).
1308
+
1309
+ When an ``origin_ctx`` is supplied (the gate path), each remaining name is
1310
+ classified by ORIGIN (contract ``direct.library_only_reference.v1``): an
1311
+ assertion whose references are ALL positively library/builtin (``math.sqrt``,
1312
+ ``os.path``, a confirmed third-party dep, ``sorted``) and include no
1313
+ first-party / local / unknown reference proves a LIBRARY, not the SUT ⇒
1314
+ ``library_only_direct`` (not ok). Without a context, classification is skipped
1315
+ (any non-ignored name credits, exactly as before) — "cannot classify" never
1316
+ false-REDs.
1014
1317
  """
1015
1318
 
1016
1319
  try:
@@ -1023,13 +1326,26 @@ def _python_direct_assertion_evidence(body_text: str) -> AssertionEvidence:
1023
1326
  )
1024
1327
 
1025
1328
  saw_primitive = False
1329
+ saw_library_only = False
1330
+ library_detail = ""
1026
1331
  for node in ast.walk(tree):
1027
1332
  if not _is_py_primitive_assert_node(node):
1028
1333
  continue
1029
1334
  saw_primitive = True
1030
- ids = {n.id for n in ast.walk(node) if isinstance(n, ast.Name)}
1031
- if ids - _PY_DIRECT_IGNORED_NAMES:
1335
+ ids = {n.id for n in ast.walk(node) if isinstance(n, ast.Name)} - _PY_DIRECT_IGNORED_NAMES
1336
+ if not ids:
1337
+ continue # constant-only assertion (no observed name)
1338
+ if origin_ctx is None:
1339
+ # No classification context (legacy / direct unit call): any non-ignored
1340
+ # name credits, exactly as before.
1341
+ return AssertionEvidence(ok=True, reason="direct")
1342
+ if any(_classify_py_name(name, origin_ctx) != "library" for name in ids):
1343
+ # A first-party / local / unknown reference ⇒ a real observation.
1032
1344
  return AssertionEvidence(ok=True, reason="direct")
1345
+ # Every reference is POSITIVELY a library/builtin ⇒ a library-only proof.
1346
+ saw_library_only = True
1347
+ if not library_detail:
1348
+ library_detail = ", ".join(sorted(ids))
1033
1349
 
1034
1350
  if not saw_primitive:
1035
1351
  # The raw regex (``has_assertion``) matched but the AST recognized no
@@ -1037,6 +1353,8 @@ def _python_direct_assertion_evidence(body_text: str) -> AssertionEvidence:
1037
1353
  # the AST walker does not classify). Fail OPEN — keep the pre-existing
1038
1354
  # ``direct`` credit rather than inventing a false-RED.
1039
1355
  return AssertionEvidence(ok=True, reason="direct")
1356
+ if saw_library_only:
1357
+ return AssertionEvidence(ok=False, reason="library_only_direct", detail=library_detail)
1040
1358
  return AssertionEvidence(ok=False, reason="constant_direct")
1041
1359
 
1042
1360
 
@@ -1375,14 +1693,36 @@ class PythonTestBlockProfile:
1375
1693
  block, importer_text=importer_text, importer_rel=importer_rel, project_root=project_root
1376
1694
  )
1377
1695
 
1378
- def resolve_direct_assertion_evidence(self, block: TestBlock) -> AssertionEvidence:
1696
+ def resolve_direct_assertion_evidence(
1697
+ self,
1698
+ block: TestBlock,
1699
+ *,
1700
+ importer_text: str = "",
1701
+ importer_rel: str = "",
1702
+ project_root: Path | None = None,
1703
+ config: dict[str, Any] | None = None,
1704
+ profile: Any = None,
1705
+ ) -> AssertionEvidence:
1379
1706
  """Whether the block's DIRECT primitive assertion references a real name.
1380
1707
 
1381
- AST-based (``constant_direct`` when the assertion is constant-only). Called
1382
- by the gate only when ``block.has_assertion`` is True.
1708
+ AST-based: ``constant_direct`` when the assertion is constant-only, and —
1709
+ when the gate supplies the test-file context (``importer_text`` + ``profile``
1710
+ / ``project_root``) — ``library_only_direct`` when every reference is a
1711
+ positively-classified library/builtin (contract
1712
+ ``direct.library_only_reference.v1``). The context kwargs are OPTIONAL so a
1713
+ bare ``resolve_direct_assertion_evidence(block)`` (older callers / unit
1714
+ tests) still works and simply skips origin classification (fail-open).
1715
+ Called by the gate only when ``block.has_assertion`` is True.
1383
1716
  """
1384
1717
 
1385
- return _python_direct_assertion_evidence(block.body_text)
1718
+ origin_ctx = (
1719
+ _build_py_origin_context(
1720
+ block, importer_text=importer_text, project_root=project_root, profile=profile
1721
+ )
1722
+ if (importer_text or project_root is not None or profile is not None)
1723
+ else None
1724
+ )
1725
+ return _python_direct_assertion_evidence(block.body_text, origin_ctx=origin_ctx)
1386
1726
 
1387
1727
 
1388
1728
  # vitest/jest: it(...) / test(...) blocks; describe(...) groups. Skip via
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "codd-dev"
7
- version = "2.53.0"
7
+ version = "2.55.0"
8
8
  description = "CoDD: Coherence-Driven Development — cross-artifact change impact analysis"
9
9
  readme = "README.md"
10
10
  license = "MIT"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes